aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/aws-sdk-cpp
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/aws-sdk-cpp
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/aws-sdk-cpp')
-rw-r--r--contrib/libs/aws-sdk-cpp/LICENSE201
-rw-r--r--contrib/libs/aws-sdk-cpp/README.md172
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/.yandex_meta/licenses.list.txt254
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonSerializableWebServiceRequest.h56
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonStreamingWebServiceRequest.h83
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceRequest.h173
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceResult.h77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Aws.h262
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Core_EXPORTS.h103
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Globals.h35
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/NoResult.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Region.h53
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/SDKConfig.h7
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Version.h19
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/VersionConfig.h6
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSigner.h425
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSignerProvider.h53
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentials.h176
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProvider.h316
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProviderChain.h68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/STSCredentialsProvider.h51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSClient.h463
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSError.h220
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSErrorMarshaller.h97
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AsyncCallerContext.h59
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/ClientConfiguration.h255
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/CoreErrors.h79
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/DefaultRetryStrategy.h36
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/RetryStrategy.h121
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/SpecifiedRetryableErrorsRetryStrategy.h34
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/config/AWSProfileConfigLoader.h250
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/cjson/cJSON.h289
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/tinyxml2/tinyxml2.h2292
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClient.h81
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClientFactory.h65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpRequest.h542
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpResponse.h219
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpTypes.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/Scheme.h38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/URI.h171
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHandleContainer.h74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHttpClient.h77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpRequest.h89
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpResponse.h74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/internal/AWSHttpResourceClient.h225
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/CoreMetrics.h27
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/DefaultMonitoring.h73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/HttpClientMetrics.h84
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringFactory.h26
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringInterface.h89
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringManager.h64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/Net.h23
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/SimpleUDP.h163
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Android.h29
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Environment.h22
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/FileSystem.h226
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/OSVersionInfo.h27
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Platform.h9
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Security.h24
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Time.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ARN.h58
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Array.h250
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DNS.h18
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DateTime.h250
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/EnumParseOverflowContainer.h36
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/FileSystemUtils.h70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/GetTheLights.h35
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/HashingUtils.h86
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Outcome.h170
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ResourceManager.h122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/StringUtils.h219
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UUID.h52
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UnreferencedParam.h18
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/base64/Base64.h70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Cipher.h206
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoMaterial.h244
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoScheme.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoBuf.h149
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoStream.h81
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/EncryptionMaterials.h46
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Factories.h147
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HMAC.h68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Hash.h73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HashResult.h25
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/KeyWrapAlgorithm.h33
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/MD5.h66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/SecureRandom.h116
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256.h65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256HMAC.h59
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/openssl/CryptoImpl.h371
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventDecoderStream.h43
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventEncoderStream.h69
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h311
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventMessage.h122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStream.h8
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamBuf.h52
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamDecoder.h109
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamEncoder.h51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamErrors.h47
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamHandler.h147
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h381
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/AWSLogging.h50
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/ConsoleLogSystem.h45
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/DefaultLogSystem.h90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/FormattedLogSystem.h66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogLevel.h37
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogMacros.h194
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogSystemInterface.h51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/AWSMemory.h291
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/MemorySystemInterface.h50
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSAllocator.h100
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSDeque.h19
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSList.h19
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSMap.h33
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSQueue.h21
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSSet.h19
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStack.h21
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStreamFwd.h28
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSString.h108
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStringStream.h42
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSVector.h19
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/SimpleStringStream.h126
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/DefaultRateLimiter.h205
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/RateLimiterInterface.h45
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ConcurrentStreamBuf.h58
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/PreallocatedStreamBuf.h56
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ResponseStream.h74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/SimpleStreamBuf.h64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h119
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ReaderWriterLock.h116
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Semaphore.h45
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ThreadTask.h48
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/xml/XmlSerializer.h218
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonSerializableWebServiceRequest.cpp24
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonStreamingWebServiceRequest.cpp12
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonWebServiceRequest.cpp20
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Aws.cpp134
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Globals.cpp28
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Region.cpp36
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Version.cpp53
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSigner.cpp806
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSignerProvider.cpp51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProvider.cpp466
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/STSCredentialsProvider.cpp163
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSClient.cpp1098
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp180
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AsyncCallerContext.cpp16
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/ClientConfiguration.cpp160
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/CoreErrors.cpp151
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/DefaultRetryStrategy.cpp32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/RetryStrategy.cpp102
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/SpecifiedRetryableErrorsRetryStrategy.cpp28
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/config/AWSProfileConfigLoader.cpp540
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/cjson/cJSON.cpp2983
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/tinyxml2/tinyxml2.cpp2802
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClient.cpp49
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClientFactory.cpp203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpRequest.cpp40
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpTypes.cpp42
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/Scheme.cpp54
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/URI.cpp510
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHandleContainer.cpp153
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp730
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpRequest.cpp104
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpResponse.cpp46
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/internal/AWSHttpResourceClient.cpp506
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/DefaultMonitoring.cpp340
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/HttpClientMetrics.cpp71
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/MonitoringManager.cpp129
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/Net.cpp28
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/SimpleUDP.cpp285
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Environment.cpp23
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/FileSystem.cpp292
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/OSVersionInfo.cpp59
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Security.cpp26
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Time.cpp31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/ARN.cpp46
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Array.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DNS.cpp55
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DateTimeCommon.cpp1502
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Directory.cpp323
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/EnumParseOverflowContainer.cpp33
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/FileSystemUtils.cpp51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/GetTheLights.cpp36
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/HashingUtils.cpp236
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/StringUtils.cpp421
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/TempFile.cpp54
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/UUID.cpp90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/base64/Base64.cpp148
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Cipher.cpp123
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoMaterial.cpp34
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoScheme.cpp61
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoBuf.cpp348
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoStream.cpp52
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/EncryptionMaterials.cpp19
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/KeyWrapAlgorithm.cpp68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/MD5.cpp31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256.cpp30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256HMAC.cpp34
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp895
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp987
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventDecoderStream.cpp22
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventEncoderStream.cpp28
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventHeader.cpp107
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventMessage.cpp132
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamBuf.cpp147
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamDecoder.cpp170
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamEncoder.cpp162
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamErrors.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp665
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/AWSLogging.cpp51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/ConsoleLogSystem.cpp22
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/DefaultLogSystem.cpp117
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/FormattedLogSystem.cpp99
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/LogLevel.cpp45
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/AWSMemory.cpp134
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/stl/SimpleStringStream.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ConcurrentStreamBuf.cpp126
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/PreallocatedStreamBuf.cpp75
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ResponseStream.cpp91
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/SimpleStreamBuf.cpp239
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Executor.cpp155
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ReaderWriterLock.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Semaphore.cpp39
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp46
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/xml/XmlSerializer.cpp302
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/ya.make154
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/.yandex_meta/licenses.list.txt209
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ARN.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Client.h11013
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Endpoint.h43
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ErrorMarshaller.h25
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Errors.h79
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Request.h44
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3_EXPORTS.h29
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortIncompleteMultipartUpload.h76
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadRequest.h450
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccelerateConfiguration.h82
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlPolicy.h125
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlTranslation.h97
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsAndOperator.h145
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsConfiguration.h177
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsExportDestination.h78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsFilter.h167
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3BucketDestination.h244
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3ExportFileFormat.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ArchiveStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Bucket.h131
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketAccelerateStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketCannedACL.h33
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLifecycleConfiguration.h93
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLocationConstraint.h55
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLoggingStatus.h66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLogsPermission.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketVersioningStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSConfiguration.h101
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSRule.h342
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVInput.h446
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVOutput.h314
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CloudFunctionConfiguration.h215
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CommonPrefix.h92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadRequest.h341
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadResult.h578
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedMultipartUpload.h90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedPart.h116
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompressionType.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Condition.h224
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectRequest.h2487
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResult.h471
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResultDetails.h139
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyPartResult.h123
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketConfiguration.h90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketRequest.h461
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketResult.h91
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadRequest.h1709
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadResult.h687
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DefaultRetention.h142
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Delete.h117
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketAnalyticsConfigurationRequest.h239
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketCorsRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketEncryptionRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketIntelligentTieringConfigurationRequest.h185
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketInventoryConfigurationRequest.h239
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketLifecycleRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketMetricsConfigurationRequest.h239
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketOwnershipControlsRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketPolicyRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketReplicationRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketTaggingRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketWebsiteRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerEntry.h230
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplication.h99
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplicationStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectRequest.h546
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectResult.h124
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingRequest.h427
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingResult.h77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsRequest.h499
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsResult.h150
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletePublicAccessBlockRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletedObject.h224
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Destination.h469
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncodingType.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Encryption.h229
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncryptionConfiguration.h137
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Error.h3100
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ErrorDocument.h88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Event.h46
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplication.h82
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplicationStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpirationStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpressionType.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FileHeaderInfo.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRule.h154
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRuleName.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclResult.h107
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationRequest.h247
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsResult.h85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationRequest.h185
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationRequest.h247
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationResult.h78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationResult.h87
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationRequest.h239
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationResult.h184
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsResult.h72
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyResult.h56
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingResult.h78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningResult.h111
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteRequest.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteResult.h180
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclRequest.h378
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclResult.h126
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldRequest.h386
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationRequest.h267
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRequest.h1185
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectResult.h1239
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionRequest.h394
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionResult.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingRequest.h427
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingResult.h117
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentRequest.h270
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentResult.h75
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockRequest.h203
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockResult.h72
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GlacierJobParameters.h78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grant.h113
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grantee.h319
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadBucketRequest.h339
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectRequest.h935
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectResult.h1433
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IndexDocument.h120
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Initiator.h141
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InputSerialization.h190
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAccessTier.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAndOperator.h152
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringConfiguration.h223
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringFilter.h167
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InvalidObjectState.h90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryConfiguration.h340
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryDestination.h85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryEncryption.h114
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFilter.h97
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFormat.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFrequency.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryIncludedObjectVersions.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryOptionalField.h40
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryS3BucketDestination.h285
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventorySchedule.h79
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONInput.h79
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONOutput.h97
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONType.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LambdaFunctionConfiguration.h218
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleConfiguration.h90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleExpiration.h149
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRule.h379
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleAndOperator.h144
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleFilter.h154
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsRequest.h247
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsResult.h207
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsRequest.h193
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsResult.h207
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsRequest.h271
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsResult.h207
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsRequest.h263
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsResult.h207
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketsResult.h107
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsRequest.h730
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsResult.h549
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsRequest.h502
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsResult.h604
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsRequest.h573
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsResult.h509
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Request.h693
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Result.h726
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsRequest.h502
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsResult.h547
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LoggingEnabled.h238
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADelete.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADeleteStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataDirective.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataEntry.h132
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Metrics.h120
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsAndOperator.h137
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsConfiguration.h142
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsFilter.h172
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MultipartUpload.h273
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionExpiration.h90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionTransition.h130
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfiguration.h205
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationDeprecated.h167
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationFilter.h70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Object.h358
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectCannedACL.h36
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectIdentifier.h133
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockConfiguration.h114
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockEnabled.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHold.h78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHoldStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockMode.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetention.h113
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetentionMode.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRule.h84
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectOwnership.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectStorageClass.h37
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersion.h333
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersionStorageClass.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputLocation.h85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputSerialization.h114
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Owner.h132
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnerOverride.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControls.h90
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControlsRule.h67
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ParquetInput.h41
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Part.h175
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Payer.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Permission.h34
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PolicyStatus.h74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Progress.h115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ProgressEvent.h79
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Protocol.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PublicAccessBlockConfiguration.h219
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAccelerateConfigurationRequest.h230
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAclRequest.h585
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAnalyticsConfigurationRequest.h274
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketCorsRequest.h340
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketEncryptionRequest.h328
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketIntelligentTieringConfigurationRequest.h220
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketInventoryConfigurationRequest.h274
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLifecycleConfigurationRequest.h232
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLoggingRequest.h292
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketMetricsConfigurationRequest.h274
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketNotificationConfigurationRequest.h218
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketOwnershipControlsRequest.h306
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketPolicyRequest.h284
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketReplicationRequest.h348
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketRequestPaymentRequest.h316
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketTaggingRequest.h316
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketVersioningRequest.h368
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketWebsiteRequest.h316
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclRequest.h948
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldRequest.h481
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationRequest.h365
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRequest.h1987
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectResult.h480
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionRequest.h527
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionResult.h57
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingRequest.h524
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingResult.h77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutPublicAccessBlockRequest.h336
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfiguration.h195
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfigurationDeprecated.h174
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QuoteFields.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RecordsEvent.h66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Redirect.h342
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RedirectAllRequestsTo.h130
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModifications.h85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModificationsStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationConfiguration.h183
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRule.h357
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleAndOperator.h148
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleFilter.h211
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationStatus.h33
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTime.h122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeValue.h72
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestCharged.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPayer.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPaymentConfiguration.h78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestProgress.h71
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectRequest.h473
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectResult.h103
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequest.h301
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequestType.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RoutingRule.h153
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Rule.h358
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3KeyFilter.h74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3Location.h352
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSEKMS.h105
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSES3.h42
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ScanRange.h130
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentHandler.h76
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentRequest.h745
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectParameters.h193
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryption.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionByDefault.h248
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionConfiguration.h98
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionRule.h139
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SourceSelectionCriteria.h172
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjects.h91
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjectsStatus.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Stats.h114
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StatsEvent.h78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClass.h37
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysis.h86
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisDataExport.h120
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisSchemaVersion.h30
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tag.h132
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tagging.h89
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TaggingDirective.h31
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TargetGrant.h113
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tier.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tiering.h144
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfiguration.h219
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfigurationDeprecated.h174
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Transition.h151
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TransitionStorageClass.h34
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Type.h32
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyRequest.h1447
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyResult.h343
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartRequest.h770
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartResult.h307
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/VersioningConfiguration.h135
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/WebsiteConfiguration.h207
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ARN.cpp210
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Client.cpp4085
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp133
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ErrorMarshaller.cpp99
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Errors.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortIncompleteMultipartUpload.cpp68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadRequest.cpp81
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadResult.cpp47
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccelerateConfiguration.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlPolicy.cpp88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlTranslation.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsAndOperator.cpp88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsConfiguration.cpp92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsExportDestination.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsFilter.cpp92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3BucketDestination.cpp108
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3ExportFileFormat.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ArchiveStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Bucket.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketAccelerateStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketCannedACL.cpp84
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLifecycleConfiguration.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLocationConstraint.cpp238
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLoggingStatus.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLogsPermission.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketVersioningStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSConfiguration.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSRule.cpp160
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVInput.cpp154
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVOutput.cpp122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CloudFunctionConfiguration.cpp115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CommonPrefix.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadRequest.cpp93
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadResult.cpp101
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedMultipartUpload.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedPart.cpp82
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompressionType.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Condition.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectRequest.cpp350
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResult.cpp106
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResultDetails.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyPartResult.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketConfiguration.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketRequest.cpp125
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketResult.cpp45
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadRequest.cpp268
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadResult.cpp114
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DefaultRetention.cpp102
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Delete.cpp91
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketAnalyticsConfigurationRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketCorsRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketEncryptionRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketIntelligentTieringConfigurationRequest.cpp59
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketInventoryConfigurationRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketLifecycleRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketMetricsConfigurationRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketOwnershipControlsRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketPolicyRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketReplicationRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketTaggingRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketWebsiteRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerEntry.cpp124
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplication.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplicationStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectRequest.cpp98
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectResult.cpp61
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingRequest.cpp74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingResult.cpp45
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsRequest.cpp101
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsResult.cpp69
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletePublicAccessBlockRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletedObject.cpp110
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Destination.cpp150
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncodingType.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Encryption.cpp94
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncryptionConfiguration.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Error.cpp106
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ErrorDocument.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Event.cpp175
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplication.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplicationStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpirationStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpressionType.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FileHeaderInfo.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRule.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRuleName.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationResult.cpp44
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclResult.cpp53
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsResult.cpp48
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationRequest.cpp59
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationResult.cpp48
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationResult.cpp41
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingResult.cpp42
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationResult.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyResult.cpp48
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentResult.cpp44
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingResult.cpp48
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningResult.cpp51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteResult.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclRequest.cpp81
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclResult.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldRequest.cpp81
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRequest.cpp198
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectResult.cpp344
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionRequest.cpp81
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingRequest.cpp74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingResult.cpp56
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentResult.cpp61
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockResult.cpp38
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GlacierJobParameters.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grant.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grantee.cpp122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadBucketRequest.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectRequest.cpp150
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectResult.cpp248
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IndexDocument.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Initiator.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InputSerialization.cpp108
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAccessTier.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAndOperator.cpp88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringConfiguration.cpp117
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringFilter.cpp92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InvalidObjectState.cpp82
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryConfiguration.cpp164
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryDestination.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryEncryption.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFilter.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFormat.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFrequency.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryIncludedObjectVersions.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryOptionalField.cpp133
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryS3BucketDestination.cpp122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventorySchedule.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONInput.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONOutput.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONType.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LambdaFunctionConfiguration.cpp115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleConfiguration.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleExpiration.cpp100
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRule.cpp182
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleAndOperator.cpp88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleFilter.cpp92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsResult.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsRequest.cpp59
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsResult.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsResult.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsResult.cpp65
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketsResult.cpp53
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsRequest.cpp115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsResult.cpp115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsRequest.cpp115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsResult.cpp126
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsRequest.cpp114
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsResult.cpp105
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Request.cpp131
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Result.cpp117
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsRequest.cpp99
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsResult.cpp130
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LoggingEnabled.cpp102
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADelete.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADeleteStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataDirective.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataEntry.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Metrics.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsAndOperator.cpp88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsConfiguration.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsFilter.cpp92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MultipartUpload.cpp136
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionExpiration.cpp68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionTransition.cpp84
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfiguration.cpp119
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationDeprecated.cpp92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationFilter.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Object.cpp140
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectCannedACL.cpp105
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockConfiguration.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockEnabled.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHold.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHoldStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockMode.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetention.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetentionMode.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRule.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectOwnership.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectStorageClass.cpp112
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersion.cpp172
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersionStorageClass.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputLocation.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputSerialization.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Owner.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnerOverride.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControls.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControlsRule.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ParquetInput.cpp51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Part.cpp114
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Payer.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Permission.cpp91
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PolicyStatus.cpp68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Progress.cpp104
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ProgressEvent.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Protocol.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PublicAccessBlockConfiguration.cpp122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAccelerateConfigurationRequest.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAclRequest.cpp132
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAnalyticsConfigurationRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketCorsRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketEncryptionRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketIntelligentTieringConfigurationRequest.cpp71
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketInventoryConfigurationRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLifecycleConfigurationRequest.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLoggingRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketMetricsConfigurationRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketNotificationConfigurationRequest.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketOwnershipControlsRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketPolicyRequest.cpp79
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketReplicationRequest.cpp93
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketRequestPaymentRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketTaggingRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketVersioningRequest.cpp93
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketWebsiteRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclRequest.cpp148
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclResult.cpp47
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldRequest.cpp101
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldResult.cpp47
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationRequest.cpp100
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationResult.cpp47
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRequest.cpp275
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectResult.cpp105
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionRequest.cpp110
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionResult.cpp47
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingRequest.cpp94
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingResult.cpp45
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutPublicAccessBlockRequest.cpp85
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfiguration.cpp115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfigurationDeprecated.cpp101
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QuoteFields.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Redirect.cpp122
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RedirectAllRequestsTo.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModifications.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModificationsStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationConfiguration.cpp87
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRule.cpp168
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleAndOperator.cpp88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleFilter.cpp92
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationStatus.cpp84
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTime.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeValue.cpp68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestCharged.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPayer.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPaymentConfiguration.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestProgress.cpp68
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectRequest.cpp93
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectResult.cpp53
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequest.cpp156
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequestType.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RoutingRule.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Rule.cpp164
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3KeyFilter.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3Location.cpp186
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSEKMS.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSES3.cpp51
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ScanRange.cpp86
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentHandler.cpp271
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentRequest.cpp140
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectParameters.cpp108
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryption.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionByDefault.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionConfiguration.cpp73
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionRule.cpp82
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SourceSelectionCriteria.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjects.cpp66
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjectsStatus.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Stats.cpp104
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StatsEvent.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClass.cpp112
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysis.cpp64
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisDataExport.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisSchemaVersion.cpp63
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tag.cpp78
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tagging.cpp74
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TaggingDirective.cpp70
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TargetGrant.cpp80
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tier.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tiering.cpp84
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfiguration.cpp115
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfigurationDeprecated.cpp101
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Transition.cpp98
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TransitionStorageClass.cpp91
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Type.cpp77
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyRequest.cpp190
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyResult.cpp88
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartRequest.cpp129
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartResult.cpp87
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/VersioningConfiguration.cpp82
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/WebsiteConfiguration.cpp116
-rw-r--r--contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/ya.make390
-rw-r--r--contrib/libs/aws-sdk-cpp/ya.make17
908 files changed, 158940 insertions, 0 deletions
diff --git a/contrib/libs/aws-sdk-cpp/LICENSE b/contrib/libs/aws-sdk-cpp/LICENSE
new file mode 100644
index 00000000000..8dada3edaf5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/contrib/libs/aws-sdk-cpp/README.md b/contrib/libs/aws-sdk-cpp/README.md
new file mode 100644
index 00000000000..e2acf6bf356
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/README.md
@@ -0,0 +1,172 @@
+# AWS SDK for C++
+The AWS SDK for C++ provides a modern C++ (version C++ 11 or later) interface for Amazon Web Services (AWS). It is meant to be performant and fully functioning with low- and high-level SDKs, while minimizing dependencies and providing platform portability (Windows, OSX, Linux, and mobile).
+
+AWS SDK for C++ is in now in General Availability and recommended for production use. We invite our customers to join
+the development efforts by submitting pull requests and sending us feedback and ideas via GitHub Issues.
+
+## Version 1.8 is now Available!
+
+Version 1.8 introduces much asked for new features and changes to the SDK but, because this might also cause compatibility issues with previous versions we've decided to keep it as a seperate branch to make the transition less jarring.
+
+For more information see the [What’s New in AWS SDK for CPP Version 1.8](https://github.com/aws/aws-sdk-cpp/wiki/What%E2%80%99s-New-in-AWS-SDK-for-CPP-Version-1.8) entry of the wiki, and also please provide any feedback you may have of these changes on our pinned [issue](https://github.com/aws/aws-sdk-cpp/issues/1373).
+
+
+__Jump To:__
+* [Getting Started](#Getting-Started)
+* [Issues and Contributions](#issues-and-contributions)
+* [Getting Help](#Getting-Help)
+* [Using the SDK and Other Topics](#Using-the-SDK-and-Other-Topics)
+
+# Getting Started
+
+## Building the SDK:
+
+### Minimum Requirements:
+* Visual Studio 2015 or later
+* OR GNU Compiler Collection (GCC) 4.9 or later
+* OR Clang 3.3 or later
+* 4GB of RAM
+ * 4GB of RAM is required to build some of the larger clients. The SDK build may fail on EC2 instance types t2.micro, t2.small and other small instance types due to insufficient memory.
+
+### Building From Source:
+
+#### To create an **out-of-source build**:
+1. Install CMake and the relevant build tools for your platform. Ensure these are available in your executable path.
+2. Create your build directory. Replace <BUILD_DIR> with your build directory name:
+
+3. Build the project:
+
+ * For Auto Make build systems:
+ ```sh
+ cd <BUILD_DIR>
+ cmake <path-to-root-of-this-source-code> -DCMAKE_BUILD_TYPE=Debug
+ make
+ sudo make install
+ ```
+
+ * For Visual Studio:
+ ```sh
+ cd <BUILD_DIR>
+ cmake <path-to-root-of-this-source-code> -G "Visual Studio 15 Win64" -DCMAKE_BUILD_TYPE=Debug
+ msbuild ALL_BUILD.vcxproj /p:Configuration=Debug
+ ```
+
+ * For macOS - Xcode:
+ ```sh
+ cmake <path-to-root-of-this-source-code> -G Xcode -DTARGET_ARCH="APPLE" -DCMAKE_BUILD_TYPE=Debug
+ xcodebuild -target ALL_BUILD
+ ```
+
+### Third party dependencies:
+Starting from version 1.7.0, we added several third party dependencies, including [`aws-c-common`](https://github.com/awslabs/aws-c-common), [`aws-checksums`](https://github.com/awslabs/aws-checksums) and [`aws-c-event-stream`](https://github.com/awslabs/aws-c-event-stream). By default, they will be built and installed in `<BUILD_DIR>/.deps/install`, and copied to default system directory during SDK installation. You can change the location by specifying `CMAKE_INSTALL_PREFIX`.
+
+However, if you want to build and install these libraries in custom locations:
+1. Download, build and install `aws-c-common`:
+ ```sh
+ git clone https://github.com/awslabs/aws-c-common
+ cd aws-c-common
+ # checkout to a specific commit id if you want.
+ git checkout <commit-id>
+ mkdir build && cd build
+ # without CMAKE_INSTALL_PREFIX, it will be installed to default system directory.
+ cmake .. -DCMAKE_INSTALL_PREFIX=<deps-install-dir> <extra-cmake-parameters-here>
+ make # or MSBuild ALL_BUILD.vcxproj on Windows
+ make install # or MSBuild INSTALL.vcxproj on Windows
+ ```
+2. Download, build and install `aws-checksums`:
+ ```sh
+ git clone https://github.com/awslabs/aws-checksums
+ cd aws-checksums
+ # checkout to a specific commit id if you want
+ git checkout <commit-id>
+ mkdir build && cd build
+ # without CMAKE_INSTALL_PREFIX, it will be installed to default system directory.
+ cmake .. -DCMAKE_INSTALL_PREFIX=<deps-install-dir> <extra-cmake-parameters-here>
+ make # or MSBuild ALL_BUILD.vcxproj on Windows
+ make install # or MSBuild INSTALL.vcxproj on Windows
+ ```
+3. Download, build and install `aws-c-event-stream`:
+ ```sh
+ git clone https://github.com/awslabs/aws-c-event-stream
+ cd aws-c-event-stream
+ # checkout to a specific commit id if you want
+ git checkout <commit-id>
+ mkdir build && cd build
+ # aws-c-common and aws-checksums are dependencies of aws-c-event-stream
+ # without CMAKE_INSTALL_PREFIX, it will be installed to default system directory.
+ cmake .. -DCMAKE_INSTALL_PREFIX=<deps-install-dir> -DCMAKE_PREFIX_PATH=<deps-install-dir> <extra-cmake-parameters-here>
+ make # or MSBuild ALL_BUILD.vcxproj on Windows
+ make install # or MSBuild INSTALL.vcxproj on Windows
+ ```
+4. Turn off `BUILD_DEPS` when building C++ SDK:
+ ```sh
+ cd BUILD_DIR
+ cmake <path-to-root-of-this-source-code> -DBUILD_DEPS=OFF -DCMAKE_PREFIX_PATH=<deps-install-dir>
+ ```
+You may also find the following link helpful for including the build in your project:
+https://aws.amazon.com/blogs/developer/using-cmake-exports-with-the-aws-sdk-for-c/
+
+#### Other Dependencies:
+To compile in Linux, you must have the header files for libcurl, libopenssl. The packages are typically available in your package manager.
+
+Debian example:
+ `sudo apt-get install libcurl-dev`
+
+### Building for Android
+To build for Android, add `-DTARGET_ARCH=ANDROID` to your cmake command line. Currently we support Android APIs from 19 to 28 with Android NDK 19c and we are using build-in cmake toolchain file supplied by Android NDK, assuming you have the appropriate environment variables (ANDROID_NDK) set.
+
+##### Android on Windows
+Building for Android on Windows requires some additional setup. In particular, you will need to run cmake from a Visual Studio developer command prompt (2015 or higher). Additionally, you will need 'git' and 'patch' in your path. If you have git installed on a Windows system, then patch is likely found in a sibling directory (.../Git/usr/bin/). Once you've verified these requirements, your cmake command line will change slightly to use nmake:
+
+ ```sh
+ cmake -G "NMake Makefiles" `-DTARGET_ARCH=ANDROID` <other options> ..
+ ```
+
+Nmake builds targets in a serial fashion. To make things quicker, we recommend installing JOM as an alternative to nmake and then changing the cmake invocation to:
+
+ ```sh
+ cmake -G "NMake Makefiles JOM" `-DTARGET_ARCH=ANDROID` <other options> ..
+ ```
+
+### Building for Docker
+
+To build for Docker, ensure your container meets the [minimum requirements](#minimum-requirements). By default, Docker Desktop is set to use 2 GB runtime memory. We have provided [Dockerfiles](https://github.com/aws/aws-sdk-cpp/tree/master/CI/docker-file) as templates for building the SDK in a container.
+
+
+### Building and running an app on EC2
+Checkout this walkthrough on how to set up an enviroment and build the [AWS SDK for C++ on an EC2 instance](https://github.com/aws/aws-sdk-cpp/wiki/Building-the-SDK-from-source-on-EC2).
+
+# Issues and Contributions
+We welcome all kinds of contributions, check [this guideline](./CONTRIBUTING.md) to learn how you can contribute or report issues.
+
+# Maintenance and support for SDK major versions
+
+For information about maintenance and support for SDK major versions and our underlying dependencies, see the following in the AWS SDKs and Tools Shared Configuration and Credentials Reference Guide
+
+* [AWS SDKs and Tools Maintenance Policy](https://docs.aws.amazon.com/credref/latest/refdocs/maint-policy.html)
+* [AWS SDKs and Tools Version Support Matrix](https://docs.aws.amazon.com/credref/latest/refdocs/version-support-matrix.html)
+
+
+
+# Getting Help
+
+The best way to interact with our team is through GitHub. You can [open an issue](https://github.com/aws/aws-sdk-cpp/issues/new/choose) and choose from one of our templates for guidance, bug reports, or feature requests. You may also find help on community resources such as [StackOverFlow](https://stackoverflow.com/questions/tagged/aws-sdk-cpp) with the tag #aws-sdk-cpp or If you have a support plan with [AWS Support](https://aws.amazon.com/premiumsupport/), you can also create a new support case.
+
+Please make sure to check out our resources too before opening an issue:
+* Our [Developer Guide](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/welcome.html) and [API reference](http://sdk.amazonaws.com/cpp/api/LATEST/index.html)
+* Our [Changelog](./CHANGELOG.md) for recent breaking changes.
+* Our [Contribute](./CONTRIBUTING.md) guide.
+* Our [samples repo](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/cpp).
+
+# Using the SDK and Other Topics
+* [Using the SDK](./Docs/SDK_usage_guide.md)
+* [CMake Parameters](./Docs/CMake_Parameters.md)
+* [Credentials Providers](./Docs/Credentials_Providers.md)
+* [Client Configuration Parameters](./Docs/ClientConfiguration_Parameters.md)
+* [Service Client](./Docs/Service_Client.md)
+* [Memory Management](./Docs/Memory_Management.md)
+* [Advanced Topics](./Docs/Advanced_topics.md)
+* [Add as CMake external project](./Docs/CMake_External_Project.md)
+* [Coding Standards](./Docs/CODING_STANDARDS.md)
+* [License](./LICENSE)
+* [Code of Conduct](./CODE_OF_CONDUCT.md)
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/.yandex_meta/licenses.list.txt b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/.yandex_meta/licenses.list.txt
new file mode 100644
index 00000000000..7bb262fe607
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/.yandex_meta/licenses.list.txt
@@ -0,0 +1,254 @@
+====================Apache-2.0====================
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+====================Apache-2.0====================
+ * SPDX-License-Identifier: Apache-2.0.
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+
+====================COPYRIGHT====================
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+
+====================MIT====================
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+
+====================Zlib====================
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonSerializableWebServiceRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonSerializableWebServiceRequest.h
new file mode 100644
index 00000000000..2ba298546e0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonSerializableWebServiceRequest.h
@@ -0,0 +1,56 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/AmazonWebServiceRequest.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/UnreferencedParam.h>
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+
+namespace Aws
+{
+ static const char JSON_CONTENT_TYPE[] = "application/json";
+ static const char AMZN_JSON_CONTENT_TYPE_1_0[] = "application/x-amz-json-1.0";
+ static const char AMZN_JSON_CONTENT_TYPE_1_1[] = "application/x-amz-json-1.1";
+ static const char FORM_CONTENT_TYPE[] = "application/x-www-form-urlencoded";
+ static const char AMZN_XML_CONTENT_TYPE[] = "application/xml";
+ static const char AMZN_EVENTSTREAM_CONTENT_TYPE[] = "application/vnd.amazon.eventstream";
+
+ /**
+ * High-level abstraction over AWS requests. GetBody() calls SerializePayload() and uses a stringbuf under the hood.
+ * This is for payloads such as query, xml, or json
+ */
+ class AWS_CORE_API AmazonSerializableWebServiceRequest : public AmazonWebServiceRequest
+ {
+ public:
+ AmazonSerializableWebServiceRequest()
+ {
+ //prevent unreferenced var warnings
+ //for these values.
+ AWS_UNREFERENCED_PARAM(JSON_CONTENT_TYPE);
+ AWS_UNREFERENCED_PARAM(AMZN_JSON_CONTENT_TYPE_1_0);
+ AWS_UNREFERENCED_PARAM(AMZN_JSON_CONTENT_TYPE_1_1);
+ AWS_UNREFERENCED_PARAM(FORM_CONTENT_TYPE);
+ AWS_UNREFERENCED_PARAM(AMZN_XML_CONTENT_TYPE);
+ }
+
+ virtual ~AmazonSerializableWebServiceRequest() {}
+
+ /**
+ * Convert payload into String.
+ */
+ virtual Aws::String SerializePayload() const = 0;
+
+ /**
+ * Loads serialized payload into string buf and returns the stream
+ */
+ std::shared_ptr<Aws::IOStream> GetBody() const override;
+ };
+
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonStreamingWebServiceRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonStreamingWebServiceRequest.h
new file mode 100644
index 00000000000..c267d06aaf2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonStreamingWebServiceRequest.h
@@ -0,0 +1,83 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/UnreferencedParam.h>
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/http/HttpRequest.h>
+#include <aws/core/AmazonWebServiceRequest.h>
+
+namespace Aws
+{
+ static const char* DEFAULT_CONTENT_TYPE = "binary/octet-stream";
+
+ /**
+ * High-level abstraction over AWS requests that don't have well formed payloads. GetBody() uses an underlying stream that has been set by a call to SetBody()
+ * Also supports request specific headers such as in rest protocols.
+ */
+ class AWS_CORE_API AmazonStreamingWebServiceRequest : public AmazonWebServiceRequest
+ {
+ public:
+ /**
+ * Initializes members to defaults
+ */
+ AmazonStreamingWebServiceRequest() : m_contentType(DEFAULT_CONTENT_TYPE)
+ {
+ }
+
+ virtual ~AmazonStreamingWebServiceRequest();
+
+ /**
+ * Get the user set stream
+ */
+ inline std::shared_ptr<Aws::IOStream> GetBody() const override { return m_bodyStream; }
+ /**
+ * Set the body stream to use for the request.
+ */
+ inline void SetBody(const std::shared_ptr<Aws::IOStream>& body) { m_bodyStream = body; }
+ /**
+ * Gets all headers that will be needed in the request. Calls GetRequestSpecificHeaders(), which is the chance for subclasses to add
+ * headers from their modeled data.
+ */
+ inline Aws::Http::HeaderValueCollection GetHeaders() const override
+ {
+ auto headers = GetRequestSpecificHeaders();
+ headers.insert(Aws::Http::HeaderValuePair(Aws::Http::CONTENT_TYPE_HEADER, GetContentType()));
+
+ return headers;
+ }
+
+ /**
+ * AmazonStreamingWebServiceRequest always returns true.
+ */
+ bool IsStreaming() const override { return true; }
+
+ /**
+ * Get the user set contentType. Defaults to binary/octet-stream
+ */
+ const Aws::String& GetContentType() const { return m_contentType; }
+ /**
+ * Set the content type.
+ */
+ void SetContentType(const Aws::String& contentType) { m_contentType = contentType; }
+
+ protected:
+ /**
+ * Override this method to put data members from a subclass into the headers collection.
+ */
+ virtual Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const { return Aws::Http::HeaderValueCollection(); };
+
+ private:
+ std::shared_ptr<Aws::IOStream> m_bodyStream;
+ Aws::String m_contentType;
+ };
+
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceRequest.h
new file mode 100644
index 00000000000..1fc7c0e7e00
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceRequest.h
@@ -0,0 +1,173 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/UnreferencedParam.h>
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/http/HttpRequest.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/auth/AWSAuthSigner.h>
+
+namespace Aws
+{
+ namespace Http
+ {
+ class URI;
+ } // namespace Http
+
+ class AmazonWebServiceRequest;
+
+ /**
+ * Closure definition for handling a retry notification. This is only for if you want to be notified that a particular request is being retried.
+ */
+ typedef std::function<void(const AmazonWebServiceRequest&)> RequestRetryHandler;
+ typedef std::function<void(const Aws::Http::HttpRequest&)> RequestSignedHandler;
+
+ /**
+ * Base level abstraction for all modeled AWS requests
+ */
+ class AWS_CORE_API AmazonWebServiceRequest
+ {
+ public:
+ /**
+ * Sets up default response stream factory. initializes other pointers to nullptr.
+ */
+ AmazonWebServiceRequest();
+ virtual ~AmazonWebServiceRequest() = default;
+
+ /**
+ * Get the payload for the request
+ */
+ virtual std::shared_ptr<Aws::IOStream> GetBody() const = 0;
+ /**
+ * Get the headers for the request
+ */
+ virtual Aws::Http::HeaderValueCollection GetHeaders() const = 0;
+ /**
+ * Do nothing virtual, override this to add query strings to the request
+ */
+ virtual void AddQueryStringParameters(Aws::Http::URI& uri) const { AWS_UNREFERENCED_PARAM(uri); }
+
+ /**
+ * Put the request to a url for later presigning. This will push the body to the url and
+ * then adds the existing query string parameters as normal.
+ */
+ virtual void PutToPresignedUrl(Aws::Http::URI& uri) const { DumpBodyToUrl(uri); AddQueryStringParameters(uri); }
+
+ /**
+ * Defaults to false, if this is set to true, it's a streaming request, which means the payload is not well structured bits.
+ */
+ virtual bool IsStreaming() const { return false; }
+
+ /**
+ * Defaults to false, if this is set to true in derived class, it's an event stream request, which means the payload is consisted by multiple structured events.
+ */
+ inline virtual bool IsEventStreamRequest() const { return false; }
+ /**
+ * Defaults to true, if this is set to false, then signers, if they support body signing, will not do so
+ */
+ virtual bool SignBody() const { return true; }
+
+ /**
+ * Defaults to false, if this is set to true, it supports chunked transfer encoding.
+ */
+ virtual bool IsChunked() const { return false; }
+
+ /**
+ * Register closure for request signed event.
+ */
+ inline virtual void SetRequestSignedHandler(const RequestSignedHandler& handler) { m_onRequestSigned = handler; }
+ /**
+ * Get closure for request signed event.
+ */
+ inline virtual const RequestSignedHandler& GetRequestSignedHandler() const { return m_onRequestSigned; }
+
+ /**
+ * Retrieves the factory for creating response streams.
+ */
+ const Aws::IOStreamFactory& GetResponseStreamFactory() const { return m_responseStreamFactory; }
+ /**
+ * Set the response stream factory.
+ */
+ void SetResponseStreamFactory(const Aws::IOStreamFactory& factory) { m_responseStreamFactory = factory; }
+ /**
+ * Register closure for data received event.
+ */
+ inline virtual void SetDataReceivedEventHandler(const Aws::Http::DataReceivedEventHandler& dataReceivedEventHandler) { m_onDataReceived = dataReceivedEventHandler; }
+ /**
+ * register closure for data sent event
+ */
+ inline virtual void SetDataSentEventHandler(const Aws::Http::DataSentEventHandler& dataSentEventHandler) { m_onDataSent = dataSentEventHandler; }
+ /**
+ * Register closure for handling whether or not to continue a request.
+ */
+ inline virtual void SetContinueRequestHandler(const Aws::Http::ContinueRequestHandler& continueRequestHandler) { m_continueRequest = continueRequestHandler; }
+ /**
+ * Register closure for data received event.
+ */
+ inline virtual void SetDataReceivedEventHandler(Aws::Http::DataReceivedEventHandler&& dataReceivedEventHandler) { m_onDataReceived = std::move(dataReceivedEventHandler); }
+ /**
+ * register closure for data sent event
+ */
+ inline virtual void SetDataSentEventHandler(Aws::Http::DataSentEventHandler&& dataSentEventHandler) { m_onDataSent = std::move(dataSentEventHandler); }
+ /**
+ * Register closure for handling whether or not to cancel a request.
+ */
+ inline virtual void SetContinueRequestHandler(Aws::Http::ContinueRequestHandler&& continueRequestHandler) { m_continueRequest = std::move(continueRequestHandler); }
+ /**
+ * Register closure for notification that a request is being retried
+ */
+ inline virtual void SetRequestRetryHandler(const RequestRetryHandler& handler) { m_requestRetryHandler = handler; }
+ /**
+ * Register closure for notification that a request is being retried
+ */
+ inline virtual void SetRequestRetryHandler(RequestRetryHandler&& handler) { m_requestRetryHandler = std::move(handler); }
+ /**
+ * get closure for data received event.
+ */
+ inline virtual const Aws::Http::DataReceivedEventHandler& GetDataReceivedEventHandler() const { return m_onDataReceived; }
+ /**
+ * get closure for data sent event
+ */
+ inline virtual const Aws::Http::DataSentEventHandler& GetDataSentEventHandler() const { return m_onDataSent; }
+ /**
+ * get closure for handling whether or not to cancel a request.
+ */
+ inline virtual const Aws::Http::ContinueRequestHandler& GetContinueRequestHandler() const { return m_continueRequest; }
+ /**
+ * get closure for notification that a request is being retried
+ */
+ inline virtual const RequestRetryHandler& GetRequestRetryHandler() const { return m_requestRetryHandler; }
+ /**
+ * If this is set to true, content-md5 needs to be computed and set on the request
+ */
+ inline virtual bool ShouldComputeContentMd5() const { return false; }
+
+ virtual const char* GetServiceRequestName() const = 0;
+
+ protected:
+ /**
+ * Default does nothing. Override this to convert what would otherwise be the payload of the
+ * request to a query string format.
+ */
+ virtual void DumpBodyToUrl(Aws::Http::URI& uri) const { AWS_UNREFERENCED_PARAM(uri); }
+
+ private:
+ Aws::IOStreamFactory m_responseStreamFactory;
+
+ Aws::Http::DataReceivedEventHandler m_onDataReceived;
+ Aws::Http::DataSentEventHandler m_onDataSent;
+ Aws::Http::ContinueRequestHandler m_continueRequest;
+ RequestSignedHandler m_onRequestSigned;
+ RequestRetryHandler m_requestRetryHandler;
+ };
+
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceResult.h
new file mode 100644
index 00000000000..cde25d80f6f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/AmazonWebServiceResult.h
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/http/HttpTypes.h>
+#include <utility>
+#include <aws/core/http/HttpResponse.h>
+
+namespace Aws
+{
+ /**
+ * Container for web response to an AWS Request.
+ */
+ template <typename PAYLOAD_TYPE>
+ class AmazonWebServiceResult
+ {
+ public:
+ AmazonWebServiceResult() : m_responseCode(Http::HttpResponseCode::REQUEST_NOT_MADE) {}
+
+ /**
+ * Sets payload, header collection and a response code.
+ */
+ AmazonWebServiceResult(const PAYLOAD_TYPE& payload, const Http::HeaderValueCollection& headers, Http::HttpResponseCode responseCode = Http::HttpResponseCode::OK) :
+ m_payload(payload),
+ m_responseHeaders(headers),
+ m_responseCode(responseCode)
+ {}
+
+ /**
+ * Sets payload, header collection and a response code, but transfers ownership of payload and headers (for move only operations).
+ */
+ AmazonWebServiceResult(PAYLOAD_TYPE&& payload, Http::HeaderValueCollection&& headers, Http::HttpResponseCode responseCode = Http::HttpResponseCode::OK) :
+ m_payload(std::forward<PAYLOAD_TYPE>(payload)),
+ m_responseHeaders(std::forward<Http::HeaderValueCollection>(headers)),
+ m_responseCode(responseCode)
+ {}
+
+ AmazonWebServiceResult(const AmazonWebServiceResult& result) :
+ m_payload(result.m_payload),
+ m_responseHeaders(result.m_responseHeaders),
+ m_responseCode(result.m_responseCode)
+ {}
+
+ AmazonWebServiceResult(AmazonWebServiceResult&& result) :
+ m_payload(std::move(result.m_payload)),
+ m_responseHeaders(std::move(result.m_responseHeaders)),
+ m_responseCode(result.m_responseCode)
+ {}
+
+ /**
+ * Get the payload from the response
+ */
+ inline const PAYLOAD_TYPE& GetPayload() const { return m_payload; }
+ /**
+ * Get the payload from the response and take ownership of it.
+ */
+ inline PAYLOAD_TYPE TakeOwnershipOfPayload() { return std::move(m_payload); }
+ /**
+ * Get the headers from the response
+ */
+ inline const Http::HeaderValueCollection& GetHeaderValueCollection() const { return m_responseHeaders; }
+ /**
+ * Get the http response code from the response
+ */
+ inline Http::HttpResponseCode GetResponseCode() const { return m_responseCode; }
+
+ private:
+ PAYLOAD_TYPE m_payload;
+ Http::HeaderValueCollection m_responseHeaders;
+ Http::HttpResponseCode m_responseCode;
+ };
+
+
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Aws.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Aws.h
new file mode 100644
index 00000000000..4fcdb17779f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Aws.h
@@ -0,0 +1,262 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/utils/logging/LogLevel.h>
+#include <aws/core/utils/logging/LogSystemInterface.h>
+#include <aws/core/utils/memory/MemorySystemInterface.h>
+#include <aws/core/utils/crypto/Factories.h>
+#include <aws/core/http/HttpClientFactory.h>
+#include <aws/core/monitoring/MonitoringManager.h>
+#include <aws/core/Core_EXPORTS.h>
+
+namespace Aws
+{
+ static const char* DEFAULT_LOG_PREFIX = "aws_sdk_";
+
+ /**
+ * SDK wide options for logging
+ */
+ struct LoggingOptions
+ {
+ LoggingOptions() : logLevel(Aws::Utils::Logging::LogLevel::Off), defaultLogPrefix(DEFAULT_LOG_PREFIX)
+ { }
+
+ /**
+ * Defaults to Off, if this is set to something else, then logging will be turned on and logLevel will be passed to the logger
+ */
+ Aws::Utils::Logging::LogLevel logLevel;
+
+ /**
+ * Defaults to aws_sdk_. This will only be used if the default logger is used.
+ */
+ const char* defaultLogPrefix;
+
+ /**
+ * Defaults to empty, if logLevel has been set and this field is empty, then the default log interface will be used.
+ * otherwise, we will call this closure to create a logger
+ */
+ std::function<std::shared_ptr<Aws::Utils::Logging::LogSystemInterface>()> logger_create_fn;
+ };
+
+ /**
+ * SDK wide options for memory management
+ */
+ struct MemoryManagementOptions
+ {
+ MemoryManagementOptions() : memoryManager(nullptr)
+ { }
+
+ /**
+ * Defaults to nullptr. If custom memory management is being used and this hasn't been set then the default memory
+ * manager will be used. If this has been set and custom memory management has been turned on, then this will be installed
+ * at startup time.
+ */
+ Aws::Utils::Memory::MemorySystemInterface* memoryManager;
+ };
+
+ /**
+ * SDK wide options for http
+ */
+ struct HttpOptions
+ {
+ HttpOptions() : initAndCleanupCurl(true), installSigPipeHandler(false)
+ { }
+
+ /**
+ * Defaults to empty, if this is set, then the result of your closure will be installed and used instead of the system defaults
+ */
+ std::function<std::shared_ptr<Aws::Http::HttpClientFactory>()> httpClientFactory_create_fn;
+ /**
+ * libCurl infects everything with its global state. If it is being used then we automatically initialize and clean it up.
+ * If this is a problem for you, set this to false. If you manually initialize libcurl please add the option CURL_GLOBAL_ALL to your init call.
+ */
+ bool initAndCleanupCurl;
+ /**
+ * Installs a global SIGPIPE handler that logs the error and prevents it from terminating the current process.
+ * This can be used on operating systems on which CURL is being used. In some situations CURL cannot avoid
+ * triggering a SIGPIPE.
+ * For more information see: https://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html
+ * NOTE: CURLOPT_NOSIGNAL is already being set.
+ */
+ bool installSigPipeHandler;
+ };
+
+ /**
+ * SDK wide options for crypto
+ */
+ struct CryptoOptions
+ {
+ CryptoOptions() : initAndCleanupOpenSSL(true)
+ { }
+
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::HashFactory>()> md5Factory_create_fn;
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::HashFactory>()> sha256Factory_create_fn;
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::HMACFactory>()> sha256HMACFactory_create_fn;
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::SymmetricCipherFactory>()> aes_CBCFactory_create_fn;
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::SymmetricCipherFactory>()> aes_CTRFactory_create_fn;
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::SymmetricCipherFactory>()> aes_GCMFactory_create_fn;
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::SymmetricCipherFactory>()> aes_KeyWrapFactory_create_fn;
+ /**
+ * If set, this closure will be used to create and install the factory.
+ */
+ std::function<std::shared_ptr<Aws::Utils::Crypto::SecureRandomFactory>()> secureRandomFactory_create_fn;
+ /**
+ * OpenSSL infects everything with its global state. If it is being used then we automatically initialize and clean it up.
+ * If this is a problem for you, set this to false. Be aware that if you don't use our init and cleanup and you are using
+ * crypto functionality, you are responsible for installing thread locking, and loading strings and error messages.
+ */
+ bool initAndCleanupOpenSSL;
+ };
+
+ /**
+ * MonitoringOptions is used to set up monitoring functionalities globally and(or) for users to customize monitoring listeners.
+ */
+ struct MonitoringOptions
+ {
+ /**
+ * These factory functions will be used to try to create customized monitoring listener factories, then be used to create monitoring listener instances.
+ * Based on functions and factory's implementation, it may fail to create an instance.
+ * If a function failed to create factory or a created factory failed to create an instance, SDK just ignore it.
+ * By default, SDK will try to create a default Client Side Monitoring Listener.
+ */
+ std::vector<Aws::Monitoring::MonitoringFactoryCreateFunction> customizedMonitoringFactory_create_fn;
+ };
+
+
+ /**
+ * You may notice that instead of taking pointers directly to your factories, we take a closure. This is because
+ * if you have installed custom memory management, the allocation for your factories needs to happen after
+ * the memory system has been initialized and shutdown needs to happen prior to the memory management being shutdown.
+ *
+ * Common Recipes:
+ *
+ * Just use defaults:
+ *
+ * SDKOptions options;
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ *
+ * Turn logging on using the default logger:
+ *
+ * SDKOptions options;
+ * options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ *
+ * Install custom memory manager:
+ *
+ * MyMemoryManager memoryManager;
+ *
+ * SDKOptions options;
+ * options.memoryManagementOptions.memoryManager = &memoryManager;
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ *
+ * Override default http client factory
+ *
+ * SDKOptions options;
+ * options.httpOptions.httpClientFactory_create_fn = [](){ return Aws::MakeShared<MyCustomHttpClientFactory>("ALLOC_TAG", arg1); };
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ */
+ struct SDKOptions
+ {
+ /**
+ * SDK wide options for logging
+ */
+ LoggingOptions loggingOptions;
+ /**
+ * SDK wide options for memory management
+ */
+ MemoryManagementOptions memoryManagementOptions;
+ /**
+ * SDK wide options for http
+ */
+ HttpOptions httpOptions;
+ /**
+ * SDK wide options for crypto
+ */
+ CryptoOptions cryptoOptions;
+
+ /**
+ * Options used to set up customized monitoring implementations
+ * Put your monitoring factory in a closure (a create factory function) and put all closures in a vector.
+ * Basic usage can be found in aws-cpp-sdk-core-tests/monitoring/MonitoringTest.cpp
+ */
+ MonitoringOptions monitoringOptions;
+ };
+
+ /*
+ * Initialize SDK wide state for the SDK. This method must be called before doing anything else with this library.
+ *
+ * Common Recipes:
+ *
+ * Just use defaults:
+ *
+ * SDKOptions options;
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ *
+ * Turn logging on using the default logger:
+ *
+ * SDKOptions options;
+ * options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ *
+ * Install custom memory manager:
+ *
+ * MyMemoryManager memoryManager;
+ *
+ * SDKOptions options;
+ * options.memoryManagementOptions.memoryManager = &memoryManager;
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ *
+ * Override default http client factory
+ *
+ * SDKOptions options;
+ * options.httpOptions.httpClientFactory_create_fn = [](){ return Aws::MakeShared<MyCustomHttpClientFactory>("ALLOC_TAG", arg1); };
+ * Aws::InitAPI(options);
+ * .....
+ * Aws::ShutdownAPI(options);
+ */
+ AWS_CORE_API void InitAPI(const SDKOptions& options);
+
+ /**
+ * Shutdown SDK wide state for the SDK. This method must be called when you are finished using the SDK.
+ * Do not call any other SDK methods after calling ShutdownAPI.
+ */
+ AWS_CORE_API void ShutdownAPI(const SDKOptions& options);
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Core_EXPORTS.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Core_EXPORTS.h
new file mode 100644
index 00000000000..12e9dfc9beb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Core_EXPORTS.h
@@ -0,0 +1,103 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/SDKConfig.h>
+
+#if defined (USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32)
+ #ifdef _MSC_VER
+ #pragma warning(disable : 4251)
+ #endif // _MSC_VER
+
+ #ifdef USE_IMPORT_EXPORT
+ #ifdef AWS_CORE_EXPORTS
+ #define AWS_CORE_API __declspec(dllexport)
+ #else // AWS_CORE_EXPORTS
+ #define AWS_CORE_API __declspec(dllimport)
+ #endif // AWS_CORE_EXPORTS
+ #else // USE_IMPORT_EXPORT
+ #define AWS_CORE_API
+ #endif // USE_IMPORT_EXPORT
+#else // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32)
+ #define AWS_CORE_API
+#endif // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32)
+
+#ifdef _MSC_VER
+ #define AWS_SUPPRESS_WARNING_PUSH(W) \
+ __pragma(warning(push)) \
+ __pragma(warning(disable:W))
+
+ #define AWS_SUPPRESS_WARNING_POP __pragma(warning(pop))
+
+ #define AWS_SUPPRESS_WARNING(W, ...) \
+ AWS_SUPPRESS_WARNING_PUSH(W) \
+ __VA_ARGS__; \
+ AWS_SUPPRESS_WARNING_POP
+
+ #define AWS_SUPPRESS_DEPRECATION(...) AWS_SUPPRESS_WARNING(4996, __VA_ARGS__)
+
+#elif defined (__clang__)
+ #define DO_PRAGMA(x) _Pragma(#x)
+
+ #define AWS_SUPPRESS_WARNING_PUSH(W) \
+ DO_PRAGMA(clang diagnostic push) \
+ DO_PRAGMA(clang diagnostic ignored W)
+
+ #define AWS_SUPPRESS_WARNING_POP DO_PRAGMA(clang diagnostic pop)
+
+ #define AWS_SUPPRESS_WARNING(W, ...) \
+ AWS_SUPPRESS_WARNING_PUSH(W) \
+ __VA_ARGS__; \
+ AWS_SUPPRESS_WARNING_POP
+
+ #define AWS_SUPPRESS_DEPRECATION(...) AWS_SUPPRESS_WARNING("-Wdeprecated-declarations", __VA_ARGS__)
+
+#elif defined (__GNUC__)
+ #define DO_PRAGMA(x) _Pragma(#x)
+
+ #define AWS_SUPPRESS_WARNING_PUSH(W) \
+ DO_PRAGMA(GCC diagnostic push) \
+ DO_PRAGMA(GCC diagnostic ignored W)
+
+ #define AWS_SUPPRESS_WARNING_POP DO_PRAGMA(GCC diagnostic pop)
+ /**
+ * WRAP_() is a useless macro to get around GCC quirks related to expanding macros which includes _Pragma
+ * see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=715271
+ * and https://stackoverflow.com/questions/49698645/how-to-use-pragma-operator-in-macro
+ */
+ #define WRAP_(W, ...) \
+ W \
+ __VA_ARGS__ \
+ AWS_SUPPRESS_WARNING_POP
+
+ #define AWS_SUPPRESS_WARNING(W, ...) WRAP_(AWS_SUPPRESS_WARNING_PUSH(W), __VA_ARGS__)
+
+ #define AWS_SUPPRESS_DEPRECATION(...) AWS_SUPPRESS_WARNING("-Wdeprecated-declarations", __VA_ARGS__)
+
+#else
+ #define AWS_SUPPRESS_WARNING(W, ...) __VAR_ARGS__
+ #define AWS_SUPPRESS_WARNING_PUSH(W)
+ #define AWS_SUPPRESS_WARNING_POP
+ #define AWS_SUPPRESS_DEPRECATION(...) __VA_ARGS__
+#endif
+
+// Due to MSVC can't recognize base class deprecated function in derived class.
+// We need AWS_DISABLE_DEPRECATION to make AWS_DEPRECATED useless only on MSVC
+// Update: When deprecating a function/components, we won't remove the existing tests
+// immediately, so we need AWS_DISABLE_DEPRECATION as well.
+#if defined(AWS_DISABLE_DEPRECATION)
+ #define AWS_DEPRECATED(msg)
+#elif defined (__cplusplus) && __cplusplus > 201103L // standard attributes are available since C++14
+ #define AWS_DEPRECATED(msg) [[deprecated(msg)]]
+#else
+ #ifdef _MSC_VER
+ #define AWS_DEPRECATED(msg) __declspec(deprecated(msg))
+ #elif defined (__clang__) || defined (__GNUC__)
+ #define AWS_DEPRECATED(msg) __attribute__((deprecated(msg)))
+ #else
+ #define AWS_DEPRECATED(msg)
+ #endif
+#endif
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Globals.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Globals.h
new file mode 100644
index 00000000000..cebe4891b77
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Globals.h
@@ -0,0 +1,35 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ class EnumParseOverflowContainer;
+ }
+ /**
+ * This is used to handle the Enum round tripping problem
+ * for when a service updates their enumerations, but the user does not
+ * have an up to date client. This container will be initialized during Aws::InitAPI
+ * and will be cleaned on Aws::ShutdownAPI.
+ */
+ AWS_CORE_API Utils::EnumParseOverflowContainer* GetEnumOverflowContainer();
+
+ /**
+ * Initializes a global overflow container to a new instance.
+ * This should only be called once from within Aws::InitAPI
+ */
+ void InitializeEnumOverflowContainer();
+
+ /**
+ * Destroys the global overflow container instance.
+ * This should only be called once from within Aws::ShutdownAPI
+ */
+ void CleanupEnumOverflowContainer();
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/NoResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/NoResult.h
new file mode 100644
index 00000000000..c4f233cbb96
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/NoResult.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+}
+namespace Json
+{
+ class JsonValue;
+}
+} // namespace Utils
+
+class AWS_CORE_API NoResult
+{
+public:
+ NoResult() {};
+ NoResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>&) {};
+ NoResult(const Aws::AmazonWebServiceResult<Aws::Utils::Json::JsonValue>&) {};
+};
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Region.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Region.h
new file mode 100644
index 00000000000..a728c829ed3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Region.h
@@ -0,0 +1,53 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ /**
+ * AWS Regions
+ */
+ namespace Region
+ {
+ // AWS_GLOBAL is a pseudo region that can be used to tell SDK to use the service global endpoint if there is any.
+ // You can specify this region to corresponding environment variable, config file item and in your code.
+ // For services without global region, the request will be directed to us-east-1
+ static const char AWS_GLOBAL[] = "aws-global";
+ static const char US_EAST_1[] = "us-east-1";
+ static const char US_EAST_2[] = "us-east-2";
+ static const char US_WEST_1[] = "us-west-1";
+ static const char US_WEST_2[] = "us-west-2";
+ static const char AF_SOUTH_1[] = "af-south-1";
+ static const char EU_WEST_1[] = "eu-west-1";
+ static const char EU_WEST_2[] = "eu-west-2";
+ static const char EU_WEST_3[] = "eu-west-3";
+ static const char EU_CENTRAL_1[] = "eu-central-1";
+ static const char EU_NORTH_1[] = "eu-north-1";
+ static const char AP_EAST_1[] = "ap-east-1";
+ static const char AP_SOUTH_1[] = "ap-south-1";
+ static const char AP_SOUTHEAST_1[] = "ap-southeast-1";
+ static const char AP_SOUTHEAST_2[] = "ap-southeast-2";
+ static const char AP_NORTHEAST_1[] = "ap-northeast-1";
+ static const char AP_NORTHEAST_2[] = "ap-northeast-2";
+ static const char AP_NORTHEAST_3[] = "ap-northeast-3";
+ static const char SA_EAST_1[] = "sa-east-1";
+ static const char CA_CENTRAL_1[] = "ca-central-1";
+ static const char CN_NORTH_1[] = "cn-north-1";
+ static const char CN_NORTHWEST_1[] = "cn-northwest-1";
+ static const char ME_SOUTH_1[] = "me-south-1";
+ static const char US_GOV_WEST_1[] = "us-gov-west-1";
+ static const char US_GOV_EAST_1[] = "us-gov-east-1";
+
+ // If a pseudo region, for example, aws-global or us-east-1-fips is provided, it should be converted to the region name used for signing.
+ Aws::String AWS_CORE_API ComputeSignerRegion(const Aws::String& region);
+ }
+
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/SDKConfig.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/SDKConfig.h
new file mode 100644
index 00000000000..9561d202536
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/SDKConfig.h
@@ -0,0 +1,7 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+/* #undef USE_AWS_MEMORY_MANAGEMENT */
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Version.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Version.h
new file mode 100644
index 00000000000..71215ec6bd6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/Version.h
@@ -0,0 +1,19 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace Version
+{
+ AWS_CORE_API const char* GetVersionString();
+ AWS_CORE_API unsigned GetVersionMajor();
+ AWS_CORE_API unsigned GetVersionMinor();
+ AWS_CORE_API unsigned GetVersionPatch();
+ AWS_CORE_API const char* GetCompilerVersionString();
+} //namespace Version
+} //namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/VersionConfig.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/VersionConfig.h
new file mode 100644
index 00000000000..9304d56ee73
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/VersionConfig.h
@@ -0,0 +1,6 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#define AWS_SDK_VERSION_STRING "1.8.113"
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSigner.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSigner.h
new file mode 100644
index 00000000000..8061ee1e251
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSigner.h
@@ -0,0 +1,425 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/Region.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/memory/stl/AWSSet.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/threading/ReaderWriterLock.h>
+#include <aws/core/utils/crypto/Sha256.h>
+#include <aws/core/utils/crypto/Sha256HMAC.h>
+
+#include <memory>
+#include <atomic>
+#include <chrono>
+
+namespace Aws
+{
+ namespace Http
+ {
+ class HttpClientFactory;
+ class HttpRequest;
+ } // namespace Http
+
+ namespace Utils
+ {
+ namespace Event
+ {
+ class Message;
+ }
+ } // namespace Utils
+
+ namespace Auth
+ {
+ class AWSCredentials;
+ class AWSCredentialsProvider;
+ AWS_CORE_API extern const char SIGV4_SIGNER[];
+ AWS_CORE_API extern const char EVENTSTREAM_SIGV4_SIGNER[];
+ AWS_CORE_API extern const char SIGNATURE[];
+ AWS_CORE_API extern const char NULL_SIGNER[];
+ } // namespace Auth
+
+ namespace Client
+ {
+ struct ClientConfiguration;
+
+ /**
+ * Auth Signer interface. Takes a generic AWS request and applies crypto tamper resistent signatures on the request.
+ */
+ class AWS_CORE_API AWSAuthSigner
+ {
+ public:
+ AWSAuthSigner() : m_clockSkew() { m_clockSkew.store(std::chrono::milliseconds(0L)); }
+ virtual ~AWSAuthSigner() = default;
+
+ /**
+ * Signs the request itself (usually by adding a signature header) based on info in the request and uri.
+ */
+ virtual bool SignRequest(Aws::Http::HttpRequest& request) const = 0;
+
+ /**
+ * Signs the request itself (usually by adding a signature header) based on info in the request and uri.
+ * If signBody is false and https is being used then the body of the payload will not be signed.
+ * The default virtual function, just calls SignRequest.
+ */
+ virtual bool SignRequest(Aws::Http::HttpRequest& request, bool signBody) const
+ {
+ AWS_UNREFERENCED_PARAM(signBody);
+ return SignRequest(request);
+ }
+
+ /**
+ * Signs the request itself (usually by adding a signature header) based on info in the request and uri.
+ * If signBody is false and https is being used then the body of the payload will not be signed.
+ * The default virtual function, just calls SignRequest.
+ * Using m_region by default if parameter region is nullptr.
+ */
+ virtual bool SignRequest(Aws::Http::HttpRequest& request, const char* region, bool signBody) const
+ {
+ AWS_UNREFERENCED_PARAM(signBody);
+ AWS_UNREFERENCED_PARAM(region);
+ return SignRequest(request);
+ }
+
+ /**
+ * Signs the request itself (usually by adding a signature header) based on info in the request and uri.
+ * If signBody is false and https is being used then the body of the payload will not be signed.
+ * The default virtual function, just calls SignRequest.
+ * Using m_region by default if parameter region is nullptr.
+ * Using m_serviceName by default if parameter serviceName is nullptr.
+ */
+ virtual bool SignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, bool signBody) const
+ {
+ AWS_UNREFERENCED_PARAM(signBody);
+ AWS_UNREFERENCED_PARAM(region);
+ AWS_UNREFERENCED_PARAM(serviceName);
+ return SignRequest(request);
+ }
+
+ /**
+ * Signs a single event message in an event stream.
+ * The input message buffer is copied and signed. The message's input buffer will be deallocated and a new
+ * buffer will be assigned. The new buffer encodes the original message with its headers as the payload of
+ * the new message. The signature of the original message will be added as a header to the new message.
+ *
+ * A Hex encoded signature of the previous event (or of the HTTP request headers in case of the first event)
+ * is provided as the 'priorSignature' parameter. 'priorSignature' will contain the value of the new
+ * signature after this call returns successfully.
+ *
+ * The function returns true if the message is successfully signed.
+ */
+ virtual bool SignEventMessage(Aws::Utils::Event::Message&, Aws::String& /* priorSignature */) const { return false; }
+
+ /**
+ * Takes a request and signs the URI based on the HttpMethod, URI and other info from the request.
+ * The URI can then be used in a normal HTTP call until expiration.
+ */
+ virtual bool PresignRequest(Aws::Http::HttpRequest& request, long long expirationInSeconds) const = 0;
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri and http method and region. expirationInSeconds defaults
+ * to 0 which is the default 7 days.
+ * Using m_region by default if parameter region is nullptr.
+ */
+ virtual bool PresignRequest(Aws::Http::HttpRequest& request, const char* region, long long expirationInSeconds = 0) const = 0;
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri and http method, region, and service name. expirationInSeconds defaults
+ * to 0 which is the default 7 days.
+ * Using m_region by default if parameter region is nullptr.
+ * Using m_serviceName by default if parameter serviceName is nullptr.
+ */
+ virtual bool PresignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, long long expirationInSeconds = 0) const = 0;
+
+ /**
+ * Return the signer's name
+ */
+ virtual const char* GetName() const = 0;
+
+ /**
+ * This handles detection of clock skew between clients and the server and adjusts the clock so that the next request will not
+ * fail on the timestamp check.
+ */
+ virtual void SetClockSkew(const std::chrono::milliseconds& clockSkew) { m_clockSkew = clockSkew; }
+
+ /**
+ * Gets the timestamp being used by the signer. This may include a clock skew if a clock skew has been detected.
+ */
+ virtual Aws::Utils::DateTime GetSigningTimestamp() const { return Aws::Utils::DateTime::Now() + GetClockSkewOffset(); }
+
+ protected:
+ virtual std::chrono::milliseconds GetClockSkewOffset() const { return m_clockSkew.load(); }
+
+ std::atomic<std::chrono::milliseconds> m_clockSkew;
+ };
+
+ /**
+ * AWS Auth v4 Signer implementation of the AWSAuthSigner interface. More information on AWS Auth v4 Can be found here:
+ * http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
+ */
+ class AWS_CORE_API AWSAuthV4Signer : public AWSAuthSigner
+ {
+
+ public:
+ /**
+ * Even though different payload signing polices, HTTP will force payload signing to be on.
+ */
+ enum class PayloadSigningPolicy
+ {
+ /**
+ * Sign the request based on the value returned by AmazonWebServiceRequest::SignBody()
+ */
+ RequestDependent,
+ /**
+ * Always sign the body of the request.
+ */
+ Always,
+ /**
+ * Never sign the body of the request
+ */
+ Never
+ };
+ /**
+ * credentialsProvider, source of AWS Credentials to sign requests with
+ * serviceName, canonical service name to sign with
+ * region, region string to use in signature
+ * signPayloads, if Always, the payload will have a sha256 computed on the body of the request. If this is set
+ * to Never, the sha256 will not be computed on the body. This is only useful for Amazon S3 over Https. If
+ * Https is not used then this flag will be ignored. If set to RequestDependent, compute or not is based on
+ * the value from AmazonWebServiceRequest::SignBody()
+ */
+ AWSAuthV4Signer(const std::shared_ptr<Auth::AWSCredentialsProvider>& credentialsProvider,
+ const char* serviceName, const Aws::String& region, PayloadSigningPolicy signingPolicy = PayloadSigningPolicy::RequestDependent,
+ bool urlEscapePath = true);
+
+ virtual ~AWSAuthV4Signer();
+
+ /**
+ * AWSAuthV4signer's implementation of virtual function from base class
+ * Return Auth Signer's name, here the value is specified in Aws::Auth::DEFAULT_AUTHV4_SIGNER.
+ */
+ const char* GetName() const override { return Aws::Auth::SIGV4_SIGNER; }
+
+ /**
+ * Signs the request itself based on info in the request and uri.
+ * Uses AWS Auth V4 signing method with SHA256 HMAC algorithm.
+ */
+ bool SignRequest(Aws::Http::HttpRequest& request) const override
+ {
+ return SignRequest(request, m_region.c_str(), m_serviceName.c_str(), true/*signBody*/);
+ }
+
+ /**
+ * Signs the request itself based on info in the request and uri.
+ * Uses AWS Auth V4 signing method with SHA256 HMAC algorithm. If signBody is false
+ * and https is being used then the body of the payload will not be signed.
+ */
+ bool SignRequest(Aws::Http::HttpRequest& request, bool signBody) const override
+ {
+ return SignRequest(request, m_region.c_str(), m_serviceName.c_str(), signBody);
+ }
+
+ /**
+ * Uses AWS Auth V4 signing method with SHA256 HMAC algorithm. If signBody is false
+ * and https is being used then the body of the payload will not be signed.
+ * Using m_region by default if parameter region is nullptr.
+ */
+ bool SignRequest(Aws::Http::HttpRequest& request, const char* region, bool signBody) const override
+ {
+ return SignRequest(request, region, m_serviceName.c_str(), signBody);
+ }
+
+ /**
+ * Uses AWS Auth V4 signing method with SHA256 HMAC algorithm. If signBody is false
+ * and https is being used then the body of the payload will not be signed.
+ * Using m_region by default if parameter region is nullptr.
+ */
+ bool SignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, bool signBody) const override;
+
+ /**
+ * Takes a request and signs the URI based on the HttpMethod, URI and other info from the request.
+ * the region the signer was initialized with will be used for the signature.
+ * The URI can then be used in a normal HTTP call until expiration.
+ * Uses AWS Auth V4 signing method with SHA256 HMAC algorithm.
+ * expirationInSeconds defaults to 0 which provides a URI good for 7 days.
+ */
+ bool PresignRequest(Aws::Http::HttpRequest& request, long long expirationInSeconds = 0) const override;
+
+ /**
+ * Takes a request and signs the URI based on the HttpMethod, URI and other info from the request.
+ * The URI can then be used in a normal HTTP call until expiration.
+ * Uses AWS Auth V4 signing method with SHA256 HMAC algorithm.
+ * expirationInSeconds defaults to 0 which provides a URI good for 7 days.
+ * Using m_region by default if parameter region is nullptr.
+ */
+ bool PresignRequest(Aws::Http::HttpRequest& request, const char* region, long long expirationInSeconds = 0) const override;
+
+ /**
+ * Takes a request and signs the URI based on the HttpMethod, URI and other info from the request.
+ * The URI can then be used in a normal HTTP call until expiration.
+ * Uses AWS Auth V4 signing method with SHA256 HMAC algorithm.
+ * expirationInSeconds defaults to 0 which provides a URI good for 7 days.
+ * Using m_region by default if parameter region is nullptr.
+ * Using m_serviceName by default if parameter serviceName is nullptr.
+ */
+ bool PresignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, long long expirationInSeconds = 0) const override;
+
+ Aws::String GetServiceName() const { return m_serviceName; }
+ Aws::String GetRegion() const { return m_region; }
+ Aws::String GenerateSignature(const Aws::Auth::AWSCredentials& credentials,
+ const Aws::String& stringToSign, const Aws::String& simpleDate) const;
+ bool ShouldSignHeader(const Aws::String& header) const;
+
+ protected:
+ bool m_includeSha256HashHeader;
+
+ private:
+
+ Aws::String GenerateSignature(const Aws::Auth::AWSCredentials& credentials,
+ const Aws::String& stringToSign, const Aws::String& simpleDate, const Aws::String& region,
+ const Aws::String& serviceName) const;
+
+ Aws::String GenerateSignature(const Aws::String& stringToSign, const Aws::Utils::ByteBuffer& key) const;
+ bool ServiceRequireUnsignedPayload(const Aws::String& serviceName) const;
+ Aws::String ComputePayloadHash(Aws::Http::HttpRequest&) const;
+ Aws::String GenerateStringToSign(const Aws::String& dateValue, const Aws::String& simpleDate,
+ const Aws::String& canonicalRequestHash, const Aws::String& region,
+ const Aws::String& serviceName) const;
+ Aws::Utils::ByteBuffer ComputeHash(const Aws::String& secretKey, const Aws::String& simpleDate) const;
+ Aws::Utils::ByteBuffer ComputeHash(const Aws::String& secretKey,
+ const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const;
+
+
+ std::shared_ptr<Auth::AWSCredentialsProvider> m_credentialsProvider;
+ const Aws::String m_serviceName;
+ const Aws::String m_region;
+ Aws::UniquePtr<Aws::Utils::Crypto::Sha256> m_hash;
+ Aws::UniquePtr<Aws::Utils::Crypto::Sha256HMAC> m_HMAC;
+
+ Aws::Set<Aws::String> m_unsignedHeaders;
+
+ //these next four fields are ONLY for caching purposes and do not change
+ //the logical state of the signer. They are marked mutable so the
+ //interface can remain const.
+ mutable Aws::Utils::ByteBuffer m_partialSignature;
+ mutable Aws::String m_currentDateStr;
+ mutable Aws::String m_currentSecretKey;
+ mutable Utils::Threading::ReaderWriterLock m_partialSignatureLock;
+ PayloadSigningPolicy m_payloadSigningPolicy;
+ bool m_urlEscapePath;
+ };
+
+ class AWS_CORE_API AWSAuthEventStreamV4Signer : public AWSAuthSigner
+ {
+ public:
+ AWSAuthEventStreamV4Signer(const std::shared_ptr<Auth::AWSCredentialsProvider>& credentialsProvider,
+ const char* serviceName, const Aws::String& region);
+
+ const char* GetName() const override { return Aws::Auth::EVENTSTREAM_SIGV4_SIGNER; }
+
+ bool SignEventMessage(Aws::Utils::Event::Message&, Aws::String& priorSignature) const override;
+
+ bool SignRequest(Aws::Http::HttpRequest& request) const override
+ {
+ return SignRequest(request, m_region.c_str(), m_serviceName.c_str(), true);
+ }
+
+ bool SignRequest(Aws::Http::HttpRequest& request, bool signBody) const override
+ {
+ return SignRequest(request, m_region.c_str(), m_serviceName.c_str(), signBody);
+ }
+
+ bool SignRequest(Aws::Http::HttpRequest& request, const char* region, bool signBody) const override
+ {
+ return SignRequest(request, region, m_serviceName.c_str(), signBody);
+ }
+
+ bool SignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, bool signBody) const override;
+
+ /**
+ * Do nothing
+ */
+ bool PresignRequest(Aws::Http::HttpRequest&, long long) const override { return false; }
+
+ /**
+ * Do nothing
+ */
+ bool PresignRequest(Aws::Http::HttpRequest&, const char*, long long) const override { return false; }
+
+ /**
+ * Do nothing
+ */
+ bool PresignRequest(Aws::Http::HttpRequest&, const char*, const char*, long long) const override { return false; }
+
+ bool ShouldSignHeader(const Aws::String& header) const;
+ private:
+ Utils::ByteBuffer GenerateSignature(const Aws::Auth::AWSCredentials& credentials,
+ const Aws::String& stringToSign, const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const;
+ Utils::ByteBuffer GenerateSignature(const Aws::String& stringToSign, const Aws::Utils::ByteBuffer& key) const;
+ Aws::String GenerateStringToSign(const Aws::String& dateValue, const Aws::String& simpleDate,
+ const Aws::String& canonicalRequestHash, const Aws::String& region,
+ const Aws::String& serviceName) const;
+ Aws::Utils::ByteBuffer ComputeHash(const Aws::String& secretKey, const Aws::String& simpleDate) const;
+ Aws::Utils::ByteBuffer ComputeHash(const Aws::String& secretKey,
+ const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const;
+ const Aws::String m_serviceName;
+ const Aws::String m_region;
+ mutable Aws::Utils::Crypto::Sha256 m_hash;
+ mutable Aws::Utils::Crypto::Sha256HMAC m_HMAC;
+ mutable Utils::Threading::ReaderWriterLock m_derivedKeyLock;
+ mutable Aws::Utils::ByteBuffer m_derivedKey;
+ mutable Aws::String m_currentDateStr;
+ mutable Aws::String m_currentSecretKey;
+ Aws::Vector<Aws::String> m_unsignedHeaders;
+ std::shared_ptr<Auth::AWSCredentialsProvider> m_credentialsProvider;
+ };
+
+
+ /**
+ * A no-op implementation of the AWSAuthSigner interface
+ */
+ class AWS_CORE_API AWSNullSigner : public AWSAuthSigner
+ {
+ public:
+ /**
+ * AWSNullSigner's implementation of virtual function from base class
+ * Here the returned value is specified in Aws::Auth::NULL_SIGNER.
+ */
+ const char* GetName() const override { return Aws::Auth::NULL_SIGNER; }
+
+ /**
+ * Do nothing
+ */
+ bool SignRequest(Aws::Http::HttpRequest&) const override { return true; }
+
+ /**
+ * Do nothing
+ */
+ bool SignEventMessage(Aws::Utils::Event::Message&, Aws::String& /* priorSignature */) const override { return true; }
+
+ /**
+ * Do nothing
+ */
+ bool PresignRequest(Aws::Http::HttpRequest&, long long) const override { return false; }
+
+ /**
+ * Do nothing
+ */
+ bool PresignRequest(Aws::Http::HttpRequest&, const char*, long long) const override { return false; }
+
+ /**
+ * Do nothing
+ */
+ bool PresignRequest(Aws::Http::HttpRequest&, const char*, const char*, long long) const override { return false; }
+ };
+
+ } // namespace Client
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSignerProvider.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSignerProvider.h
new file mode 100644
index 00000000000..305c58cd9d9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSignerProvider.h
@@ -0,0 +1,53 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <memory>
+
+
+namespace Aws
+{
+ namespace Client
+ {
+ class AWSAuthSigner;
+ }
+ namespace Auth
+ {
+ class AWSCredentialsProvider;
+
+ class AWS_CORE_API AWSAuthSignerProvider
+ {
+ public:
+ virtual std::shared_ptr<Aws::Client::AWSAuthSigner> GetSigner(const Aws::String& signerName) const = 0;
+ virtual void AddSigner(std::shared_ptr<Aws::Client::AWSAuthSigner>& signer) = 0;
+ virtual ~AWSAuthSignerProvider() = default;
+ };
+
+ class AWS_CORE_API DefaultAuthSignerProvider : public AWSAuthSignerProvider
+ {
+ public:
+ /**
+ * Creates a Signature-V4 signer provider that supports the different implementations of Signature-V4
+ * used for standard and event-stream requests.
+ *
+ * @param credentialsProvider A provider to retrieve the access/secret key used to derive the signing
+ * @param serviceName The canonical name of the AWS service to be used in the signature
+ * @param region The AWS region in which the requests will be made.
+ */
+ DefaultAuthSignerProvider(const std::shared_ptr<AWSCredentialsProvider>& credentialsProvider,
+ const Aws::String& serviceName, const Aws::String& region);
+ explicit DefaultAuthSignerProvider(const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer);
+ void AddSigner(std::shared_ptr<Aws::Client::AWSAuthSigner>& signer) override;
+ std::shared_ptr<Aws::Client::AWSAuthSigner> GetSigner(const Aws::String& signerName) const override;
+ private:
+ Aws::Vector<std::shared_ptr<Aws::Client::AWSAuthSigner>> m_signers;
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentials.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentials.h
new file mode 100644
index 00000000000..1c14b955fc2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentials.h
@@ -0,0 +1,176 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+ #pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+namespace Aws
+{
+ namespace Auth
+ {
+ /**
+ * Simple data object around aws credentials
+ */
+ class AWS_CORE_API AWSCredentials
+ {
+ public:
+ /**
+ * Initializes an empty credentials set.
+ * Empty credentials are not expired by default.
+ * Credentials expire only if an expiration date is explicitly set on them.
+ */
+ AWSCredentials() : m_expiration((std::chrono::time_point<std::chrono::system_clock>::max)())
+ {
+ }
+
+ /**
+ * Initializes object with accessKeyId, secretKey.
+ * SessionToken defaults to empty string.
+ * Expiration date is set to "never expire".
+ */
+ AWSCredentials(const Aws::String& accessKeyId, const Aws::String& secretKey) :
+ m_accessKeyId(accessKeyId), m_secretKey(secretKey), m_expiration((std::chrono::time_point<std::chrono::system_clock>::max)())
+ {
+ }
+
+ /**
+ * Initializes object with accessKeyId, secretKey, and sessionToken.
+ * Expiration date is set to "never expire".
+ */
+ AWSCredentials(const Aws::String& accessKeyId, const Aws::String& secretKey, const Aws::String& sessionToken) :
+ m_accessKeyId(accessKeyId), m_secretKey(secretKey), m_sessionToken(sessionToken), m_expiration((std::chrono::time_point<std::chrono::system_clock>::max)())
+ {
+ }
+
+ /**
+ * Initializes object with accessKeyId, secretKey, sessionToken and expiration date.
+ */
+ AWSCredentials(const Aws::String& accessKeyId, const Aws::String& secretKey, const Aws::String& sessionToken, Aws::Utils::DateTime expiration) :
+ m_accessKeyId(accessKeyId), m_secretKey(secretKey), m_sessionToken(sessionToken), m_expiration(expiration)
+ {
+ }
+
+ bool operator == (const AWSCredentials& other) const
+ {
+ return m_accessKeyId == other.m_accessKeyId
+ && m_secretKey == other.m_secretKey
+ && m_sessionToken == other.m_sessionToken
+ && m_expiration == other.m_expiration;
+ }
+
+ bool operator != (const AWSCredentials& other) const
+ {
+ return !(other == *this);
+ }
+
+ /**
+ * If credentials haven't been initialized or been initialized to emtpy values.
+ * Expiration date does not affect the result of this function.
+ */
+ inline bool IsEmpty() const { return m_accessKeyId.empty() && m_secretKey.empty(); }
+
+ inline bool IsExpired() const { return m_expiration <= Aws::Utils::DateTime::Now(); }
+
+ inline bool IsExpiredOrEmpty() const { return IsEmpty() || IsExpired(); }
+
+ /**
+ * Gets the underlying access key credential
+ */
+ inline const Aws::String& GetAWSAccessKeyId() const
+ {
+ return m_accessKeyId;
+ }
+
+ /**
+ * Gets the underlying secret key credential
+ */
+ inline const Aws::String& GetAWSSecretKey() const
+ {
+ return m_secretKey;
+ }
+
+ /**
+ * Gets the underlying session token
+ */
+ inline const Aws::String& GetSessionToken() const
+ {
+ return m_sessionToken;
+ }
+
+ /**
+ * Gets the expiration date of the credential
+ */
+ inline Aws::Utils::DateTime GetExpiration() const
+ {
+ return m_expiration;
+ }
+
+ /**
+ * Sets the underlying access key credential. Copies from parameter accessKeyId.
+ */
+ inline void SetAWSAccessKeyId(const Aws::String& accessKeyId)
+ {
+ m_accessKeyId = accessKeyId;
+ }
+
+ /**
+ * Sets the underlying secret key credential. Copies from parameter secretKey
+ */
+ inline void SetAWSSecretKey(const Aws::String& secretKey)
+ {
+ m_secretKey = secretKey;
+ }
+
+ /**
+ * Sets the underlying session token. Copies from parameter sessionToken
+ */
+ inline void SetSessionToken(const Aws::String& sessionToken)
+ {
+ m_sessionToken = sessionToken;
+ }
+
+
+ /**
+ * Sets the underlying access key credential. Copies from parameter accessKeyId.
+ */
+ inline void SetAWSAccessKeyId(const char* accessKeyId)
+ {
+ m_accessKeyId = accessKeyId;
+ }
+
+ /**
+ * Sets the underlying secret key credential. Copies from parameter secretKey
+ */
+ inline void SetAWSSecretKey(const char* secretKey)
+ {
+ m_secretKey = secretKey;
+ }
+
+ /**
+ * Sets the underlying secret key credential. Copies from parameter secretKey
+ */
+ inline void SetSessionToken(const char* sessionToken)
+ {
+ m_sessionToken = sessionToken;
+ }
+
+ /**
+ * Sets the expiration date of the credential
+ */
+ inline void SetExpiration(Aws::Utils::DateTime expiration)
+ {
+ m_expiration = expiration;
+ }
+
+ private:
+ Aws::String m_accessKeyId;
+ Aws::String m_secretKey;
+ Aws::String m_sessionToken;
+ Aws::Utils::DateTime m_expiration;
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProvider.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProvider.h
new file mode 100644
index 00000000000..a3a46964e8e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProvider.h
@@ -0,0 +1,316 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/UnreferencedParam.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/threading/ReaderWriterLock.h>
+#include <aws/core/internal/AWSHttpResourceClient.h>
+#include <aws/core/auth/AWSCredentials.h>
+#include <aws/core/config/AWSProfileConfigLoader.h>
+#include <aws/core/client/RetryStrategy.h>
+#include <memory>
+
+namespace Aws
+{
+ namespace Auth
+ {
+ constexpr int REFRESH_THRESHOLD = 1000 * 60 * 5;
+
+ /**
+ * Returns the full path of the config file.
+ */
+ AWS_CORE_API Aws::String GetConfigProfileFilename(); //defaults to "config"
+
+ /**
+ * Returns the default profile name.
+ * The value is the first non-empty value of the following:
+ * 1. AWS_PROFILE environment variable
+ * 2. AWS_DEFAULT_PROFILE environment variable
+ * 3. The literal name "default"
+ */
+ AWS_CORE_API Aws::String GetConfigProfileName(); //defaults to "default"
+
+ /*
+ * Fetches credentials by executing the process in the parameter
+ */
+ AWS_CORE_API AWSCredentials GetCredentialsFromProcess(const Aws::String& process);
+
+ /**
+ * Abstract class for retrieving AWS credentials. Create a derived class from this to allow
+ * various methods of storing and retrieving credentials. Examples would be cognito-identity, some encrypted store etc...
+ */
+ class AWS_CORE_API AWSCredentialsProvider
+ {
+ public:
+ /**
+ * Initializes provider. Sets last Loaded time count to 0, forcing a refresh on the
+ * first call to GetAWSCredentials.
+ */
+ AWSCredentialsProvider() : m_lastLoadedMs(0)
+ {
+ }
+
+ virtual ~AWSCredentialsProvider() = default;
+
+ /**
+ * The core of the credential provider interface. Override this method to control how credentials are retrieved.
+ */
+ virtual AWSCredentials GetAWSCredentials() = 0;
+
+ protected:
+ /**
+ * The default implementation keeps up with the cache times and lets you know if it's time to refresh your internal caching
+ * to aid your implementation of GetAWSCredentials.
+ */
+ virtual bool IsTimeToRefresh(long reloadFrequency);
+ virtual void Reload();
+ mutable Aws::Utils::Threading::ReaderWriterLock m_reloadLock;
+ private:
+ long long m_lastLoadedMs;
+ };
+
+ /**
+ * Simply a provider that always returns empty credentials. This is useful for a client that needs to make unsigned
+ * calls.
+ */
+ class AWS_CORE_API AnonymousAWSCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+ /**
+ * Returns empty credentials object.
+ */
+ inline AWSCredentials GetAWSCredentials() override { return AWSCredentials(); }
+ };
+
+ /**
+ * A simple string provider. It takes the AccessKeyId and the SecretKey as constructor args and
+ * provides them through the interface. This is the default class for AWSClients that take string
+ * arguments for credentials.
+ */
+ class AWS_CORE_API SimpleAWSCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+ /**
+ * Initializes object from awsAccessKeyId, awsSecretAccessKey, and sessionToken parameters. sessionToken parameter is defaulted to empty.
+ */
+ inline SimpleAWSCredentialsProvider(const Aws::String& awsAccessKeyId, const Aws::String& awsSecretAccessKey, const Aws::String& sessionToken = "")
+ : m_credentials(awsAccessKeyId, awsSecretAccessKey, sessionToken)
+ { }
+
+ /**
+ * Initializes object from credentials object. everything is copied.
+ */
+ inline SimpleAWSCredentialsProvider(const AWSCredentials& credentials)
+ : m_credentials(credentials)
+ { }
+
+ /**
+ * Returns the credentials this object was initialized with as an AWSCredentials object.
+ */
+ inline AWSCredentials GetAWSCredentials() override
+ {
+ return m_credentials;
+ }
+
+ private:
+ AWSCredentials m_credentials;
+ };
+
+ /**
+ * Reads AWS credentials from the Environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN if they exist. If they
+ * are not found, empty credentials are returned.
+ */
+ class AWS_CORE_API EnvironmentAWSCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+ /**
+ * Reads AWS credentials from the Environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN if they exist. If they
+ * are not found, empty credentials are returned. Credentials are not cached.
+ */
+ AWSCredentials GetAWSCredentials() override;
+ };
+
+ /**
+ * Reads credentials profile from the default Profile Config File. Refreshes at set interval for credential rotation.
+ * Looks for environment variables AWS_SHARED_CREDENTIALS_FILE and AWS_PROFILE. If they aren't found, then it defaults
+ * to the default profile in ~/.aws/credentials.
+ * Optionally a user can specify the profile and it will override the environment variable
+ * and defaults. To alter the file this pulls from, then the user should alter the AWS_SHARED_CREDENTIALS_FILE variable.
+ */
+ class AWS_CORE_API ProfileConfigFileAWSCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+
+ /**
+ * Initializes with refreshRateMs as the frequency at which the file is reparsed in milliseconds. Defaults to 5 minutes.
+ */
+ ProfileConfigFileAWSCredentialsProvider(long refreshRateMs = REFRESH_THRESHOLD);
+
+ /**
+ * Initializes with a profile override and
+ * refreshRateMs as the frequency at which the file is reparsed in milliseconds. Defaults to 5 minutes.
+ */
+ ProfileConfigFileAWSCredentialsProvider(const char* profile, long refreshRateMs = REFRESH_THRESHOLD);
+
+ /**
+ * Retrieves the credentials if found, otherwise returns empty credential set.
+ */
+ AWSCredentials GetAWSCredentials() override;
+
+ /**
+ * Returns the fullpath of the calculated credentials profile file
+ */
+ static Aws::String GetCredentialsProfileFilename();
+
+ /**
+ * Returns the directory storing the profile file.
+ */
+ static Aws::String GetProfileDirectory();
+
+ protected:
+ void Reload() override;
+ private:
+
+ /**
+ * Checks to see if the refresh interval has expired and reparses the file if it has.
+ */
+ void RefreshIfExpired();
+
+ Aws::String m_profileToUse;
+ Aws::Config::AWSConfigFileProfileConfigLoader m_credentialsFileLoader;
+ long m_loadFrequencyMs;
+ };
+
+ /**
+ * Credentials provider implementation that loads credentials from the Amazon
+ * EC2 Instance Metadata Service.
+ */
+ class AWS_CORE_API InstanceProfileCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+ /**
+ * Initializes the provider to refresh credentials form the EC2 instance metadata service every 5 minutes.
+ * Constructs an EC2MetadataClient using the default http stack (most likely what you want).
+ */
+ InstanceProfileCredentialsProvider(long refreshRateMs = REFRESH_THRESHOLD);
+
+ /**
+ * Initializes the provider to refresh credentials form the EC2 instance metadata service every 5 minutes,
+ * uses a supplied EC2MetadataClient.
+ */
+ InstanceProfileCredentialsProvider(const std::shared_ptr<Aws::Config::EC2InstanceProfileConfigLoader>&, long refreshRateMs = REFRESH_THRESHOLD);
+
+ /**
+ * Retrieves the credentials if found, otherwise returns empty credential set.
+ */
+ AWSCredentials GetAWSCredentials() override;
+
+ protected:
+ void Reload() override;
+
+ private:
+ void RefreshIfExpired();
+
+ std::shared_ptr<Aws::Config::AWSProfileConfigLoader> m_ec2MetadataConfigLoader;
+ long m_loadFrequencyMs;
+ };
+
+ /**
+ * ECS credentials provider implementation that loads credentials from the Amazon
+ * ECS metadata service or an arbitrary endpoint.
+ */
+ class AWS_CORE_API TaskRoleCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+ /**
+ * Initializes the provider to retrieve credentials from the ECS metadata service every 5 minutes,
+ * or before it expires.
+ * @param resourcePath A path appended to the metadata service endpoint.
+ * @param refreshRateMs The number of milliseconds after which the credentials will be fetched again.
+ */
+ TaskRoleCredentialsProvider(const char* resourcePath, long refreshRateMs = REFRESH_THRESHOLD);
+
+ /**
+ * Initializes the provider to retrieve credentials from a provided endpoint every 5 minutes or before it
+ * expires.
+ * @param endpoint The full URI to resolve to get credentials.
+ * @param token An optional authorization token passed to the URI via the 'Authorization' HTTP header.
+ * @param refreshRateMs The number of milliseconds after which the credentials will be fetched again.
+ */
+ TaskRoleCredentialsProvider(const char* endpoint, const char* token, long refreshRateMs = REFRESH_THRESHOLD);
+
+ /**
+ * Initializes the provider to retrieve credentials using the provided client.
+ * @param client The ECSCredentialsClient instance to use when retrieving credentials.
+ * @param refreshRateMs The number of milliseconds after which the credentials will be fetched again.
+ */
+ TaskRoleCredentialsProvider(const std::shared_ptr<Aws::Internal::ECSCredentialsClient>& client,
+ long refreshRateMs = REFRESH_THRESHOLD);
+ /**
+ * Retrieves the credentials if found, otherwise returns empty credential set.
+ */
+ AWSCredentials GetAWSCredentials() override;
+
+ protected:
+ void Reload() override;
+ private:
+ bool ExpiresSoon() const;
+ void RefreshIfExpired();
+
+ private:
+ std::shared_ptr<Aws::Internal::ECSCredentialsClient> m_ecsCredentialsClient;
+ long m_loadFrequencyMs;
+ Aws::Auth::AWSCredentials m_credentials;
+ };
+
+ /**
+ * Process credentials provider that loads credentials by running another command (or program) configured in config file
+ * The configuration format is as following:
+ * credential_process = command_path <arguments_list>
+ * Each time the credentials needs to be refreshed, this command will be executed with configured arguments.
+ * The default profile name to look up this configuration is "default", same as normal aws credentials configuration and other configurations.
+ * The expected valid output of the command is a Json doc output to stdout:
+ * {"Version": 1, "AccessKeyId": "AccessKey123", "SecretAccessKey": "SecretKey321", "SessionToken": "Token123", "Expiration": "1970-01-01T00:00:01Z"}
+ * The Version key specifies the version of the JSON payload and must be set to 1 for now (as an integer type).
+ * If the Version key is bumped to 2, SDKs would support both versions of the returned payload.
+ * Value of Expiration field should be an valid ISO8601 formatted date string as above example.
+ * The expected error message of the command is a string to output to stderr.
+ */
+ class AWS_CORE_API ProcessCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+ /**
+ * Initializes the provider by checking default profile
+ */
+ ProcessCredentialsProvider();
+
+ /**
+ * Initializes the provider by checking specified profile
+ * @param profile which profile in config file to use.
+ */
+ ProcessCredentialsProvider(const Aws::String& profile);
+
+ /**
+ * Retrieves the credentials if found, otherwise returns empty credential set.
+ */
+ AWSCredentials GetAWSCredentials() override;
+
+ protected:
+ void Reload() override;
+ private:
+ void RefreshIfExpired();
+
+ private:
+ Aws::String m_profileToUse;
+ Aws::Auth::AWSCredentials m_credentials;
+ };
+ } // namespace Auth
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProviderChain.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProviderChain.h
new file mode 100644
index 00000000000..dae8cf5a426
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/AWSCredentialsProviderChain.h
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/auth/AWSCredentialsProvider.h>
+#include <memory>
+
+namespace Aws
+{
+ namespace Auth
+ {
+ /**
+ * Abstract class for providing chains of credentials providers. When a credentials provider in the chain returns empty credentials,
+ * We go on to the next provider until we have either exhausted the installed providers in the chain or something returns non-empty credentials.
+ */
+ class AWS_CORE_API AWSCredentialsProviderChain : public AWSCredentialsProvider
+ {
+ public:
+ virtual ~AWSCredentialsProviderChain() = default;
+
+ /**
+ * When a credentials provider in the chain returns empty credentials,
+ * We go on to the next provider until we have either exhausted the installed providers in the chain or something returns non-empty credentials.
+ */
+ virtual AWSCredentials GetAWSCredentials();
+
+ /**
+ * Gets all providers stored in this chain.
+ */
+ const Aws::Vector<std::shared_ptr<AWSCredentialsProvider>>& GetProviders() { return m_providerChain; }
+
+ protected:
+ /**
+ * This class is only allowed to be initialized by subclasses.
+ */
+ AWSCredentialsProviderChain() = default;
+
+ /**
+ * Adds a provider to the back of the chain.
+ */
+ void AddProvider(const std::shared_ptr<AWSCredentialsProvider>& provider) { m_providerChain.push_back(provider); }
+
+
+ private:
+ Aws::Vector<std::shared_ptr<AWSCredentialsProvider> > m_providerChain;
+ };
+
+ /**
+ * Creates an AWSCredentialsProviderChain which uses in order EnvironmentAWSCredentialsProvider, ProfileConfigFileAWSCredentialsProvider,
+ * and InstanceProfileCredentialsProvider.
+ */
+ class AWS_CORE_API DefaultAWSCredentialsProviderChain : public AWSCredentialsProviderChain
+ {
+ public:
+ /**
+ * Initializes the provider chain with EnvironmentAWSCredentialsProvider, ProfileConfigFileAWSCredentialsProvider,
+ * and InstanceProfileCredentialsProvider in that order.
+ */
+ DefaultAWSCredentialsProviderChain();
+ };
+
+ } // namespace Auth
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/STSCredentialsProvider.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/STSCredentialsProvider.h
new file mode 100644
index 00000000000..92d997c7ca5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/auth/STSCredentialsProvider.h
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/internal/AWSHttpResourceClient.h>
+#include <aws/core/auth/AWSCredentialsProvider.h>
+#include <memory>
+
+namespace Aws
+{
+ namespace Auth
+ {
+ /**
+ * To support retrieving credentials of STS AssumeRole with web identity.
+ * Note that STS accepts request with protocol of queryxml. Calling GetAWSCredentials() will trigger (if expired)
+ * a query request using AWSHttpResourceClient under the hood.
+ */
+ class AWS_CORE_API STSAssumeRoleWebIdentityCredentialsProvider : public AWSCredentialsProvider
+ {
+ public:
+ STSAssumeRoleWebIdentityCredentialsProvider();
+
+ /**
+ * Retrieves the credentials if found, otherwise returns empty credential set.
+ */
+ AWSCredentials GetAWSCredentials() override;
+
+ protected:
+ void Reload() override;
+
+ private:
+ void RefreshIfExpired();
+ Aws::String CalculateQueryString() const;
+
+ Aws::UniquePtr<Aws::Internal::STSCredentialsClient> m_client;
+ Aws::Auth::AWSCredentials m_credentials;
+ Aws::String m_roleArn;
+ Aws::String m_tokenFile;
+ Aws::String m_sessionName;
+ Aws::String m_token;
+ bool m_initialized;
+ };
+ } // namespace Auth
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSClient.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSClient.h
new file mode 100644
index 00000000000..186206a66ef
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSClient.h
@@ -0,0 +1,463 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/crypto/Hash.h>
+#include <aws/core/auth/AWSAuthSignerProvider.h>
+#include <memory>
+#include <atomic>
+
+struct aws_array_list;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ template<typename R, typename E>
+ class Outcome;
+
+ namespace Xml
+ {
+ class XmlDocument;
+ } // namespace Xml
+
+ namespace Json
+ {
+ class JsonValue;
+ } // namespace Json
+
+ namespace RateLimits
+ {
+ class RateLimiterInterface;
+ } // namespace RateLimits
+
+ namespace Crypto
+ {
+ class MD5;
+ } // namespace Crypto
+ } // namespace Utils
+
+ namespace Http
+ {
+ class HttpClient;
+
+ class HttpClientFactory;
+
+ class HttpRequest;
+
+ class HttpResponse;
+
+ class URI;
+ } // namespace Http
+
+ namespace Auth
+ {
+ AWS_CORE_API extern const char SIGV4_SIGNER[];
+ AWS_CORE_API extern const char NULL_SIGNER[];
+ }
+
+ class AmazonWebServiceRequest;
+
+ namespace Client
+ {
+ template<typename ERROR_TYPE>
+ class AWSError;
+ class AWSErrorMarshaller;
+ class AWSRestfulJsonErrorMarshaller;
+ class AWSAuthSigner;
+ struct ClientConfiguration;
+ class RetryStrategy;
+
+ typedef Utils::Outcome<std::shared_ptr<Aws::Http::HttpResponse>, AWSError<CoreErrors>> HttpResponseOutcome;
+ typedef Utils::Outcome<AmazonWebServiceResult<Utils::Stream::ResponseStream>, AWSError<CoreErrors>> StreamOutcome;
+
+ /**
+ * Abstract AWS Client. Contains most of the functionality necessary to build an http request, get it signed, and send it accross the wire.
+ */
+ class AWS_CORE_API AWSClient
+ {
+ public:
+ /**
+ * configuration will be used for http client settings, retry strategy, throttles, and signing information.
+ * supplied signer will be used for all requests, aws sdk clients will use default AuthV4Signer.
+ * errorMarshaller tells the client how to convert error payloads into AWSError objects.
+ */
+ AWSClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
+
+ /**
+ * Configuration will be used for http client settings, retry strategy, throttles, and signing information.
+ * Pass a signer provider to determine the proper signer for a given request; AWS services will use
+ * SigV4 signer. errorMarshaller tells the client how to convert error payloads into AWSError objects.
+ */
+ AWSClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
+
+ virtual ~AWSClient() { };
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri and http method. expirationInSeconds defaults
+ * to 0 which is the default 7 days. The implication of this function is using auth signer v4 to sign it.
+ */
+ Aws::String GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, long long expirationInSeconds = 0);
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri, http method and customized headers. expirationInSeconds defaults
+ * to 0 which is the default 7 days. The implication of this function is using auth signer v4 to sign it.
+ */
+ Aws::String GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0);
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri and http method and region. expirationInSeconds defaults
+ * to 0 which is the default 7 days.
+ */
+ Aws::String GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, long long expirationInSeconds = 0) const;
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri, http method and customized headers. expirationInSeconds defaults
+ * to 0 which is the default 7 days.
+ */
+ Aws::String GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0);
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri and http method, region, and service name. expirationInSeconds defaults
+ * to 0 which is the default 7 days.
+ */
+ Aws::String GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, long long expirationInSeconds = 0) const;
+
+ /**
+ * Generates a signed Uri using the injected signer. for the supplied uri, http method and customized headers. expirationInSeconds defaults
+ * to 0 which is the default 7 days.
+ */
+ Aws::String GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0);
+
+ Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri, Aws::Http::HttpMethod method,
+ const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0) const;
+
+ Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName,
+ const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0) const;
+
+ Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region,
+ const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0) const;
+
+ /**
+ * Stop all requests immediately.
+ * In flight requests will likely fail.
+ */
+ void DisableRequestProcessing();
+
+ /**
+ * Enable/ReEnable requests.
+ */
+ void EnableRequestProcessing();
+
+ inline virtual const char* GetServiceClientName() const { return m_serviceName.c_str(); }
+ /**
+ * service client name is part of userAgent.
+ * We need to update userAgent after setting this name if it's not pre-set by customer.
+ * Note: this API should only be called in your extended class constructors.
+ */
+ virtual void SetServiceClientName(const Aws::String& name);
+
+ protected:
+ /**
+ * Calls AttemptOneRequest until it either, succeeds, runs out of retries from the retry strategy,
+ * or encounters and error that is not retryable.
+ */
+ HttpResponseOutcome AttemptExhaustively(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod httpMethod,
+ const char* signerName,
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * Calls AttemptOneRequest until it either, succeeds, runs out of retries from the retry strategy,
+ * or encounters and error that is not retryable. This method is for payloadless requests e.g. GET, DELETE, HEAD
+ *
+ * requestName is used for metrics and defaults to empty string, to avoid empty names in metrics provide a valid
+ * name.
+ */
+ HttpResponseOutcome AttemptExhaustively(const Aws::Http::URI& uri,
+ Http::HttpMethod httpMethod,
+ const char* signerName,
+ const char* requestName = "",
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * Build an Http Request from the AmazonWebServiceRequest object. Signs the request, sends it accross the wire
+ * then reports the http response.
+ */
+ HttpResponseOutcome AttemptOneRequest(const std::shared_ptr<Http::HttpRequest>& httpRequest,
+ const Aws::AmazonWebServiceRequest& request,
+ const char* signerName,
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * Signs an Http Request, sends it accross the wire
+ * then reports the http response. This method is for payloadless requests e.g. GET, DELETE, HEAD
+ *
+ * requestName is used for metrics and defaults to empty string, to avoid empty names in metrics provide a valid
+ * name.
+ */
+ HttpResponseOutcome AttemptOneRequest(const std::shared_ptr<Http::HttpRequest>& httpRequest,
+ const char* signerName,
+ const char* requestName = "",
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * This is used for structureless response payloads (file streams, binary data etc...). It calls AttemptExhaustively, but upon
+ * return transfers ownership of the underlying stream for the http response to the caller.
+ */
+ StreamOutcome MakeRequestWithUnparsedResponse(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* signerName = Aws::Auth::SIGV4_SIGNER,
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * This is used for structureless response payloads (file streams, binary data etc...). It calls AttemptExhaustively, but upon
+ * return transfers ownership of the underlying stream for the http response to the caller.
+ *
+ * requestName is used for metrics and defaults to empty string, to avoid empty names in metrics provide a valid
+ * name.
+ */
+ StreamOutcome MakeRequestWithUnparsedResponse(const Aws::Http::URI& uri,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* signerName = Aws::Auth::SIGV4_SIGNER,
+ const char* requestName = "",
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * Abstract. Subclassing clients should override this to tell the client how to marshall error payloads
+ */
+ virtual AWSError<CoreErrors> BuildAWSError(const std::shared_ptr<Aws::Http::HttpResponse>& response) const = 0;
+
+ /**
+ * Transforms the AmazonWebServicesResult object into an HttpRequest.
+ */
+ virtual void BuildHttpRequest(const Aws::AmazonWebServiceRequest& request,
+ const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest) const;
+
+ /**
+ * Gets the underlying ErrorMarshaller for subclasses to use.
+ */
+ const std::shared_ptr<AWSErrorMarshaller>& GetErrorMarshaller() const
+ {
+ return m_errorMarshaller;
+ }
+
+ /**
+ * Gets the corresponding signer from the signers map by name.
+ */
+ Aws::Client::AWSAuthSigner* GetSignerByName(const char* name) const;
+ protected:
+
+ /**
+ * Creates an HttpRequest instance with the given URI and sets the proper headers from the
+ * AmazonWebRequest, and finally signs that request with the given the signer.
+ * The similar member function BuildHttpRequest() does not sign the request.
+ * This member function is used internally only by clients that perform requests (input operations) using
+ * event-streams.
+ */
+ std::shared_ptr<Aws::Http::HttpRequest> BuildAndSignHttpRequest(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method, const char* signerName) const;
+
+ /**
+ * Performs the HTTP request via the HTTP client while enforcing rate limiters
+ */
+ std::shared_ptr<Aws::Http::HttpResponse> MakeHttpRequest(std::shared_ptr<Aws::Http::HttpRequest>& request) const;
+ Aws::String m_region;
+ private:
+ /**
+ * Try to adjust signer's clock
+ * return true if signer's clock is adjusted, false otherwise.
+ */
+ bool AdjustClockSkew(HttpResponseOutcome& outcome, const char* signerName) const;
+ void AddHeadersToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest, const Http::HeaderValueCollection& headerValues) const;
+ void AddContentBodyToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest, const std::shared_ptr<Aws::IOStream>& body,
+ bool needsContentMd5 = false, bool isChunked = false) const;
+ void AddCommonHeaders(Aws::Http::HttpRequest& httpRequest) const;
+ void InitializeGlobalStatics();
+ std::shared_ptr<Aws::Http::HttpRequest> ConvertToRequestForPresigning(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri,
+ Aws::Http::HttpMethod method, const Aws::Http::QueryStringParameterCollection& extraParams) const;
+
+ std::shared_ptr<Aws::Http::HttpClient> m_httpClient;
+ std::shared_ptr<Aws::Auth::AWSAuthSignerProvider> m_signerProvider;
+ std::shared_ptr<AWSErrorMarshaller> m_errorMarshaller;
+ std::shared_ptr<RetryStrategy> m_retryStrategy;
+ std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_writeRateLimiter;
+ std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_readRateLimiter;
+ Aws::String m_userAgent;
+ bool m_customizedUserAgent;
+ std::shared_ptr<Aws::Utils::Crypto::Hash> m_hash;
+ long m_requestTimeoutMs;
+ bool m_enableClockSkewAdjustment;
+ Aws::String m_serviceName;
+ };
+
+ typedef Utils::Outcome<AmazonWebServiceResult<Utils::Json::JsonValue>, AWSError<CoreErrors>> JsonOutcome;
+ AWS_CORE_API Aws::String GetAuthorizationHeader(const Aws::Http::HttpRequest& httpRequest);
+
+ /**
+ * AWSClient that handles marshalling json response bodies. You would inherit from this class
+ * to create a client that uses Json as its payload format.
+ */
+ class AWS_CORE_API AWSJsonClient : public AWSClient
+ {
+ public:
+ typedef AWSClient BASECLASS;
+
+ /**
+ * Simply calls AWSClient constructor.
+ */
+ AWSJsonClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
+
+ /**
+ * Simply calls AWSClient constructor.
+ */
+ AWSJsonClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
+
+ virtual ~AWSJsonClient() = default;
+
+ protected:
+ /**
+ * Converts/Parses an http response into a meaningful AWSError object using the json message structure.
+ */
+ virtual AWSError<CoreErrors> BuildAWSError(const std::shared_ptr<Aws::Http::HttpResponse>& response) const override;
+
+ /**
+ * Returns a Json document or an error from the request. Does some marshalling json and raw streams,
+ * then just calls AttemptExhaustively.
+ *
+ * method defaults to POST
+ */
+ JsonOutcome MakeRequest(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* signerName = Aws::Auth::SIGV4_SIGNER,
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * Returns a Json document or an error from the request. Does some marshalling json and raw streams,
+ * then just calls AttemptExhaustively.
+ *
+ * requestName is used for metrics and defaults to empty string, to avoid empty names in metrics provide a valid
+ * name.
+ *
+ * method defaults to POST
+ */
+ JsonOutcome MakeRequest(const Aws::Http::URI& uri,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* signerName = Aws::Auth::SIGV4_SIGNER,
+ const char* requestName = "",
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ JsonOutcome MakeEventStreamRequest(std::shared_ptr<Aws::Http::HttpRequest>& request) const;
+ };
+
+ typedef Utils::Outcome<AmazonWebServiceResult<Utils::Xml::XmlDocument>, AWSError<CoreErrors>> XmlOutcome;
+
+ /**
+ * AWSClient that handles marshalling xml response bodies. You would inherit from this class
+ * to create a client that uses Xml as its payload format.
+ */
+ class AWS_CORE_API AWSXMLClient : public AWSClient
+ {
+ public:
+
+ typedef AWSClient BASECLASS;
+
+ AWSXMLClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
+
+ AWSXMLClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
+
+ virtual ~AWSXMLClient() = default;
+
+ protected:
+ /**
+ * Converts/Parses an http response into a meaningful AWSError object. Using the XML message structure.
+ */
+ virtual AWSError<CoreErrors> BuildAWSError(const std::shared_ptr<Aws::Http::HttpResponse>& response) const override;
+
+ /**
+ * Returns an xml document or an error from the request. Does some marshalling xml and raw streams,
+ * then just calls AttemptExhaustively.
+ *
+ * method defaults to POST
+ */
+ XmlOutcome MakeRequest(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* signerName = Aws::Auth::SIGV4_SIGNER,
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+
+ /**
+ * Returns an xml document or an error from the request. Does some marshalling xml and raw streams,
+ * then just calls AttemptExhaustively.
+ *
+ * requestName is used for metrics and defaults to empty string, to avoid empty names in metrics provide a valid
+ * name.
+ *
+ * method defaults to POST
+ */
+ XmlOutcome MakeRequest(const Aws::Http::URI& uri,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* signerName = Aws::Auth::SIGV4_SIGNER,
+ const char* requestName = "",
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * This is used for event stream response.
+ */
+ XmlOutcome MakeRequestWithEventStream(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* singerName = Aws::Auth::SIGV4_SIGNER,
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+
+ /**
+ * This is used for event stream response.
+ * requestName is used for metrics and defaults to empty string, to avoid empty names in metrics provide a valid
+ * name.
+ */
+ XmlOutcome MakeRequestWithEventStream(const Aws::Http::URI& uri,
+ Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
+ const char* signerName = Aws::Auth::SIGV4_SIGNER,
+ const char* requestName = "",
+ const char* signerRegionOverride = nullptr,
+ const char* signerServiceNameOverride = nullptr) const;
+ };
+
+ } // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSError.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSError.h
new file mode 100644
index 00000000000..c88c1bdd5d5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSError.h
@@ -0,0 +1,220 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/http/HttpResponse.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/json/JsonSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+
+namespace Aws
+{
+ namespace Client
+ {
+ enum class CoreErrors;
+ class XmlErrorMarshaller;
+ class JsonErrorMarshaller;
+
+ enum class ErrorPayloadType
+ {
+ NOT_SET,
+ XML,
+ JSON
+ };
+
+ /**
+ * Container for Error enumerations with additional exception information. Name, message, retryable etc....
+ */
+ template<typename ERROR_TYPE>
+ class AWSError
+ {
+ // Allow ErrorMarshaller to set error payload.
+ friend class XmlErrorMarshaller;
+ friend class JsonErrorMarshaller;
+ template<typename T> friend class AWSError;
+ public:
+ /**
+ * Initializes AWSError object as empty with the error not being retryable.
+ */
+ AWSError() : m_responseCode(Aws::Http::HttpResponseCode::REQUEST_NOT_MADE), m_isRetryable(false) {}
+ /**
+ * Initializes AWSError object with errorType, exceptionName, message, and retryable flag.
+ */
+ AWSError(ERROR_TYPE errorType, Aws::String exceptionName, const Aws::String message, bool isRetryable) :
+ m_errorType(errorType), m_exceptionName(exceptionName), m_message(message),
+ m_responseCode(Aws::Http::HttpResponseCode::REQUEST_NOT_MADE), m_isRetryable(isRetryable),
+ m_errorPayloadType(ErrorPayloadType::NOT_SET) {}
+ /**
+ * Initializes AWSError object with errorType and retryable flag. ExceptionName and message are empty.
+ */
+ AWSError(ERROR_TYPE errorType, bool isRetryable) :
+ m_errorType(errorType), m_responseCode(Aws::Http::HttpResponseCode::REQUEST_NOT_MADE),
+ m_isRetryable(isRetryable), m_errorPayloadType(ErrorPayloadType::NOT_SET) {}
+
+ AWSError(AWSError&& rhs) = default;
+ AWSError(const AWSError& rhs) = default;
+
+ template<typename OTHER_ERROR_TYPE>
+ AWSError(AWSError<OTHER_ERROR_TYPE>&& rhs) :
+ m_errorType(static_cast<ERROR_TYPE>(rhs.m_errorType)), m_exceptionName(std::move(rhs.m_exceptionName)),
+ m_message(std::move(rhs.m_message)), m_remoteHostIpAddress(std::move(rhs.m_remoteHostIpAddress)),
+ m_requestId(std::move(rhs.m_requestId)), m_responseHeaders(std::move(rhs.m_responseHeaders)),
+ m_responseCode(rhs.m_responseCode), m_isRetryable(rhs.m_isRetryable), m_errorPayloadType(rhs.m_errorPayloadType),
+ m_xmlPayload(std::move(rhs.m_xmlPayload)), m_jsonPayload(std::move(rhs.m_jsonPayload))
+ {}
+
+ template<typename OTHER_ERROR_TYPE>
+ AWSError(const AWSError<OTHER_ERROR_TYPE>& rhs) :
+ m_errorType(static_cast<ERROR_TYPE>(rhs.m_errorType)), m_exceptionName(rhs.m_exceptionName),
+ m_message(rhs.m_message), m_remoteHostIpAddress(rhs.m_remoteHostIpAddress), m_requestId(rhs.m_requestId),
+ m_responseHeaders(rhs.m_responseHeaders), m_responseCode(rhs.m_responseCode),
+ m_isRetryable(rhs.m_isRetryable), m_errorPayloadType(rhs.m_errorPayloadType),
+ m_xmlPayload(rhs.m_xmlPayload), m_jsonPayload(rhs.m_jsonPayload)
+ {}
+
+ /**
+ * Copy assignment operator
+ */
+ AWSError& operator=(const AWSError<ERROR_TYPE>&) = default;
+
+ /**
+ * Move assignment operator
+ */
+ AWSError& operator=(AWSError<ERROR_TYPE>&& other) = default;
+
+ /**
+ * Gets underlying errorType.
+ */
+ inline const ERROR_TYPE GetErrorType() const { return m_errorType; }
+ /**
+ * Gets the underlying ExceptionName.
+ */
+ inline const Aws::String& GetExceptionName() const { return m_exceptionName; }
+ /**
+ *Sets the underlying ExceptionName.
+ */
+ inline void SetExceptionName(const Aws::String& exceptionName) { m_exceptionName = exceptionName; }
+ /**
+ * Gets the error message.
+ */
+ inline const Aws::String& GetMessage() const { return m_message; }
+ /**
+ * Sets the error message
+ */
+ inline void SetMessage(const Aws::String& message) { m_message = message; }
+ /**
+ * Gets the resolved remote host IP address.
+ * This value is only available after DNS resolution and with CURL http client right now.
+ * Otherwise an empty string is returned.
+ */
+ inline const Aws::String& GetRemoteHostIpAddress() const { return m_remoteHostIpAddress; }
+ /**
+ * Sets the resolved remote host IP address.
+ */
+ inline void SetRemoteHostIpAddress(const Aws::String& remoteHostIpAddress) { m_remoteHostIpAddress = remoteHostIpAddress; }
+ /**
+ * Gets the request ID.
+ * This value is available after request is made and when services return it in response.
+ * Otherwise an empty string is returned.
+ */
+ inline const Aws::String& GetRequestId() const { return m_requestId; }
+ /**
+ * Sets the request ID.
+ */
+ inline void SetRequestId(const Aws::String& requestId) { m_requestId = requestId; }
+ /**
+ * Returns whether or not this error is eligible for retry.
+ */
+ inline bool ShouldRetry() const { return m_isRetryable; }
+ /**
+ * Gets the response headers from the http response.
+ */
+ inline const Aws::Http::HeaderValueCollection& GetResponseHeaders() const { return m_responseHeaders; }
+ /**
+ * Sets the response headers from the http response.
+ */
+ inline void SetResponseHeaders(const Aws::Http::HeaderValueCollection& headers) { m_responseHeaders = headers; }
+ /**
+ * Tests whether or not a header exists.
+ */
+ inline bool ResponseHeaderExists(const Aws::String& headerName) const { return m_responseHeaders.find(Aws::Utils::StringUtils::ToLower(headerName.c_str())) != m_responseHeaders.end(); }
+ /**
+ * Gets the response code from the http response
+ */
+ inline Aws::Http::HttpResponseCode GetResponseCode() const { return m_responseCode; }
+ /**
+ * Sets the response code from the http response
+ */
+ inline void SetResponseCode(Aws::Http::HttpResponseCode responseCode) { m_responseCode = responseCode; }
+
+ protected:
+ inline ErrorPayloadType GetErrorPayloadType() { return m_errorPayloadType; }
+ inline void SetXmlPayload(const Aws::Utils::Xml::XmlDocument& xmlPayload)
+ {
+ m_errorPayloadType = ErrorPayloadType::XML;
+ m_xmlPayload = xmlPayload;
+ }
+ inline void SetXmlPayload(Aws::Utils::Xml::XmlDocument&& xmlPayload)
+ {
+ m_errorPayloadType = ErrorPayloadType::XML;
+ m_xmlPayload = std::move(xmlPayload);
+ }
+ inline const Aws::Utils::Xml::XmlDocument& GetXmlPayload() const
+ {
+ assert(m_errorPayloadType != ErrorPayloadType::JSON);
+ return m_xmlPayload;
+ }
+ inline void SetJsonPayload(const Aws::Utils::Json::JsonValue& jsonPayload)
+ {
+ m_errorPayloadType = ErrorPayloadType::JSON;
+ m_jsonPayload = jsonPayload;
+ }
+ inline void SetJsonPayload(Aws::Utils::Json::JsonValue&& jsonPayload)
+ {
+ m_errorPayloadType = ErrorPayloadType::JSON;
+ m_jsonPayload = std::move(jsonPayload);
+ }
+ inline const Aws::Utils::Json::JsonValue& GetJsonPayload() const
+ {
+ assert(m_errorPayloadType != ErrorPayloadType::XML);
+ return m_jsonPayload;
+ }
+
+ ERROR_TYPE m_errorType;
+ Aws::String m_exceptionName;
+ Aws::String m_message;
+ Aws::String m_remoteHostIpAddress;
+ Aws::String m_requestId;
+ Aws::Http::HeaderValueCollection m_responseHeaders;
+ Aws::Http::HttpResponseCode m_responseCode;
+ bool m_isRetryable;
+
+ ErrorPayloadType m_errorPayloadType;
+ Aws::Utils::Xml::XmlDocument m_xmlPayload;
+ Aws::Utils::Json::JsonValue m_jsonPayload;
+ };
+
+ template<typename T>
+ Aws::OStream& operator << (Aws::OStream& s, const AWSError<T>& e)
+ {
+ s << "HTTP response code: " << static_cast<int>(e.GetResponseCode()) << "\n"
+ << "Resolved remote host IP address: " << e.GetRemoteHostIpAddress() << "\n"
+ << "Request ID: " << e.GetRequestId() << "\n"
+ << "Exception name: " << e.GetExceptionName() << "\n"
+ << "Error message: " << e.GetMessage() << "\n"
+ << e.GetResponseHeaders().size() << " response headers:";
+
+ for (auto&& header : e.GetResponseHeaders())
+ {
+ s << "\n" << header.first << " : " << header.second;
+ }
+ return s;
+ }
+
+ } // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSErrorMarshaller.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSErrorMarshaller.h
new file mode 100644
index 00000000000..628b9565fdc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AWSErrorMarshaller.h
@@ -0,0 +1,97 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Http
+ {
+ class HttpResponse;
+ enum class HttpResponseCode;
+ }
+
+ namespace Utils
+ {
+ namespace Xml
+ {
+ class XmlDocument;
+ }
+ namespace Json
+ {
+ class JsonValue;
+ }
+ }
+
+ namespace Client
+ {
+ enum class CoreErrors;
+
+ template<typename ERROR_TYPE>
+ class AWSError;
+
+ /**
+ * Marshaller for core error types.
+ */
+ class AWS_CORE_API AWSErrorMarshaller
+ {
+ public:
+ virtual ~AWSErrorMarshaller() {}
+
+ /**
+ * Converts an exceptionName and message into an Error object, if it can be parsed. Otherwise, it returns
+ * and AWSError with CoreErrors::UNKNOWN as the error type.
+ */
+ virtual AWSError<CoreErrors> Marshall(const Aws::Http::HttpResponse& response) const = 0;
+ /**
+ * Attempts to finds an error code by the exception name. Otherwise returns CoreErrors::UNKNOWN as the error type.
+ */
+ virtual AWSError<CoreErrors> FindErrorByName(const char* exceptionName) const;
+ virtual AWSError<CoreErrors> FindErrorByHttpResponseCode(Aws::Http::HttpResponseCode code) const;
+ /**
+ * Attempts to extract region from error.
+ */
+ virtual Aws::String ExtractRegion(const AWSError<CoreErrors>&) const { return {}; }
+ /**
+ * Attempts to extract endpoint from error.
+ */
+ virtual Aws::String ExtractEndpoint(const AWSError<CoreErrors>&) const { return {}; }
+ protected:
+ AWSError<CoreErrors> Marshall(const Aws::String& exceptionName, const Aws::String& message) const;
+ };
+
+ class AWS_CORE_API JsonErrorMarshaller : public AWSErrorMarshaller
+ {
+ using AWSErrorMarshaller::Marshall;
+ public:
+ /**
+ * Converts an exceptionName and message into an Error object, if it can be parsed. Otherwise, it returns
+ * and AWSError with CoreErrors::UNKNOWN as the error type.
+ */
+ AWSError<CoreErrors> Marshall(const Aws::Http::HttpResponse& response) const override;
+
+ protected:
+ const Aws::Utils::Json::JsonValue& GetJsonPayloadFromError(const AWSError<CoreErrors>&) const;
+ };
+
+ class AWS_CORE_API XmlErrorMarshaller : public AWSErrorMarshaller
+ {
+ using AWSErrorMarshaller::Marshall;
+ public:
+ /**
+ * Converts an exceptionName and message into an Error object, if it can be parsed. Otherwise, it returns
+ * and AWSError with CoreErrors::UNKNOWN as the error type.
+ */
+ AWSError<CoreErrors> Marshall(const Aws::Http::HttpResponse& response) const override;
+
+ protected:
+ const Aws::Utils::Xml::XmlDocument& GetXmlPayloadFromError(const AWSError<CoreErrors>&) const;
+ };
+
+ } // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AsyncCallerContext.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AsyncCallerContext.h
new file mode 100644
index 00000000000..6831791ffca
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/AsyncCallerContext.h
@@ -0,0 +1,59 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Client
+ {
+ /**
+ * Call-back context for all async client methods. This allows you to pass a context to your callbacks so that you can identify your requests.
+ * It is entirely intended that you override this class in-lieu of using a void* for the user context. The base class just gives you the ability to
+ * pass a uuid for your context.
+ */
+ class AWS_CORE_API AsyncCallerContext
+ {
+ public:
+ /**
+ * Initializes object with generated UUID
+ */
+ AsyncCallerContext();
+
+ /**
+ * Initializes object with UUID
+ */
+ AsyncCallerContext(const Aws::String& uuid) : m_uuid(uuid) {}
+
+ /**
+ * Initializes object with UUID
+ */
+ AsyncCallerContext(const char* uuid) : m_uuid(uuid) {}
+
+ virtual ~AsyncCallerContext() {}
+
+ /**
+ * Gets underlying UUID
+ */
+ inline const Aws::String& GetUUID() const { return m_uuid; }
+
+ /**
+ * Sets underlying UUID
+ */
+ inline void SetUUID(const Aws::String& value) { m_uuid = value; }
+
+ /**
+ * Sets underlying UUID
+ */
+ inline void SetUUID(const char* value) { m_uuid.assign(value); }
+
+ private:
+ Aws::String m_uuid;
+ };
+ }
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/ClientConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/ClientConfiguration.h
new file mode 100644
index 00000000000..ba54baaa835
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/ClientConfiguration.h
@@ -0,0 +1,255 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/http/Scheme.h>
+#include <aws/core/Region.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/http/HttpTypes.h>
+#include <memory>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Threading
+ {
+ class Executor;
+ } // namespace Threading
+
+ namespace RateLimits
+ {
+ class RateLimiterInterface;
+ } // namespace RateLimits
+ } // namespace Utils
+ namespace Client
+ {
+ class RetryStrategy; // forward declare
+
+ /**
+ * Sets the behaviors of the underlying HTTP clients handling response with 30x status code.
+ * By default, HTTP clients will always redirect the 30x response automatically, except when
+ * specifying aws-global as the client region, then SDK will handle 30x response and redirect
+ * the request manually.
+ */
+ enum class FollowRedirectsPolicy
+ {
+ DEFAULT,
+ ALWAYS,
+ NEVER
+ };
+
+ /**
+ * This mutable structure is used to configure any of the AWS clients.
+ * Default values can only be overwritten prior to passing to the client constructors.
+ */
+ struct AWS_CORE_API ClientConfiguration
+ {
+ ClientConfiguration();
+
+ /**
+ * Create a configuration based on settings in the aws configuration file for the given profile name.
+ * The configuration file location can be set via the environment variable AWS_CONFIG_FILE
+ */
+ ClientConfiguration(const char* profileName);
+
+ /**
+ * User Agent string user for http calls. This is filled in for you in the constructor. Don't override this unless you have a really good reason.
+ */
+ Aws::String userAgent;
+ /**
+ * Http scheme to use. E.g. Http or Https. Default HTTPS
+ */
+ Aws::Http::Scheme scheme;
+ /**
+ * AWS Region to use in signing requests. Default US_EAST_1
+ */
+ Aws::String region;
+ /**
+ * Use dual stack endpoint in the endpoint calculation. It is your responsibility to verify that the service supports ipv6 in the region you select.
+ */
+ bool useDualStack;
+ /**
+ * Max concurrent tcp connections for a single http client to use. Default 25.
+ */
+ unsigned maxConnections;
+ /**
+ * This is currently only applicable for Curl to set the http request level timeout, including possible dns lookup time, connection establish time, ssl handshake time and actual data transmission time.
+ * the corresponding Curl option is CURLOPT_TIMEOUT_MS
+ * defaults to 0, no http request level timeout.
+ */
+ long httpRequestTimeoutMs;
+ /**
+ * Socket read timeouts for HTTP clients on Windows. Default 3000 ms. This should be more than adequate for most services. However, if you are transfering large amounts of data
+ * or are worried about higher latencies, you should set to something that makes more sense for your use case.
+ * For Curl, it's the low speed time, which contains the time in number milliseconds that transfer speed should be below "lowSpeedLimit" for the library to consider it too slow and abort.
+ * Note that for Curl this config is converted to seconds by rounding down to the nearest whole second except when the value is greater than 0 and less than 1000. In this case it is set to one second. When it's 0, low speed limit check will be disabled.
+ * Note that for Windows when this config is 0, the behavior is not specified by Windows.
+ */
+ long requestTimeoutMs;
+ /**
+ * Socket connect timeout. Default 1000 ms. Unless you are very far away from your the data center you are talking to. 1000ms is more than sufficient.
+ */
+ long connectTimeoutMs;
+ /**
+ * Enable TCP keep-alive. Default true;
+ * No-op for WinHTTP, WinINet and IXMLHTTPRequest2 client.
+ */
+ bool enableTcpKeepAlive;
+ /**
+ * Interval to send a keep-alive packet over the connection. Default 30 seconds. Minimum 15 seconds.
+ * WinHTTP & libcurl support this option. Note that for Curl, this value will be rounded to an integer with second granularity.
+ * No-op for WinINet and IXMLHTTPRequest2 client.
+ */
+ unsigned long tcpKeepAliveIntervalMs;
+ /**
+ * Average transfer speed in bytes per second that the transfer should be below during the request timeout interval for it to be considered too slow and abort.
+ * Default 1 byte/second. Only for CURL client currently.
+ */
+ unsigned long lowSpeedLimit;
+ /**
+ * Strategy to use in case of failed requests. Default is DefaultRetryStrategy (e.g. exponential backoff)
+ */
+ std::shared_ptr<RetryStrategy> retryStrategy;
+ /**
+ * Override the http endpoint used to talk to a service.
+ */
+ Aws::String endpointOverride;
+ /**
+ * If you have users going through a proxy, set the proxy scheme here. Default HTTP
+ */
+ Aws::Http::Scheme proxyScheme;
+ /**
+ * If you have users going through a proxy, set the host here.
+ */
+ Aws::String proxyHost;
+ /**
+ * If you have users going through a proxy, set the port here.
+ */
+ unsigned proxyPort;
+ /**
+ * If you have users going through a proxy, set the username here.
+ */
+ Aws::String proxyUserName;
+ /**
+ * If you have users going through a proxy, set the password here.
+ */
+ Aws::String proxyPassword;
+ /**
+ * SSL Certificate file to use for connecting to an HTTPS proxy.
+ * Used to set CURLOPT_PROXY_SSLCERT in libcurl. Example: client.pem
+ */
+ Aws::String proxySSLCertPath;
+ /**
+ * Type of proxy client SSL certificate.
+ * Used to set CURLOPT_PROXY_SSLCERTTYPE in libcurl. Example: PEM
+ */
+ Aws::String proxySSLCertType;
+ /**
+ * Private key file to use for connecting to an HTTPS proxy.
+ * Used to set CURLOPT_PROXY_SSLKEY in libcurl. Example: key.pem
+ */
+ Aws::String proxySSLKeyPath;
+ /**
+ * Type of private key file used to connect to an HTTPS proxy.
+ * Used to set CURLOPT_PROXY_SSLKEYTYPE in libcurl. Example: PEM
+ */
+ Aws::String proxySSLKeyType;
+ /**
+ * Passphrase to the private key file used to connect to an HTTPS proxy.
+ * Used to set CURLOPT_PROXY_KEYPASSWD in libcurl. Example: password1
+ */
+ Aws::String proxySSLKeyPassword;
+ /**
+ * Threading Executor implementation. Default uses std::thread::detach()
+ */
+ std::shared_ptr<Aws::Utils::Threading::Executor> executor;
+ /**
+ * If you need to test and want to get around TLS validation errors, do that here.
+ * you probably shouldn't use this flag in a production scenario.
+ */
+ bool verifySSL;
+ /**
+ * If your Certificate Authority path is different from the default, you can tell
+ * clients that aren't using the default trust store where to find your CA trust store.
+ * If you are on windows or apple, you likely don't want this.
+ */
+ Aws::String caPath;
+ /**
+ * Same as caPath, but useful if you have users going through a proxy.
+ * Used to set CURLOPT_PROXY_CAPATH in libcurl.
+ */
+ Aws::String proxyCaPath;
+ /**
+ * If you certificate file is different from the default, you can tell clients that
+ * aren't using the default trust store where to find your ca file.
+ * If you are on windows or apple, you likely don't want this.
+ */
+ Aws::String caFile;
+ /**
+ * Same as caFile, but useful if you have users going through a proxy.
+ * Used to set CURLOPT_PROXY_CAINFO in libcurl.
+ */
+ Aws::String proxyCaFile;
+ /**
+ * Rate Limiter implementation for outgoing bandwidth. Default is wide-open.
+ */
+ std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> writeRateLimiter;
+ /**
+ * Rate Limiter implementation for incoming bandwidth. Default is wide-open.
+ */
+ std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> readRateLimiter;
+ /**
+ * Override the http implementation the default factory returns.
+ */
+ Aws::Http::TransferLibType httpLibOverride;
+ /**
+ * Sets the behavior how http stack handles 30x redirect codes.
+ */
+ FollowRedirectsPolicy followRedirects;
+
+ /**
+ * Only works for Curl http client.
+ * Curl will by default add "Expect: 100-Continue" header in a Http request so as to avoid sending http
+ * payload to wire if server respond error immediately after receiving the header.
+ * Set this option to true will tell Curl to send http request header and body together.
+ * This can save one round-trip time and especially useful when the payload is small and network latency is more important.
+ * But be careful when Http request has large payload such S3 PutObject. You don't want to spend long time sending a large payload just getting a error response for server.
+ * The default value will be false.
+ */
+ bool disableExpectHeader;
+
+ /**
+ * If set to true clock skew will be adjusted after each http attempt, default to true.
+ */
+ bool enableClockSkewAdjustment;
+
+ /**
+ * Enable host prefix injection.
+ * For services whose endpoint is injectable. e.g. servicediscovery, you can modify the http host's prefix so as to add "data-" prefix for DiscoverInstances request.
+ * Default to true, enabled. You can disable it for testing purpose.
+ */
+ bool enableHostPrefixInjection;
+
+ /**
+ * Enable endpoint discovery
+ * For some services to dynamically set up their endpoints for different requests.
+ * Defaults to false, it's an opt-in feature.
+ * If disabled, regional or overriden endpoint will be used instead.
+ * If a request requires endpoint discovery but you disabled it. The request will never succeed.
+ */
+ bool enableEndpointDiscovery;
+
+ /**
+ * profileName in config file that will be used by this object to reslove more configurations.
+ */
+ Aws::String profileName;
+
+ };
+
+ } // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/CoreErrors.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/CoreErrors.h
new file mode 100644
index 00000000000..52ebe51c82f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/CoreErrors.h
@@ -0,0 +1,79 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include "aws/core/Core_EXPORTS.h"
+
+namespace Aws
+{
+ namespace Http
+ {
+ enum class HttpResponseCode;
+ }
+ namespace Client
+ {
+ template<typename ERROR_TYPE>
+ class AWSError;
+
+ enum class CoreErrors
+ {
+ INCOMPLETE_SIGNATURE = 0,
+ INTERNAL_FAILURE = 1,
+ INVALID_ACTION = 2,
+ INVALID_CLIENT_TOKEN_ID = 3,
+ INVALID_PARAMETER_COMBINATION = 4,
+ INVALID_QUERY_PARAMETER = 5,
+ INVALID_PARAMETER_VALUE = 6,
+ MISSING_ACTION = 7, // SDK should never allow
+ MISSING_AUTHENTICATION_TOKEN = 8, // SDK should never allow
+ MISSING_PARAMETER = 9, // SDK should never allow
+ OPT_IN_REQUIRED = 10,
+ REQUEST_EXPIRED = 11,
+ SERVICE_UNAVAILABLE = 12,
+ THROTTLING = 13,
+ VALIDATION = 14,
+ ACCESS_DENIED = 15,
+ RESOURCE_NOT_FOUND = 16, // Shared with multiple services
+ UNRECOGNIZED_CLIENT = 17, // Most likely caused by an invalid access key or secret key
+ MALFORMED_QUERY_STRING = 18, // Where does this come from? (cognito identity uses it)
+ SLOW_DOWN = 19,
+ REQUEST_TIME_TOO_SKEWED = 20,
+ INVALID_SIGNATURE = 21,
+ SIGNATURE_DOES_NOT_MATCH = 22,
+ INVALID_ACCESS_KEY_ID = 23,
+ REQUEST_TIMEOUT = 24,
+
+ NETWORK_CONNECTION = 99, // General failure to send message to service
+
+ // These are needed for logical reasons
+ UNKNOWN = 100, // Unknown to the SDK
+ CLIENT_SIGNING_FAILURE = 101, // Client failed to sign the request
+ USER_CANCELLED = 102, // User cancelled the request
+ SERVICE_EXTENSION_START_RANGE = 128
+ };
+
+ namespace CoreErrorsMapper
+ {
+ /**
+ * Finds a CoreErrors member if possible. Otherwise, returns UNKNOWN
+ */
+ AWS_CORE_API AWSError<CoreErrors> GetErrorForName(const char* errorName);
+
+ /**
+ * Build the mapping between predefined exception names and Aws CoreErrors using Aws::Map.
+ */
+ AWS_CORE_API void InitCoreErrorsMapper();
+
+ /**
+ * Cleanup memory allocated for Aws::Map used by AWS CoreError Mapper.
+ */
+ AWS_CORE_API void CleanupCoreErrorsMapper();
+ /**
+ * Finds a CoreErrors member if possible by HTTP response code
+ */
+ AWS_CORE_API AWSError<CoreErrors> GetErrorForHttpResponseCode(Aws::Http::HttpResponseCode code);
+ } // namespace CoreErrorsMapper
+ } // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/DefaultRetryStrategy.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/DefaultRetryStrategy.h
new file mode 100644
index 00000000000..0357c5ed0cc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/DefaultRetryStrategy.h
@@ -0,0 +1,36 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/client/RetryStrategy.h>
+
+namespace Aws
+{
+namespace Client
+{
+
+class AWS_CORE_API DefaultRetryStrategy : public RetryStrategy
+{
+public:
+
+ DefaultRetryStrategy(long maxRetries = 10, long scaleFactor = 25) :
+ m_scaleFactor(scaleFactor), m_maxRetries(maxRetries)
+ {}
+
+ bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
+
+ long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
+
+ virtual long GetMaxAttempts() const override { return m_maxRetries + 1; }
+
+protected:
+ long m_scaleFactor;
+ long m_maxRetries;
+};
+
+} // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/RetryStrategy.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/RetryStrategy.h
new file mode 100644
index 00000000000..930eaa581d6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/RetryStrategy.h
@@ -0,0 +1,121 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/threading/ReaderWriterLock.h>
+#include <memory>
+
+namespace Aws
+{
+ namespace Http
+ {
+ class HttpResponse;
+ }
+
+ namespace Utils
+ {
+ template<typename R, typename E>
+ class Outcome;
+ }
+
+ namespace Client
+ {
+ enum class CoreErrors;
+ template<typename ERROR_TYPE>
+ class AWSError;
+
+ typedef Utils::Outcome<std::shared_ptr<Aws::Http::HttpResponse>, AWSError<CoreErrors>> HttpResponseOutcome;
+
+ /**
+ * Interface for defining a Retry Strategy. Override this class to provide your own custom retry behavior.
+ */
+ class AWS_CORE_API RetryStrategy
+ {
+ public:
+ virtual ~RetryStrategy() = default;
+ /**
+ * Returns true if the error can be retried given the error and the number of times already tried.
+ */
+ virtual bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
+
+ /**
+ * Calculates the time in milliseconds the client should sleep before attempting another request based on the error and attemptedRetries count.
+ */
+ virtual long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
+
+ /**
+ * Gets max number of attempts allowed for an operation.
+ * Returns non positive value if not defined.
+ */
+ virtual long GetMaxAttempts() const { return 0; }
+
+ /**
+ * Retrives send tokens from the bucket.
+ */
+ virtual void GetSendToken() {}
+
+ /**
+ * Update status, like the information of retry quota when receiving a response.
+ */
+ virtual void RequestBookkeeping(const HttpResponseOutcome& /* httpResponseOutcome */) {}
+ virtual void RequestBookkeeping(const HttpResponseOutcome& /* httpResponseOutcome */, const AWSError<CoreErrors>& /* lastError */) {}
+ };
+
+ /**
+ * The container for retry quotas.
+ * A failed request will acquire retry quotas to retry.
+ * And a successful request will release quotas back.
+ * If running out of retry quotas, then the client is not able to retry.
+ */
+ class AWS_CORE_API RetryQuotaContainer
+ {
+ public:
+ virtual ~RetryQuotaContainer() = default;
+ virtual bool AcquireRetryQuota(int capacityAmount) = 0;
+ virtual bool AcquireRetryQuota(const AWSError<CoreErrors>& error) = 0;
+ virtual void ReleaseRetryQuota(int capacityAmount) = 0;
+ virtual void ReleaseRetryQuota(const AWSError<CoreErrors>& lastError) = 0;
+ virtual int GetRetryQuota() const = 0;
+ };
+
+ class AWS_CORE_API DefaultRetryQuotaContainer : public RetryQuotaContainer
+ {
+ public:
+ DefaultRetryQuotaContainer();
+ virtual ~DefaultRetryQuotaContainer() = default;
+ virtual bool AcquireRetryQuota(int capacityAmount) override;
+ virtual bool AcquireRetryQuota(const AWSError<CoreErrors>& error) override;
+ virtual void ReleaseRetryQuota(int capacityAmount) override;
+ virtual void ReleaseRetryQuota(const AWSError<CoreErrors>& lastError) override;
+ virtual int GetRetryQuota() const override { return m_retryQuota; }
+
+ protected:
+ mutable Aws::Utils::Threading::ReaderWriterLock m_retryQuotaLock;
+ int m_retryQuota;
+ };
+
+ class AWS_CORE_API StandardRetryStrategy : public RetryStrategy
+ {
+ public:
+ StandardRetryStrategy(long maxAttempts = 3);
+ StandardRetryStrategy(std::shared_ptr<RetryQuotaContainer> retryQuotaContainer, long maxAttempts = 3);
+
+ virtual void RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome) override;
+ virtual void RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome, const AWSError<CoreErrors>& lastError) override;
+
+ virtual bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
+
+ virtual long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
+
+ virtual long GetMaxAttempts() const override { return m_maxAttempts; }
+
+ protected:
+ std::shared_ptr<RetryQuotaContainer> m_retryQuotaContainer;
+ long m_maxAttempts;
+ };
+ } // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/SpecifiedRetryableErrorsRetryStrategy.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/SpecifiedRetryableErrorsRetryStrategy.h
new file mode 100644
index 00000000000..09cfc95d8f5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/client/SpecifiedRetryableErrorsRetryStrategy.h
@@ -0,0 +1,34 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/client/DefaultRetryStrategy.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+namespace Aws
+{
+namespace Client
+{
+
+/**
+ * @brief This retry strategy is almost identical to DefaultRetryStrategy, except it accepts a vector of error or exception names
+ * that you want to retry anyway (bypass the retryable definition of the error instance itself) if the retry attempts is less than maxRetries.
+ */
+class AWS_CORE_API SpecifiedRetryableErrorsRetryStrategy : public DefaultRetryStrategy
+{
+public:
+ SpecifiedRetryableErrorsRetryStrategy(const Aws::Vector<Aws::String>& specifiedRetryableErrors, long maxRetries = 10, long scaleFactor = 25) :
+ DefaultRetryStrategy(maxRetries, scaleFactor), m_specifiedRetryableErrors(specifiedRetryableErrors)
+ {}
+
+ bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
+
+private:
+ Aws::Vector<Aws::String> m_specifiedRetryableErrors;
+};
+
+} // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/config/AWSProfileConfigLoader.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/config/AWSProfileConfigLoader.h
new file mode 100644
index 00000000000..84c62713daa
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/config/AWSProfileConfigLoader.h
@@ -0,0 +1,250 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/auth/AWSCredentials.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/threading/ReaderWriterLock.h>
+
+namespace Aws
+{
+ namespace Internal
+ {
+ class EC2MetadataClient;
+ }
+
+ namespace Config
+ {
+ /**
+ * Simple data container for a Profile.
+ */
+ class Profile
+ {
+ public:
+ inline const Aws::String& GetName() const { return m_name; }
+ inline void SetName(const Aws::String& value) { m_name = value; }
+ inline const Aws::Auth::AWSCredentials& GetCredentials() const { return m_credentials; }
+ inline void SetCredentials(const Aws::Auth::AWSCredentials& value) { m_credentials = value; }
+ inline const Aws::String& GetRegion() const { return m_region; }
+ inline void SetRegion(const Aws::String& value) { m_region = value; }
+ inline const Aws::String& GetRoleArn() const { return m_roleArn; }
+ inline void SetRoleArn(const Aws::String& value) { m_roleArn = value; }
+ inline const Aws::String& GetExternalId() const { return m_externalId; }
+ inline void SetExternalId(const Aws::String& value) { m_externalId = value; }
+ inline const Aws::String& GetSourceProfile() const { return m_sourceProfile; }
+ inline void SetSourceProfile(const Aws::String& value ) { m_sourceProfile = value; }
+ inline const Aws::String& GetCredentialProcess() const { return m_credentialProcess; }
+ inline void SetCredentialProcess(const Aws::String& value ) { m_credentialProcess = value; }
+ inline void SetAllKeyValPairs(const Aws::Map<Aws::String, Aws::String>& map) { m_allKeyValPairs = map; }
+ inline const Aws::String GetValue(const Aws::String& key) const
+ {
+ auto iter = m_allKeyValPairs.find(key);
+ if (iter == m_allKeyValPairs.end()) return {};
+ return iter->second;
+ }
+
+ private:
+ Aws::String m_name;
+ Aws::String m_region;
+ Aws::Auth::AWSCredentials m_credentials;
+ Aws::String m_roleArn;
+ Aws::String m_externalId;
+ Aws::String m_sourceProfile;
+ Aws::String m_credentialProcess;
+ Aws::Map<Aws::String, Aws::String> m_allKeyValPairs;
+ };
+
+ /**
+ * Loads Configuration such as .aws/config, .aws/credentials or ec2 metadata service.
+ */
+ class AWS_CORE_API AWSProfileConfigLoader
+ {
+ public:
+ virtual ~AWSProfileConfigLoader() = default;
+
+ /**
+ * Load the configuration
+ */
+ bool Load();
+
+ /**
+ * Over writes the entire config source with the newly configured profile data.
+ */
+ bool PersistProfiles(const Aws::Map<Aws::String, Aws::Config::Profile>& profiles);
+
+ /**
+ * Gets all profiles from the configuration file.
+ */
+ inline const Aws::Map<Aws::String, Aws::Config::Profile>& GetProfiles() const { return m_profiles; };
+
+ /**
+ * the timestamp from the last time the profile information was loaded from file.
+ */
+ inline const Aws::Utils::DateTime& LastLoadTime() const { return m_lastLoadTime; }
+
+ using ProfilesContainer = Aws::Map<Aws::String, Aws::Config::Profile>;
+
+ protected:
+ /**
+ * Subclasses override this method to implement fetching the profiles.
+ */
+ virtual bool LoadInternal() = 0;
+
+ /**
+ * Subclasses override this method to implement persisting the profiles. Default returns false.
+ */
+ virtual bool PersistInternal(const Aws::Map<Aws::String, Aws::Config::Profile>&) { return false; }
+
+ ProfilesContainer m_profiles;
+ Aws::Utils::DateTime m_lastLoadTime;
+ };
+
+ /**
+ * Reads configuration from a config file (e.g. $HOME/.aws/config or $HOME/.aws/credentials
+ */
+ class AWS_CORE_API AWSConfigFileProfileConfigLoader : public AWSProfileConfigLoader
+ {
+ public:
+ /**
+ * fileName - file to load config from
+ * useProfilePrefix - whether or not the profiles are prefixed with "profile", credentials file is not
+ * while the config file is. Defaults to off.
+ */
+ AWSConfigFileProfileConfigLoader(const Aws::String& fileName, bool useProfilePrefix = false);
+
+ virtual ~AWSConfigFileProfileConfigLoader() = default;
+
+ /**
+ * File path being used for the config loader.
+ */
+ const Aws::String& GetFileName() const { return m_fileName; }
+
+ /**
+ * Give loader the ability to change the file path to load config from.
+ * This can avoid creating new loader object if the file changed.
+ */
+ void SetFileName(const Aws::String& fileName) { m_fileName = fileName; }
+
+ protected:
+ virtual bool LoadInternal() override;
+ virtual bool PersistInternal(const Aws::Map<Aws::String, Aws::Config::Profile>&) override;
+
+ private:
+ Aws::String m_fileName;
+ bool m_useProfilePrefix;
+ };
+
+ static const char* const INSTANCE_PROFILE_KEY = "InstanceProfile";
+
+ /**
+ * Loads configuration from the EC2 Metadata Service
+ */
+ class AWS_CORE_API EC2InstanceProfileConfigLoader : public AWSProfileConfigLoader
+ {
+ public:
+ /**
+ * If client is nullptr, the default EC2MetadataClient will be created.
+ */
+ EC2InstanceProfileConfigLoader(const std::shared_ptr<Aws::Internal::EC2MetadataClient>& = nullptr);
+
+ virtual ~EC2InstanceProfileConfigLoader() = default;
+
+ protected:
+ virtual bool LoadInternal() override;
+
+ private:
+ std::shared_ptr<Aws::Internal::EC2MetadataClient> m_ec2metadataClient;
+ };
+
+ /**
+ * Stores the contents of config file and credentials file to avoid multiple file readings.
+ * At the same time provides the flexibility to reload from file.
+ */
+ class AWS_CORE_API ConfigAndCredentialsCacheManager
+ {
+ public:
+ ConfigAndCredentialsCacheManager();
+
+ void ReloadConfigFile();
+
+ void ReloadCredentialsFile();
+
+ bool HasConfigProfile(const Aws::String& profileName) const;
+
+ /**
+ * Returns cached config profile with the specified profile name.
+ * Using copy instead of const reference to avoid reading bad contents due to thread contention.
+ */
+ Aws::Config::Profile GetConfigProfile(const Aws::String& profileName) const;
+
+ /**
+ * Returns cached config profiles
+ * Using copy instead of const reference to avoid reading bad contents due to thread contention.
+ */
+ Aws::Map<Aws::String, Aws::Config::Profile> GetConfigProfiles() const;
+
+ /**
+ * Returns cached config value with the specified profile name and key.
+ * Using copy instead of const reference to avoid reading bad contents due to thread contention.
+ */
+ Aws::String GetConfig(const Aws::String& profileName, const Aws::String& key) const;
+
+ bool HasCredentialsProfile(const Aws::String& profileName) const;
+ /**
+ * Returns cached credentials profile with the specified profile name.
+ * Using copy instead of const reference to avoid reading bad contents due to thread contention.
+ */
+ Aws::Config::Profile GetCredentialsProfile(const Aws::String& profileName) const;
+
+ /**
+ * Returns cached credentials profiles.
+ * Using copy instead of const reference to avoid reading bad contents due to thread contention.
+ */
+ Aws::Map<Aws::String, Aws::Config::Profile> GetCredentialsProfiles() const;
+
+ /**
+ * Returns cached credentials with the specified profile name.
+ * Using copy instead of const reference to avoid reading bad contents due to thread contention.
+ */
+ Aws::Auth::AWSCredentials GetCredentials(const Aws::String& profileName) const;
+
+ private:
+ mutable Aws::Utils::Threading::ReaderWriterLock m_credentialsLock;
+ Aws::Config::AWSConfigFileProfileConfigLoader m_credentialsFileLoader;
+ mutable Aws::Utils::Threading::ReaderWriterLock m_configLock;
+ Aws::Config::AWSConfigFileProfileConfigLoader m_configFileLoader;
+ };
+
+ AWS_CORE_API void InitConfigAndCredentialsCacheManager();
+
+ AWS_CORE_API void CleanupConfigAndCredentialsCacheManager();
+
+ AWS_CORE_API void ReloadCachedConfigFile();
+
+ AWS_CORE_API void ReloadCachedCredentialsFile();
+
+ AWS_CORE_API bool HasCachedConfigProfile(const Aws::String& profileName);
+
+ AWS_CORE_API Aws::Config::Profile GetCachedConfigProfile(const Aws::String& profileName);
+
+ AWS_CORE_API Aws::Map<Aws::String, Aws::Config::Profile> GetCachedConfigProfiles();
+
+ AWS_CORE_API Aws::String GetCachedConfigValue(const Aws::String& profileName, const Aws::String& key);
+
+ AWS_CORE_API Aws::String GetCachedConfigValue(const Aws::String& key);
+
+ AWS_CORE_API bool HasCachedCredentialsProfile(const Aws::String &profileName);
+
+ AWS_CORE_API Aws::Config::Profile GetCachedCredentialsProfile(const Aws::String& profileName);
+
+ AWS_CORE_API Aws::Auth::AWSCredentials GetCachedCredentials(const Aws::String& profileName);
+
+ AWS_CORE_API Aws::Map<Aws::String, Aws::Config::Profile> GetCachedCredentialsProfiles();
+
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/cjson/cJSON.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/cjson/cJSON.h
new file mode 100644
index 00000000000..9a010a67db0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/cjson/cJSON.h
@@ -0,0 +1,289 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+#ifndef cJSON__h
+#define cJSON__h
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* project version */
+#define CJSON_VERSION_MAJOR 1
+#define CJSON_VERSION_MINOR 7
+#define CJSON_VERSION_PATCH 7
+
+#include <stddef.h>
+
+/* cJSON Types: */
+#define cJSON_Invalid (0)
+#define cJSON_False (1 << 0)
+#define cJSON_True (1 << 1)
+#define cJSON_NULL (1 << 2)
+#define cJSON_Number (1 << 3)
+#define cJSON_String (1 << 4)
+#define cJSON_Array (1 << 5)
+#define cJSON_Object (1 << 6)
+#define cJSON_Raw (1 << 7) /* raw json */
+
+#define cJSON_IsReference 256
+#define cJSON_StringIsConst 512
+
+/* The cJSON structure: */
+typedef struct cJSON
+{
+ /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
+ struct cJSON *next;
+ struct cJSON *prev;
+ /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
+ struct cJSON *child;
+
+ /* The type of the item, as above. */
+ int type;
+
+ /* The item's string, if type==cJSON_String and type == cJSON_Raw */
+ char *valuestring;
+ /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
+ int valueint;
+ /* The item's number, if type==cJSON_Number */
+ double valuedouble;
+
+ /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
+ char *string;
+} cJSON;
+
+typedef struct cJSON_Hooks
+{
+ void *(*malloc_fn)(size_t sz);
+ void (*free_fn)(void *ptr);
+} cJSON_Hooks;
+
+typedef int cJSON_bool;
+
+#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
+#define __WINDOWS__
+#endif
+#ifdef __WINDOWS__
+
+/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention. For windows you have 2 define options:
+
+CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols
+CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default)
+CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
+
+For *nix builds that support visibility attribute, you can define similar behavior by
+
+setting default visibility to hidden by adding
+-fvisibility=hidden (for gcc)
+or
+-xldscope=hidden (for sun cc)
+to CFLAGS
+
+then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does
+
+*/
+
+/* Decide calling convention based on the cmake parameters defined in C++ SDK. */
+#ifdef USE_IMPORT_EXPORT
+#ifdef AWS_CORE_EXPORTS
+#define CJSON_EXPORT_SYMBOLS
+#else
+#define CJSON_IMPORT_SYMBOLS
+#endif // AWS_CORE_EXPORTS
+#else
+#define CJSON_HIDE_SYMBOLS
+#endif // USE_IMPORT_EXPORT
+
+/* export symbols by default, this is necessary for copy pasting the C and header file */
+#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_EXPORT_SYMBOLS
+#endif
+
+#if defined(CJSON_HIDE_SYMBOLS)
+#define CJSON_PUBLIC(type) type __stdcall
+#elif defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_PUBLIC(type) __declspec(dllexport) type __stdcall
+#elif defined(CJSON_IMPORT_SYMBOLS)
+#define CJSON_PUBLIC(type) __declspec(dllimport) type __stdcall
+#endif
+#else /* !WIN32 */
+#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
+#define CJSON_PUBLIC(type) __attribute__((visibility("default"))) type
+#else
+#define CJSON_PUBLIC(type) type
+#endif
+#endif
+
+/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
+ * This is to prevent stack overflows. */
+#ifndef CJSON_NESTING_LIMIT
+#define CJSON_NESTING_LIMIT 1000
+#endif
+
+/* returns the version of cJSON as a string */
+CJSON_PUBLIC(const char*) cJSON_Version(void);
+
+/* Supply malloc, realloc and free functions to cJSON */
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
+
+/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */
+/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
+/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
+/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
+
+/* Render a cJSON entity to text for transfer/storage. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
+/* Render a cJSON entity to text for transfer/storage without any formatting. */
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
+/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
+/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
+/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
+/* Delete a cJSON entity and all subentities. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *c);
+
+/* Returns the number of items in an array (or object). */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
+/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
+/* Get item "string" from object. Case insensitive. */
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
+/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
+
+/* Check if the item is a string and return its valuestring */
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
+
+/* These functions check the type of an item */
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
+
+/* These calls create a cJSON item of the appropriate type. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
+CJSON_PUBLIC(cJSON *) cJSON_CreateInt64(long long num);
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
+/* raw json */
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
+
+/* Create a string where valuestring references a string so
+ * it will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
+/* Create an object/arrray that only references it's elements so
+ * they will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
+
+/* These utilities create an Array of count items. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count);
+
+/* Append item to the specified array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
+/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
+ * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
+ * writing to `item->string` */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
+/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
+
+/* Remove/Detach items from Arrays/Objects. */
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
+
+/* Update array items. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
+
+/* Duplicate a cJSON item */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
+/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
+need to be released. With recurse!=0, it will duplicate any children connected to the item.
+The item->next and ->prev pointers are always zero on return from Duplicate. */
+/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
+ * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
+
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json);
+
+/* Helper functions for creating and adding items to an object at the same time.
+ * They return the added item or NULL on failure. */
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
+
+/* When assigning an integer value, it needs to be propagated to valuedouble too. */
+#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
+/* helper for the cJSON_SetNumberValue macro */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
+#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
+
+/* Macro for iterating over an array or object */
+#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
+
+/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
+CJSON_PUBLIC(void) cJSON_free(void *object);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/tinyxml2/tinyxml2.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/tinyxml2/tinyxml2.h
new file mode 100644
index 00000000000..3721ed1f976
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/external/tinyxml2/tinyxml2.h
@@ -0,0 +1,2292 @@
+/*
+Original code by Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+/*
+This file has been modified from its original version by Amazon:
+ (1) Memory management operations use aws memory management api
+ (2) Import-export preprocessor logic tweaked for better integration into core library
+ (3) Wrapped everything in Amazon namespace to prevent static linking issues if the user includes a version of this code through another dependency
+*/
+#ifndef TINYXML2_INCLUDED
+#define TINYXML2_INCLUDED
+
+#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
+# include <ctype.h>
+# include <limits.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# if defined(__PS3__)
+# include <stddef.h>
+# endif
+#else
+# include <cctype>
+# include <climits>
+# include <cstdio>
+# include <cstdlib>
+# include <cstring>
+#endif
+#include <stdint.h>
+
+#include <aws/core/utils/memory/AWSMemory.h>
+
+/*
+ TODO: intern strings instead of allocation.
+*/
+/*
+ gcc:
+ g++ -Wall -DDEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
+
+ Formatting, Artistic Style:
+ AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
+*/
+
+#if defined( _DEBUG ) || defined (__DEBUG__)
+# ifndef DEBUG
+# define DEBUG
+# endif
+#endif
+
+#ifdef _MSC_VER
+# pragma warning(push)
+# pragma warning(disable: 4251)
+#endif
+
+#ifdef _WIN32
+ #ifdef USE_IMPORT_EXPORT
+ #ifdef AWS_CORE_EXPORTS
+ #define TINYXML2_LIB __declspec(dllexport)
+ #else
+ #define TINYXML2_LIB __declspec(dllimport)
+ #endif // AWS_CORE_EXPORTS
+ #endif // USE_IMPORT_EXPORT
+#elif __GNUC__ >= 4
+ #define TINYXML2_LIB __attribute__((visibility("default")))
+#endif // _WIN32
+
+#ifndef TINYXML2_LIB
+ #define TINYXML2_LIB
+#endif // TINYXML2_LIB
+
+#if defined(DEBUG)
+# if defined(_MSC_VER)
+# // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like
+# define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); }
+# elif defined (ANDROID_NDK)
+# include <android/log.h>
+# define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); }
+# else
+# include <assert.h>
+# define TIXMLASSERT assert
+# endif
+#else
+# define TIXMLASSERT( x ) {}
+#endif
+
+
+/* Versioning, past 1.0.14:
+ http://semver.org/
+*/
+static const int TIXML2_MAJOR_VERSION = 6;
+static const int TIXML2_MINOR_VERSION = 1;
+static const int TIXML2_PATCH_VERSION = 0;
+
+#define TINYXML2_MAJOR_VERSION 6
+#define TINYXML2_MINOR_VERSION 1
+#define TINYXML2_PATCH_VERSION 0
+
+namespace Aws
+{
+namespace External
+{
+namespace tinyxml2
+{
+class XMLDocument;
+class XMLElement;
+class XMLAttribute;
+class XMLComment;
+class XMLText;
+class XMLDeclaration;
+class XMLUnknown;
+class XMLPrinter;
+
+static const char* ALLOCATION_TAG = "AWS::TinyXML";
+
+/*
+ A class that wraps strings. Normally stores the start and end
+ pointers into the XML file itself, and will apply normalization
+ and entity translation if actually read. Can also store (and memory
+ manage) a traditional char[]
+*/
+class TINYXML2_LIB StrPair
+{
+public:
+ enum {
+ NEEDS_ENTITY_PROCESSING = 0x01,
+ NEEDS_NEWLINE_NORMALIZATION = 0x02,
+ NEEDS_WHITESPACE_COLLAPSING = 0x04,
+
+ TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
+ TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
+ ATTRIBUTE_NAME = 0,
+ ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
+ ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
+ COMMENT = NEEDS_NEWLINE_NORMALIZATION
+ };
+
+ StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
+ ~StrPair();
+
+ void Set( char* start, char* end, int flags ) {
+ TIXMLASSERT( start );
+ TIXMLASSERT( end );
+ Reset();
+ _start = start;
+ _end = end;
+ _flags = flags | NEEDS_FLUSH;
+ }
+
+ const char* GetStr();
+
+ bool Empty() const {
+ return _start == _end;
+ }
+
+ void SetInternedStr( const char* str ) {
+ Reset();
+ _start = const_cast<char*>(str);
+ }
+
+ void SetStr( const char* str, int flags=0 );
+
+ char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr );
+ char* ParseName( char* in );
+
+ void TransferTo( StrPair* other );
+ void Reset();
+
+private:
+ void CollapseWhitespace();
+
+ enum {
+ NEEDS_FLUSH = 0x100,
+ NEEDS_DELETE = 0x200
+ };
+
+ int _flags;
+ char* _start;
+ char* _end;
+
+ StrPair( const StrPair& other ); // not supported
+ void operator=( StrPair& other ); // not supported, use TransferTo()
+};
+
+
+/*
+ A dynamic array of Plain Old Data. Doesn't support constructors, etc.
+ Has a small initial memory pool, so that low or no usage will not
+ cause a call to new/delete
+*/
+template <class T, int INITIAL_SIZE>
+class DynArray
+{
+public:
+ DynArray() :
+ _mem( _pool ),
+ _allocated( INITIAL_SIZE ),
+ _size( 0 )
+ {
+ }
+
+ ~DynArray() {
+ if ( _mem != _pool ) {
+ Aws::DeleteArray<T>(_mem);
+ }
+ }
+
+ void Clear() {
+ _size = 0;
+ }
+
+ void Push( T t ) {
+ TIXMLASSERT( _size < INT_MAX );
+ EnsureCapacity( _size+1 );
+ _mem[_size] = t;
+ ++_size;
+ }
+
+ T* PushArr( int count ) {
+ TIXMLASSERT( count >= 0 );
+ TIXMLASSERT( _size <= INT_MAX - count );
+ EnsureCapacity( _size+count );
+ T* ret = &_mem[_size];
+ _size += count;
+ return ret;
+ }
+
+ T Pop() {
+ TIXMLASSERT( _size > 0 );
+ --_size;
+ return _mem[_size];
+ }
+
+ void PopArr( int count ) {
+ TIXMLASSERT( _size >= count );
+ _size -= count;
+ }
+
+ bool Empty() const {
+ return _size == 0;
+ }
+
+ T& operator[](int i) {
+ TIXMLASSERT( i>= 0 && i < _size );
+ return _mem[i];
+ }
+
+ const T& operator[](int i) const {
+ TIXMLASSERT( i>= 0 && i < _size );
+ return _mem[i];
+ }
+
+ const T& PeekTop() const {
+ TIXMLASSERT( _size > 0 );
+ return _mem[ _size - 1];
+ }
+
+ int Size() const {
+ TIXMLASSERT( _size >= 0 );
+ return _size;
+ }
+
+ int Capacity() const {
+ TIXMLASSERT( _allocated >= INITIAL_SIZE );
+ return _allocated;
+ }
+
+ void SwapRemove(int i) {
+ TIXMLASSERT(i >= 0 && i < _size);
+ TIXMLASSERT(_size > 0);
+ _mem[i] = _mem[_size - 1];
+ --_size;
+ }
+
+ const T* Mem() const {
+ TIXMLASSERT( _mem );
+ return _mem;
+ }
+
+ T* Mem() {
+ TIXMLASSERT( _mem );
+ return _mem;
+ }
+
+private:
+ DynArray( const DynArray& ); // not supported
+ void operator=( const DynArray& ); // not supported
+
+ void EnsureCapacity( int cap ) {
+ TIXMLASSERT( cap > 0 );
+ if ( cap > _allocated ) {
+ TIXMLASSERT( cap <= INT_MAX / 2 );
+ int newAllocated = cap * 2;
+ T* newMem = Aws::NewArray<T>(newAllocated, ALLOCATION_TAG);
+ TIXMLASSERT( newAllocated >= _size );
+ memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs
+ if ( _mem != _pool ) {
+ Aws::DeleteArray<T>(_mem);
+ }
+ _mem = newMem;
+ _allocated = newAllocated;
+ }
+ }
+
+ T* _mem;
+ T _pool[INITIAL_SIZE];
+ int _allocated; // objects allocated
+ int _size; // number objects in use
+};
+
+
+/*
+ Parent virtual class of a pool for fast allocation
+ and deallocation of objects.
+*/
+class MemPool
+{
+public:
+ MemPool() {}
+ virtual ~MemPool() {}
+
+ virtual int ItemSize() const = 0;
+ virtual void* Alloc() = 0;
+ virtual void Free( void* ) = 0;
+ virtual void SetTracked() = 0;
+ virtual void Clear() = 0;
+};
+
+
+/*
+ Template child class to create pools of the correct type.
+*/
+template< int ITEM_SIZE >
+class MemPoolT : public MemPool
+{
+public:
+ MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {}
+ ~MemPoolT() {
+ Clear();
+ }
+
+ void Clear() {
+ // Delete the blocks.
+ while( !_blockPtrs.Empty()) {
+ Block* lastBlock = _blockPtrs.Pop();
+ Aws::Delete(lastBlock);
+ }
+ _root = 0;
+ _currentAllocs = 0;
+ _nAllocs = 0;
+ _maxAllocs = 0;
+ _nUntracked = 0;
+ }
+
+ virtual int ItemSize() const {
+ return ITEM_SIZE;
+ }
+ int CurrentAllocs() const {
+ return _currentAllocs;
+ }
+
+ virtual void* Alloc() {
+ if ( !_root ) {
+ // Need a new block.
+ Block* block = Aws::New<Block>(ALLOCATION_TAG);
+ _blockPtrs.Push( block );
+
+ Item* blockItems = block->items;
+ for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) {
+ blockItems[i].next = &(blockItems[i + 1]);
+ }
+ blockItems[ITEMS_PER_BLOCK - 1].next = 0;
+ _root = blockItems;
+ }
+ Item* const result = _root;
+ TIXMLASSERT( result != 0 );
+ _root = _root->next;
+
+ ++_currentAllocs;
+ if ( _currentAllocs > _maxAllocs ) {
+ _maxAllocs = _currentAllocs;
+ }
+ ++_nAllocs;
+ ++_nUntracked;
+ return result;
+ }
+
+ virtual void Free( void* mem ) {
+ if ( !mem ) {
+ return;
+ }
+ --_currentAllocs;
+ Item* item = static_cast<Item*>( mem );
+#ifdef DEBUG
+ memset( item, 0xfe, sizeof( *item ) );
+#endif
+ item->next = _root;
+ _root = item;
+ }
+ void Trace( const char* name ) {
+ printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
+ name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
+ ITEM_SIZE, _nAllocs, _blockPtrs.Size() );
+ }
+
+ void SetTracked() {
+ --_nUntracked;
+ }
+
+ int Untracked() const {
+ return _nUntracked;
+ }
+
+ // This number is perf sensitive. 4k seems like a good tradeoff on my machine.
+ // The test file is large, 170k.
+ // Release: VS2010 gcc(no opt)
+ // 1k: 4000
+ // 2k: 4000
+ // 4k: 3900 21000
+ // 16k: 5200
+ // 32k: 4300
+ // 64k: 4000 21000
+ // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK
+ // in private part if ITEMS_PER_BLOCK is private
+ enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE };
+
+private:
+ MemPoolT( const MemPoolT& ); // not supported
+ void operator=( const MemPoolT& ); // not supported
+
+ union Item {
+ Item* next;
+ char itemData[ITEM_SIZE];
+ };
+ struct Block {
+ Item items[ITEMS_PER_BLOCK];
+ };
+ DynArray< Block*, 10 > _blockPtrs;
+ Item* _root;
+
+ int _currentAllocs;
+ int _nAllocs;
+ int _maxAllocs;
+ int _nUntracked;
+};
+
+
+
+/**
+ Implements the interface to the "Visitor pattern" (see the Accept() method.)
+ If you call the Accept() method, it requires being passed a XMLVisitor
+ class to handle callbacks. For nodes that contain other nodes (Document, Element)
+ you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs
+ are simply called with Visit().
+
+ If you return 'true' from a Visit method, recursive parsing will continue. If you return
+ false, <b>no children of this node or its siblings</b> will be visited.
+
+ All flavors of Visit methods have a default implementation that returns 'true' (continue
+ visiting). You need to only override methods that are interesting to you.
+
+ Generally Accept() is called on the XMLDocument, although all nodes support visiting.
+
+ You should never change the document from a callback.
+
+ @sa XMLNode::Accept()
+*/
+class TINYXML2_LIB XMLVisitor
+{
+public:
+ virtual ~XMLVisitor() {}
+
+ /// Visit a document.
+ virtual bool VisitEnter( const XMLDocument& /*doc*/ ) {
+ return true;
+ }
+ /// Visit a document.
+ virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
+ return true;
+ }
+
+ /// Visit an element.
+ virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) {
+ return true;
+ }
+ /// Visit an element.
+ virtual bool VisitExit( const XMLElement& /*element*/ ) {
+ return true;
+ }
+
+ /// Visit a declaration.
+ virtual bool Visit( const XMLDeclaration& /*declaration*/ ) {
+ return true;
+ }
+ /// Visit a text node.
+ virtual bool Visit( const XMLText& /*text*/ ) {
+ return true;
+ }
+ /// Visit a comment node.
+ virtual bool Visit( const XMLComment& /*comment*/ ) {
+ return true;
+ }
+ /// Visit an unknown node.
+ virtual bool Visit( const XMLUnknown& /*unknown*/ ) {
+ return true;
+ }
+};
+
+// WARNING: must match XMLDocument::_errorNames[]
+enum XMLError {
+ XML_SUCCESS = 0,
+ XML_NO_ATTRIBUTE,
+ XML_WRONG_ATTRIBUTE_TYPE,
+ XML_ERROR_FILE_NOT_FOUND,
+ XML_ERROR_FILE_COULD_NOT_BE_OPENED,
+ XML_ERROR_FILE_READ_ERROR,
+ UNUSED_XML_ERROR_ELEMENT_MISMATCH, // remove at next major version
+ XML_ERROR_PARSING_ELEMENT,
+ XML_ERROR_PARSING_ATTRIBUTE,
+ UNUSED_XML_ERROR_IDENTIFYING_TAG, // remove at next major version
+ XML_ERROR_PARSING_TEXT,
+ XML_ERROR_PARSING_CDATA,
+ XML_ERROR_PARSING_COMMENT,
+ XML_ERROR_PARSING_DECLARATION,
+ XML_ERROR_PARSING_UNKNOWN,
+ XML_ERROR_EMPTY_DOCUMENT,
+ XML_ERROR_MISMATCHED_ELEMENT,
+ XML_ERROR_PARSING,
+ XML_CAN_NOT_CONVERT_TEXT,
+ XML_NO_TEXT_NODE,
+
+ XML_ERROR_COUNT
+};
+
+
+/*
+ Utility functionality.
+*/
+class TINYXML2_LIB XMLUtil
+{
+public:
+ static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) {
+ TIXMLASSERT( p );
+
+ while( IsWhiteSpace(*p) ) {
+ if (curLineNumPtr && *p == '\n') {
+ ++(*curLineNumPtr);
+ }
+ ++p;
+ }
+ TIXMLASSERT( p );
+ return p;
+ }
+ static char* SkipWhiteSpace( char* p, int* curLineNumPtr ) {
+ return const_cast<char*>( SkipWhiteSpace( const_cast<const char*>(p), curLineNumPtr ) );
+ }
+
+ // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
+ // correct, but simple, and usually works.
+ static bool IsWhiteSpace( char p ) {
+ return !IsUTF8Continuation(p) && isspace( static_cast<unsigned char>(p) );
+ }
+
+ inline static bool IsNameStartChar( unsigned char ch ) {
+ if ( ch >= 128 ) {
+ // This is a heuristic guess in attempt to not implement Unicode-aware isalpha()
+ return true;
+ }
+ if ( isalpha( ch ) ) {
+ return true;
+ }
+ return ch == ':' || ch == '_';
+ }
+
+ inline static bool IsNameChar( unsigned char ch ) {
+ return IsNameStartChar( ch )
+ || isdigit( ch )
+ || ch == '.'
+ || ch == '-';
+ }
+
+ inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) {
+ if ( p == q ) {
+ return true;
+ }
+ TIXMLASSERT( p );
+ TIXMLASSERT( q );
+ TIXMLASSERT( nChar >= 0 );
+ return strncmp( p, q, nChar ) == 0;
+ }
+
+ inline static bool IsUTF8Continuation( char p ) {
+ return ( p & 0x80 ) != 0;
+ }
+
+ static const char* ReadBOM( const char* p, bool* hasBOM );
+ // p is the starting location,
+ // the UTF-8 value of the entity will be placed in value, and length filled in.
+ static const char* GetCharacterRef( const char* p, char* value, int* length );
+ static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
+
+ // converts primitive types to strings
+ static void ToStr( int v, char* buffer, int bufferSize );
+ static void ToStr( unsigned v, char* buffer, int bufferSize );
+ static void ToStr( bool v, char* buffer, int bufferSize );
+ static void ToStr( float v, char* buffer, int bufferSize );
+ static void ToStr( double v, char* buffer, int bufferSize );
+ static void ToStr(int64_t v, char* buffer, int bufferSize);
+
+ // converts strings to primitive types
+ static bool ToInt( const char* str, int* value );
+ static bool ToUnsigned( const char* str, unsigned* value );
+ static bool ToBool( const char* str, bool* value );
+ static bool ToFloat( const char* str, float* value );
+ static bool ToDouble( const char* str, double* value );
+ static bool ToInt64(const char* str, int64_t* value);
+
+ // Changes what is serialized for a boolean value.
+ // Default to "true" and "false". Shouldn't be changed
+ // unless you have a special testing or compatibility need.
+ // Be careful: static, global, & not thread safe.
+ // Be sure to set static const memory as parameters.
+ static void SetBoolSerialization(const char* writeTrue, const char* writeFalse);
+
+private:
+ static const char* writeBoolTrue;
+ static const char* writeBoolFalse;
+};
+
+
+/** XMLNode is a base class for every object that is in the
+ XML Document Object Model (DOM), except XMLAttributes.
+ Nodes have siblings, a parent, and children which can
+ be navigated. A node is always in a XMLDocument.
+ The type of a XMLNode can be queried, and it can
+ be cast to its more defined type.
+
+ A XMLDocument allocates memory for all its Nodes.
+ When the XMLDocument gets deleted, all its Nodes
+ will also be deleted.
+
+ @verbatim
+ A Document can contain: Element (container or leaf)
+ Comment (leaf)
+ Unknown (leaf)
+ Declaration( leaf )
+
+ An Element can contain: Element (container or leaf)
+ Text (leaf)
+ Attributes (not on tree)
+ Comment (leaf)
+ Unknown (leaf)
+
+ @endverbatim
+*/
+class TINYXML2_LIB XMLNode
+{
+ friend class XMLDocument;
+ friend class XMLElement;
+public:
+
+ /// Get the XMLDocument that owns this XMLNode.
+ const XMLDocument* GetDocument() const {
+ TIXMLASSERT( _document );
+ return _document;
+ }
+ /// Get the XMLDocument that owns this XMLNode.
+ XMLDocument* GetDocument() {
+ TIXMLASSERT( _document );
+ return _document;
+ }
+
+ /// Safely cast to an Element, or null.
+ virtual XMLElement* ToElement() {
+ return 0;
+ }
+ /// Safely cast to Text, or null.
+ virtual XMLText* ToText() {
+ return 0;
+ }
+ /// Safely cast to a Comment, or null.
+ virtual XMLComment* ToComment() {
+ return 0;
+ }
+ /// Safely cast to a Document, or null.
+ virtual XMLDocument* ToDocument() {
+ return 0;
+ }
+ /// Safely cast to a Declaration, or null.
+ virtual XMLDeclaration* ToDeclaration() {
+ return 0;
+ }
+ /// Safely cast to an Unknown, or null.
+ virtual XMLUnknown* ToUnknown() {
+ return 0;
+ }
+
+ virtual const XMLElement* ToElement() const {
+ return 0;
+ }
+ virtual const XMLText* ToText() const {
+ return 0;
+ }
+ virtual const XMLComment* ToComment() const {
+ return 0;
+ }
+ virtual const XMLDocument* ToDocument() const {
+ return 0;
+ }
+ virtual const XMLDeclaration* ToDeclaration() const {
+ return 0;
+ }
+ virtual const XMLUnknown* ToUnknown() const {
+ return 0;
+ }
+
+ /** The meaning of 'value' changes for the specific type.
+ @verbatim
+ Document: empty (NULL is returned, not an empty string)
+ Element: name of the element
+ Comment: the comment text
+ Unknown: the tag contents
+ Text: the text string
+ @endverbatim
+ */
+ const char* Value() const;
+
+ /** Set the Value of an XML node.
+ @sa Value()
+ */
+ void SetValue( const char* val, bool staticMem=false );
+
+ /// Gets the line number the node is in, if the document was parsed from a file.
+ int GetLineNum() const { return _parseLineNum; }
+
+ /// Get the parent of this node on the DOM.
+ const XMLNode* Parent() const {
+ return _parent;
+ }
+
+ XMLNode* Parent() {
+ return _parent;
+ }
+
+ /// Returns true if this node has no children.
+ bool NoChildren() const {
+ return !_firstChild;
+ }
+
+ /// Get the first child node, or null if none exists.
+ const XMLNode* FirstChild() const {
+ return _firstChild;
+ }
+
+ XMLNode* FirstChild() {
+ return _firstChild;
+ }
+
+ /** Get the first child element, or optionally the first child
+ element with the specified name.
+ */
+ const XMLElement* FirstChildElement( const char* name = 0 ) const;
+
+ XMLElement* FirstChildElement( const char* name = 0 ) {
+ return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->FirstChildElement( name ));
+ }
+
+ /// Get the last child node, or null if none exists.
+ const XMLNode* LastChild() const {
+ return _lastChild;
+ }
+
+ XMLNode* LastChild() {
+ return _lastChild;
+ }
+
+ /** Get the last child element or optionally the last child
+ element with the specified name.
+ */
+ const XMLElement* LastChildElement( const char* name = 0 ) const;
+
+ XMLElement* LastChildElement( const char* name = 0 ) {
+ return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->LastChildElement(name) );
+ }
+
+ /// Get the previous (left) sibling node of this node.
+ const XMLNode* PreviousSibling() const {
+ return _prev;
+ }
+
+ XMLNode* PreviousSibling() {
+ return _prev;
+ }
+
+ /// Get the previous (left) sibling element of this node, with an optionally supplied name.
+ const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ;
+
+ XMLElement* PreviousSiblingElement( const char* name = 0 ) {
+ return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->PreviousSiblingElement( name ) );
+ }
+
+ /// Get the next (right) sibling node of this node.
+ const XMLNode* NextSibling() const {
+ return _next;
+ }
+
+ XMLNode* NextSibling() {
+ return _next;
+ }
+
+ /// Get the next (right) sibling element of this node, with an optionally supplied name.
+ const XMLElement* NextSiblingElement( const char* name = 0 ) const;
+
+ XMLElement* NextSiblingElement( const char* name = 0 ) {
+ return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->NextSiblingElement( name ) );
+ }
+
+ /**
+ Add a child node as the last (right) child.
+ If the child node is already part of the document,
+ it is moved from its old location to the new location.
+ Returns the addThis argument or 0 if the node does not
+ belong to the same document.
+ */
+ XMLNode* InsertEndChild( XMLNode* addThis );
+
+ XMLNode* LinkEndChild( XMLNode* addThis ) {
+ return InsertEndChild( addThis );
+ }
+ /**
+ Add a child node as the first (left) child.
+ If the child node is already part of the document,
+ it is moved from its old location to the new location.
+ Returns the addThis argument or 0 if the node does not
+ belong to the same document.
+ */
+ XMLNode* InsertFirstChild( XMLNode* addThis );
+ /**
+ Add a node after the specified child node.
+ If the child node is already part of the document,
+ it is moved from its old location to the new location.
+ Returns the addThis argument or 0 if the afterThis node
+ is not a child of this node, or if the node does not
+ belong to the same document.
+ */
+ XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis );
+
+ /**
+ Delete all the children of this node.
+ */
+ void DeleteChildren();
+
+ /**
+ Delete a child of this node.
+ */
+ void DeleteChild( XMLNode* node );
+
+ /**
+ Make a copy of this node, but not its children.
+ You may pass in a Document pointer that will be
+ the owner of the new Node. If the 'document' is
+ null, then the node returned will be allocated
+ from the current Document. (this->GetDocument())
+
+ Note: if called on a XMLDocument, this will return null.
+ */
+ virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0;
+
+ /**
+ Make a copy of this node and all its children.
+
+ If the 'target' is null, then the nodes will
+ be allocated in the current document. If 'target'
+ is specified, the memory will be allocated is the
+ specified XMLDocument.
+
+ NOTE: This is probably not the correct tool to
+ copy a document, since XMLDocuments can have multiple
+ top level XMLNodes. You probably want to use
+ XMLDocument::DeepCopy()
+ */
+ XMLNode* DeepClone( XMLDocument* target ) const;
+
+ /**
+ Test if 2 nodes are the same, but don't test children.
+ The 2 nodes do not need to be in the same Document.
+
+ Note: if called on a XMLDocument, this will return false.
+ */
+ virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
+
+ /** Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the
+ XML tree will be conditionally visited and the host will be called back
+ via the XMLVisitor interface.
+
+ This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse
+ the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this
+ interface versus any other.)
+
+ The interface has been based on ideas from:
+
+ - http://www.saxproject.org/
+ - http://c2.com/cgi/wiki?HierarchicalVisitorPattern
+
+ Which are both good references for "visiting".
+
+ An example of using Accept():
+ @verbatim
+ XMLPrinter printer;
+ tinyxmlDoc.Accept( &printer );
+ const char* xmlcstr = printer.CStr();
+ @endverbatim
+ */
+ virtual bool Accept( XMLVisitor* visitor ) const = 0;
+
+ /**
+ Set user data into the XMLNode. TinyXML-2 in
+ no way processes or interprets user data.
+ It is initially 0.
+ */
+ void SetUserData(void* userData) { _userData = userData; }
+
+ /**
+ Get user data set into the XMLNode. TinyXML-2 in
+ no way processes or interprets user data.
+ It is initially 0.
+ */
+ void* GetUserData() const { return _userData; }
+
+protected:
+ XMLNode( XMLDocument* );
+ virtual ~XMLNode();
+
+ virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
+
+ XMLDocument* _document;
+ XMLNode* _parent;
+ mutable StrPair _value;
+ int _parseLineNum;
+
+ XMLNode* _firstChild;
+ XMLNode* _lastChild;
+
+ XMLNode* _prev;
+ XMLNode* _next;
+
+ void* _userData;
+
+private:
+ MemPool* _memPool;
+ void Unlink( XMLNode* child );
+ static void DeleteNode( XMLNode* node );
+ void InsertChildPreamble( XMLNode* insertThis ) const;
+ const XMLElement* ToElementWithName( const char* name ) const;
+
+ XMLNode( const XMLNode& ); // not supported
+ XMLNode& operator=( const XMLNode& ); // not supported
+};
+
+
+/** XML text.
+
+ Note that a text node can have child element nodes, for example:
+ @verbatim
+ <root>This is <b>bold</b></root>
+ @endverbatim
+
+ A text node can have 2 ways to output the next. "normal" output
+ and CDATA. It will default to the mode it was parsed from the XML file and
+ you generally want to leave it alone, but you can change the output mode with
+ SetCData() and query it with CData().
+*/
+class TINYXML2_LIB XMLText : public XMLNode
+{
+ friend class XMLDocument;
+public:
+ virtual bool Accept( XMLVisitor* visitor ) const;
+
+ virtual XMLText* ToText() {
+ return this;
+ }
+ virtual const XMLText* ToText() const {
+ return this;
+ }
+
+ /// Declare whether this should be CDATA or standard text.
+ void SetCData( bool isCData ) {
+ _isCData = isCData;
+ }
+ /// Returns true if this is a CDATA text element.
+ bool CData() const {
+ return _isCData;
+ }
+
+ virtual XMLNode* ShallowClone( XMLDocument* document ) const;
+ virtual bool ShallowEqual( const XMLNode* compare ) const;
+
+protected:
+ XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {}
+ virtual ~XMLText() {}
+
+ char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
+
+private:
+ bool _isCData;
+
+ XMLText( const XMLText& ); // not supported
+ XMLText& operator=( const XMLText& ); // not supported
+};
+
+
+/** An XML Comment. */
+class TINYXML2_LIB XMLComment : public XMLNode
+{
+ friend class XMLDocument;
+public:
+ virtual XMLComment* ToComment() {
+ return this;
+ }
+ virtual const XMLComment* ToComment() const {
+ return this;
+ }
+
+ virtual bool Accept( XMLVisitor* visitor ) const;
+
+ virtual XMLNode* ShallowClone( XMLDocument* document ) const;
+ virtual bool ShallowEqual( const XMLNode* compare ) const;
+
+protected:
+ XMLComment( XMLDocument* doc );
+ virtual ~XMLComment();
+
+ char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
+
+private:
+ XMLComment( const XMLComment& ); // not supported
+ XMLComment& operator=( const XMLComment& ); // not supported
+};
+
+
+/** In correct XML the declaration is the first entry in the file.
+ @verbatim
+ <?xml version="1.0" standalone="yes"?>
+ @endverbatim
+
+ TinyXML-2 will happily read or write files without a declaration,
+ however.
+
+ The text of the declaration isn't interpreted. It is parsed
+ and written as a string.
+*/
+class TINYXML2_LIB XMLDeclaration : public XMLNode
+{
+ friend class XMLDocument;
+public:
+ virtual XMLDeclaration* ToDeclaration() {
+ return this;
+ }
+ virtual const XMLDeclaration* ToDeclaration() const {
+ return this;
+ }
+
+ virtual bool Accept( XMLVisitor* visitor ) const;
+
+ virtual XMLNode* ShallowClone( XMLDocument* document ) const;
+ virtual bool ShallowEqual( const XMLNode* compare ) const;
+
+protected:
+ XMLDeclaration( XMLDocument* doc );
+ virtual ~XMLDeclaration();
+
+ char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
+
+private:
+ XMLDeclaration( const XMLDeclaration& ); // not supported
+ XMLDeclaration& operator=( const XMLDeclaration& ); // not supported
+};
+
+
+/** Any tag that TinyXML-2 doesn't recognize is saved as an
+ unknown. It is a tag of text, but should not be modified.
+ It will be written back to the XML, unchanged, when the file
+ is saved.
+
+ DTD tags get thrown into XMLUnknowns.
+*/
+class TINYXML2_LIB XMLUnknown : public XMLNode
+{
+ friend class XMLDocument;
+public:
+ virtual XMLUnknown* ToUnknown() {
+ return this;
+ }
+ virtual const XMLUnknown* ToUnknown() const {
+ return this;
+ }
+
+ virtual bool Accept( XMLVisitor* visitor ) const;
+
+ virtual XMLNode* ShallowClone( XMLDocument* document ) const;
+ virtual bool ShallowEqual( const XMLNode* compare ) const;
+
+protected:
+ XMLUnknown( XMLDocument* doc );
+ virtual ~XMLUnknown();
+
+ char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
+
+private:
+ XMLUnknown( const XMLUnknown& ); // not supported
+ XMLUnknown& operator=( const XMLUnknown& ); // not supported
+};
+
+
+
+/** An attribute is a name-value pair. Elements have an arbitrary
+ number of attributes, each with a unique name.
+
+ @note The attributes are not XMLNodes. You may only query the
+ Next() attribute in a list.
+*/
+class TINYXML2_LIB XMLAttribute
+{
+ friend class XMLElement;
+public:
+ /// The name of the attribute.
+ const char* Name() const;
+
+ /// The value of the attribute.
+ const char* Value() const;
+
+ /// Gets the line number the attribute is in, if the document was parsed from a file.
+ int GetLineNum() const { return _parseLineNum; }
+
+ /// The next attribute in the list.
+ const XMLAttribute* Next() const {
+ return _next;
+ }
+
+ /** IntValue interprets the attribute as an integer, and returns the value.
+ If the value isn't an integer, 0 will be returned. There is no error checking;
+ use QueryIntValue() if you need error checking.
+ */
+ int IntValue() const {
+ int i = 0;
+ QueryIntValue(&i);
+ return i;
+ }
+
+ int64_t Int64Value() const {
+ int64_t i = 0;
+ QueryInt64Value(&i);
+ return i;
+ }
+
+ /// Query as an unsigned integer. See IntValue()
+ unsigned UnsignedValue() const {
+ unsigned i=0;
+ QueryUnsignedValue( &i );
+ return i;
+ }
+ /// Query as a boolean. See IntValue()
+ bool BoolValue() const {
+ bool b=false;
+ QueryBoolValue( &b );
+ return b;
+ }
+ /// Query as a double. See IntValue()
+ double DoubleValue() const {
+ double d=0;
+ QueryDoubleValue( &d );
+ return d;
+ }
+ /// Query as a float. See IntValue()
+ float FloatValue() const {
+ float f=0;
+ QueryFloatValue( &f );
+ return f;
+ }
+
+ /** QueryIntValue interprets the attribute as an integer, and returns the value
+ in the provided parameter. The function will return XML_SUCCESS on success,
+ and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful.
+ */
+ XMLError QueryIntValue( int* value ) const;
+ /// See QueryIntValue
+ XMLError QueryUnsignedValue( unsigned int* value ) const;
+ /// See QueryIntValue
+ XMLError QueryInt64Value(int64_t* value) const;
+ /// See QueryIntValue
+ XMLError QueryBoolValue( bool* value ) const;
+ /// See QueryIntValue
+ XMLError QueryDoubleValue( double* value ) const;
+ /// See QueryIntValue
+ XMLError QueryFloatValue( float* value ) const;
+
+ /// Set the attribute to a string value.
+ void SetAttribute( const char* value );
+ /// Set the attribute to value.
+ void SetAttribute( int value );
+ /// Set the attribute to value.
+ void SetAttribute( unsigned value );
+ /// Set the attribute to value.
+ void SetAttribute(int64_t value);
+ /// Set the attribute to value.
+ void SetAttribute( bool value );
+ /// Set the attribute to value.
+ void SetAttribute( double value );
+ /// Set the attribute to value.
+ void SetAttribute( float value );
+
+private:
+ enum { BUF_SIZE = 200 };
+
+ XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {}
+ virtual ~XMLAttribute() {}
+
+ XMLAttribute( const XMLAttribute& ); // not supported
+ void operator=( const XMLAttribute& ); // not supported
+ void SetName( const char* name );
+
+ char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr );
+
+ mutable StrPair _name;
+ mutable StrPair _value;
+ int _parseLineNum;
+ XMLAttribute* _next;
+ MemPool* _memPool;
+};
+
+
+/** The element is a container class. It has a value, the element name,
+ and can contain other elements, text, comments, and unknowns.
+ Elements also contain an arbitrary number of attributes.
+*/
+class TINYXML2_LIB XMLElement : public XMLNode
+{
+ friend class XMLDocument;
+public:
+ /// Get the name of an element (which is the Value() of the node.)
+ const char* Name() const {
+ return Value();
+ }
+ /// Set the name of the element.
+ void SetName( const char* str, bool staticMem=false ) {
+ SetValue( str, staticMem );
+ }
+
+ virtual XMLElement* ToElement() {
+ return this;
+ }
+ virtual const XMLElement* ToElement() const {
+ return this;
+ }
+ virtual bool Accept( XMLVisitor* visitor ) const;
+
+ /** Given an attribute name, Attribute() returns the value
+ for the attribute of that name, or null if none
+ exists. For example:
+
+ @verbatim
+ const char* value = ele->Attribute( "foo" );
+ @endverbatim
+
+ The 'value' parameter is normally null. However, if specified,
+ the attribute will only be returned if the 'name' and 'value'
+ match. This allow you to write code:
+
+ @verbatim
+ if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar();
+ @endverbatim
+
+ rather than:
+ @verbatim
+ if ( ele->Attribute( "foo" ) ) {
+ if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar();
+ }
+ @endverbatim
+ */
+ const char* Attribute( const char* name, const char* value=0 ) const;
+
+ /** Given an attribute name, IntAttribute() returns the value
+ of the attribute interpreted as an integer. The default
+ value will be returned if the attribute isn't present,
+ or if there is an error. (For a method with error
+ checking, see QueryIntAttribute()).
+ */
+ int IntAttribute(const char* name, int defaultValue = 0) const;
+ /// See IntAttribute()
+ unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const;
+ /// See IntAttribute()
+ int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const;
+ /// See IntAttribute()
+ bool BoolAttribute(const char* name, bool defaultValue = false) const;
+ /// See IntAttribute()
+ double DoubleAttribute(const char* name, double defaultValue = 0) const;
+ /// See IntAttribute()
+ float FloatAttribute(const char* name, float defaultValue = 0) const;
+
+ /** Given an attribute name, QueryIntAttribute() returns
+ XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion
+ can't be performed, or XML_NO_ATTRIBUTE if the attribute
+ doesn't exist. If successful, the result of the conversion
+ will be written to 'value'. If not successful, nothing will
+ be written to 'value'. This allows you to provide default
+ value:
+
+ @verbatim
+ int value = 10;
+ QueryIntAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10
+ @endverbatim
+ */
+ XMLError QueryIntAttribute( const char* name, int* value ) const {
+ const XMLAttribute* a = FindAttribute( name );
+ if ( !a ) {
+ return XML_NO_ATTRIBUTE;
+ }
+ return a->QueryIntValue( value );
+ }
+
+ /// See QueryIntAttribute()
+ XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const {
+ const XMLAttribute* a = FindAttribute( name );
+ if ( !a ) {
+ return XML_NO_ATTRIBUTE;
+ }
+ return a->QueryUnsignedValue( value );
+ }
+
+ /// See QueryIntAttribute()
+ XMLError QueryInt64Attribute(const char* name, int64_t* value) const {
+ const XMLAttribute* a = FindAttribute(name);
+ if (!a) {
+ return XML_NO_ATTRIBUTE;
+ }
+ return a->QueryInt64Value(value);
+ }
+
+ /// See QueryIntAttribute()
+ XMLError QueryBoolAttribute( const char* name, bool* value ) const {
+ const XMLAttribute* a = FindAttribute( name );
+ if ( !a ) {
+ return XML_NO_ATTRIBUTE;
+ }
+ return a->QueryBoolValue( value );
+ }
+ /// See QueryIntAttribute()
+ XMLError QueryDoubleAttribute( const char* name, double* value ) const {
+ const XMLAttribute* a = FindAttribute( name );
+ if ( !a ) {
+ return XML_NO_ATTRIBUTE;
+ }
+ return a->QueryDoubleValue( value );
+ }
+ /// See QueryIntAttribute()
+ XMLError QueryFloatAttribute( const char* name, float* value ) const {
+ const XMLAttribute* a = FindAttribute( name );
+ if ( !a ) {
+ return XML_NO_ATTRIBUTE;
+ }
+ return a->QueryFloatValue( value );
+ }
+
+
+ /** Given an attribute name, QueryAttribute() returns
+ XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion
+ can't be performed, or XML_NO_ATTRIBUTE if the attribute
+ doesn't exist. It is overloaded for the primitive types,
+ and is a generally more convenient replacement of
+ QueryIntAttribute() and related functions.
+
+ If successful, the result of the conversion
+ will be written to 'value'. If not successful, nothing will
+ be written to 'value'. This allows you to provide default
+ value:
+
+ @verbatim
+ int value = 10;
+ QueryAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10
+ @endverbatim
+ */
+ int QueryAttribute( const char* name, int* value ) const {
+ return QueryIntAttribute( name, value );
+ }
+
+ int QueryAttribute( const char* name, unsigned int* value ) const {
+ return QueryUnsignedAttribute( name, value );
+ }
+
+ int QueryAttribute(const char* name, int64_t* value) const {
+ return QueryInt64Attribute(name, value);
+ }
+
+ int QueryAttribute( const char* name, bool* value ) const {
+ return QueryBoolAttribute( name, value );
+ }
+
+ int QueryAttribute( const char* name, double* value ) const {
+ return QueryDoubleAttribute( name, value );
+ }
+
+ int QueryAttribute( const char* name, float* value ) const {
+ return QueryFloatAttribute( name, value );
+ }
+
+ /// Sets the named attribute to value.
+ void SetAttribute( const char* name, const char* value ) {
+ XMLAttribute* a = FindOrCreateAttribute( name );
+ a->SetAttribute( value );
+ }
+ /// Sets the named attribute to value.
+ void SetAttribute( const char* name, int value ) {
+ XMLAttribute* a = FindOrCreateAttribute( name );
+ a->SetAttribute( value );
+ }
+ /// Sets the named attribute to value.
+ void SetAttribute( const char* name, unsigned value ) {
+ XMLAttribute* a = FindOrCreateAttribute( name );
+ a->SetAttribute( value );
+ }
+
+ /// Sets the named attribute to value.
+ void SetAttribute(const char* name, int64_t value) {
+ XMLAttribute* a = FindOrCreateAttribute(name);
+ a->SetAttribute(value);
+ }
+
+ /// Sets the named attribute to value.
+ void SetAttribute( const char* name, bool value ) {
+ XMLAttribute* a = FindOrCreateAttribute( name );
+ a->SetAttribute( value );
+ }
+ /// Sets the named attribute to value.
+ void SetAttribute( const char* name, double value ) {
+ XMLAttribute* a = FindOrCreateAttribute( name );
+ a->SetAttribute( value );
+ }
+ /// Sets the named attribute to value.
+ void SetAttribute( const char* name, float value ) {
+ XMLAttribute* a = FindOrCreateAttribute( name );
+ a->SetAttribute( value );
+ }
+
+ /**
+ Delete an attribute.
+ */
+ void DeleteAttribute( const char* name );
+
+ /// Return the first attribute in the list.
+ const XMLAttribute* FirstAttribute() const {
+ return _rootAttribute;
+ }
+ /// Query a specific attribute in the list.
+ const XMLAttribute* FindAttribute( const char* name ) const;
+
+ /** Convenience function for easy access to the text inside an element. Although easy
+ and concise, GetText() is limited compared to getting the XMLText child
+ and accessing it directly.
+
+ If the first child of 'this' is a XMLText, the GetText()
+ returns the character string of the Text node, else null is returned.
+
+ This is a convenient method for getting the text of simple contained text:
+ @verbatim
+ <foo>This is text</foo>
+ const char* str = fooElement->GetText();
+ @endverbatim
+
+ 'str' will be a pointer to "This is text".
+
+ Note that this function can be misleading. If the element foo was created from
+ this XML:
+ @verbatim
+ <foo><b>This is text</b></foo>
+ @endverbatim
+
+ then the value of str would be null. The first child node isn't a text node, it is
+ another element. From this XML:
+ @verbatim
+ <foo>This is <b>text</b></foo>
+ @endverbatim
+ GetText() will return "This is ".
+ */
+ const char* GetText() const;
+
+ /** Convenience function for easy access to the text inside an element. Although easy
+ and concise, SetText() is limited compared to creating an XMLText child
+ and mutating it directly.
+
+ If the first child of 'this' is a XMLText, SetText() sets its value to
+ the given string, otherwise it will create a first child that is an XMLText.
+
+ This is a convenient method for setting the text of simple contained text:
+ @verbatim
+ <foo>This is text</foo>
+ fooElement->SetText( "Hullaballoo!" );
+ <foo>Hullaballoo!</foo>
+ @endverbatim
+
+ Note that this function can be misleading. If the element foo was created from
+ this XML:
+ @verbatim
+ <foo><b>This is text</b></foo>
+ @endverbatim
+
+ then it will not change "This is text", but rather prefix it with a text element:
+ @verbatim
+ <foo>Hullaballoo!<b>This is text</b></foo>
+ @endverbatim
+
+ For this XML:
+ @verbatim
+ <foo />
+ @endverbatim
+ SetText() will generate
+ @verbatim
+ <foo>Hullaballoo!</foo>
+ @endverbatim
+ */
+ void SetText( const char* inText );
+ /// Convenience method for setting text inside an element. See SetText() for important limitations.
+ void SetText( int value );
+ /// Convenience method for setting text inside an element. See SetText() for important limitations.
+ void SetText( unsigned value );
+ /// Convenience method for setting text inside an element. See SetText() for important limitations.
+ void SetText(int64_t value);
+ /// Convenience method for setting text inside an element. See SetText() for important limitations.
+ void SetText( bool value );
+ /// Convenience method for setting text inside an element. See SetText() for important limitations.
+ void SetText( double value );
+ /// Convenience method for setting text inside an element. See SetText() for important limitations.
+ void SetText( float value );
+
+ /**
+ Convenience method to query the value of a child text node. This is probably best
+ shown by example. Given you have a document is this form:
+ @verbatim
+ <point>
+ <x>1</x>
+ <y>1.4</y>
+ </point>
+ @endverbatim
+
+ The QueryIntText() and similar functions provide a safe and easier way to get to the
+ "value" of x and y.
+
+ @verbatim
+ int x = 0;
+ float y = 0; // types of x and y are contrived for example
+ const XMLElement* xElement = pointElement->FirstChildElement( "x" );
+ const XMLElement* yElement = pointElement->FirstChildElement( "y" );
+ xElement->QueryIntText( &x );
+ yElement->QueryFloatText( &y );
+ @endverbatim
+
+ @returns XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted
+ to the requested type, and XML_NO_TEXT_NODE if there is no child text to query.
+
+ */
+ XMLError QueryIntText( int* ival ) const;
+ /// See QueryIntText()
+ XMLError QueryUnsignedText( unsigned* uval ) const;
+ /// See QueryIntText()
+ XMLError QueryInt64Text(int64_t* uval) const;
+ /// See QueryIntText()
+ XMLError QueryBoolText( bool* bval ) const;
+ /// See QueryIntText()
+ XMLError QueryDoubleText( double* dval ) const;
+ /// See QueryIntText()
+ XMLError QueryFloatText( float* fval ) const;
+
+ int IntText(int defaultValue = 0) const;
+
+ /// See QueryIntText()
+ unsigned UnsignedText(unsigned defaultValue = 0) const;
+ /// See QueryIntText()
+ int64_t Int64Text(int64_t defaultValue = 0) const;
+ /// See QueryIntText()
+ bool BoolText(bool defaultValue = false) const;
+ /// See QueryIntText()
+ double DoubleText(double defaultValue = 0) const;
+ /// See QueryIntText()
+ float FloatText(float defaultValue = 0) const;
+
+ // internal:
+ enum ElementClosingType {
+ OPEN, // <foo>
+ CLOSED, // <foo/>
+ CLOSING // </foo>
+ };
+ ElementClosingType ClosingType() const {
+ return _closingType;
+ }
+ virtual XMLNode* ShallowClone( XMLDocument* document ) const;
+ virtual bool ShallowEqual( const XMLNode* compare ) const;
+
+protected:
+ char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
+
+private:
+ XMLElement( XMLDocument* doc );
+ virtual ~XMLElement();
+ XMLElement( const XMLElement& ); // not supported
+ void operator=( const XMLElement& ); // not supported
+
+ XMLAttribute* FindAttribute( const char* name ) {
+ return const_cast<XMLAttribute*>(const_cast<const XMLElement*>(this)->FindAttribute( name ));
+ }
+ XMLAttribute* FindOrCreateAttribute( const char* name );
+ //void LinkAttribute( XMLAttribute* attrib );
+ char* ParseAttributes( char* p, int* curLineNumPtr );
+ static void DeleteAttribute( XMLAttribute* attribute );
+ XMLAttribute* CreateAttribute();
+
+ enum { BUF_SIZE = 200 };
+ ElementClosingType _closingType;
+ // The attribute list is ordered; there is no 'lastAttribute'
+ // because the list needs to be scanned for dupes before adding
+ // a new attribute.
+ XMLAttribute* _rootAttribute;
+};
+
+
+enum Whitespace {
+ PRESERVE_WHITESPACE,
+ COLLAPSE_WHITESPACE
+};
+
+
+/** A Document binds together all the functionality.
+ It can be saved, loaded, and printed to the screen.
+ All Nodes are connected and allocated to a Document.
+ If the Document is deleted, all its Nodes are also deleted.
+*/
+class TINYXML2_LIB XMLDocument : public XMLNode
+{
+ friend class XMLElement;
+ // Gives access to SetError, but over-access for everything else.
+ // Wishing C++ had "internal" scope.
+ friend class XMLNode;
+ friend class XMLText;
+ friend class XMLComment;
+ friend class XMLDeclaration;
+ friend class XMLUnknown;
+public:
+ /// constructor
+ XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE );
+ ~XMLDocument();
+
+ virtual XMLDocument* ToDocument() {
+ TIXMLASSERT( this == _document );
+ return this;
+ }
+ virtual const XMLDocument* ToDocument() const {
+ TIXMLASSERT( this == _document );
+ return this;
+ }
+
+ /**
+ Parse an XML file from a character string.
+ Returns XML_SUCCESS (0) on success, or
+ an errorID.
+
+ You may optionally pass in the 'nBytes', which is
+ the number of bytes which will be parsed. If not
+ specified, TinyXML-2 will assume 'xml' points to a
+ null terminated string.
+ */
+ XMLError Parse( const char* xml, size_t nBytes=(size_t)(-1) );
+
+ /**
+ Load an XML file from disk.
+ Returns XML_SUCCESS (0) on success, or
+ an errorID.
+ */
+ XMLError LoadFile( const char* filename );
+
+ /**
+ Load an XML file from disk. You are responsible
+ for providing and closing the FILE*.
+
+ NOTE: The file should be opened as binary ("rb")
+ not text in order for TinyXML-2 to correctly
+ do newline normalization.
+
+ Returns XML_SUCCESS (0) on success, or
+ an errorID.
+ */
+ XMLError LoadFile( FILE* );
+
+ /**
+ Save the XML file to disk.
+ Returns XML_SUCCESS (0) on success, or
+ an errorID.
+ */
+ XMLError SaveFile( const char* filename, bool compact = false );
+
+ /**
+ Save the XML file to disk. You are responsible
+ for providing and closing the FILE*.
+
+ Returns XML_SUCCESS (0) on success, or
+ an errorID.
+ */
+ XMLError SaveFile( FILE* fp, bool compact = false );
+
+ bool ProcessEntities() const {
+ return _processEntities;
+ }
+ Whitespace WhitespaceMode() const {
+ return _whitespaceMode;
+ }
+
+ /**
+ Returns true if this document has a leading Byte Order Mark of UTF8.
+ */
+ bool HasBOM() const {
+ return _writeBOM;
+ }
+ /** Sets whether to write the BOM when writing the file.
+ */
+ void SetBOM( bool useBOM ) {
+ _writeBOM = useBOM;
+ }
+
+ /** Return the root element of DOM. Equivalent to FirstChildElement().
+ To get the first node, use FirstChild().
+ */
+ XMLElement* RootElement() {
+ return FirstChildElement();
+ }
+ const XMLElement* RootElement() const {
+ return FirstChildElement();
+ }
+
+ /** Print the Document. If the Printer is not provided, it will
+ print to stdout. If you provide Printer, this can print to a file:
+ @verbatim
+ XMLPrinter printer( fp );
+ doc.Print( &printer );
+ @endverbatim
+
+ Or you can use a printer to print to memory:
+ @verbatim
+ XMLPrinter printer;
+ doc.Print( &printer );
+ // printer.CStr() has a const char* to the XML
+ @endverbatim
+ */
+ void Print( XMLPrinter* streamer=0 ) const;
+ virtual bool Accept( XMLVisitor* visitor ) const;
+
+ /**
+ Create a new Element associated with
+ this Document. The memory for the Element
+ is managed by the Document.
+ */
+ XMLElement* NewElement( const char* name );
+ /**
+ Create a new Comment associated with
+ this Document. The memory for the Comment
+ is managed by the Document.
+ */
+ XMLComment* NewComment( const char* comment );
+ /**
+ Create a new Text associated with
+ this Document. The memory for the Text
+ is managed by the Document.
+ */
+ XMLText* NewText( const char* text );
+ /**
+ Create a new Declaration associated with
+ this Document. The memory for the object
+ is managed by the Document.
+
+ If the 'text' param is null, the standard
+ declaration is used.:
+ @verbatim
+ <?xml version="1.0" encoding="UTF-8"?>
+ @endverbatim
+ */
+ XMLDeclaration* NewDeclaration( const char* text=0 );
+ /**
+ Create a new Unknown associated with
+ this Document. The memory for the object
+ is managed by the Document.
+ */
+ XMLUnknown* NewUnknown( const char* text );
+
+ /**
+ Delete a node associated with this document.
+ It will be unlinked from the DOM.
+ */
+ void DeleteNode( XMLNode* node );
+
+ void ClearError() {
+ SetError(XML_SUCCESS, 0, 0);
+ }
+
+ /// Return true if there was an error parsing the document.
+ bool Error() const {
+ return _errorID != XML_SUCCESS;
+ }
+ /// Return the errorID.
+ XMLError ErrorID() const {
+ return _errorID;
+ }
+ const char* ErrorName() const;
+ static const char* ErrorIDToName(XMLError errorID);
+
+ /** Returns a "long form" error description. A hopefully helpful
+ diagnostic with location, line number, and/or additional info.
+ */
+ const char* ErrorStr() const;
+
+ /// A (trivial) utility function that prints the ErrorStr() to stdout.
+ void PrintError() const;
+
+ /// Return the line where the error occurred, or zero if unknown.
+ int ErrorLineNum() const
+ {
+ return _errorLineNum;
+ }
+
+ /// Clear the document, resetting it to the initial state.
+ void Clear();
+
+ /**
+ Copies this document to a target document.
+ The target will be completely cleared before the copy.
+ If you want to copy a sub-tree, see XMLNode::DeepClone().
+
+ NOTE: that the 'target' must be non-null.
+ */
+ void DeepCopy(XMLDocument* target) const;
+
+ // internal
+ char* Identify( char* p, XMLNode** node );
+
+ // internal
+ void MarkInUse(XMLNode*);
+
+ virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const {
+ return 0;
+ }
+ virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const {
+ return false;
+ }
+
+private:
+ XMLDocument( const XMLDocument& ); // not supported
+ void operator=( const XMLDocument& ); // not supported
+
+ bool _writeBOM;
+ bool _processEntities;
+ XMLError _errorID;
+ Whitespace _whitespaceMode;
+ mutable StrPair _errorStr;
+ int _errorLineNum;
+ char* _charBuffer;
+ int _parseCurLineNum;
+ // Memory tracking does add some overhead.
+ // However, the code assumes that you don't
+ // have a bunch of unlinked nodes around.
+ // Therefore it takes less memory to track
+ // in the document vs. a linked list in the XMLNode,
+ // and the performance is the same.
+ DynArray<XMLNode*, 10> _unlinked;
+
+ MemPoolT< sizeof(XMLElement) > _elementPool;
+ MemPoolT< sizeof(XMLAttribute) > _attributePool;
+ MemPoolT< sizeof(XMLText) > _textPool;
+ MemPoolT< sizeof(XMLComment) > _commentPool;
+
+ static const char* _errorNames[XML_ERROR_COUNT];
+
+ void Parse();
+
+ void SetError( XMLError error, int lineNum, const char* format, ... );
+
+ template<class NodeType, int PoolElementSize>
+ NodeType* CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool );
+};
+
+template<class NodeType, int PoolElementSize>
+inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool )
+{
+ TIXMLASSERT( sizeof( NodeType ) == PoolElementSize );
+ TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() );
+ NodeType* returnNode = new (pool.Alloc()) NodeType( this );
+ TIXMLASSERT( returnNode );
+ returnNode->_memPool = &pool;
+
+ _unlinked.Push(returnNode);
+ return returnNode;
+}
+
+/**
+ A XMLHandle is a class that wraps a node pointer with null checks; this is
+ an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2
+ DOM structure. It is a separate utility class.
+
+ Take an example:
+ @verbatim
+ <Document>
+ <Element attributeA = "valueA">
+ <Child attributeB = "value1" />
+ <Child attributeB = "value2" />
+ </Element>
+ </Document>
+ @endverbatim
+
+ Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very
+ easy to write a *lot* of code that looks like:
+
+ @verbatim
+ XMLElement* root = document.FirstChildElement( "Document" );
+ if ( root )
+ {
+ XMLElement* element = root->FirstChildElement( "Element" );
+ if ( element )
+ {
+ XMLElement* child = element->FirstChildElement( "Child" );
+ if ( child )
+ {
+ XMLElement* child2 = child->NextSiblingElement( "Child" );
+ if ( child2 )
+ {
+ // Finally do something useful.
+ @endverbatim
+
+ And that doesn't even cover "else" cases. XMLHandle addresses the verbosity
+ of such code. A XMLHandle checks for null pointers so it is perfectly safe
+ and correct to use:
+
+ @verbatim
+ XMLHandle docHandle( &document );
+ XMLElement* child2 = docHandle.FirstChildElement( "Document" ).FirstChildElement( "Element" ).FirstChildElement().NextSiblingElement();
+ if ( child2 )
+ {
+ // do something useful
+ @endverbatim
+
+ Which is MUCH more concise and useful.
+
+ It is also safe to copy handles - internally they are nothing more than node pointers.
+ @verbatim
+ XMLHandle handleCopy = handle;
+ @endverbatim
+
+ See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects.
+*/
+class TINYXML2_LIB XMLHandle
+{
+public:
+ /// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
+ XMLHandle( XMLNode* node ) : _node( node ) {
+ }
+ /// Create a handle from a node.
+ XMLHandle( XMLNode& node ) : _node( &node ) {
+ }
+ /// Copy constructor
+ XMLHandle( const XMLHandle& ref ) : _node( ref._node ) {
+ }
+ /// Assignment
+ XMLHandle& operator=( const XMLHandle& ref ) {
+ _node = ref._node;
+ return *this;
+ }
+
+ /// Get the first child of this handle.
+ XMLHandle FirstChild() {
+ return XMLHandle( _node ? _node->FirstChild() : 0 );
+ }
+ /// Get the first child element of this handle.
+ XMLHandle FirstChildElement( const char* name = 0 ) {
+ return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 );
+ }
+ /// Get the last child of this handle.
+ XMLHandle LastChild() {
+ return XMLHandle( _node ? _node->LastChild() : 0 );
+ }
+ /// Get the last child element of this handle.
+ XMLHandle LastChildElement( const char* name = 0 ) {
+ return XMLHandle( _node ? _node->LastChildElement( name ) : 0 );
+ }
+ /// Get the previous sibling of this handle.
+ XMLHandle PreviousSibling() {
+ return XMLHandle( _node ? _node->PreviousSibling() : 0 );
+ }
+ /// Get the previous sibling element of this handle.
+ XMLHandle PreviousSiblingElement( const char* name = 0 ) {
+ return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
+ }
+ /// Get the next sibling of this handle.
+ XMLHandle NextSibling() {
+ return XMLHandle( _node ? _node->NextSibling() : 0 );
+ }
+ /// Get the next sibling element of this handle.
+ XMLHandle NextSiblingElement( const char* name = 0 ) {
+ return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 );
+ }
+
+ /// Safe cast to XMLNode. This can return null.
+ XMLNode* ToNode() {
+ return _node;
+ }
+ /// Safe cast to XMLElement. This can return null.
+ XMLElement* ToElement() {
+ return ( _node ? _node->ToElement() : 0 );
+ }
+ /// Safe cast to XMLText. This can return null.
+ XMLText* ToText() {
+ return ( _node ? _node->ToText() : 0 );
+ }
+ /// Safe cast to XMLUnknown. This can return null.
+ XMLUnknown* ToUnknown() {
+ return ( _node ? _node->ToUnknown() : 0 );
+ }
+ /// Safe cast to XMLDeclaration. This can return null.
+ XMLDeclaration* ToDeclaration() {
+ return ( _node ? _node->ToDeclaration() : 0 );
+ }
+
+private:
+ XMLNode* _node;
+};
+
+
+/**
+ A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the
+ same in all regards, except for the 'const' qualifiers. See XMLHandle for API.
+*/
+class TINYXML2_LIB XMLConstHandle
+{
+public:
+ XMLConstHandle( const XMLNode* node ) : _node( node ) {
+ }
+ XMLConstHandle( const XMLNode& node ) : _node( &node ) {
+ }
+ XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) {
+ }
+
+ XMLConstHandle& operator=( const XMLConstHandle& ref ) {
+ _node = ref._node;
+ return *this;
+ }
+
+ const XMLConstHandle FirstChild() const {
+ return XMLConstHandle( _node ? _node->FirstChild() : 0 );
+ }
+ const XMLConstHandle FirstChildElement( const char* name = 0 ) const {
+ return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 );
+ }
+ const XMLConstHandle LastChild() const {
+ return XMLConstHandle( _node ? _node->LastChild() : 0 );
+ }
+ const XMLConstHandle LastChildElement( const char* name = 0 ) const {
+ return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 );
+ }
+ const XMLConstHandle PreviousSibling() const {
+ return XMLConstHandle( _node ? _node->PreviousSibling() : 0 );
+ }
+ const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const {
+ return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
+ }
+ const XMLConstHandle NextSibling() const {
+ return XMLConstHandle( _node ? _node->NextSibling() : 0 );
+ }
+ const XMLConstHandle NextSiblingElement( const char* name = 0 ) const {
+ return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 );
+ }
+
+
+ const XMLNode* ToNode() const {
+ return _node;
+ }
+ const XMLElement* ToElement() const {
+ return ( _node ? _node->ToElement() : 0 );
+ }
+ const XMLText* ToText() const {
+ return ( _node ? _node->ToText() : 0 );
+ }
+ const XMLUnknown* ToUnknown() const {
+ return ( _node ? _node->ToUnknown() : 0 );
+ }
+ const XMLDeclaration* ToDeclaration() const {
+ return ( _node ? _node->ToDeclaration() : 0 );
+ }
+
+private:
+ const XMLNode* _node;
+};
+
+
+/**
+ Printing functionality. The XMLPrinter gives you more
+ options than the XMLDocument::Print() method.
+
+ It can:
+ -# Print to memory.
+ -# Print to a file you provide.
+ -# Print XML without a XMLDocument.
+
+ Print to Memory
+
+ @verbatim
+ XMLPrinter printer;
+ doc.Print( &printer );
+ SomeFunction( printer.CStr() );
+ @endverbatim
+
+ Print to a File
+
+ You provide the file pointer.
+ @verbatim
+ XMLPrinter printer( fp );
+ doc.Print( &printer );
+ @endverbatim
+
+ Print without a XMLDocument
+
+ When loading, an XML parser is very useful. However, sometimes
+ when saving, it just gets in the way. The code is often set up
+ for streaming, and constructing the DOM is just overhead.
+
+ The Printer supports the streaming case. The following code
+ prints out a trivially simple XML file without ever creating
+ an XML document.
+
+ @verbatim
+ XMLPrinter printer( fp );
+ printer.OpenElement( "foo" );
+ printer.PushAttribute( "foo", "bar" );
+ printer.CloseElement();
+ @endverbatim
+*/
+class TINYXML2_LIB XMLPrinter : public XMLVisitor
+{
+public:
+ /** Construct the printer. If the FILE* is specified,
+ this will print to the FILE. Else it will print
+ to memory, and the result is available in CStr().
+ If 'compact' is set to true, then output is created
+ with only required whitespace and newlines.
+ */
+ XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 );
+ virtual ~XMLPrinter() {}
+
+ /** If streaming, write the BOM and declaration. */
+ void PushHeader( bool writeBOM, bool writeDeclaration );
+ /** If streaming, start writing an element.
+ The element must be closed with CloseElement()
+ */
+ void OpenElement( const char* name, bool compactMode=false );
+ /// If streaming, add an attribute to an open element.
+ void PushAttribute( const char* name, const char* value );
+ void PushAttribute( const char* name, int value );
+ void PushAttribute( const char* name, unsigned value );
+ void PushAttribute(const char* name, int64_t value);
+ void PushAttribute( const char* name, bool value );
+ void PushAttribute( const char* name, double value );
+ /// If streaming, close the Element.
+ virtual void CloseElement( bool compactMode=false );
+
+ /// Add a text node.
+ void PushText( const char* text, bool cdata=false );
+ /// Add a text node from an integer.
+ void PushText( int value );
+ /// Add a text node from an unsigned.
+ void PushText( unsigned value );
+ /// Add a text node from an unsigned.
+ void PushText(int64_t value);
+ /// Add a text node from a bool.
+ void PushText( bool value );
+ /// Add a text node from a float.
+ void PushText( float value );
+ /// Add a text node from a double.
+ void PushText( double value );
+
+ /// Add a comment
+ void PushComment( const char* comment );
+
+ void PushDeclaration( const char* value );
+ void PushUnknown( const char* value );
+
+ virtual bool VisitEnter( const XMLDocument& /*doc*/ );
+ virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
+ return true;
+ }
+
+ virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute );
+ virtual bool VisitExit( const XMLElement& element );
+
+ virtual bool Visit( const XMLText& text );
+ virtual bool Visit( const XMLComment& comment );
+ virtual bool Visit( const XMLDeclaration& declaration );
+ virtual bool Visit( const XMLUnknown& unknown );
+
+ /**
+ If in print to memory mode, return a pointer to
+ the XML file in memory.
+ */
+ const char* CStr() const {
+ return _buffer.Mem();
+ }
+ /**
+ If in print to memory mode, return the size
+ of the XML file in memory. (Note the size returned
+ includes the terminating null.)
+ */
+ int CStrSize() const {
+ return _buffer.Size();
+ }
+ /**
+ If in print to memory mode, reset the buffer to the
+ beginning.
+ */
+ void ClearBuffer() {
+ _buffer.Clear();
+ _buffer.Push(0);
+ _firstElement = true;
+ }
+
+protected:
+ virtual bool CompactMode( const XMLElement& ) { return _compactMode; }
+
+ /** Prints out the space before an element. You may override to change
+ the space and tabs used. A PrintSpace() override should call Print().
+ */
+ virtual void PrintSpace( int depth );
+ void Print( const char* format, ... );
+ void Write( const char* data, size_t size );
+ inline void Write( const char* data ) { Write( data, strlen( data ) ); }
+ void Putc( char ch );
+
+ void SealElementIfJustOpened();
+ bool _elementJustOpened;
+ DynArray< const char*, 10 > _stack;
+
+private:
+ void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
+
+ bool _firstElement;
+ FILE* _fp;
+ int _depth;
+ int _textDepth;
+ bool _processEntities;
+ bool _compactMode;
+
+ enum {
+ ENTITY_RANGE = 64,
+ BUF_SIZE = 200
+ };
+ bool _entityFlag[ENTITY_RANGE];
+ bool _restrictedEntityFlag[ENTITY_RANGE];
+
+ DynArray< char, 20 > _buffer;
+
+ // Prohibit cloning, intentionally not implemented
+ XMLPrinter( const XMLPrinter& );
+ XMLPrinter& operator=( const XMLPrinter& );
+};
+
+
+} // tinyxml2
+} // namespace External
+} // namespace Aws
+
+#if defined(_MSC_VER)
+# pragma warning(pop)
+#endif
+
+#endif // TINYXML2_INCLUDED \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClient.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClient.h
new file mode 100644
index 00000000000..4c292064d73
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClient.h
@@ -0,0 +1,81 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <memory>
+#include <atomic>
+#include <mutex>
+#include <condition_variable>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace RateLimits
+ {
+ class RateLimiterInterface;
+ } // namespace RateLimits
+ } // namespace Utils
+
+ namespace Http
+ {
+ class HttpRequest;
+ class HttpResponse;
+
+ /**
+ * Abstract HttpClient. All it does is make HttpRequests and return their response.
+ */
+ class AWS_CORE_API HttpClient
+ {
+ public:
+ HttpClient();
+ virtual ~HttpClient() {}
+
+ /**
+ * Takes an http request, makes it, and returns the newly allocated HttpResponse.
+ */
+ virtual std::shared_ptr<HttpResponse> MakeRequest(const std::shared_ptr<HttpRequest>& request,
+ Aws::Utils::RateLimits::RateLimiterInterface* readLimiter = nullptr,
+ Aws::Utils::RateLimits::RateLimiterInterface* writeLimiter = nullptr) const = 0;
+
+ /**
+ * If yes, the http client supports transfer-encoding:chunked.
+ */
+ virtual bool SupportsChunkedTransferEncoding() const { return true; }
+
+ /**
+ * Stops all requests in progress and prevents any others from initiating.
+ */
+ void DisableRequestProcessing();
+ /**
+ * Enables/ReEnables request processing.
+ */
+ void EnableRequestProcessing();
+ /**
+ * Returns true if request processing is enabled.
+ */
+ bool IsRequestProcessingEnabled() const;
+ /**
+ * Sleeps current thread for sleepTime.
+ */
+ void RetryRequestSleep(std::chrono::milliseconds sleepTime);
+
+ bool ContinueRequest(const Aws::Http::HttpRequest&) const;
+
+ private:
+
+ std::atomic< bool > m_disableRequestProcessing;
+
+ std::mutex m_requestProcessingSignalLock;
+ std::condition_variable m_requestProcessingSignal;
+ };
+
+ } // namespace Http
+} // namespace Aws
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClientFactory.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClientFactory.h
new file mode 100644
index 00000000000..a82a773c042
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpClientFactory.h
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+
+namespace Aws
+{
+ namespace Client
+ {
+ struct ClientConfiguration;
+ } // namespace Client
+ namespace Http
+ {
+ class URI;
+ class HttpClient;
+ class HttpRequest;
+
+ /**
+ * Interface and default implementation of client for Http stack
+ */
+ class AWS_CORE_API HttpClientFactory
+ {
+ public:
+ virtual ~HttpClientFactory() {}
+
+ /**
+ * Creates a shared_ptr of HttpClient with the relevant settings from clientConfiguration
+ */
+ virtual std::shared_ptr<HttpClient> CreateHttpClient(const Aws::Client::ClientConfiguration& clientConfiguration) const = 0;
+ /**
+ * Creates a shared_ptr of HttpRequest with uri, method, and closure for how to create a response stream.
+ */
+ virtual std::shared_ptr<HttpRequest> CreateHttpRequest(const Aws::String& uri, HttpMethod method, const Aws::IOStreamFactory& streamFactory) const = 0;
+ /**
+ * Creates a shared_ptr of HttpRequest with uri, method, and closure for how to create a response stream.
+ */
+ virtual std::shared_ptr<HttpRequest> CreateHttpRequest(const URI& uri, HttpMethod method, const Aws::IOStreamFactory& streamFactory) const = 0;
+
+ virtual void InitStaticState() {}
+ virtual void CleanupStaticState() {}
+ };
+
+ /**
+ * libCurl infects everything with its global state. If it is being used then we automatically initialize and clean it up.
+ * If this is a problem for you, set this to false. If you manually initialize libcurl please add the option CURL_GLOBAL_ALL to your init call.
+ */
+ AWS_CORE_API void SetInitCleanupCurlFlag(bool initCleanupFlag);
+ AWS_CORE_API void SetInstallSigPipeHandlerFlag(bool installHandler);
+ AWS_CORE_API void InitHttp();
+ AWS_CORE_API void CleanupHttp();
+ AWS_CORE_API void SetHttpClientFactory(const std::shared_ptr<HttpClientFactory>& factory);
+ AWS_CORE_API std::shared_ptr<HttpClient> CreateHttpClient(const Aws::Client::ClientConfiguration& clientConfiguration);
+ AWS_CORE_API std::shared_ptr<HttpRequest> CreateHttpRequest(const Aws::String& uri, HttpMethod method, const Aws::IOStreamFactory& streamFactory);
+ AWS_CORE_API std::shared_ptr<HttpRequest> CreateHttpRequest(const URI& uri, HttpMethod method, const Aws::IOStreamFactory& streamFactory);
+
+ } // namespace Http
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpRequest.h
new file mode 100644
index 00000000000..ab71a3a29b4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpRequest.h
@@ -0,0 +1,542 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/http/URI.h>
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/monitoring/HttpClientMetrics.h>
+#include <memory>
+#include <functional>
+
+namespace Aws
+{
+ namespace Http
+ {
+ extern AWS_CORE_API const char DATE_HEADER[];
+ extern AWS_CORE_API const char AWS_DATE_HEADER[];
+ extern AWS_CORE_API const char AWS_SECURITY_TOKEN[];
+ extern AWS_CORE_API const char ACCEPT_HEADER[];
+ extern AWS_CORE_API const char ACCEPT_CHAR_SET_HEADER[];
+ extern AWS_CORE_API const char ACCEPT_ENCODING_HEADER[];
+ extern AWS_CORE_API const char AUTHORIZATION_HEADER[];
+ extern AWS_CORE_API const char AWS_AUTHORIZATION_HEADER[];
+ extern AWS_CORE_API const char COOKIE_HEADER[];
+ extern AWS_CORE_API const char CONTENT_LENGTH_HEADER[];
+ extern AWS_CORE_API const char CONTENT_TYPE_HEADER[];
+ extern AWS_CORE_API const char TRANSFER_ENCODING_HEADER[];
+ extern AWS_CORE_API const char USER_AGENT_HEADER[];
+ extern AWS_CORE_API const char VIA_HEADER[];
+ extern AWS_CORE_API const char HOST_HEADER[];
+ extern AWS_CORE_API const char AMZ_TARGET_HEADER[];
+ extern AWS_CORE_API const char X_AMZ_EXPIRES_HEADER[];
+ extern AWS_CORE_API const char CONTENT_MD5_HEADER[];
+ extern AWS_CORE_API const char API_VERSION_HEADER[];
+ extern AWS_CORE_API const char SDK_INVOCATION_ID_HEADER[];
+ extern AWS_CORE_API const char SDK_REQUEST_HEADER[];
+ extern AWS_CORE_API const char CHUNKED_VALUE[];
+
+ class HttpRequest;
+ class HttpResponse;
+
+ /**
+ * closure type for receiving notifications that data has been received.
+ */
+ typedef std::function<void(const HttpRequest*, HttpResponse*, long long)> DataReceivedEventHandler;
+ /**
+ * closure type for receiving notifications that data has been sent.
+ */
+ typedef std::function<void(const HttpRequest*, long long)> DataSentEventHandler;
+ /**
+ * Closure type for handling whether or not a request should be canceled.
+ */
+ typedef std::function<bool(const HttpRequest*)> ContinueRequestHandler;
+
+ /**
+ * Abstract class for representing an HttpRequest.
+ */
+ class AWS_CORE_API HttpRequest
+ {
+ public:
+ /**
+ * Initializes an HttpRequest object with uri and http method.
+ */
+ HttpRequest(const URI& uri, HttpMethod method) :
+ m_uri(uri), m_method(method), m_isEvenStreamRequest(false)
+ {}
+
+ virtual ~HttpRequest() {}
+
+ /**
+ * Get All headers for this request.
+ */
+ virtual HeaderValueCollection GetHeaders() const = 0;
+ /**
+ * Get the value for a Header based on its name. (in default StandardHttpRequest implementation, an empty string will be returned if headerName doesn't exist)
+ */
+ virtual const Aws::String& GetHeaderValue(const char* headerName) const = 0;
+ /**
+ * Add a header pair
+ */
+ virtual void SetHeaderValue(const char* headerName, const Aws::String& headerValue) = 0;
+ /**
+ * Creates a shared_ptr of HttpRequest with uri, method, and closure for how to create a response stream.
+ */
+ virtual void SetHeaderValue(const Aws::String& headerName, const Aws::String& headerValue) = 0;
+ /**
+ * Deletes a header from the request by name.
+ */
+ virtual void DeleteHeader(const char* headerName) = 0;
+ /**
+ * Adds a content body stream to the request. This stream will be used to send the body to the endpoint.
+ */
+ virtual void AddContentBody(const std::shared_ptr<Aws::IOStream>& strContent) = 0;
+ /**
+ * Gets the content body stream that will be used for this request.
+ */
+ virtual const std::shared_ptr<Aws::IOStream>& GetContentBody() const = 0;
+ /**
+ * Returns true if a header exists in the request with name
+ */
+ virtual bool HasHeader(const char* name) const = 0;
+ /**
+ * Get size in bytes of the request when as it will be going accross the wire.
+ */
+ virtual int64_t GetSize() const = 0;
+ /**
+ * Gets the factory for creating the stream that will be used in the http response.
+ */
+ virtual const Aws::IOStreamFactory& GetResponseStreamFactory() const = 0;
+ /**
+ * Sets the factory for creating the stream that will be used in the http response.
+ */
+ virtual void SetResponseStreamFactory(const Aws::IOStreamFactory& factory) = 0;
+ /**
+ * Gets underlying URI object with mutation access.
+ */
+ inline URI& GetUri()
+ {
+ return m_uri;
+ }
+ /**
+ * Gets the underlying URI object.
+ */
+ const URI& GetUri() const { return m_uri; }
+ /**
+ * Converts the URI into a string and returns it. If includeQueryString is set to true, the query string
+ * will be included in the returned value.
+ */
+ inline Aws::String GetURIString(bool includeQueryString = true) const
+ {
+ return m_uri.GetURIString(includeQueryString);
+ }
+ /**
+ * Get the http method for this request.
+ */
+ inline HttpMethod GetMethod() const
+ {
+ return m_method;
+ }
+ /**
+ * Gets the query string from the URI on this request.
+ */
+ inline const Aws::String& GetQueryString() const
+ {
+ return m_uri.GetQueryString();
+ }
+ /**
+ * Normalizes the URI for use with signing.
+ */
+ inline void CanonicalizeRequest()
+ {
+ m_uri.CanonicalizeQueryString();
+ }
+ /**
+ * Gets the query string for the underlying URI as a key value mapping
+ */
+ inline QueryStringParameterCollection GetQueryStringParameters() const
+ {
+ return m_uri.GetQueryStringParameters();
+ }
+ /**
+ * Adds a query string parameter to the underlying URI by key and value.
+ */
+ inline void AddQueryStringParameter(const char* key, const Aws::String& value)
+ {
+ m_uri.AddQueryStringParameter(key, value);
+ }
+
+ inline bool HasDate() const
+ {
+ return HasHeader(DATE_HEADER);
+ }
+ /**
+ * Gets date header.
+ */
+ inline const Aws::String& GetDate() const
+ {
+ return GetHeaderValue(DATE_HEADER);
+ }
+ /**
+ * Gets date header.
+ */
+ inline void SetDate(const Aws::String& value)
+ {
+ SetHeaderValue(DATE_HEADER, value);
+ }
+
+ inline bool HasAccept() const
+ {
+ return HasHeader(ACCEPT_HEADER);
+ }
+ /**
+ * Gets accept header.
+ */
+ inline const Aws::String& GetAccept() const
+ {
+ return GetHeaderValue(ACCEPT_HEADER);
+ }
+ /**
+ * Gets accept header.
+ */
+ inline void SetAccept(const Aws::String& value)
+ {
+ SetHeaderValue(ACCEPT_HEADER, value);
+ }
+
+ inline bool HasAcceptCharSet() const
+ {
+ return HasHeader(ACCEPT_CHAR_SET_HEADER);
+ }
+ /**
+ * Gets Accept CharSet header.
+ */
+ inline const Aws::String& GetAcceptCharSet() const
+ {
+ return GetHeaderValue(ACCEPT_CHAR_SET_HEADER);
+ }
+ /**
+ * Sets Accept CharSet header.
+ */
+ inline void SetAcceptCharSet(const Aws::String& value)
+ {
+ SetHeaderValue(ACCEPT_CHAR_SET_HEADER, value);
+ }
+
+ inline bool HasAcceptEncoding() const
+ {
+ return HasHeader(ACCEPT_ENCODING_HEADER);
+ }
+ /**
+ * Gets accept encoding header.
+ */
+ inline const Aws::String& GetAcceptEncoding() const
+ {
+ return GetHeaderValue(ACCEPT_ENCODING_HEADER);
+ }
+ /**
+ * Sets accept encoding header.
+ */
+ inline void SetAcceptEncoding(const Aws::String& value)
+ {
+ SetHeaderValue(ACCEPT_ENCODING_HEADER, value);
+ }
+
+ inline bool HasAuthorization() const
+ {
+ return HasHeader(AUTHORIZATION_HEADER);
+ }
+ /**
+ * Gets authorization encoding header.
+ */
+ inline const Aws::String& GetAuthorization() const
+ {
+ return GetHeaderValue(AUTHORIZATION_HEADER);
+ }
+ /**
+ * Set authorization header.
+ */
+ inline void SetAuthorization(const Aws::String& value)
+ {
+ SetHeaderValue(AUTHORIZATION_HEADER, value);
+ }
+
+ inline bool HasAwsAuthorization() const
+ {
+ return HasHeader(AWS_AUTHORIZATION_HEADER);
+ }
+ /**
+ * Gets aws authorization header.
+ */
+ inline const Aws::String& GetAwsAuthorization() const
+ {
+ return GetHeaderValue(AWS_AUTHORIZATION_HEADER);
+ }
+ /**
+ * Sets aws authorization header.
+ */
+ inline void SetAwsAuthorization(const Aws::String& value)
+ {
+ SetHeaderValue(AWS_AUTHORIZATION_HEADER, value);
+ }
+
+ inline bool HasAwsSessionToken() const
+ {
+ return HasHeader(AWS_SECURITY_TOKEN);
+ }
+ /**
+ * Gets session token header.
+ */
+ inline const Aws::String& GetAwsSessionToken() const
+ {
+ return GetHeaderValue(AWS_SECURITY_TOKEN);
+ }
+ /**
+ * Sets session token header.
+ */
+ inline void SetAwsSessionToken(const Aws::String& value)
+ {
+ SetHeaderValue(AWS_SECURITY_TOKEN, value);
+ }
+
+ inline bool HasCookie() const
+ {
+ return HasHeader(COOKIE_HEADER);
+ }
+ /**
+ * Gets cookie header.
+ */
+ inline const Aws::String& GetCookie() const
+ {
+ return GetHeaderValue(COOKIE_HEADER);
+ }
+ /**
+ * Sets cookie header.
+ */
+ inline void SetCookie(const Aws::String& value)
+ {
+ SetHeaderValue(COOKIE_HEADER, value);
+ }
+
+ inline bool HasContentLength() const
+ {
+ return HasHeader(CONTENT_LENGTH_HEADER);
+ }
+ /**
+ * Gets content-length header.
+ */
+ inline const Aws::String& GetContentLength() const
+ {
+ return GetHeaderValue(CONTENT_LENGTH_HEADER);
+ }
+ /**
+ * Sets content-length header.
+ */
+ inline void SetContentLength(const Aws::String& value)
+ {
+ SetHeaderValue(CONTENT_LENGTH_HEADER, value);
+ }
+
+ inline bool HasContentType() const
+ {
+ return HasHeader(CONTENT_TYPE_HEADER);
+ }
+ /**
+ * Gets content-type header.
+ */
+ inline const Aws::String& GetContentType() const
+ {
+ return GetHeaderValue(CONTENT_TYPE_HEADER);
+ }
+ /**
+ * sets content-type header.
+ */
+ inline void SetContentType(const Aws::String& value)
+ {
+ SetHeaderValue(CONTENT_TYPE_HEADER, value);
+ }
+
+ inline bool HasTransferEncoding() const
+ {
+ return HasHeader(TRANSFER_ENCODING_HEADER);
+ }
+ /**
+ * Gets transfer-encoding header.
+ */
+ inline const Aws::String& GetTransferEncoding() const
+ {
+ return GetHeaderValue(TRANSFER_ENCODING_HEADER);
+ }
+ /**
+ * Sets transfer-encoding header.
+ */
+ inline void SetTransferEncoding(const Aws::String& value)
+ {
+ SetHeaderValue(TRANSFER_ENCODING_HEADER, value);
+ }
+
+ inline bool HasUserAgent() const
+ {
+ return HasHeader(USER_AGENT_HEADER);
+ }
+ /**
+ * Gets User Agent header.
+ */
+ inline const Aws::String& GetUserAgent() const
+ {
+ return GetHeaderValue(USER_AGENT_HEADER);
+ }
+ /**
+ * Sets User Agent header.
+ */
+ inline void SetUserAgent(const Aws::String& value)
+ {
+ SetHeaderValue(USER_AGENT_HEADER, value);
+ }
+
+ inline bool HasVia() const
+ {
+ return HasHeader(VIA_HEADER);
+ }
+ /**
+ * Gets via header header.
+ */
+ inline const Aws::String& GetVia() const
+ {
+ return GetHeaderValue(VIA_HEADER);
+ }
+ /**
+ * Sets via header.
+ */
+ inline void SetVia(const Aws::String& value)
+ {
+ SetHeaderValue(VIA_HEADER, value);
+ }
+
+ /**
+ * Has Api version header x-amz-api-version
+ */
+ inline bool HasApiVersion() const
+ {
+ return HasHeader(API_VERSION_HEADER);
+ }
+
+ /**
+ * Gets Api version header x-amz-api-version.
+ */
+ inline const Aws::String& GetApiVersion() const
+ {
+ return GetHeaderValue(API_VERSION_HEADER);
+ }
+ /**
+ * Sets Api version header x-amz-api-version.
+ */
+ inline void SetApiVersion(const Aws::String& value)
+ {
+ SetHeaderValue(API_VERSION_HEADER, value);
+ }
+
+ /**
+ * Sets the closure for receiving events when data is received from the server.
+ */
+ inline void SetDataReceivedEventHandler(const DataReceivedEventHandler& dataReceivedEventHandler) { m_onDataReceived = dataReceivedEventHandler; }
+ /**
+ * Sets the closure for receiving events when data is received from the server.
+ */
+ inline void SetDataReceivedEventHandler(DataReceivedEventHandler&& dataReceivedEventHandler) { m_onDataReceived = std::move(dataReceivedEventHandler); }
+ /**
+ * Sets the closure for receiving events when data is sent to the server.
+ */
+ inline void SetDataSentEventHandler(const DataSentEventHandler& dataSentEventHandler) { m_onDataSent = dataSentEventHandler; }
+ /**
+ * Sets the closure for receiving events when data is sent to the server.
+ */
+ inline void SetDataSentEventHandler(DataSentEventHandler&& dataSentEventHandler) { m_onDataSent = std::move(dataSentEventHandler); }
+ /**
+ * Sets the closure for handling whether or not to cancel a request.
+ */
+ inline void SetContinueRequestHandle(const ContinueRequestHandler& continueRequestHandler) { m_continueRequest = continueRequestHandler; }
+ /**
+ * Sets the closure for handling whether or not to cancel a request.
+ */
+ inline void SetContinueRequestHandle(ContinueRequestHandler&& continueRequestHandler) { m_continueRequest = std::move(continueRequestHandler); }
+
+ /**
+ * Gets the closure for receiving events when data is received from the server.
+ */
+ inline const DataReceivedEventHandler& GetDataReceivedEventHandler() const { return m_onDataReceived; }
+ /**
+ * Gets the closure for receiving events when data is sent to the server.
+ */
+ inline const DataSentEventHandler& GetDataSentEventHandler() const { return m_onDataSent; }
+
+ inline const ContinueRequestHandler& GetContinueRequestHandler() const { return m_continueRequest; }
+
+ /**
+ * Gets the AWS Access Key if this HttpRequest is signed with Aws Access Key
+ */
+ inline const Aws::String& GetSigningAccessKey() const { return m_signingAccessKey; }
+ /**
+ * Sets the Aws Access Key if this HttpRequest is signed with Aws Access Key
+ */
+ inline void SetSigningAccessKey(const Aws::String& accessKey) { m_signingAccessKey = accessKey; }
+
+ /**
+ * Gets the signing region if this request is signed.
+ */
+ inline const Aws::String& GetSigningRegion() const { return m_signingRegion; }
+ /**
+ * Sets the signing region if this request is signed.
+ */
+ inline void SetSigningRegion(const Aws::String& region) { m_signingRegion = region; }
+
+ /**
+ * Add a request metric
+ * @param key, HttpClientMetricsKey defined in HttpClientMetrics.cpp
+ * @param value, the corresponding value of this key measured during http request.
+ */
+ virtual void AddRequestMetric(const Aws::String& key, int64_t value) { m_httpRequestMetrics.emplace(key, value); }
+
+ /**
+ * Sets the request metrics
+ */
+ virtual void SetRequestMetrics(const Aws::Monitoring::HttpClientMetricsCollection& collection) { m_httpRequestMetrics = collection; }
+
+ /**
+ * Gets the request metrics
+ */
+ virtual const Aws::Monitoring::HttpClientMetricsCollection& GetRequestMetrics() const { return m_httpRequestMetrics; }
+
+ /**
+ * Returns the IP address of the remote host the request was made out to.
+ * This value is populated after the request is made and when the HTTP client supports retrieving such
+ * information.
+ * If the information is not available, an empty string is returned.
+ */
+ Aws::String GetResolvedRemoteHost() const { return m_resolvedRemoteHost; }
+ void SetResolvedRemoteHost(const Aws::String& ip) { m_resolvedRemoteHost = ip; }
+
+ bool IsEventStreamRequest() { return m_isEvenStreamRequest; }
+ void SetEventStreamRequest(bool eventStreamRequest) { m_isEvenStreamRequest = eventStreamRequest; }
+ private:
+ URI m_uri;
+ HttpMethod m_method;
+ bool m_isEvenStreamRequest;
+ DataReceivedEventHandler m_onDataReceived;
+ DataSentEventHandler m_onDataSent;
+ ContinueRequestHandler m_continueRequest;
+ Aws::String m_signingRegion;
+ Aws::String m_signingAccessKey;
+ Aws::String m_resolvedRemoteHost;
+ Aws::Monitoring::HttpClientMetricsCollection m_httpRequestMetrics;
+ };
+
+ } // namespace Http
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpResponse.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpResponse.h
new file mode 100644
index 00000000000..1db30d1730a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpResponse.h
@@ -0,0 +1,219 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/http/HttpRequest.h>
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/client/CoreErrors.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Stream
+ {
+ class ResponseStream;
+ }
+ }
+ namespace Http
+ {
+ /**
+ * Enum of Http response Codes. The integer values of the response codes correspond to the values in the RFC.
+ */
+ enum class HttpResponseCode
+ {
+ REQUEST_NOT_MADE = -1,
+ CONTINUE = 100,
+ SWITCHING_PROTOCOLS = 101,
+ PROCESSING = 102,
+ OK = 200,
+ CREATED = 201,
+ ACCEPTED = 202,
+ NON_AUTHORITATIVE_INFORMATION = 203,
+ NO_CONTENT = 204,
+ RESET_CONTENT = 205,
+ PARTIAL_CONTENT = 206,
+ MULTI_STATUS = 207,
+ ALREADY_REPORTED = 208,
+ IM_USED = 226,
+ MULTIPLE_CHOICES = 300,
+ MOVED_PERMANENTLY = 301,
+ FOUND = 302,
+ SEE_OTHER = 303,
+ NOT_MODIFIED = 304,
+ USE_PROXY = 305,
+ SWITCH_PROXY = 306,
+ TEMPORARY_REDIRECT = 307,
+ PERMANENT_REDIRECT = 308,
+ BAD_REQUEST = 400,
+ UNAUTHORIZED = 401,
+ PAYMENT_REQUIRED = 402,
+ FORBIDDEN = 403,
+ NOT_FOUND = 404,
+ METHOD_NOT_ALLOWED = 405,
+ NOT_ACCEPTABLE = 406,
+ PROXY_AUTHENTICATION_REQUIRED = 407,
+ REQUEST_TIMEOUT = 408,
+ CONFLICT = 409,
+ GONE = 410,
+ LENGTH_REQUIRED = 411,
+ PRECONDITION_FAILED = 412,
+ REQUEST_ENTITY_TOO_LARGE = 413,
+ REQUEST_URI_TOO_LONG = 414,
+ UNSUPPORTED_MEDIA_TYPE = 415,
+ REQUESTED_RANGE_NOT_SATISFIABLE = 416,
+ EXPECTATION_FAILED = 417,
+ IM_A_TEAPOT = 418,
+ AUTHENTICATION_TIMEOUT = 419,
+ METHOD_FAILURE = 420,
+ UNPROC_ENTITY = 422,
+ LOCKED = 423,
+ FAILED_DEPENDENCY = 424,
+ UPGRADE_REQUIRED = 426,
+ PRECONDITION_REQUIRED = 427,
+ TOO_MANY_REQUESTS = 429,
+ REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
+ LOGIN_TIMEOUT = 440,
+ NO_RESPONSE = 444,
+ RETRY_WITH = 449,
+ BLOCKED = 450,
+ REDIRECT = 451,
+ REQUEST_HEADER_TOO_LARGE = 494,
+ CERT_ERROR = 495,
+ NO_CERT = 496,
+ HTTP_TO_HTTPS = 497,
+ CLIENT_CLOSED_TO_REQUEST = 499,
+ INTERNAL_SERVER_ERROR = 500,
+ NOT_IMPLEMENTED = 501,
+ BAD_GATEWAY = 502,
+ SERVICE_UNAVAILABLE = 503,
+ GATEWAY_TIMEOUT = 504,
+ HTTP_VERSION_NOT_SUPPORTED = 505,
+ VARIANT_ALSO_NEGOTIATES = 506,
+ INSUFFICIENT_STORAGE = 507,
+ LOOP_DETECTED = 508,
+ BANDWIDTH_LIMIT_EXCEEDED = 509,
+ NOT_EXTENDED = 510,
+ NETWORK_AUTHENTICATION_REQUIRED = 511,
+ NETWORK_READ_TIMEOUT = 598,
+ NETWORK_CONNECT_TIMEOUT = 599
+ };
+
+ inline bool IsRetryableHttpResponseCode(HttpResponseCode responseCode)
+ {
+ switch (responseCode)
+ {
+ case HttpResponseCode::INTERNAL_SERVER_ERROR:
+ case HttpResponseCode::SERVICE_UNAVAILABLE:
+ case HttpResponseCode::TOO_MANY_REQUESTS:
+ case HttpResponseCode::BANDWIDTH_LIMIT_EXCEEDED:
+ case HttpResponseCode::REQUEST_TIMEOUT:
+ case HttpResponseCode::AUTHENTICATION_TIMEOUT:
+ case HttpResponseCode::LOGIN_TIMEOUT:
+ case HttpResponseCode::GATEWAY_TIMEOUT:
+ case HttpResponseCode::NETWORK_READ_TIMEOUT:
+ case HttpResponseCode::NETWORK_CONNECT_TIMEOUT:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Abstract class for representing an Http Response.
+ */
+ class AWS_CORE_API HttpResponse
+ {
+ public:
+ /**
+ * Initializes an http response with the originalRequest and the response code.
+ */
+ HttpResponse(const std::shared_ptr<const HttpRequest>& originatingRequest) :
+ m_httpRequest(originatingRequest),
+ m_responseCode(HttpResponseCode::REQUEST_NOT_MADE),
+ m_hasClientError(false)
+ {}
+
+ virtual ~HttpResponse() = default;
+
+ /**
+ * Gets the request that originated this response
+ */
+ virtual inline const HttpRequest& GetOriginatingRequest() const { return *m_httpRequest; }
+
+ /**
+ * Sets the request that originated this response
+ */
+ virtual inline void SetOriginatingRequest(const std::shared_ptr<const HttpRequest>& httpRequest) { m_httpRequest = httpRequest; }
+
+ /**
+ * Get the headers from this response
+ */
+ virtual HeaderValueCollection GetHeaders() const = 0;
+ /**
+ * Returns true if the response contains a header by headerName
+ */
+ virtual bool HasHeader(const char* headerName) const = 0;
+ /**
+ * Returns the value for a header at headerName if it exists.
+ */
+ virtual const Aws::String& GetHeader(const Aws::String& headerName) const = 0;
+ /**
+ * Gets response code for this http response.
+ */
+ virtual inline HttpResponseCode GetResponseCode() const { return m_responseCode; }
+ /**
+ * Sets the response code for this http response.
+ */
+ virtual inline void SetResponseCode(HttpResponseCode httpResponseCode) { m_responseCode = httpResponseCode; }
+ /**
+ * Gets the content-type of the response body
+ */
+ virtual const Aws::String& GetContentType() const { return GetHeader(Http::CONTENT_TYPE_HEADER); }
+ /**
+ * Gets the response body of the response.
+ */
+ virtual Aws::IOStream& GetResponseBody() const = 0;
+ /**
+ * Gives full control of the memory of the ResponseBody over to the caller. At this point, it is the caller's
+ * responsibility to clean up this object.
+ */
+ virtual Utils::Stream::ResponseStream&& SwapResponseStreamOwnership() = 0;
+ /**
+ * Adds a header to the http response object.
+ */
+ virtual void AddHeader(const Aws::String&, const Aws::String&) = 0;
+ /**
+ * Sets the content type header on the http response object.
+ */
+ virtual void SetContentType(const Aws::String& contentType) { AddHeader("content-type", contentType); }
+
+ inline bool HasClientError() const { return m_hasClientError; }
+ inline void SetClientErrorType(Aws::Client::CoreErrors errorType) {m_hasClientError = true; m_clientErrorType = errorType;}
+ inline Aws::Client::CoreErrors GetClientErrorType() { return m_clientErrorType; }
+
+ inline const Aws::String &GetClientErrorMessage() const { return m_clientErrorMessage; }
+ inline void SetClientErrorMessage(const Aws::String &error) { m_clientErrorMessage = error; }
+
+ private:
+ HttpResponse(const HttpResponse&);
+ HttpResponse& operator = (const HttpResponse&);
+
+ std::shared_ptr<const HttpRequest> m_httpRequest;
+ HttpResponseCode m_responseCode;
+ // Error generated by http client, SDK or users, indicating non service error during http request
+ bool m_hasClientError;
+ Aws::Client::CoreErrors m_clientErrorType;
+ Aws::String m_clientErrorMessage;
+ };
+
+ } // namespace Http
+} // namespace Aws
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpTypes.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpTypes.h
new file mode 100644
index 00000000000..b8c993294a9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/HttpTypes.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSList.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+
+#include <memory>
+
+namespace Aws
+{
+ namespace Http
+ {
+ /**
+ * Models Http methods.
+ */
+ enum class HttpMethod
+ {
+ HTTP_GET,
+ HTTP_POST,
+ HTTP_DELETE,
+ HTTP_PUT,
+ HTTP_HEAD,
+ HTTP_PATCH
+ };
+
+ /**
+ * Possible default http factory vended http client implementations.
+ */
+ enum class TransferLibType
+ {
+ DEFAULT_CLIENT = 0,
+ CURL_CLIENT,
+ WIN_INET_CLIENT,
+ WIN_HTTP_CLIENT
+ };
+
+ namespace HttpMethodMapper
+ {
+ /**
+ * Gets the string value of an httpMethod.
+ */
+ AWS_CORE_API const char* GetNameForHttpMethod(HttpMethod httpMethod);
+ } // namespace HttpMethodMapper
+
+ typedef std::pair<Aws::String, Aws::String> HeaderValuePair;
+ typedef Aws::Map<Aws::String, Aws::String> HeaderValueCollection;
+
+ } // namespace Http
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/Scheme.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/Scheme.h
new file mode 100644
index 00000000000..a0ec88ad16b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/Scheme.h
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Http
+ {
+ /**
+ * Enum representing URI scheme.
+ */
+ enum class Scheme
+ {
+ HTTP,
+ HTTPS
+ };
+
+ namespace SchemeMapper
+ {
+ /**
+ * Converts a Scheme instance to a String.
+ */
+ AWS_CORE_API const char* ToString(Scheme scheme);
+ /**
+ * Converts a string instance to a Scheme. Defaults to https.
+ */
+ AWS_CORE_API Scheme FromString(const char* name);
+ } // namespace SchemeMapper
+ } // namespace Http
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/URI.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/URI.h
new file mode 100644
index 00000000000..d72e96b863f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/URI.h
@@ -0,0 +1,171 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/http/Scheme.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+#include <stdint.h>
+
+namespace Aws
+{
+ namespace Http
+ {
+ extern AWS_CORE_API const char* SEPARATOR;
+ static const uint16_t HTTP_DEFAULT_PORT = 80;
+ static const uint16_t HTTPS_DEFAULT_PORT = 443;
+
+ //per https://tools.ietf.org/html/rfc3986#section-3.4 there is nothing preventing servers from allowing
+ //multiple values for the same key. So use a multimap instead of a map.
+ typedef Aws::MultiMap<Aws::String, Aws::String> QueryStringParameterCollection;
+
+ /**
+ * class modeling universal resource identifier, but implemented for http
+ */
+ class AWS_CORE_API URI
+ {
+ public:
+ /**
+ * Defaults to http and port 80
+ */
+ URI();
+ /**
+ * Parses string and sets uri fields
+ */
+ URI(const Aws::String&);
+ /**
+ * Parses string and sets uri fields
+ */
+ URI(const char*);
+
+ URI& operator = (const Aws::String&);
+ URI& operator = (const char*);
+
+ bool operator == (const URI&) const;
+ bool operator == (const Aws::String&) const;
+ bool operator == (const char*) const;
+ bool operator != (const URI&) const;
+ bool operator != (const Aws::String&) const;
+ bool operator != (const char*) const;
+
+ /**
+ * scheme or protocol e.g. http, https, ftp
+ */
+ inline Scheme GetScheme() const { return m_scheme; }
+
+ /**
+ * Sets scheme, if the port is incompatible with this scheme, the port will automatically be set as well.
+ */
+ void SetScheme(Scheme value);
+
+ /**
+ * Gets the domain portion of the uri
+ */
+ inline const Aws::String& GetAuthority() const { return m_authority; }
+
+ /**
+ * Sets the domain portion of the uri
+ */
+ inline void SetAuthority(const Aws::String& value) { m_authority = value; }
+
+ /**
+ * Gets the port portion of the uri, defaults to 22 for ftp, 80 for http and 443 for https
+ */
+ inline uint16_t GetPort() const { return m_port; }
+
+ /**
+ * Sets the port portion of the uri, normally you will not have to do this. If the scheme is set to ftp, http
+ * or https then the default ports will be set.
+ */
+ inline void SetPort(uint16_t value) { m_port = value; }
+
+ /**
+ * Gets the path portion of the uri e.g. the portion after the first slash after the authority and prior to the
+ * query string. This is not url encoded.
+ */
+ inline const Aws::String& GetPath() const { return m_path; }
+
+ /**
+ * Gets the path portion of the uri, url encodes it and returns it
+ */
+ inline Aws::String GetURLEncodedPath() const { return URLEncodePath(m_path); }
+
+ /**
+ * Sets the path portion of the uri. URL encodes it if needed
+ */
+ void SetPath(const Aws::String& value);
+
+ /**
+ * Gets the raw query string including the ?
+ */
+ inline const Aws::String& GetQueryString() const { return m_queryString; }
+
+ /**
+ * Resets the query string to the raw string. all query string manipulations made before this call will be lost
+ */
+ void SetQueryString(const Aws::String& str);
+
+ Aws::String GetFormParameters() const;
+
+ /**
+ * Canonicalizes the query string.
+ */
+ void CanonicalizeQueryString();
+
+ /**
+ * parses query string and returns url decoded key/value mappings from it. Spaces and all url encoded
+ * values will not be encoded.
+ */
+ QueryStringParameterCollection GetQueryStringParameters(bool decode = true) const;
+
+ /**
+ * Adds query string parameter to underlying query string.
+ */
+ void AddQueryStringParameter(const char* key, const Aws::String& value);
+
+ /**
+ * Adds multiple query string parameters to underlying query string.
+ */
+ void AddQueryStringParameter(const Aws::Map<Aws::String, Aws::String>& queryStringPairs);
+
+ /**
+ * Converts the URI to a String usable for its context. e.g. an http request.
+ */
+ Aws::String GetURIString(bool includeQueryString = true) const;
+
+ /**
+ * URLEncodes the path portions of path (doesn't encode the "/" portion)
+ * Keeps the first and the last "/".
+ */
+ static Aws::String URLEncodePath(const Aws::String& path);
+
+ /**
+ * URLEncodes the path portion of the URI according to RFC3986
+ */
+ static Aws::String URLEncodePathRFC3986(const Aws::String& path);
+
+ private:
+ void ParseURIParts(const Aws::String& uri);
+ void ExtractAndSetScheme(const Aws::String& uri);
+ void ExtractAndSetAuthority(const Aws::String& uri);
+ void ExtractAndSetPort(const Aws::String& uri);
+ void ExtractAndSetPath(const Aws::String& uri);
+ void ExtractAndSetQueryString(const Aws::String& uri);
+ bool CompareURIParts(const URI& other) const;
+
+ Scheme m_scheme;
+ Aws::String m_authority;
+ uint16_t m_port;
+ Aws::String m_path;
+ Aws::String m_queryString;
+ };
+
+ } // namespace Http
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHandleContainer.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHandleContainer.h
new file mode 100644
index 00000000000..c2745753eb8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHandleContainer.h
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/utils/ResourceManager.h>
+
+#include <utility>
+#include <curl/curl.h>
+
+namespace Aws
+{
+namespace Http
+{
+
+/**
+ * Simple Connection pool manager for Curl. It maintains connections in a thread safe manner. You
+ * can call into acquire a handle, then put it back when finished. It is assumed that reusing an already
+ * initialized handle is preferable (especially for synchronous clients). The pool doubles in capacity as
+ * needed up to the maximum amount of connections.
+ */
+class CurlHandleContainer
+{
+public:
+ /**
+ * Initializes an empty stack of CURL handles. If you are only making synchronous calls via your http client
+ * then a small size is best. For async support, a good value would be 6 * number of Processors. *
+ */
+ CurlHandleContainer(unsigned maxSize = 50, long httpRequestTimeout = 0, long connectTimeout = 1000, bool tcpKeepAlive = true,
+ unsigned long tcpKeepAliveIntervalMs = 30000, long lowSpeedTime = 3000, unsigned long lowSpeedLimit = 1);
+ ~CurlHandleContainer();
+
+ /**
+ * Blocks until a curl handle from the pool is available for use.
+ */
+ CURL* AcquireCurlHandle();
+ /**
+ * Returns a handle to the pool for reuse. It is imperative that this is called
+ * after you are finished with the handle.
+ */
+ void ReleaseCurlHandle(CURL* handle);
+
+ /**
+ * When the handle has bad DNS entries, problematic live connections, we need to destory the handle from pool.
+ */
+ void DestroyCurlHandle(CURL* handle);
+
+private:
+ CurlHandleContainer(const CurlHandleContainer&) = delete;
+ const CurlHandleContainer& operator = (const CurlHandleContainer&) = delete;
+ CurlHandleContainer(const CurlHandleContainer&&) = delete;
+ const CurlHandleContainer& operator = (const CurlHandleContainer&&) = delete;
+
+ CURL* CreateCurlHandleInPool();
+ bool CheckAndGrowPool();
+ void SetDefaultOptionsOnHandle(CURL* handle);
+
+ Aws::Utils::ExclusiveOwnershipResourceManager<CURL*> m_handleContainer;
+ unsigned m_maxPoolSize;
+ unsigned long m_httpRequestTimeout;
+ unsigned long m_connectTimeout;
+ bool m_enableTcpKeepAlive;
+ unsigned long m_tcpKeepAliveIntervalMs;
+ unsigned long m_lowSpeedTime;
+ unsigned long m_lowSpeedLimit;
+ unsigned m_poolSize;
+ std::mutex m_containerLock;
+};
+
+} // namespace Http
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHttpClient.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHttpClient.h
new file mode 100644
index 00000000000..31f96befd56
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/curl/CurlHttpClient.h
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/http/HttpClient.h>
+#include <aws/core/http/curl/CurlHandleContainer.h>
+#include <aws/core/client/ClientConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <atomic>
+
+namespace Aws
+{
+namespace Http
+{
+namespace Standard
+{
+ class StandardHttpResponse;
+}
+
+//Curl implementation of an http client. Right now it is only synchronous.
+class AWS_CORE_API CurlHttpClient: public HttpClient
+{
+public:
+
+ using Base = HttpClient;
+
+ //Creates client, initializes curl handle if it hasn't been created already.
+ CurlHttpClient(const Aws::Client::ClientConfiguration& clientConfig);
+
+ //Makes request and receives response synchronously
+ std::shared_ptr<HttpResponse> MakeRequest(const std::shared_ptr<HttpRequest>& request,
+ Aws::Utils::RateLimits::RateLimiterInterface* readLimiter = nullptr,
+ Aws::Utils::RateLimits::RateLimiterInterface* writeLimiter = nullptr) const override;
+
+ static void InitGlobalState();
+ static void CleanupGlobalState();
+
+protected:
+ /**
+ * Override any configuration on CURL handle for each request before sending.
+ * The usage is to have a subclass of CurlHttpClient and have your own implementation of this function to configure whatever you want on CURL handle.
+ */
+ virtual void OverrideOptionsOnConnectionHandle(CURL*) const {}
+
+private:
+ mutable CurlHandleContainer m_curlHandleContainer;
+ bool m_isUsingProxy;
+ Aws::String m_proxyUserName;
+ Aws::String m_proxyPassword;
+ Aws::String m_proxyScheme;
+ Aws::String m_proxyHost;
+ Aws::String m_proxySSLCertPath;
+ Aws::String m_proxySSLCertType;
+ Aws::String m_proxySSLKeyPath;
+ Aws::String m_proxySSLKeyType;
+ Aws::String m_proxyKeyPasswd;
+ unsigned m_proxyPort;
+ bool m_verifySSL;
+ Aws::String m_caPath;
+ Aws::String m_caFile;
+ Aws::String m_proxyCaPath;
+ Aws::String m_proxyCaFile;
+ bool m_disableExpectHeader;
+ bool m_allowRedirects;
+ static std::atomic<bool> isInit;
+};
+
+using PlatformHttpClient = CurlHttpClient;
+
+} // namespace Http
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpRequest.h
new file mode 100644
index 00000000000..c9c0016ef52
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpRequest.h
@@ -0,0 +1,89 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/http/HttpRequest.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Http
+ {
+ namespace Standard
+ {
+ /**
+ * Simple STL container modeling of HttpRequest. Implementation of the HttpRequest interface.
+ */
+ class AWS_CORE_API StandardHttpRequest : public HttpRequest
+ {
+ public:
+ /**
+ * Initializes an HttpRequest object with uri and http method.
+ */
+ StandardHttpRequest(const URI& uri, HttpMethod method);
+
+ /**
+ * Get All headers for this request.
+ */
+ virtual HeaderValueCollection GetHeaders() const override;
+ /**
+ * Get the value for a Header based on its name.
+ * This function doesn't check the existence of headerName.
+ * So make sure you call HasHeader() first before calling this function, otherwise the behavior is undefined.
+ */
+ virtual const Aws::String& GetHeaderValue(const char* headerName) const override;
+ /**
+ * Add a header pair
+ */
+ virtual void SetHeaderValue(const char* headerName, const Aws::String& headerValue) override;
+ /**
+ * Add a header pair
+ */
+ virtual void SetHeaderValue(const Aws::String& headerName, const Aws::String& headerValue) override;
+ /**
+ * delete pair by headerName
+ */
+ virtual void DeleteHeader(const char* headerName) override;
+ /**
+ * Adds a content body stream to the request. This stream will be used to send the body to the endpoint.
+ */
+ virtual inline void AddContentBody(const std::shared_ptr<Aws::IOStream>& strContent) override { bodyStream = strContent; }
+ /**
+ * Gets the content body stream that will be used for this request.
+ */
+ virtual inline const std::shared_ptr<Aws::IOStream>& GetContentBody() const override { return bodyStream; }
+ /**
+ * Returns true if a header exists in the request with name
+ */
+ virtual bool HasHeader(const char*) const override;
+ /**
+ * Get size in bytes of the request when as it will be going accross the wire.
+ */
+ virtual int64_t GetSize() const override;
+ /**
+ * Gets the factory for creating the stream that will be used in the http response.
+ */
+ virtual const Aws::IOStreamFactory& GetResponseStreamFactory() const override;
+ /**
+ * Sets the factory for creating the stream that will be used in the http response.
+ */
+ virtual void SetResponseStreamFactory(const Aws::IOStreamFactory& factory) override;
+
+ private:
+ HeaderValueCollection headerMap;
+ std::shared_ptr<Aws::IOStream> bodyStream;
+ Aws::IOStreamFactory m_responseStreamFactory;
+ Aws::String m_emptyHeader;
+ };
+
+ } // namespace Standard
+ } // namespace Http
+} // namespace Aws
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpResponse.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpResponse.h
new file mode 100644
index 00000000000..309206f1f34
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/http/standard/StandardHttpResponse.h
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/http/HttpResponse.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Http
+ {
+ namespace Standard
+ {
+ /**
+ * Simple STL representation an Http Response, implements HttpResponse.
+ */
+ class AWS_CORE_API StandardHttpResponse : public HttpResponse
+ {
+ public:
+ /**
+ * Initializes an http response with the originalRequest and the response code.
+ */
+ StandardHttpResponse(const std::shared_ptr<const HttpRequest>& originatingRequest) :
+ HttpResponse(originatingRequest),
+ bodyStream(originatingRequest->GetResponseStreamFactory())
+ {}
+
+ ~StandardHttpResponse() = default;
+
+ /**
+ * Get the headers from this response
+ */
+ HeaderValueCollection GetHeaders() const;
+ /**
+ * Returns true if the response contains a header by headerName
+ */
+ bool HasHeader(const char* headerName) const;
+ /**
+ * Returns the value for a header at headerName if it exists.
+ */
+ const Aws::String& GetHeader(const Aws::String&) const;
+ /**
+ * Gets the response body of the response.
+ */
+ inline Aws::IOStream& GetResponseBody() const { return bodyStream.GetUnderlyingStream(); }
+ /**
+ * Gives full control of the memory of the ResponseBody over to the caller. At this point, it is the caller's
+ * responsibility to clean up this object.
+ */
+ inline Utils::Stream::ResponseStream&& SwapResponseStreamOwnership() { return std::move(bodyStream); }
+ /**
+ * Adds a header to the http response object.
+ */
+ void AddHeader(const Aws::String&, const Aws::String&);
+
+ private:
+ StandardHttpResponse(const StandardHttpResponse&);
+
+ Aws::Map<Aws::String, Aws::String> headerMap;
+ Utils::Stream::ResponseStream bodyStream;
+ };
+
+ } // namespace Standard
+ } // namespace Http
+} // namespace Aws
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/internal/AWSHttpResourceClient.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/internal/AWSHttpResourceClient.h
new file mode 100644
index 00000000000..c58a1b70bf7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/internal/AWSHttpResourceClient.h
@@ -0,0 +1,225 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/client/ClientConfiguration.h>
+#include <aws/core/client/AWSErrorMarshaller.h>
+#include <aws/core/auth/AWSCredentials.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/DateTime.h>
+#include <memory>
+#include <mutex>
+namespace Aws
+{
+ namespace Http
+ {
+ class HttpClient;
+ class HttpRequest;
+ enum class HttpResponseCode;
+ } // namespace Http
+
+ namespace Internal
+ {
+ /**
+ * Simple client for accessing the AWS remote data by Http.
+ * Currently we use it to access EC2 Metadata and ECS Credential.
+ */
+ class AWS_CORE_API AWSHttpResourceClient
+ {
+ public:
+ /**
+ * Builds an AWSHttpResourceClient instance by using default http stack.
+ */
+ AWSHttpResourceClient(const char* logtag = "AWSHttpResourceClient");
+ AWSHttpResourceClient(const Client::ClientConfiguration& clientConfiguration, const char* logtag = "AWSHttpResourceClient");
+
+ AWSHttpResourceClient& operator =(const AWSHttpResourceClient& rhs) = delete;
+ AWSHttpResourceClient(const AWSHttpResourceClient& rhs) = delete;
+ AWSHttpResourceClient& operator =(const AWSHttpResourceClient&& rhs) = delete;
+ AWSHttpResourceClient(const AWSHttpResourceClient&& rhs) = delete;
+
+ virtual ~AWSHttpResourceClient();
+
+ /**
+ * Connects to an HTTP endpoint to read the specified resource and returns the text contents.
+ * The resource URI = endpoint + resourcePath (e.g:http://domain/path/to/res)
+ * @param endpoint The HTTP resource to connect to.
+ * @param resourcePath A path appended to the endpoint to form the final URI.
+ * @param authToken An optional authorization token that will be passed as the value of the HTTP
+ * header 'Authorization'.
+ * @return The response from the HTTP endpoint as a string.
+ */
+ virtual Aws::String GetResource(const char* endpoint, const char* resourcePath, const char* authToken) const;
+
+ /**
+ * Connects to an HTTP endpoint to read the specified resource and returns the text contents.
+ * The resource URI = endpoint + resourcePath (e.g:http://domain/path/to/res)
+ * @param endpoint The HTTP resource to connect to.
+ * @param resourcePath A path appended to the endpoint to form the final URI.
+ * @param authToken An optional authorization token that will be passed as the value of the HTTP
+ * header 'Authorization'.
+ * @return The response from the HTTP endpoint as a string, together with the http response code.
+ */
+ virtual AmazonWebServiceResult<Aws::String> GetResourceWithAWSWebServiceResult(const char *endpoint, const char *resourcePath, const char *authToken) const;
+
+ /**
+ * Above Function: Aws::String GetResource(const char* endpoint, const char* resourcePath, const char* authToken) const;
+ * is limited to HTTP GET method and caller can't add wanted HTTP headers as well.
+ * This overload gives caller the flexibility to manipulate the request, as well returns the HttpResponseCode of the last attempt.
+ */
+ virtual AmazonWebServiceResult<Aws::String> GetResourceWithAWSWebServiceResult(const std::shared_ptr<Http::HttpRequest> &httpRequest) const;
+
+ /**
+ * Set an error marshaller so as to marshall error type from http response body if any.
+ * So that it can work with retry strategy to decide if a request should retry or not.
+ */
+ void SetErrorMarshaller(Aws::UniquePtr<Client::AWSErrorMarshaller> errorMarshaller) { m_errorMarshaller = std::move(errorMarshaller); }
+ const Client::AWSErrorMarshaller* GetErrorMarshaller() const { return m_errorMarshaller.get(); }
+
+ protected:
+ Aws::String m_logtag;
+
+ private:
+ std::shared_ptr<Client::RetryStrategy> m_retryStrategy;
+ std::shared_ptr<Http::HttpClient> m_httpClient;
+ Aws::UniquePtr<Client::AWSErrorMarshaller> m_errorMarshaller;
+ };
+
+ /**
+ * Derived class to support retrieving of EC2 Metadata
+ */
+ class AWS_CORE_API EC2MetadataClient : public AWSHttpResourceClient
+ {
+ public:
+ /**
+ * Build an instance with default EC2 Metadata service endpoint
+ */
+ EC2MetadataClient(const char* endpoint = "http://169.254.169.254");
+ EC2MetadataClient(const Client::ClientConfiguration& clientConfiguration, const char* endpoint = "http://169.254.169.254");
+
+ EC2MetadataClient& operator =(const EC2MetadataClient& rhs) = delete;
+ EC2MetadataClient(const EC2MetadataClient& rhs) = delete;
+ EC2MetadataClient& operator =(const EC2MetadataClient&& rhs) = delete;
+ EC2MetadataClient(const EC2MetadataClient&& rhs) = delete;
+
+ virtual ~EC2MetadataClient();
+
+ using AWSHttpResourceClient::GetResource;
+
+ /**
+ * Connects to the metadata service to read the specified resource and
+ * returns the text contents. The resource URI = m_endpoint + resourcePath.
+ */
+ virtual Aws::String GetResource(const char* resourcePath) const;
+
+ /**
+ * Connects to the Amazon EC2 Instance Metadata Service to retrieve the
+ * default credential information (if any).
+ */
+ virtual Aws::String GetDefaultCredentials() const;
+
+ /**
+ * Connects to the Amazon EC2 Instance Metadata Service to retrieve the
+ * credential information (if any) in a more secure way.
+ */
+ virtual Aws::String GetDefaultCredentialsSecurely() const;
+
+ /**
+ * connects to the Amazon EC2 Instance metadata Service to retrieve the region
+ * the current EC2 instance is running in.
+ */
+ virtual Aws::String GetCurrentRegion() const;
+
+ private:
+ Aws::String m_endpoint;
+ mutable std::recursive_mutex m_tokenMutex;
+ mutable Aws::String m_token;
+ mutable bool m_tokenRequired;
+ mutable Aws::String m_region;
+ };
+
+ void AWS_CORE_API InitEC2MetadataClient();
+ void AWS_CORE_API CleanupEC2MetadataClient();
+ std::shared_ptr<EC2MetadataClient> AWS_CORE_API GetEC2MetadataClient();
+
+ /**
+ * Derived class to support retrieving of ECS Credentials
+ */
+ class AWS_CORE_API ECSCredentialsClient : public AWSHttpResourceClient
+ {
+ public:
+ /**
+ * Build an instance with default ECS service endpoint
+ * @param resourcePath The path part of the metadata URL
+ * @param endpoint The URL authority to hit. Default is the IP address of the Task metadata service endpoint.
+ */
+ ECSCredentialsClient(const char* resourcePath, const char* endpoint = "http://169.254.170.2",
+ const char* authToken = "");
+ ECSCredentialsClient(const Client::ClientConfiguration& clientConfiguration,
+ const char* resourcePath, const char* endpoint = "http://169.254.170.2",
+ const char* authToken = "");
+
+ ECSCredentialsClient& operator =(ECSCredentialsClient& rhs) = delete;
+ ECSCredentialsClient(const ECSCredentialsClient& rhs) = delete;
+ ECSCredentialsClient& operator =(ECSCredentialsClient&& rhs) = delete;
+ ECSCredentialsClient(const ECSCredentialsClient&& rhs) = delete;
+
+ /**
+ * Connects to the Amazon ECS service to retrieve the credential
+ */
+ virtual Aws::String GetECSCredentials() const
+ {
+ return GetResource(m_endpoint.c_str(), m_resourcePath.c_str(), m_token.c_str());
+ }
+
+ private:
+ Aws::String m_resourcePath;
+ Aws::String m_endpoint;
+ Aws::String m_token;
+ };
+
+ /**
+ * To support retrieving credentials from STS.
+ * Note that STS accepts request with protocol of queryxml. Calling GetResource() will trigger
+ * a query request using AWSHttpResourceClient under the hood.
+ */
+ class AWS_CORE_API STSCredentialsClient : public AWSHttpResourceClient
+ {
+ public:
+ /**
+ * Initializes the provider to retrieve credentials from STS when it expires.
+ */
+ STSCredentialsClient(const Client::ClientConfiguration& clientConfiguration);
+
+ STSCredentialsClient& operator =(STSCredentialsClient& rhs) = delete;
+ STSCredentialsClient(const STSCredentialsClient& rhs) = delete;
+ STSCredentialsClient& operator =(STSCredentialsClient&& rhs) = delete;
+ STSCredentialsClient(const STSCredentialsClient&& rhs) = delete;
+
+ // If you want to make an AssumeRoleWithWebIdentity call to sts. use these classes to pass data to and get info from STSCredentialsClient client.
+ // If you want to make an AssumeRole call to sts, define the request/result members class/struct like this.
+ struct STSAssumeRoleWithWebIdentityRequest
+ {
+ Aws::String roleSessionName;
+ Aws::String roleArn;
+ Aws::String webIdentityToken;
+ };
+
+ struct STSAssumeRoleWithWebIdentityResult
+ {
+ Aws::Auth::AWSCredentials creds;
+ };
+
+ STSAssumeRoleWithWebIdentityResult GetAssumeRoleWithWebIdentityCredentials(const STSAssumeRoleWithWebIdentityRequest& request);
+
+ private:
+ Aws::String m_endpoint;
+ };
+ } // namespace Internal
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/CoreMetrics.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/CoreMetrics.h
new file mode 100644
index 00000000000..575a6003e2c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/CoreMetrics.h
@@ -0,0 +1,27 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/monitoring/HttpClientMetrics.h>
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ /**
+ * Metrics collected from AWS SDK Core include Http Client Metrics and other types of metrics.
+ */
+ struct AWS_CORE_API CoreMetricsCollection
+ {
+ /**
+ * Metrics collected from underlying http client during execution of a request
+ */
+ HttpClientMetricsCollection httpClientMetrics;
+
+ // Add Other types of metrics here.
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/DefaultMonitoring.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/DefaultMonitoring.h
new file mode 100644
index 00000000000..148a3a23c5b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/DefaultMonitoring.h
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/client/AWSClient.h>
+#include <aws/core/monitoring/MonitoringInterface.h>
+#include <aws/core/monitoring/MonitoringFactory.h>
+#include <aws/core/net/SimpleUDP.h>
+namespace Aws
+{
+ namespace Monitoring
+ {
+ /**
+ * Default monitoring implementation definition
+ */
+ class AWS_CORE_API DefaultMonitoring: public MonitoringInterface
+ {
+ public:
+ const static int DEFAULT_MONITORING_VERSION;
+ const static char DEFAULT_CSM_CONFIG_ENABLED[];
+ const static char DEFAULT_CSM_CONFIG_CLIENT_ID[];
+ const static char DEFAULT_CSM_CONFIG_HOST[];
+ const static char DEFAULT_CSM_CONFIG_PORT[];
+ const static char DEFAULT_CSM_ENVIRONMENT_VAR_ENABLED[];
+ const static char DEFAULT_CSM_ENVIRONMENT_VAR_CLIENT_ID[];
+ const static char DEFAULT_CSM_ENVIRONMENT_VAR_HOST[];
+ const static char DEFAULT_CSM_ENVIRONMENT_VAR_PORT[];
+
+ /**
+ * @brief Construct a default monitoring instance
+ * @param clientId, used to identify the application
+ * @param host, either the host name or the host ip address (could be ipv4 or ipv6). Note that "localhost" will be treated as host name and address look up will be performed.
+ * @param port, used to send collected metric to a local agent listen on this port.
+ */
+ DefaultMonitoring(const Aws::String& clientId, const Aws::String& host, unsigned short port);
+
+ void* OnRequestStarted(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request) const override;
+
+ void OnRequestSucceeded(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, void* context) const override;
+
+
+ void OnRequestFailed(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, void* context) const override;
+
+
+ void OnRequestRetry(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, void* context) const override;
+
+
+ void OnFinish(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, void* context) const override;
+
+ static inline int GetVersion() { return DEFAULT_MONITORING_VERSION; }
+ private:
+ void CollectAndSendAttemptData(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, const Aws::Client::HttpResponseOutcome& outcome,
+ const CoreMetricsCollection& metricsFromCore, void* context) const;
+
+ Aws::Net::SimpleUDP m_udp;
+ Aws::String m_clientId;
+ };
+
+ class AWS_CORE_API DefaultMonitoringFactory : public MonitoringFactory
+ {
+ public:
+ Aws::UniquePtr<MonitoringInterface> CreateMonitoringInstance() const override;
+ };
+ } // namespace Monitoring
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/HttpClientMetrics.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/HttpClientMetrics.h
new file mode 100644
index 00000000000..2c2efa3ed52
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/HttpClientMetrics.h
@@ -0,0 +1,84 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ /**
+ * Metrics definitions optional from HttpClient module inside AWS Sdk core.
+ */
+ enum class HttpClientMetricsType
+ {
+ /*
+ * Requires a successful DNS lookup, contains the (IPv4 or IPv6 as appropriate) numeric address of the connection endpoint to which the attempt was sent.
+ */
+ DestinationIp = 0,
+
+ /**
+ * Requires the SDK to recognize that an existing connection was reused to make the request,
+ * contains the time interval (in milliseconds) between the construction of the http request and when a connection was successfully acquired from the connection pool.
+ */
+ AcquireConnectionLatency,
+
+ /**
+ * Requires the SDK to recognize whether or not an existing connection was used to make the request,
+ * contains 1 if an existing connection was used to perform the http request; contains 0 if a new connection was opened to perform the http request.
+ */
+ ConnectionReused,
+
+ /**
+ * Requires the SDK to recognize that a new connection was established to make the request,
+ * contains the time interval (in milliseconds) between the construction of the http request and when a connection was fully established.
+ * If the SDK is able to estimate this time despite not having a perfectly accurate callback for the specific event, then it should.
+ * For example, if the http client includes user-level data write functions that are guaranteed to be called shortly after connection establishment,
+ * then the first call could be used as a reasonable time marker for ConnectLatency
+ */
+ ConnectLatency,
+
+ /**
+ * Requires the SDK to be able to mark the point in time where the request starts transmission,
+ * contains the time interval (in milliseconds) between when the request begins transmission to the service and when a terminal error has occurred or the response has been parsed,
+ * excluding streaming payloads. Like ConnectLatency, if the SDK has access to an event that is a "close enough" marker in time, it should include this entry.
+ * The request here is a http level request, not a service level API request.
+ */
+ RequestLatency,
+
+ /**
+ * Requires the SDK to have access to how long it took to perform DNS lookup, if it took place,
+ * contains the time (in milliseconds) it took to perform DNS lookup, during the Api Call attempt.
+ */
+ DnsLatency,
+
+ /**
+ * Requires the SDK to have access to how long it took to establish the underlying Tcp/Ip connection used for the request,
+ * contains the time (in milliseconds) it took to fully establish the TCP/IP connection used to make the request attempt.
+ */
+ TcpLatency,
+
+ /**
+ * Requires the SDK to have access to how long it took to perform the SSL handshake for a secure request,
+ * contains the time (in milliseconds) it took to perform a SSL handshake over the established TCP/IP connection.
+ */
+ SslLatency,
+
+ /**
+ * Unknow Metrics Type
+ */
+ Unknown
+ };
+
+ typedef Aws::Map<Aws::String, int64_t> HttpClientMetricsCollection;
+
+ AWS_CORE_API HttpClientMetricsType GetHttpClientMetricTypeByName(const Aws::String& name);
+
+ AWS_CORE_API Aws::String GetHttpClientMetricNameByType(HttpClientMetricsType type);
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringFactory.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringFactory.h
new file mode 100644
index 00000000000..2d03efa7125
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringFactory.h
@@ -0,0 +1,26 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ class MonitoringInterface;
+
+ /**
+ * Factory to create monitoring instance.
+ */
+ class AWS_CORE_API MonitoringFactory
+ {
+ public:
+ virtual ~MonitoringFactory() = default;
+ virtual Aws::UniquePtr<MonitoringInterface> CreateMonitoringInstance() const = 0;
+ };
+
+ } // namespace Monitoring
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringInterface.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringInterface.h
new file mode 100644
index 00000000000..ebe50722c79
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringInterface.h
@@ -0,0 +1,89 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/http/HttpResponse.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/AWSClient.h>
+#include <aws/core/monitoring/CoreMetrics.h>
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ /**
+ * Monitoring interface definition for SDK metrics collection.
+ */
+ class AWS_CORE_API MonitoringInterface
+ {
+ public:
+ virtual ~MonitoringInterface() = default;
+
+ /**
+ * @brief This function lets you do preparation work when a http attempt(request) starts. It returns a pointer to an implementation defined context which will be
+ * passed down with the other facilities that completes the request's lifetime. This context can be used to track the lifetime of the request and record metrics
+ * specific to this particular request. You are responsible for deleteing the context during your OnFinish call.
+ * @param serviceName, the service client who initiates this http attempt. like "s3", "ec2", etc.
+ * @param requestName, the operation or API name of this http attempt, like "GetObject" in s3.
+ * @param request, the actual Http Request.
+ * @return implementation depends memory address of context.
+ */
+ virtual void* OnRequestStarted(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request) const = 0;
+
+ /**
+ * @brief Once a Http attempt finished and received "Succeeded" response, this function will be called.
+ * @param serviceName, the service client who initiate this http attempt. like "s3", "ec2", etc.
+ * @param requestName, the operation or API name of this http attempt, like "GetObject" in s3.
+ * @param request, the actual Http Request.
+ * @param outcome, the outcome of the http attempt, you can access httpResponse and original httpRequest from it.
+ * @param metricsFromCore, metrics collected from core, such as detailed latencies during http connection.
+ * @param context parameter pointed to the same place returned by OnRequestStarted() function.
+ * @return void.
+ */
+ virtual void OnRequestSucceeded(const Aws::String& serviceName,
+ const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, void* context) const = 0;
+
+ /**
+ * @brief Once a Http request finished and received "Failed" response, this function will be called.
+ * @param serviceName, the service client who initiate this http attempt. like "s3", "ec2", etc.
+ * @param requestName, the operation or API name of this http attempt, like "GetObject" in s3.
+ * @param request, the actual Http Request.
+ * @param outcome, the outcome of the http attempt, you can access httpResponse and original httpRequest from it.
+ * @param metricsFromCore, metrics collected from core, such as detailed latencies during http connection.
+ * @param context parameter pointed to the same place returned by OnRequestStarted() function.
+ * @return void.
+ */
+ virtual void OnRequestFailed(const Aws::String& serviceName,
+ const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, void* context) const = 0;
+
+ /**
+ * @brief Once an API call retried the attempt and send the request again, this function will be called.
+ * @param serviceName, the service client who initiate this http attempt. like "s3", "ec2", etc.
+ * @param requestName, the operation or API name of this http attempt, like "GetObject" in s3.
+ * @param request, the actual Http Request.
+ * @param context parameter pointed to the same place returned by OnRequestStarted() function.
+ * @return void.
+ */
+ virtual void OnRequestRetry(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, void* context) const = 0;
+
+ /**
+ * @brief This function will always be called by the SDK to signal the implementer that this request is done. The implementer can safely delete the context.
+ * @param serviceName, the service client who initiate this http attempt. like "s3", "ec2", etc.
+ * @param requestName, the operation or API name of this http attempt, like "GetObject" in s3.
+ * @param request, the actual Http Request.
+ * @param context parameter pointed to the same place returned by OnRequestStarted() function.
+ * @return void.
+ */
+ virtual void OnFinish(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, void* context) const = 0;
+ };
+ } // namespace Monitoring
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringManager.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringManager.h
new file mode 100644
index 00000000000..aaa5bca5d1a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/monitoring/MonitoringManager.h
@@ -0,0 +1,64 @@
+
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/client/AWSClient.h>
+#include <aws/core/monitoring/CoreMetrics.h>
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ class MonitoringFactory;
+ /**
+ * Wrapper function of OnRequestStarted defined by all monitoring instances
+ */
+ Aws::Vector<void*> OnRequestStarted(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request);
+
+ /**
+ * Wrapper function of OnRequestSucceeded defined by all monitoring instances
+ */
+ void OnRequestSucceeded(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, const Aws::Vector<void*>& contexts);
+
+ /**
+ * Wrapper function of OnRequestFailed defined by all monitoring instances
+ */
+ void OnRequestFailed(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, const Aws::Vector<void*>& contexts);
+
+ /**
+ * Wrapper function of OnRequestRetry defined by all monitoring instances
+ */
+ void OnRequestRetry(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, const Aws::Vector<void*>& contexts);
+
+ /**
+ * Wrapper function of OnFinish defined by all monitoring instances
+ */
+ void OnFinish(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, const Aws::Vector<void*>& contexts);
+
+ typedef std::function<Aws::UniquePtr<MonitoringFactory>()> MonitoringFactoryCreateFunction;
+
+ /**
+ * Init monitoring using supplied factories, monitoring can support multiple instances.
+ * We will try to (based on config resolution result) create a default client side monitoring listener instance defined in AWS SDK Core module.
+ * and create other instances from these factories.
+ * This function will be called during Aws::InitAPI call, argument is acquired from Aws::SDKOptions->MonitoringOptions
+ */
+ AWS_CORE_API void InitMonitoring(const std::vector<MonitoringFactoryCreateFunction>& monitoringFactoryCreateFunctions);
+
+ /**
+ * Clean up monitoring related global variables
+ */
+ AWS_CORE_API void CleanupMonitoring();
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/Net.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/Net.h
new file mode 100644
index 00000000000..00aca57e0a0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/Net.h
@@ -0,0 +1,23 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+namespace Aws
+{
+ namespace Net
+ {
+ // Has network stack been initiated.
+ bool IsNetworkInitiated();
+
+ // Initiate network stack.
+ void InitNetwork();
+
+ // Cleanup network stack.
+ void CleanupNetwork();
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/SimpleUDP.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/SimpleUDP.h
new file mode 100644
index 00000000000..2e96b509fb9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/net/SimpleUDP.h
@@ -0,0 +1,163 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <cstdint>
+struct sockaddr;
+
+namespace Aws
+{
+ namespace Net
+ {
+ // 8K is aligned with default monitoring packet size.
+ const static size_t UDP_BUFFER_SIZE = 8192;
+ /**
+ * SimpleUDP definition.
+ */
+ class AWS_CORE_API SimpleUDP
+ {
+ public:
+ /**
+ * @brief Constructor of SimpleUDP
+ * @param addressFamily, AF_INET for IPV4 or AF_INET6 for IPV6
+ * @param sendBufSize, if nonzero, try set socket's send buffer size to this value.
+ * @param receieveBufSize, if nonzero, try set socket's receive buffer size to this value.
+ * @param nonBlocking, if it is true, implementation will try to create a non-blocking underlying UDP socket.
+ * Implementation should create and set the underlying udp socket.
+ */
+ SimpleUDP(int addressFamily, size_t sendBufSize = UDP_BUFFER_SIZE, size_t receiveBufSize = UDP_BUFFER_SIZE, bool nonBlocking = true);
+
+ /**
+ * @brief An easy constructor of an IPV4 or IPV6 SimpleUDP
+ * @param addressFamily, either AF_INET for IPV4 or AF_INET6 for IPV6
+ * @param sendBufSize, if nonzero, try set socket's send buffer size to this value.
+ * @param receieveBufSize, if nonzero, try set socket's receive buffer size to this value.
+ * @param nonBlocking, if it is true, implementation will try to create a non-blocking underlying UDP socket.
+ * Implementation should create and set the underlying udp socket.
+ */
+ SimpleUDP(bool IPV4 = true, size_t sendBufSize = UDP_BUFFER_SIZE, size_t receiveBufSize = UDP_BUFFER_SIZE, bool nonBlocking = true);
+
+ /**
+ * @brief An easy constructor of SimpleUDP based on host and port
+ * @param host, the host that packets will be sent to, could be ipv4 or ipv6 address, or a hostname
+ * Note that "localhost" is not necessarily bind to 127.0.0.1, it could bind to ipv6 address ::1, or other type of ip addresses. If you pass localhost here, we will go through getaddrinfo procedure on Linux and Windows.
+ * @param port, the port number that the host listens on.
+ * @param sendBufSize, if nonzero, try set socket's send buffer size to this value.
+ * @param receieveBufSize, if nonzero, try set socket's receive buffer size to this value.
+ * @param nonBlocking, if it is true, implementation will try to create a non-blocking underlying UDP socket.
+ * Implementation should create and set the underlying udp socket.
+ */
+ SimpleUDP(const char* host, unsigned short port, size_t sendBufSize = UDP_BUFFER_SIZE, size_t receiveBufSize = UDP_BUFFER_SIZE, bool nonBlocking = true);
+
+ ~SimpleUDP();
+
+ /**
+ * @brief Connect underlying udp socket to server specified in address.
+ * @param address, the server's address info.
+ * @param addressLength, length of address, structure of address can vary.
+ * @return 0 on success, -1 on error, check errno for detailed error information.
+ */
+ int Connect(const sockaddr* address, size_t addressLength);
+
+ /**
+ * @brief An easy way to connect to host
+ * @param hostIP, a valid ipv4 or ipv6 address. The address type should match the m_addressFamily type settled during construction.
+ * Otherwise the connection will fail.
+ * @param port, the port that host listens on.
+ */
+ int ConnectToHost(const char* hostIP, unsigned short port) const;
+
+ /**
+ * @brief An easy way to connect to 127.0.0.1 or ::1 based on m_addressFamily
+ */
+ int ConnectToLocalHost(unsigned short port) const;
+
+ /**
+ * @brief Bind underlying udp socket to an address.
+ * @param address, the server's address info.
+ * @param addressLength, length of address, structure of address can vary.
+ * @return 0 on success, -1 on error, check errno for detailed error information.
+ */
+ int Bind(const sockaddr* address, size_t addressLength) const;
+
+ /**
+ * @brief An easy way to bind to localhost
+ */
+ int BindToLocalHost(unsigned short port) const;
+
+ /**
+ * @brief Send data to server without specifying address, only usable if hostIP and port are available.
+ * @param data, the data you want to send.
+ * @param dataLen, the length of data you want to send. On Windows, dataLen larger than INT32_MAX will cause undefined behavior
+ * @return 0 on success, -1 on error, check errno for detailed error information.
+ */
+ int SendData(const uint8_t* data, size_t dataLen) const;
+
+ /**
+ * @brief Send data to server.
+ * @param address, the server's address info.
+ * @param addressLength, length of address, structure of address can vary.
+ * @param data, the memory address of the data you want to send.
+ * @param dataLen, the length of data you want to send. On Windows, dataLen larger than INT32_MAX will cause undefined behavior
+ * @return 0 on success, -1 on error check errno for detailed error information.
+ */
+ int SendDataTo(const sockaddr* address, size_t addressLength, const uint8_t* data, size_t dataLen) const;
+
+ /**
+ * @brief An easy way to send data to localhost, when the underlying udp is connected, call this function will
+ * send the data to where it connects to, not essentially to localhost. when it's not connected, it will send data
+ * to localhost, but this call will not connect underlying socket to localhost for you.
+ * @param data, the memory address of the data you want to send.
+ * @param dataLen, the length of data you want to send. On Windows, dataLen larger than INT32_MAX will cause undefined behavior
+ * @param port, port of localhost.
+ * @return 0 on success, -1 on error, check errno for detailed error information.
+ */
+ int SendDataToLocalHost(const uint8_t* data, size_t dataLen, unsigned short port) const;
+
+ /**
+ * @brief Receive data from unique address specified in ConnectWithServer call.
+ * this function is equivalent to call ReceiveDataFrom(nullptr, 0, data, dataLen, flags).
+ * @param buffer, the memory address where you want to store received data.
+ * @param bufferLen, the size of data buffer.
+ * @return -1 on failure, check errno for detailed error information, on success, returns the actual bytes of data received
+ */
+ int ReceiveData(uint8_t* buffer, size_t bufferLen) const;
+
+ /**
+ * @brief Receive data from network.
+ * @param address, if not null and underlying implementation supply the incoming data's source address, this will be filled with source address info.
+ * @param addressLength, the size of source adddress, should not be null.
+ * @param buffer, the memory address where you want to store received data.
+ * @param bufferLen, the size of data buffer.
+ * @return -1 on failure, check errno for detailed error information, on success, returns the actual bytes of data received.
+ */
+ int ReceiveDataFrom(sockaddr* address, size_t* addressLength, uint8_t* buffer, size_t bufferLen) const;
+
+ /**
+ * Gets the AddressFamily used for the underlying socket. E.g. AF_INET, AF_INET6 etc.
+ */
+ inline int GetAddressFamily() const { return m_addressFamily; }
+
+ /**
+ * Is the underlying socket connected with a remote address
+ */
+ inline bool IsConnected() const { return m_connected; }
+
+ private:
+ void CreateSocket(int addressFamily, size_t sendBufSize, size_t receiveBufSize, bool nonBlocking);
+ int GetUnderlyingSocket() const { return m_socket; }
+ void SetUnderlyingSocket(int socket) { m_socket = socket; }
+ int m_addressFamily;
+ // if not connected, you can't perform SendData, if connected, SendDataTo will call SendData
+ mutable bool m_connected;
+ int m_socket;
+ unsigned short m_port;
+ Aws::String m_hostIP;
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Android.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Android.h
new file mode 100644
index 00000000000..b012a49d501
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Android.h
@@ -0,0 +1,29 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#ifdef __ANDROID__
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+#include <jni.h>
+
+namespace Aws
+{
+namespace Platform
+{
+
+// must be called before any other native SDK functions when running on Android
+AWS_CORE_API void InitAndroid(JNIEnv* env, jobject context);
+
+// helper functions for functionality requiring JNI calls; not valid until InitAndroid has been called
+AWS_CORE_API JavaVM* GetJavaVM();
+AWS_CORE_API const char* GetCacheDirectory();
+
+} //namespace Platform
+} //namespace Aws
+
+#endif // __ANDROID__
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Environment.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Environment.h
new file mode 100644
index 00000000000..f522bf3a229
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Environment.h
@@ -0,0 +1,22 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace Environment
+{
+ /**
+ * shim for getenv
+ */
+ AWS_CORE_API Aws::String GetEnv(const char* name);
+
+} // namespace Environment
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/FileSystem.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/FileSystem.h
new file mode 100644
index 00000000000..5eeacd2fbd3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/FileSystem.h
@@ -0,0 +1,226 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <functional>
+
+namespace Aws
+{
+
+namespace FileSystem
+{
+ struct DirectoryEntry;
+ class Directory;
+
+ #ifdef _WIN32
+ static const char PATH_DELIM = '\\';
+ #else
+ static const char PATH_DELIM = '/';
+ #endif
+
+ /**
+ * Returns the directory path for the home dir env variable
+ */
+ AWS_CORE_API Aws::String GetHomeDirectory();
+
+ /**
+ * Returns the directory path for the directory containing the currently running executable
+ */
+ AWS_CORE_API Aws::String GetExecutableDirectory();
+
+ /**
+ * @brief Creates directory if it doesn't exist. Returns true if the directory was created or already exists. False for failure.
+ * @param path, the absolute path of the directory.
+ * @param createParentDirs, if true, then this function will create missing directories on the path like linux command: mkdir -p
+ */
+ AWS_CORE_API bool CreateDirectoryIfNotExists(const char* path, bool createParentDirs = false);
+
+ /**
+ * Creates directory if it doesn't exist. Returns true if the directory was created
+ * or already exists. False for failure.
+ */
+ AWS_CORE_API bool RemoveDirectoryIfExists(const char* path);
+
+ /**
+ * Deletes file if it exists. Returns true if file doesn't exist or on success.
+ */
+ AWS_CORE_API bool RemoveFileIfExists(const char* fileName);
+
+ /**
+ * Moves the file. Returns true on success
+ */
+ AWS_CORE_API bool RelocateFileOrDirectory(const char* from, const char* to);
+
+ /**
+ * Copies a directory and all of its contents.
+ */
+ AWS_CORE_API bool DeepCopyDirectory(const char* from, const char* to);
+
+ /**
+ * Deletes a directory and all of its contents.
+ */
+ AWS_CORE_API bool DeepDeleteDirectory(const char* toDelete);
+
+ /**
+ * Computes a unique tmp file path
+ */
+ AWS_CORE_API Aws::String CreateTempFilePath();
+
+ /**
+ * Opens a directory for traversal.
+ */
+ AWS_CORE_API Aws::UniquePtr<Directory> OpenDirectory(const Aws::String& path, const Aws::String& relativePath = "");
+
+ /**
+ * Joins the leftSegment and rightSegment of a path together using platform specific delimiter.
+ * e.g. C:\users\name\ and .aws becomes C:\users\name\.aws
+ */
+ AWS_CORE_API Aws::String Join(const Aws::String& leftSegment, const Aws::String& rightSegment);
+
+ /**
+ * Joins the leftSegment and rightSegment of a path together using the specified delimiter.
+ * e.g. with delimiter & C:\users\name\ and .aws becomes C:\users\name&.aws
+ */
+ AWS_CORE_API Aws::String Join(char delimiter, const Aws::String& leftSegment, const Aws::String& rightSegment);
+
+ /**
+ * Type of directory entry encountered.
+ */
+ enum class FileType
+ {
+ None,
+ File,
+ Symlink,
+ Directory
+ };
+
+ struct DirectoryEntry
+ {
+ DirectoryEntry() : fileType(FileType::None), fileSize(0) {}
+
+ operator bool() const { return !path.empty() && fileType != FileType::None; }
+
+ Aws::String path;
+ Aws::String relativePath;
+ FileType fileType;
+ int64_t fileSize;
+ };
+
+ /**
+ * Base level representation of a directory. Provides the ability to iterate all entries in a directory and to descend into directories.
+ * We don't recommend you use this class directly. Instead see DirectoryTree.
+ */
+ class AWS_CORE_API Directory
+ {
+ public:
+ virtual ~Directory() = default;
+
+ /**
+ * Initialize a directory with it's absolute path. If the path is invalid, the bool operator will return false.
+ */
+ Directory(const Aws::String& path, const Aws::String& relativePath);
+
+ /**
+ * If this directory is valid for use.
+ */
+ virtual operator bool() const { return m_directoryEntry.operator bool(); }
+
+ /**
+ * Get the entry representing this current directory object.
+ */
+ const DirectoryEntry& GetDirectoryEntry() const { return m_directoryEntry; }
+
+ /**
+ * Get the current path of this directory object.
+ */
+ const Aws::String& GetPath() const { return m_directoryEntry.path; }
+
+ /**
+ * Get the next entry inside this directory.
+ */
+ virtual DirectoryEntry Next() = 0;
+
+ /**
+ * Descend into a directory if it is a directory. Returns a shared pointer to a Directory object which you can then call Next() and Descend on.
+ * The original Directory object you use is responsible for the memory this method allocates, so do not attempt to delete the return value.
+ */
+ Aws::UniquePtr<Directory> Descend(const DirectoryEntry& directoryEntry);
+
+ /**
+ * Recursively search directories with path as root directory, return all normal(non directory and non symlink) files' paths.
+ */
+ static Aws::Vector<Aws::String> GetAllFilePathsInDirectory(const Aws::String& path);
+
+ protected:
+ DirectoryEntry m_directoryEntry;
+ };
+
+ class DirectoryTree;
+
+ /**
+ * Visitor for a Directory Tree traversal. Return true to continue the traversal, false to exit the traversal immediately.
+ */
+ typedef std::function<bool(const DirectoryTree*, const DirectoryEntry&)> DirectoryEntryVisitor;
+
+ /**
+ * Wrapper around directory. Currently provides a Depth-first and Breadth-first traversal of the provided path. This is most likely the class you are
+ * looking for.
+ */
+ class AWS_CORE_API DirectoryTree
+ {
+ public:
+ /**
+ * Create a directory object for use with traversal using the provided path.
+ */
+ DirectoryTree(const Aws::String& path);
+
+ /**
+ * Returns true if the Directory Tree structures match. Otherwise false.
+ */
+ bool operator==(DirectoryTree& other);
+
+ /**
+ * Returns true if the Directory tree structure at path matches. Otherwise false.
+ */
+ bool operator==(const Aws::String& path);
+
+ /**
+ * Computes the difference between two directory trees based on their relative paths.
+ * File contents are not taken into account, only the tree structure.
+ *
+ * Returns the diff between the two trees where the key is the relative path. The Directory entry will
+ * contain the absolute path and file size.
+ */
+ Aws::Map<Aws::String, DirectoryEntry> Diff(DirectoryTree& other);
+
+ /**
+ * If the object is valid for use: true. Otherwise: false.
+ */
+ operator bool() const;
+
+ /**
+ * Performs a depth-first traversal of the directory tree. Upon encountering an entry, visitor will be invoked.
+ * If postOrder is true, a pre-order traversal will be used. otherwise pre-order will be used.
+ */
+ void TraverseDepthFirst(const DirectoryEntryVisitor& visitor, bool postOrderTraversal = false);
+
+ /**
+ * Performs a breadth-first traversal of the directory tree. Upon encountering an entry, visitor will be invoked.
+ */
+ void TraverseBreadthFirst(const DirectoryEntryVisitor& visitor);
+
+ private:
+ bool TraverseDepthFirst(Directory& dir, const DirectoryEntryVisitor& visitor, bool postOrder = false);
+ void TraverseBreadthFirst(Directory& dir, const DirectoryEntryVisitor& visitor);
+
+ Aws::UniquePtr<Directory> m_dir;
+ };
+
+} // namespace FileSystem
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/OSVersionInfo.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/OSVersionInfo.h
new file mode 100644
index 00000000000..e9aa3ea1f0f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/OSVersionInfo.h
@@ -0,0 +1,27 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace OSVersionInfo
+{
+ /**
+ * computing the version string for the current running operating system.
+ */
+ AWS_CORE_API Aws::String ComputeOSVersionString();
+
+ /**
+ * runs a (shell) command string and returns the output; not needed on windows currently
+ */
+ AWS_CORE_API Aws::String GetSysCommandOutput(const char* command);
+
+} // namespace OSVersionInfo
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Platform.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Platform.h
new file mode 100644
index 00000000000..e1cae5262e9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Platform.h
@@ -0,0 +1,9 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/platform/Android.h>
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Security.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Security.h
new file mode 100644
index 00000000000..d1533dd19fc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Security.h
@@ -0,0 +1,24 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <stddef.h>
+
+namespace Aws
+{
+namespace Security
+{
+
+ /*
+ * Securely clears a block of memory
+ */
+ AWS_CORE_API void SecureMemClear(unsigned char *data, size_t length);
+
+} // namespace Security
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Time.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Time.h
new file mode 100644
index 00000000000..ecf802db667
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/platform/Time.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <ctime>
+
+namespace Aws
+{
+namespace Time
+{
+
+ /*
+ * A platform-agnostic implementation of the timegm function from gnu extensions
+ */
+ AWS_CORE_API time_t TimeGM(tm* const t);
+
+ /*
+ * Converts from a time value of std::time_t type to a C tm structure for easier date analysis
+ */
+ AWS_CORE_API void LocalTime(tm* t, std::time_t time);
+
+ /*
+ * Converts from a time value of std::time_t type to a C tm structure for easier date analysis
+ */
+ AWS_CORE_API void GMTime(tm* t, std::time_t time);
+
+} // namespace Time
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ARN.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ARN.h
new file mode 100644
index 00000000000..7df956022df
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ARN.h
@@ -0,0 +1,58 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+ #pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ /**
+ * ARN (Amazon Resource Name) is used to identify an unique resource on AWS.
+ * A full qualified ARN has two forms:
+ * 1. arn:partition:service:region:account-id:resource-type:resource-id:qualifier
+ * 2. arn:partition:service:region:account-id:resource-type/resource-id/qualifier
+ * Different services have different resource definition, here we treat anything
+ * after "[account-id]:" as resource. Service should have their own resource parser.
+ */
+ class AWS_CORE_API ARN
+ {
+ public:
+ ARN(const Aws::String& arnString);
+ /**
+ * return if the ARN is valid after construction.
+ */
+ explicit operator bool() const { return m_valid; }
+
+ /**
+ * Get the originating arn string.
+ */
+ const Aws::String& GetARNString() const { return m_arnString; }
+
+ const Aws::String& GetPartition() const { return m_partition; }
+
+ const Aws::String& GetService() const { return m_service; }
+
+ const Aws::String& GetRegion() const { return m_region; }
+
+ const Aws::String& GetAccountId() const { return m_accountId; }
+
+ const Aws::String& GetResource() const { return m_resource; }
+
+ private:
+ Aws::String m_arnString;
+ Aws::String m_partition;
+ Aws::String m_service;
+ Aws::String m_region;
+ Aws::String m_accountId;
+ Aws::String m_resource;
+
+ bool m_valid;
+ };
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Array.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Array.h
new file mode 100644
index 00000000000..2b5bbc566da
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Array.h
@@ -0,0 +1,250 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <memory>
+#include <cassert>
+#include <cstring>
+#include <algorithm>
+
+#ifdef _WIN32
+
+#include <iterator>
+
+#endif // _WIN32
+
+namespace Aws
+{
+ namespace Utils
+ {
+ static const char* ARRAY_ALLOCATION_TAG = "Aws::Array";
+
+ /**
+ * Safe array class with move and copy semantics.
+ */
+ template<typename T>
+ class Array
+ {
+
+ public:
+ /**
+ * Create new empty array of size arraySize. Default argument is 0. If it is empty then no allocation happens.
+ */
+ Array(size_t arraySize = 0) :
+ m_size(arraySize),
+ m_data(arraySize > 0 ? Aws::MakeUniqueArray<T>(arraySize, ARRAY_ALLOCATION_TAG) : nullptr)
+ {
+ }
+
+ /**
+ * Create new array and initialize it to a raw array
+ */
+ Array(const T* arrayToCopy, size_t arraySize) :
+ m_size(arraySize),
+ m_data(nullptr)
+ {
+ if (arrayToCopy != nullptr && m_size > 0)
+ {
+ m_data.reset(Aws::NewArray<T>(m_size, ARRAY_ALLOCATION_TAG));
+
+#ifdef _WIN32
+ std::copy(arrayToCopy, arrayToCopy + arraySize, stdext::checked_array_iterator< T * >(m_data.get(), m_size));
+#else
+ std::copy(arrayToCopy, arrayToCopy + arraySize, m_data.get());
+#endif // MSVC
+ }
+ }
+
+ /**
+ * Merge multiple arrays into one
+ */
+ Array(Aws::Vector<Array*>&& toMerge)
+ {
+ size_t totalSize = 0;
+ for(auto& array : toMerge)
+ {
+ totalSize += array->m_size;
+ }
+
+ m_size = totalSize;
+ m_data.reset(Aws::NewArray<T>(m_size, ARRAY_ALLOCATION_TAG));
+
+ size_t location = 0;
+ for(auto& arr : toMerge)
+ {
+ if(arr->m_size > 0 && arr->m_data)
+ {
+ size_t arraySize = arr->m_size;
+#ifdef _WIN32
+ std::copy(arr->m_data.get(), arr->m_data.get() + arraySize, stdext::checked_array_iterator< T * >(m_data.get() + location, m_size));
+#else
+ std::copy(arr->m_data.get(), arr->m_data.get() + arraySize, m_data.get() + location);
+#endif // MSVC
+ location += arraySize;
+ }
+ }
+ }
+
+ Array(const Array& other)
+ {
+ m_size = other.m_size;
+ m_data = nullptr;
+
+ if (m_size > 0)
+ {
+ m_data.reset(Aws::NewArray<T>(m_size, ARRAY_ALLOCATION_TAG));
+
+#ifdef _WIN32
+ std::copy(other.m_data.get(), other.m_data.get() + other.m_size, stdext::checked_array_iterator< T * >(m_data.get(), m_size));
+#else
+ std::copy(other.m_data.get(), other.m_data.get() + other.m_size, m_data.get());
+#endif // MSVC
+ }
+ }
+
+ //move c_tor
+ Array(Array&& other) :
+ m_size(other.m_size),
+ m_data(std::move(other.m_data))
+ {
+ other.m_size = 0;
+ other.m_data = nullptr;
+ }
+
+ virtual ~Array() = default;
+
+ Array& operator=(const Array& other)
+ {
+ if (this == &other)
+ {
+ return *this;
+ }
+
+ m_size = other.m_size;
+ m_data = nullptr;
+
+ if (m_size > 0)
+ {
+ m_data.reset(Aws::NewArray<T>(m_size, ARRAY_ALLOCATION_TAG));
+
+#ifdef _WIN32
+ std::copy(other.m_data.get(), other.m_data.get() + other.m_size, stdext::checked_array_iterator< T * >(m_data.get(), m_size));
+#else
+ std::copy(other.m_data.get(), other.m_data.get() + other.m_size, m_data.get());
+#endif // MSVC
+ }
+
+ return *this;
+ }
+
+ Array& operator=(Array&& other)
+ {
+ m_size = other.m_size;
+ m_data = std::move(other.m_data);
+
+ return *this;
+ }
+
+ bool operator==(const Array& other) const
+ {
+ if (this == &other)
+ return true;
+
+ if (m_size == 0 && other.m_size == 0)
+ {
+ return true;
+ }
+
+ if (m_size == other.m_size && m_data && other.m_data)
+ {
+ for (unsigned i = 0; i < m_size; ++i)
+ {
+ if (m_data.get()[i] != other.m_data.get()[i])
+ return false;
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ bool operator!=(const Array& other) const
+ {
+ return !(*this == other);
+ }
+
+ T const& GetItem(size_t index) const
+ {
+ assert(index < m_size);
+ return m_data.get()[index];
+ }
+
+ T& GetItem(size_t index)
+ {
+ assert(index < m_size);
+ return m_data.get()[index];
+ }
+
+ T& operator[](size_t index)
+ {
+ return GetItem(index);
+ }
+
+ T const& operator[](size_t index) const
+ {
+ return GetItem(index);
+ }
+
+ inline size_t GetLength() const
+ {
+ return m_size;
+ }
+
+ inline T* GetUnderlyingData() const
+ {
+ return m_data.get();
+ }
+
+ protected:
+ size_t m_size;
+
+ Aws::UniqueArrayPtr<T> m_data;
+ };
+
+ typedef Array<unsigned char> ByteBuffer;
+
+ /**
+ * Buffer for cryptographic operations. It zeroes itself back out upon deletion. Everything else is identical
+ * to byte buffer.
+ */
+ class AWS_CORE_API CryptoBuffer : public ByteBuffer
+ {
+ public:
+ CryptoBuffer(size_t arraySize = 0) : ByteBuffer(arraySize) {}
+ CryptoBuffer(const unsigned char* arrayToCopy, size_t arraySize) : ByteBuffer(arrayToCopy, arraySize) {}
+ CryptoBuffer(Aws::Vector<ByteBuffer*>&& toMerge) : ByteBuffer(std::move(toMerge)) {}
+ CryptoBuffer(const ByteBuffer& other) : ByteBuffer(other) {}
+ CryptoBuffer(const CryptoBuffer& other) : ByteBuffer(other) {}
+ CryptoBuffer(CryptoBuffer&& other) : ByteBuffer(std::move(other)) {}
+ CryptoBuffer& operator=(const CryptoBuffer&) = default;
+ CryptoBuffer& operator=(CryptoBuffer&& other) { ByteBuffer::operator=(std::move(other)); return *this; }
+ bool operator==(const CryptoBuffer& other) const { return ByteBuffer::operator==(other); }
+ bool operator!=(const CryptoBuffer& other) const { return ByteBuffer::operator!=(other); }
+
+ ~CryptoBuffer() { Zero(); }
+
+ Array<CryptoBuffer> Slice(size_t sizeOfSlice) const;
+ CryptoBuffer& operator^(const CryptoBuffer& operand);
+ void Zero();
+ };
+
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DNS.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DNS.h
new file mode 100644
index 00000000000..7472a386c03
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DNS.h
@@ -0,0 +1,18 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ AWS_CORE_API bool IsValidDnsLabel(const Aws::String& label);
+
+ AWS_CORE_API bool IsValidHost(const Aws::String& host);
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DateTime.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DateTime.h
new file mode 100644
index 00000000000..a4102790116
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/DateTime.h
@@ -0,0 +1,250 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <chrono>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ enum class DateFormat
+ {
+ RFC822, //for http headers
+ ISO_8601, //for query and xml payloads
+ ISO_8601_BASIC, // for retry headers and signers
+ AutoDetect
+ };
+
+ enum class Month
+ {
+ January = 0,
+ February,
+ March,
+ April,
+ May,
+ June,
+ July,
+ August,
+ September,
+ October,
+ November,
+ December
+ };
+
+ enum class DayOfWeek
+ {
+ Sunday = 0,
+ Monday,
+ Tuesday,
+ Wednesday,
+ Thursday,
+ Friday,
+ Saturday
+ };
+
+ /**
+ * Wrapper for all the weird crap we need to do with timestamps.
+ */
+ class AWS_CORE_API DateTime
+ {
+ public:
+ /**
+ * Initializes time point to epoch
+ */
+ DateTime();
+
+ /**
+ * Initializes time point to any other arbitrary timepoint
+ */
+ DateTime(const std::chrono::system_clock::time_point& timepointToAssign);
+
+ /**
+ * Initializes time point to millis Since epoch
+ */
+ DateTime(int64_t millisSinceEpoch);
+
+ /**
+ * Initializes time point to epoch time in seconds.millis
+ */
+ DateTime(double epoch_millis);
+
+ /**
+ * Initializes time point to value represented by timestamp and format.
+ */
+ DateTime(const Aws::String& timestamp, DateFormat format);
+
+ /**
+ * Initializes time point to value represented by timestamp and format.
+ */
+ DateTime(const char* timestamp, DateFormat format);
+
+ bool operator == (const DateTime& other) const;
+ bool operator < (const DateTime& other) const;
+ bool operator > (const DateTime& other) const;
+ bool operator != (const DateTime& other) const;
+ bool operator <= (const DateTime& other) const;
+ bool operator >= (const DateTime& other) const;
+
+ DateTime operator+(const std::chrono::milliseconds& a) const;
+ DateTime operator-(const std::chrono::milliseconds& a) const;
+
+ /**
+ * Assign from seconds.millis since epoch.
+ */
+ DateTime& operator=(double secondsSinceEpoch);
+
+ /**
+ * Assign from millis since epoch.
+ */
+ DateTime& operator=(int64_t millisSinceEpoch);
+
+ /**
+ * Assign from another time_point
+ */
+ DateTime& operator=(const std::chrono::system_clock::time_point& timepointToAssign);
+
+ /**
+ * Assign from an ISO8601 or RFC822 formatted string
+ */
+ DateTime& operator=(const Aws::String& timestamp);
+
+ /**
+ * Whether or not parsing the timestamp from string was successful.
+ */
+ inline bool WasParseSuccessful() const { return m_valid; }
+
+ /**
+ * Convert dateTime to local time string using predefined format.
+ */
+ Aws::String ToLocalTimeString(DateFormat format) const;
+
+ /**
+ * Convert dateTime to local time string using arbitrary format.
+ */
+ Aws::String ToLocalTimeString(const char* formatStr) const;
+
+ /**
+ * Convert dateTime to GMT time string using predefined format.
+ */
+ Aws::String ToGmtString(DateFormat format) const;
+
+ /**
+ * Convert dateTime to GMT time string using arbitrary format.
+ */
+ Aws::String ToGmtString(const char* formatStr) const;
+
+ /**
+ * Get the representation of this datetime as seconds.milliseconds since epoch
+ */
+ double SecondsWithMSPrecision() const;
+
+ /**
+ * Milliseconds since epoch of this datetime.
+ */
+ int64_t Millis() const;
+
+ /**
+ * In the likely case this class doesn't do everything you need to do, here's a copy of the time_point structure. Have fun.
+ */
+ std::chrono::system_clock::time_point UnderlyingTimestamp() const;
+
+ /**
+ * Get the Year portion of this dateTime. localTime if true, return local time, otherwise return UTC
+ */
+ int GetYear(bool localTime = false) const;
+
+ /**
+ * Get the Month portion of this dateTime. localTime if true, return local time, otherwise return UTC
+ */
+ Month GetMonth(bool localTime = false) const;
+
+ /**
+ * Get the Day of the Month portion of this dateTime. localTime if true, return local time, otherwise return UTC
+ */
+ int GetDay(bool localTime = false) const;
+
+ /**
+ * Get the Day of the Week portion of this dateTime. localTime if true, return local time, otherwise return UTC
+ */
+ DayOfWeek GetDayOfWeek(bool localTime = false) const;
+
+ /**
+ * Get the Hour portion of this dateTime. localTime if true, return local time, otherwise return UTC
+ */
+ int GetHour(bool localTime = false) const;
+
+ /**
+ * Get the Minute portion of this dateTime. localTime if true, return local time, otherwise return UTC
+ */
+ int GetMinute(bool localTime = false) const;
+
+ /**
+ * Get the Second portion of this dateTime. localTime if true, return local time, otherwise return UTC
+ */
+ int GetSecond(bool localTime = false) const;
+
+ /**
+ * Get whether or not this dateTime is in Daylight savings time. localTime if true, return local time, otherwise return UTC
+ */
+ bool IsDST(bool localTime = false) const;
+
+ /**
+ * Get an instance of DateTime representing this very instant.
+ */
+ static DateTime Now();
+
+ /**
+ * Get the millis since epoch representing this very instant.
+ */
+ static int64_t CurrentTimeMillis();
+
+ /**
+ * Calculates the current local timestamp, formats it and returns it as a string
+ */
+ static Aws::String CalculateLocalTimestampAsString(const char* formatStr);
+
+ /**
+ * Calculates the current gmt timestamp, formats it, and returns it as a string
+ */
+ static Aws::String CalculateGmtTimestampAsString(const char* formatStr);
+
+ /**
+ * Calculates the current hour of the day in localtime.
+ */
+ static int CalculateCurrentHour();
+
+ /**
+ * The amazon timestamp format is a double with seconds.milliseconds
+ */
+ static double ComputeCurrentTimestampInAmazonFormat();
+
+ /**
+ * Calculates the current time in GMT with millisecond precision using the format
+ * "Year-month-day hours:minutes:seconds.milliseconds"
+ */
+ static Aws::String CalculateGmtTimeWithMsPrecision();
+
+ /**
+ * Compute the difference between two timestamps.
+ */
+ static std::chrono::milliseconds Diff(const DateTime& a, const DateTime& b);
+
+ std::chrono::milliseconds operator - (const DateTime& other) const;
+ private:
+ std::chrono::system_clock::time_point m_time;
+ bool m_valid;
+
+ void ConvertTimestampStringToTimePoint(const char* timestamp, DateFormat format);
+ tm GetTimeStruct(bool localTime) const;
+ tm ConvertTimestampToLocalTimeStruct() const;
+ tm ConvertTimestampToGmtStruct() const;
+ };
+
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/EnumParseOverflowContainer.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/EnumParseOverflowContainer.h
new file mode 100644
index 00000000000..0302e2bd364
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/EnumParseOverflowContainer.h
@@ -0,0 +1,36 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/threading/ReaderWriterLock.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ /**
+ * This container is for storing unknown enum values that are encountered during parsing.
+ * This is to work around the round-tripping enums problem. It's really just a simple thread-safe
+ * hashmap.
+ */
+ class AWS_CORE_API EnumParseOverflowContainer
+ {
+ public:
+ const Aws::String& RetrieveOverflow(int hashCode) const;
+ void StoreOverflow(int hashCode, const Aws::String& value);
+
+ private:
+ mutable Aws::Utils::Threading::ReaderWriterLock m_overflowLock;
+ Aws::Map<int, Aws::String> m_overflowMap;
+ Aws::String m_emptyString;
+ };
+ }
+}
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/FileSystemUtils.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/FileSystemUtils.h
new file mode 100644
index 00000000000..d62ff4c094a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/FileSystemUtils.h
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/platform/FileSystem.h>
+
+#include <fstream>
+
+namespace Aws
+{
+ namespace Utils
+ {
+
+ class AWS_CORE_API FStreamWithFileName : public Aws::FStream
+ {
+ public:
+ FStreamWithFileName(const Aws::String& fileName, std::ios_base::openmode openFlags) :
+ Aws::FStream(fileName.c_str(), openFlags), m_fileName(fileName) {}
+
+ virtual ~FStreamWithFileName() = default;
+
+ const Aws::String& GetFileName() const { return m_fileName; }
+ protected:
+ Aws::String m_fileName;
+ };
+
+ /**
+ * Provides a fstream around a temporary file. This file gets deleted upon an instance of this class's destructor being called.
+ */
+ class AWS_CORE_API TempFile : public Aws::Utils::FStreamWithFileName
+ {
+ public:
+ /**
+ * Creates a temporary file with [prefix][temp name][suffix] e.g.
+ * prefix of "foo" and suffix of ".bar" will generate foo[some random string].bar
+ */
+ TempFile(const char* prefix, const char* suffix, std::ios_base::openmode openFlags);
+ /**
+ * Creates a temporary file with [prefix][temp name] e.g.
+ * prefix of "foo" will generate foo[some random string]
+ */
+ TempFile(const char* prefix, std::ios_base::openmode openFlags);
+ /**
+ * Creates a temporary file with a randome string for the name.
+ */
+ TempFile(std::ios_base::openmode openFlags);
+
+ ~TempFile();
+ };
+
+ class AWS_CORE_API PathUtils
+ {
+ public:
+
+ /**
+ * Get file name from it's full path, e.g get "file1" from "/path/to/file1.ext"; get "file2" from "/path/to/file2"
+ */
+ static Aws::String GetFileNameFromPathWithoutExt(const Aws::String& path);
+
+ /**
+ * Get file name from it's full path, e.g get "file1.ext" from "/path/to/file1.ext"; get "file2" from "/path/to/file2"
+ */
+ static Aws::String GetFileNameFromPathWithExt(const Aws::String& path);
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/GetTheLights.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/GetTheLights.h
new file mode 100644
index 00000000000..f42475c8e4f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/GetTheLights.h
@@ -0,0 +1,35 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSStack.h>
+#include <functional>
+#include <atomic>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ /**
+ * Make initialization and cleanup of shared resources less painful.
+ * If you have this problem. Create a static instance of GetTheLights,
+ * have each actor call Enter the room with your callable.
+ *
+ * When you are finished with the shared resources call LeaveRoom(). The last caller will
+ * have its callable executed.
+ */
+ class AWS_CORE_API GetTheLights
+ {
+ public:
+ GetTheLights();
+ void EnterRoom(std::function<void()>&&);
+ void LeaveRoom(std::function<void()>&&);
+ private:
+ std::atomic<int> m_value;
+ };
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/HashingUtils.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/HashingUtils.h
new file mode 100644
index 00000000000..48c04daf59b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/HashingUtils.h
@@ -0,0 +1,86 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/Array.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+
+ /**
+ * Generic utils for hashing strings
+ */
+ class AWS_CORE_API HashingUtils
+ {
+ public:
+ /**
+ * Base64 encodes string
+ */
+ static Aws::String Base64Encode(const ByteBuffer& byteBuffer);
+
+ /**
+ * Base64 decodes string
+ */
+ static ByteBuffer Base64Decode(const Aws::String&);
+
+ /**
+ * Hex encodes string
+ */
+ static Aws::String HexEncode(const ByteBuffer& byteBuffer);
+
+ /**
+ * Hex encodes string
+ */
+ static ByteBuffer HexDecode(const Aws::String& str);
+
+ /**
+ * Calculates a SHA256 HMAC digest (not hex encoded)
+ */
+ static ByteBuffer CalculateSHA256HMAC(const ByteBuffer& toSign, const ByteBuffer& secret);
+
+ /**
+ * Calculates a SHA256 Hash digest (not hex encoded)
+ */
+ static ByteBuffer CalculateSHA256(const Aws::String& str);
+
+ /**
+ * Calculates a SHA256 Hash digest on a stream (the entire stream is read, not hex encoded.)
+ */
+ static ByteBuffer CalculateSHA256(Aws::IOStream& stream);
+
+ /**
+ * Calculates a SHA256 Tree Hash digest (not hex encoded, see tree hash definition: http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html)
+ */
+ static ByteBuffer CalculateSHA256TreeHash(const Aws::String& str);
+
+ /**
+ * Calculates a SHA256 Tree Hash digest on a stream (the entire stream is read, not hex encoded.)
+ */
+ static ByteBuffer CalculateSHA256TreeHash(Aws::IOStream& stream);
+
+ /**
+ * Calculates a MD5 Hash value
+ */
+ static ByteBuffer CalculateMD5(const Aws::String& str);
+
+ /**
+ * Calculates a MD5 Hash value
+ */
+ static ByteBuffer CalculateMD5(Aws::IOStream& stream);
+
+ static int HashString(const char* strToHash);
+
+ };
+
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Outcome.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Outcome.h
new file mode 100644
index 00000000000..70e9e4be262
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/Outcome.h
@@ -0,0 +1,170 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <cassert>
+#include <utility>
+
+namespace Aws
+{
+ namespace Utils
+ {
+
+ /**
+ * Template class representing the outcome of making a request. It will contain
+ * either a successful result or the failure error. The caller must check
+ * whether the outcome of the request was a success before attempting to access
+ * the result or the error.
+ */
+ template<typename R, typename E> // Result, Error
+ class Outcome
+ {
+ public:
+
+ Outcome() : result(), error(), success(false)
+ {
+ }
+ Outcome(const R& r) : result(r), error(), success(true)
+ {
+ }
+ Outcome(const E& e) : result(), error(e), success(false)
+ {
+ }
+ Outcome(R&& r) : result(std::forward<R>(r)), error(), success(true)
+ {
+ }
+ Outcome(E&& e) : result(), error(std::forward<E>(e)), success(false)
+ {
+ }
+ Outcome(const Outcome& o) :
+ result(o.result),
+ error(o.error),
+ success(o.success)
+ {
+ }
+
+ template<typename RT, typename ET>
+ friend class Outcome;
+
+#if defined (__cplusplus) && __cplusplus > 201103L
+ template< bool B, class T = void >
+ using enable_if_t = std::enable_if_t<B, T>;
+#else
+ template< bool B, class T = void >
+ using enable_if_t = typename std::enable_if<B,T>::type;
+#endif
+
+ // Move both result and error from other type of outcome
+ template<typename RT, typename ET, enable_if_t<std::is_convertible<RT, R>::value &&
+ std::is_convertible<ET, E>::value, int> = 0>
+ Outcome(Outcome<RT, ET>&& o) :
+ result(std::move(o.result)),
+ error(std::move(o.error)),
+ success(o.success)
+ {
+ }
+
+ // Move result from other type of outcome
+ template<typename RT, typename ET, enable_if_t<std::is_convertible<RT, R>::value &&
+ !std::is_convertible<ET, E>::value, int> = 0>
+ Outcome(Outcome<RT, ET>&& o) :
+ result(std::move(o.result)),
+ success(o.success)
+ {
+ assert(o.success);
+ }
+
+ // Move error from other type of outcome
+ template<typename RT, typename ET, enable_if_t<!std::is_convertible<RT, R>::value &&
+ std::is_convertible<ET, E>::value, int> = 0>
+ Outcome(Outcome<RT, ET>&& o) :
+ error(std::move(o.error)),
+ success(o.success)
+ {
+ assert(!o.success);
+ }
+
+ template<typename ET, enable_if_t<std::is_convertible<ET, E>::value, int> = 0>
+ Outcome(ET&& e) : error(std::forward<ET>(e)), success(false)
+ {
+ }
+
+ Outcome& operator=(const Outcome& o)
+ {
+ if (this != &o)
+ {
+ result = o.result;
+ error = o.error;
+ success = o.success;
+ }
+
+ return *this;
+ }
+
+ Outcome(Outcome&& o) : // Required to force Move Constructor
+ result(std::move(o.result)),
+ error(std::move(o.error)),
+ success(o.success)
+ {
+ }
+
+ Outcome& operator=(Outcome&& o)
+ {
+ if (this != &o)
+ {
+ result = std::move(o.result);
+ error = std::move(o.error);
+ success = o.success;
+ }
+
+ return *this;
+ }
+
+ inline const R& GetResult() const
+ {
+ return result;
+ }
+
+ inline R& GetResult()
+ {
+ return result;
+ }
+
+ /**
+ * casts the underlying result to an r-value so that caller can take ownership of underlying resources.
+ * this is necessary when streams are involved.
+ */
+ inline R&& GetResultWithOwnership()
+ {
+ return std::move(result);
+ }
+
+ inline const E& GetError() const
+ {
+ return error;
+ }
+
+ template<typename T>
+ inline T GetError()
+ {
+ return error.template GetModeledError<T>();
+ }
+
+ inline bool IsSuccess() const
+ {
+ return this->success;
+ }
+
+ private:
+ R result;
+ E error;
+ bool success;
+ };
+
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ResourceManager.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ResourceManager.h
new file mode 100644
index 00000000000..517f65d0fa5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ResourceManager.h
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <mutex>
+#include <condition_variable>
+#include <atomic>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ /**
+ * Generic resource manager with Acquire/Release semantics. Acquire will block waiting on a an available resource. Release will
+ * cause one blocked acquisition to unblock.
+ *
+ * You must call ShutdownAndWait() when finished with this container, this unblocks the listening thread and gives you a chance to
+ * clean up the resource if needed.
+ * After calling ShutdownAndWait(), you must not call Acquire any more.
+ */
+ template< typename RESOURCE_TYPE>
+ class ExclusiveOwnershipResourceManager
+ {
+ public:
+ ExclusiveOwnershipResourceManager() : m_shutdown(false) {}
+
+ /**
+ * Returns a resource with exclusive ownership. You must call Release on the resource when you are finished or other
+ * threads will block waiting to acquire it.
+ *
+ * @return instance of RESOURCE_TYPE
+ */
+ RESOURCE_TYPE Acquire()
+ {
+ std::unique_lock<std::mutex> locker(m_queueLock);
+ while(!m_shutdown.load() && m_resources.size() == 0)
+ {
+ m_semaphore.wait(locker, [&](){ return m_shutdown.load() || m_resources.size() > 0; });
+ }
+
+ assert(!m_shutdown.load());
+
+ RESOURCE_TYPE resource = m_resources.back();
+ m_resources.pop_back();
+
+ return resource;
+ }
+
+ /**
+ * Returns whether or not resources are currently available for acquisition
+ *
+ * @return true means that at this instant some resources are available (though another thread may grab them from under you),
+ * this is only a hint.
+ */
+ bool HasResourcesAvailable()
+ {
+ std::lock_guard<std::mutex> locker(m_queueLock);
+ return m_resources.size() > 0 && !m_shutdown.load();
+ }
+
+ /**
+ * Releases a resource back to the pool. This will unblock one waiting Acquire call if any are waiting.
+ *
+ * @param resource resource to release back to the pool
+ */
+ void Release(RESOURCE_TYPE resource)
+ {
+ std::unique_lock<std::mutex> locker(m_queueLock);
+ m_resources.push_back(resource);
+ locker.unlock();
+ m_semaphore.notify_one();
+ }
+
+ /**
+ * Does not block or even touch the semaphores. This is intended for setup only, do not use this after Acquire has been called for the first time.
+ *
+ * @param resource resource to be managed.
+ */
+ void PutResource(RESOURCE_TYPE resource)
+ {
+ m_resources.push_back(resource);
+ }
+
+ /**
+ * Waits for all acquired resources to be released, then empties the queue.
+ * You must call ShutdownAndWait() when finished with this container, this unblocks the listening thread and gives you a chance to
+ * clean up the resource if needed.
+ * After calling ShutdownAndWait(), you must not call Acquire any more.
+ *
+ * @params resourceCount the number of resources you've added to the resource manager.
+ * @return the previously managed resources that are now available for cleanup.
+ */
+ Aws::Vector<RESOURCE_TYPE> ShutdownAndWait(size_t resourceCount)
+ {
+ Aws::Vector<RESOURCE_TYPE> resources;
+ std::unique_lock<std::mutex> locker(m_queueLock);
+ m_shutdown = true;
+
+ //wait for all acquired resources to be released.
+ while (m_resources.size() < resourceCount)
+ {
+ m_semaphore.wait(locker, [&]() { return m_resources.size() == resourceCount; });
+ }
+
+ resources = m_resources;
+ m_resources.clear();
+
+ return resources;
+ }
+
+ private:
+ Aws::Vector<RESOURCE_TYPE> m_resources;
+ std::mutex m_queueLock;
+ std::condition_variable m_semaphore;
+ std::atomic<bool> m_shutdown;
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/StringUtils.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/StringUtils.h
new file mode 100644
index 00000000000..312342b86ad
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/StringUtils.h
@@ -0,0 +1,219 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+
+
+namespace Aws
+{
+ namespace Utils
+ {
+ /**
+ * All the things the c++ stdlib is missing for string operations that I needed.
+ */
+ class AWS_CORE_API StringUtils
+ {
+ public:
+ static void Replace(Aws::String& s, const char* search, const char* replace);
+
+
+ /**
+ * Converts a string to lower case.
+ */
+ static Aws::String ToLower(const char* source);
+
+
+ /**
+ * Converts a string to upper case.
+ */
+ static Aws::String ToUpper(const char* source);
+
+
+ /**
+ * Does a caseless comparison of two strings.
+ */
+ static bool CaselessCompare(const char* value1, const char* value2);
+
+
+ /**
+ * URL encodes a string (uses %20 not + for spaces).
+ */
+ static Aws::String URLEncode(const char* unsafe);
+
+ /**
+ * Http Clients tend to escape some characters but not all. Escaping all of them causes problems, because the client
+ * will also try to escape them.
+ * So this only escapes non-ascii characters and the + character
+ */
+ static Aws::String UTF8Escape(const char* unicodeString, const char* delimiter);
+
+ /**
+ * URL encodes a double (if it ends up going to scientific notation) otherwise it just returns it as a string.
+ */
+ static Aws::String URLEncode(double unsafe);
+
+
+ /**
+ * Decodes a URL encoded string (will handle both encoding schemes for spaces).
+ */
+ static Aws::String URLDecode(const char* safe);
+
+ enum class SplitOptions
+ {
+ /**
+ * By default, removes all the empty entries in the vector returned by Split()
+ */
+ NOT_SET,
+ /**
+ * Includes empty entries in the vector returned by Split()
+ */
+ INCLUDE_EMPTY_ENTRIES
+ };
+
+ /**
+ * @brief Splits a string on a delimiter (empty items are excluded).
+ * @param toSplit, the original string to split
+ * @param splitOn, the delemiter you want to use.
+ */
+ static Aws::Vector<Aws::String> Split(const Aws::String& toSplit, char splitOn);
+
+ /**
+ * @brief Splits a string on a delimiter.
+ * @param toSplit, the original string to split
+ * @param splitOn, the delemiter you want to use.
+ * @param option, if INCLUDE_EMPTY_ENTRIES, includes empty entries in the result, otherwise removes empty entries.
+ */
+ static Aws::Vector<Aws::String> Split(const Aws::String& toSplit, char splitOn, SplitOptions option);
+
+ /**
+ * @brief Splits a string on a delimiter (empty items are excluded).
+ * @param toSplit, the original string to split
+ * @param splitOn, the delemiter you want to use.
+ * @param numOfTargetParts, how many target parts you want to get, if it is 0, as many as possible.
+ */
+ static Aws::Vector<Aws::String> Split(const Aws::String& toSplit, char splitOn, size_t numOfTargetParts);
+
+ /**
+ * @brief Splits a string on a delimiter.
+ * @param toSplit, the original string to split
+ * @param splitOn, the delemiter you want to use.
+ * @param numOfTargetParts, how many target parts you want to get, if it is 0, as many as possible.
+ * @param option, if INCLUDE_EMPTY_ENTRIES, includes empty entries in the result, otherwise removes empty entries.
+ */
+ static Aws::Vector<Aws::String> Split(const Aws::String& toSplit, char splitOn, size_t numOfTargetParts, SplitOptions option);
+
+ /**
+ * Splits a string on new line characters.
+ */
+ static Aws::Vector<Aws::String> SplitOnLine(const Aws::String& toSplit);
+
+
+ /** static Aws::Vector<Aws::String> SplitOnRegex(Aws::String regex);
+ * trim from start
+ */
+ static Aws::String LTrim(const char* source);
+
+
+ /**
+ * trim from end
+ */
+ static Aws::String RTrim(const char* source);
+
+ /**
+ * trim from both ends
+ */
+ static Aws::String Trim(const char* source);
+
+
+ /**
+ * convert to int 64
+ */
+ static long long ConvertToInt64(const char* source);
+
+
+ /**
+ * convert to int 32
+ */
+ static long ConvertToInt32(const char* source);
+
+
+ /**
+ * convert to bool
+ */
+ static bool ConvertToBool(const char* source);
+
+
+ /**
+ * convert to double
+ */
+ static double ConvertToDouble(const char* source);
+
+
+#ifdef _WIN32
+ /**
+ * Converts a string to wstring.
+ */
+ static Aws::WString ToWString(const char* source);
+
+ /**
+ * Converts a wstring to string.
+ */
+ static Aws::String FromWString(const wchar_t* source);
+#endif
+
+ /**
+ * not all platforms (Android) have std::to_string
+ */
+ template< typename T >
+ static Aws::String to_string(T value)
+ {
+ Aws::OStringStream os;
+ os << value;
+ return os.str();
+ }
+
+ /**
+ * locale agnostic implementation of std::isalnum
+ */
+ static bool IsAlnum(char c)
+ {
+ return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
+ }
+
+ /**
+ * Convert an unsigned integer to its hex string in upper case.
+ */
+ template<typename T, class = typename std::enable_if<std::is_unsigned<T>::value>::type>
+ static Aws::String ToHexString(T value)
+ {
+ if (value == 0)
+ {
+ return "0";
+ }
+
+ Aws::String s;
+ s.reserve(sizeof(value) * 2);
+ T r = value;
+ while (r > 0)
+ {
+ s += "0123456789ABCDEF"[r & 0xf];
+ r >>= 4;
+ }
+
+ std::reverse(s.begin(), s.end());
+ return s;
+ }
+ };
+
+
+ } // namespace Utils
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UUID.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UUID.h
new file mode 100644
index 00000000000..e6320d14ef5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UUID.h
@@ -0,0 +1,52 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/Array.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ static const size_t UUID_BINARY_SIZE = 0x10;
+
+ /**
+ * Class encapsulating a UUID. This is platform dependent. The method you are most likely interested in is RandomUUID().
+ */
+ class AWS_CORE_API UUID
+ {
+ public:
+ /**
+ * Parses a GUID string into the raw data.
+ */
+ UUID(const Aws::String&);
+ /**
+ * Sets the raw uuid data
+ */
+ UUID(const unsigned char uuid[UUID_BINARY_SIZE]);
+
+ /**
+ * Returns the current UUID as a GUID string
+ */
+ operator Aws::String() const;
+ /**
+ * Returns a copy of the raw uuid
+ */
+ inline operator ByteBuffer() const { return ByteBuffer(m_uuid, sizeof(m_uuid)); }
+
+ /**
+ * Generates a UUID. It will always try to prefer a random implementation from the entropy source on the machine. If none, is available, it will
+ * fallback to the mac address and timestamp implementation.
+ */
+ static UUID RandomUUID();
+
+ private:
+ unsigned char m_uuid[UUID_BINARY_SIZE];
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UnreferencedParam.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UnreferencedParam.h
new file mode 100644
index 00000000000..d1bb74467d0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/UnreferencedParam.h
@@ -0,0 +1,18 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+// taken from http://stackoverflow.com/questions/3020584/avoid-warning-unreferenced-formal-parameter, ugly but avoids having to #include the definition of an unreferenced struct/class
+
+#if defined (_MSC_VER)
+
+ #define AWS_UNREFERENCED_PARAM(x) (&reinterpret_cast<const int &>(x))
+
+#else
+
+ #define AWS_UNREFERENCED_PARAM(x) ((void)(x))
+
+#endif // _MSC_VER
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/base64/Base64.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/base64/Base64.h
new file mode 100644
index 00000000000..454d20c2623
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/base64/Base64.h
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#ifdef __APPLE__
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif // __clang__
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif // __GNUC__
+
+#endif // __APPLE__
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Base64
+ {
+
+ /**
+ * interface for platform specific Base64 encoding/decoding.
+ */
+ class AWS_CORE_API Base64
+ {
+ public:
+ Base64(const char *encodingTable = nullptr);
+
+ /**
+ * Encode a byte buffer into a base64 stream.
+ *
+ * throws Base64Exception if encoding fails.
+ */
+ Aws::String Encode(const ByteBuffer&) const;
+
+ /**
+ * Decode a base64 string into a byte buffer.
+ */
+ ByteBuffer Decode(const Aws::String&) const;
+
+ /**
+ * Calculates the required length of a base64 buffer after decoding the
+ * input string.
+ */
+ static size_t CalculateBase64DecodedLength(const Aws::String& b64input);
+ /**
+ * Calculates the length of an encoded base64 string based on the buffer being encoded
+ */
+ static size_t CalculateBase64EncodedLength(const ByteBuffer& buffer);
+
+ private:
+ char m_mimeBase64EncodingTable[64];
+ uint8_t m_mimeBase64DecodingTable[256];
+
+ };
+
+ } // namespace Base64
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Cipher.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Cipher.h
new file mode 100644
index 00000000000..fb31628b0e1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Cipher.h
@@ -0,0 +1,206 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ static const size_t SYMMETRIC_KEY_LENGTH = 32;
+ static const size_t MIN_IV_LENGTH = 12;
+
+ AWS_CORE_API CryptoBuffer IncrementCTRCounter(const CryptoBuffer& counter, uint32_t numberOfBlocks);
+
+ /**
+ * Interface for symmetric encryption and decryption providers. An instance of this class is good for exactly one encryption or decryption run.
+ * It should not be used to encrypt or decrypt multiple messages.
+ */
+ class AWS_CORE_API SymmetricCipher
+ {
+ public:
+ /**
+ * Initialize with key and an auto-generated initializationVector. Copies key.
+ * ivGenerationInCtrMode, if true, initializes the iv with a 4 byte counter at the end.
+ */
+ SymmetricCipher(const CryptoBuffer& key, size_t ivSize, bool ivGenerationInCtrMode = false) :
+ m_key(key),
+ m_initializationVector(ivSize > 0 ? GenerateIV(ivSize, ivGenerationInCtrMode) : 0),
+ m_failure(false)
+ {
+ }
+
+ /**
+ * Initialize with key and initializationVector, set tag for decryption of authenticated modes (makes copies of the buffers)
+ */
+ SymmetricCipher(const CryptoBuffer& key, const CryptoBuffer& initializationVector, const CryptoBuffer& tag = CryptoBuffer(0)) :
+ m_key(key),
+ m_initializationVector(initializationVector),
+ m_tag(tag),
+ m_failure(false)
+ {
+ }
+
+ /**
+ * Initialize with key and initializationVector, set tag for decryption of authenticated modes (move the buffers)
+ */
+ SymmetricCipher(CryptoBuffer&& key, CryptoBuffer&& initializationVector, CryptoBuffer&& tag = CryptoBuffer(0)) :
+ m_key(std::move(key)),
+ m_initializationVector(std::move(initializationVector)),
+ m_tag(std::move(tag)),
+ m_failure(false)
+ {
+ }
+
+ SymmetricCipher(const SymmetricCipher& other) = delete;
+ SymmetricCipher& operator=(const SymmetricCipher& other) = delete;
+
+ /**
+ * Normally we don't work around VS 2013 not auto-generating these, but they are kind of expensive,
+ * so let's go ahead and optimize by defining default move operations. Implementors of this class
+ * need to be sure to define the move operations and call the base class.
+ */
+ SymmetricCipher(SymmetricCipher&& toMove) :
+ m_key(std::move(toMove.m_key)),
+ m_initializationVector(std::move(toMove.m_initializationVector)),
+ m_tag(std::move(toMove.m_tag)),
+ m_failure(toMove.m_failure)
+ {
+ }
+
+ /**
+ * Normally we don't work around VS 2013 not auto-generating these, but they are kind of expensive,
+ * so let's go ahead and optimize by defining default move operations. Implementors of this class
+ * need to be sure to define the move operations and call the base class.
+ */
+ SymmetricCipher& operator=(SymmetricCipher&& toMove)
+ {
+ m_key = std::move(toMove.m_key);
+ m_initializationVector = std::move(toMove.m_initializationVector);
+ m_tag = std::move(toMove.m_tag);
+ m_failure = toMove.m_failure;
+
+ return *this;
+ }
+
+ virtual ~SymmetricCipher() = default;
+
+ /**
+ * Whether or not the cipher is in a good state. If this ever returns false, throw away all buffers
+ * it has vended.
+ */
+ virtual operator bool() const { return Good(); }
+
+ /**
+ * Encrypt a buffer of data. Part of the contract for this interface is that intention that
+ * a user call this function multiple times for a large stream. As such, multiple calls to this function
+ * on the same instance should produce valid sequential output for an encrypted stream.
+ */
+ virtual CryptoBuffer EncryptBuffer( const CryptoBuffer& unEncryptedData) = 0;
+
+ /**
+ * Finalize Encryption, returns anything remaining in the last block
+ */
+ virtual CryptoBuffer FinalizeEncryption () = 0;
+
+ /**
+ * Decrypt a buffer of data. Part of the contract for this interface is that intention that
+ * a user call this function multiple times for a large stream. As such, multiple calls to this function
+ * on the same instance should produce valid sequential output from an encrypted stream.
+ */
+ virtual CryptoBuffer DecryptBuffer(const CryptoBuffer& encryptedData) = 0;
+
+ /**
+ * Finalize Decryption, returns anything remaining in the last block
+ */
+ virtual CryptoBuffer FinalizeDecryption () = 0;
+
+ virtual void Reset() = 0;
+
+ /**
+ * IV used for encryption/decryption
+ */
+ inline const CryptoBuffer& GetIV() const { return m_initializationVector; }
+
+ /**
+ * Tag generated by encryption and used for the decryption.
+ * This will be set in an authenticated mode, otherwise empty
+ */
+ inline const CryptoBuffer& GetTag() const { return m_tag; }
+
+ inline bool Fail() const { return m_failure; }
+ inline bool Good() const { return !Fail(); }
+
+ /**
+ * Generates a non-deterministic random IV. The first call is somewhat expensive but subsequent calls
+ * should be fast. If ctrMode is true, it will pad nonce in the first 1/4 of the iv and initialize
+ * the back 1/4 to 1.
+ */
+ static CryptoBuffer GenerateIV(size_t ivLengthBytes, bool ctrMode = false);
+
+ /**
+ * Generates a non-deterministic random symmetric key. Default (and minimum bar for security) is 256 bits.
+ */
+ static CryptoBuffer GenerateKey(size_t keyLengthBytes = SYMMETRIC_KEY_LENGTH);
+
+ protected:
+
+ SymmetricCipher() : m_failure(false) {}
+
+ CryptoBuffer m_key;
+ CryptoBuffer m_initializationVector;
+ CryptoBuffer m_tag;
+ bool m_failure;
+ };
+
+ /**
+ * Abstract factory class for Creating platform specific implementations of a Symmetric Cipher
+ */
+ class SymmetricCipherFactory
+ {
+ public:
+ virtual ~SymmetricCipherFactory() {}
+
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ virtual std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key) const = 0;
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ virtual std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key, const CryptoBuffer*) const
+ {
+ return CreateImplementation(key);
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ virtual std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key, const CryptoBuffer& iv, const CryptoBuffer& tag = CryptoBuffer(0), const CryptoBuffer& aad = CryptoBuffer(0)) const = 0;
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ virtual std::shared_ptr<SymmetricCipher> CreateImplementation(CryptoBuffer&& key, CryptoBuffer&& iv, CryptoBuffer&& tag = CryptoBuffer(0), CryptoBuffer&& aad = CryptoBuffer(0)) const = 0;
+
+ /**
+ * Only called once per factory, your chance to make static library calls for setup.
+ * Default is no-op.
+ */
+ virtual void InitStaticState() {}
+
+ /**
+ * Only called once per factory, your chance to cleanup static library calls for setup.
+ * Default is no-op.
+ */
+ virtual void CleanupStaticState() {}
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoMaterial.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoMaterial.h
new file mode 100644
index 00000000000..ea997988539
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoMaterial.h
@@ -0,0 +1,244 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/Aws.h>
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/crypto/CryptoBuf.h>
+#include <aws/core/utils/crypto/ContentCryptoScheme.h>
+#include <aws/core/utils/crypto/KeyWrapAlgorithm.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ class AWS_CORE_API ContentCryptoMaterial
+ {
+ public:
+ /*
+ Default constructor.
+ */
+ ContentCryptoMaterial();
+ /*
+ Initialize content crypto material with content crypto scheme. Constructor will also generate the cek automatically.
+ Since the creation of the crypto content material will be within the S3 crypto modules, only the crypto scheme is needed for initialization.
+ The rest of the data will be set using the accessors below.
+ */
+ ContentCryptoMaterial(ContentCryptoScheme contentCryptoScheme);
+
+ /*
+ Initialize with content encryption key (cek) and content crypto scheme.
+ */
+ ContentCryptoMaterial(const Aws::Utils::CryptoBuffer& cek, ContentCryptoScheme contentCryptoScheme);
+
+ /**
+ * Gets the underlying content encryption key.
+ */
+ inline const Aws::Utils::CryptoBuffer& GetContentEncryptionKey() const
+ {
+ return m_contentEncryptionKey;
+ }
+
+ /**
+ * Gets the underlying encrypted content encryption key.
+ */
+ inline const Aws::Utils::CryptoBuffer& GetEncryptedContentEncryptionKey() const
+ {
+ return m_encryptedContentEncryptionKey;
+ }
+
+ /**
+ * Gets the underlying initialization vector
+ */
+ inline const Aws::Utils::CryptoBuffer& GetIV() const
+ {
+ return m_iv;
+ }
+
+ /**
+ * Gets the underlying crypto tag length
+ */
+ inline size_t GetCryptoTagLength() const
+ {
+ return m_cryptoTagLength;
+ }
+
+ /**
+ * Gets the underlying materials description map.
+ */
+ inline const Aws::Map<Aws::String, Aws::String>& GetMaterialsDescription() const
+ {
+ return m_materialsDescription;
+ }
+
+ /*
+ * Gets the value of the key in the current materials description map.
+ */
+ inline const Aws::String& GetMaterialsDescription(const Aws::String& key) const
+ {
+ return m_materialsDescription.at(key);
+ }
+
+ /**
+ * Gets the underlying key wrap algorithm
+ */
+ inline KeyWrapAlgorithm GetKeyWrapAlgorithm() const
+ {
+ return m_keyWrapAlgorithm;
+ }
+
+ /**
+ * Gets the underlying content crypto scheme.
+ */
+ inline ContentCryptoScheme GetContentCryptoScheme() const
+ {
+ return m_contentCryptoScheme;
+ }
+
+ /**
+ * Sets the underlying content encryption key. Copies from parameter content encryption key.
+ */
+ inline void SetContentEncryptionKey(const Aws::Utils::CryptoBuffer& contentEncryptionKey)
+ {
+ m_contentEncryptionKey = contentEncryptionKey;
+ }
+
+ /**
+ * Sets the underlying encrypted content encryption key. Copies from parameter encrypted content encryption key.
+ */
+ inline void SetEncryptedContentEncryptionKey(const Aws::Utils::CryptoBuffer& encryptedContentEncryptionKey)
+ {
+ m_encryptedContentEncryptionKey = encryptedContentEncryptionKey;
+ }
+
+ /**
+ * Sets the underlying iv. Copies from parameter iv.
+ */
+ inline void SetIV(const Aws::Utils::CryptoBuffer& iv)
+ {
+ m_iv = iv;
+ }
+
+ /**
+ * Sets the underlying crypto Tag Length. Copies from parameter cryptoTagLength.
+ */
+ inline void SetCryptoTagLength(size_t cryptoTagLength)
+ {
+ m_cryptoTagLength = cryptoTagLength;
+ }
+
+ /**
+ * Adds to the current materials description map using a key and a value.
+ */
+ inline void AddMaterialsDescription(const Aws::String& key, const Aws::String& value)
+ {
+ m_materialsDescription[key] = value;
+ }
+
+ /**
+ * Sets the underlying materials description. Copies from parameter materials description.
+ */
+ inline void SetMaterialsDescription(const Aws::Map<Aws::String, Aws::String>& materialsDescription)
+ {
+ m_materialsDescription = materialsDescription;
+ }
+
+ /**
+ * Sets the underlying Key Wrap Algorithm. Copies from parameter keyWrapAlgorithm.
+ */
+ inline void SetKeyWrapAlgorithm(KeyWrapAlgorithm keyWrapAlgorithm)
+ {
+ m_keyWrapAlgorithm = keyWrapAlgorithm;
+ }
+
+ /**
+ * Sets the underlying content Crypto Scheme. Copies from parameter contentCryptoScheme.
+ */
+ inline void SetContentCryptoScheme(ContentCryptoScheme contentCryptoScheme)
+ {
+ m_contentCryptoScheme = contentCryptoScheme;
+ }
+
+ /**
+ * Sets the underlying AAD for GCM if needed.
+ */
+ inline void SetGCMAAD(const Aws::Utils::CryptoBuffer& aad)
+ {
+ m_gcmAAD = aad;
+ }
+ /**
+ * Gets the underlying aad for GCM if needed.
+ */
+ inline const Aws::Utils::CryptoBuffer& GetGCMAAD() const
+ {
+ return m_gcmAAD;
+ }
+
+ /**
+ * Sets the underlying tag for decrypting CEK if it's GCM encrypted.
+ */
+ inline void SetCEKGCMTag(const Aws::Utils::CryptoBuffer& tag)
+ {
+ m_cekGCMTag = tag;
+ }
+ /**
+ * Gets the underlying aad for GCM if needed.
+ */
+ inline const Aws::Utils::CryptoBuffer& GetCEKGCMTag() const
+ {
+ return m_cekGCMTag;
+ }
+
+ /**
+ * Sets the underlying initialization vector for CEK if it's GCM encrypted.
+ */
+ inline void SetCekIV(const Aws::Utils::CryptoBuffer& iv)
+ {
+ m_cekIV = iv;
+ }
+ /**
+ * Gets the underlying CEK initialization vector.
+ */
+ inline const Aws::Utils::CryptoBuffer& GetCekIV() const
+ {
+ return m_cekIV;
+ }
+
+ /**
+ * Sets the underlying final CEK
+ */
+ inline void SetFinalCEK(const Aws::Utils::CryptoBuffer& finalCEK)
+ {
+ m_finalCEK = finalCEK;
+ }
+ /**
+ * Gets the underlying final CEK.
+ */
+ inline const Aws::Utils::CryptoBuffer& GetFinalCEK() const
+ {
+ return m_finalCEK;
+ }
+
+ private:
+ Aws::Utils::CryptoBuffer m_contentEncryptionKey;
+ Aws::Utils::CryptoBuffer m_encryptedContentEncryptionKey;
+ /* if using AES_GCM key wrap algorithm, then final CEK is iv + encrypted_key + tag
+ * otherwise it's the same as m_encryptedContentEncryptionKey
+ */
+ Aws::Utils::CryptoBuffer m_finalCEK;
+ Aws::Utils::CryptoBuffer m_iv;
+ Aws::Utils::CryptoBuffer m_cekIV;
+ Aws::Utils::CryptoBuffer m_gcmAAD;
+ Aws::Utils::CryptoBuffer m_cekGCMTag;
+ size_t m_cryptoTagLength;
+ Aws::Map<Aws::String, Aws::String> m_materialsDescription;
+ KeyWrapAlgorithm m_keyWrapAlgorithm;
+ ContentCryptoScheme m_contentCryptoScheme;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoScheme.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoScheme.h
new file mode 100644
index 00000000000..605ad4e3757
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/ContentCryptoScheme.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ enum class ContentCryptoScheme
+ {
+ CBC,
+ CTR,
+ GCM,
+ NONE
+ };
+
+ namespace ContentCryptoSchemeMapper
+ {
+ AWS_CORE_API ContentCryptoScheme GetContentCryptoSchemeForName(const Aws::String& name);
+
+ AWS_CORE_API Aws::String GetNameForContentCryptoScheme(ContentCryptoScheme enumValue);
+ }
+ } //namespace Crypto
+
+ }//namespace Utils
+}//namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoBuf.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoBuf.h
new file mode 100644
index 00000000000..1270c6b427c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoBuf.h
@@ -0,0 +1,149 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/utils/crypto/Cipher.h>
+#include <aws/core/Core_EXPORTS.h>
+#include <ios>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ typedef std::mbstate_t FPOS_TYPE;
+ static const size_t DEFAULT_BUF_SIZE = 1024;
+ static const size_t PUT_BACK_SIZE = 1;
+
+ /**
+ * Which mode a cipher is being used for. Encryption or Decryption
+ */
+ enum class CipherMode
+ {
+ Encrypt,
+ Decrypt
+ };
+
+ /**
+ * Generic base class for a streambuf that handles cryptography.
+ */
+ class AWS_CORE_API CryptoBuf : public std::streambuf
+ {
+ public:
+ CryptoBuf() = default;
+ virtual ~CryptoBuf() = default;
+ CryptoBuf(const CryptoBuf&) = delete;
+ CryptoBuf(CryptoBuf&& rhs) = delete;
+ /**
+ * If the buffer needs to do a final push to the sink or needs to empty the cipher blocks etc...
+ */
+ virtual void Finalize() {}
+ };
+
+ /**
+ * StreamBuf that takes data from an input stream, encrypts or decrypts it, and causes all input received from the stream that is using it
+ * to go through the cipher. A common use case is a file that is encrypted on disk being read via ifstream and then read decrypted into memory.
+ * Or you could send a plain text file through an iostream and have it encrypted when the stream is read.
+ *
+ * This streambuf is seekable, but it is very expensive to seek backwards since we have to reset the cipher and re-encrypt everything up to that point.
+ * So seeking should be avoided if at all possible.
+ */
+ class AWS_CORE_API SymmetricCryptoBufSrc : public CryptoBuf
+ {
+ public:
+ /**
+ * stream to src from
+ * cipher to encrypt or decrypt the src stream with
+ * mode to use cipher in. Encryption or Decryption
+ * buffersize, the size of the src buffers to read at a time. Defaults to 1kb
+ */
+ SymmetricCryptoBufSrc(Aws::IStream& stream, SymmetricCipher& cipher, CipherMode cipherMode, size_t bufferSize = DEFAULT_BUF_SIZE);
+
+ SymmetricCryptoBufSrc(const SymmetricCryptoBufSrc&) = delete;
+ SymmetricCryptoBufSrc(SymmetricCryptoBufSrc&&) = delete;
+
+ SymmetricCryptoBufSrc& operator=(const SymmetricCryptoBufSrc&) = delete;
+ SymmetricCryptoBufSrc& operator=(SymmetricCryptoBufSrc&&) = delete;
+
+ virtual ~SymmetricCryptoBufSrc() { FinalizeCipher(); }
+
+ /**
+ * This call isn't necessary if you loop over the stream.read until you reach EOF, if you happen to read the exact
+ * amount as the in memory buffers and finish the stream, but never finish the finalize call you'll need to be sure
+ * to call this. This is automatically called by the destructor.
+ */
+ void Finalize() override { FinalizeCipher(); }
+
+ protected:
+ pos_type seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out ) override;
+ pos_type seekpos(pos_type pos, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out ) override;
+
+ private:
+ int_type underflow() override;
+ off_type ComputeAbsSeekPosition(off_type, std::ios_base::seekdir, std::fpos<FPOS_TYPE>);
+ void FinalizeCipher();
+
+ CryptoBuffer m_isBuf;
+ SymmetricCipher& m_cipher;
+ Aws::IStream& m_stream;
+ CipherMode m_cipherMode;
+ bool m_isFinalized;
+ size_t m_bufferSize;
+ size_t m_putBack;
+ };
+
+ /**
+ * Stream buf that takes it's input, encrypts or decrypts it using the cipher, and writes it to the sink stream. This is particularly useful
+ * when receiving an encrypted file over the internet and writing it decrypted to disk. Another case may be that you have an ofstream and you want
+ * to write text to it from your program but have it go encrypted to disk.
+ *
+ * This stream buf is not seekable.
+ */
+ class AWS_CORE_API SymmetricCryptoBufSink : public CryptoBuf
+ {
+ public:
+ /**
+ * stream, sink to push the encrypted or decrypted data to.
+ * cipher, symmetric cipher to use to transform the input before sending it to the sink.
+ * cipherMode, encrypt or decrypt
+ * bufferSize, amount of data to encrypt/decrypt at a time.
+ */
+ SymmetricCryptoBufSink(Aws::OStream& stream, SymmetricCipher& cipher, CipherMode cipherMode, size_t bufferSize = DEFAULT_BUF_SIZE, int16_t blockOffset = 0);
+ SymmetricCryptoBufSink(const SymmetricCryptoBufSink&) = delete;
+ SymmetricCryptoBufSink(SymmetricCryptoBufSink&&) = delete;
+
+ SymmetricCryptoBufSink& operator=(const SymmetricCryptoBufSink&) = delete;
+ /**
+ * Not move assignable since it contains reference members
+ */
+ SymmetricCryptoBufSink& operator=(SymmetricCryptoBufSink&&) = delete;
+
+ virtual ~SymmetricCryptoBufSink();
+
+ /**
+ * Finalizes the cipher and pushes all remaining data to the sink. Once this has been called, this streambuf cannot be used any further.
+ */
+ void FinalizeCiphersAndFlushSink();
+ /**
+ * Simply calls FinalizeCiphersAndFlushSink()
+ */
+ void Finalize() override { FinalizeCiphersAndFlushSink(); }
+
+ private:
+ int_type overflow(int_type ch) override;
+ int sync() override;
+ bool writeOutput(bool finalize);
+
+ CryptoBuffer m_osBuf;
+ SymmetricCipher& m_cipher;
+ Aws::OStream& m_stream;
+ CipherMode m_cipherMode;
+ bool m_isFinalized;
+ int16_t m_blockOffset;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoStream.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoStream.h
new file mode 100644
index 00000000000..048d44392e3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/CryptoStream.h
@@ -0,0 +1,81 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/utils/crypto/CryptoBuf.h>
+#include <aws/core/Core_EXPORTS.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ /**
+ * IOStream that can either take a src buffer as an input stream and create a wrapper iostream that can be used to receive encrypted or decrypted
+ * input.
+ *
+ * A common use case is a file that is encrypted on disk being read via ifstream and then read decrypted into memory.
+ * Or you could send a plain text file through an iostream and have it encrypted when the stream is read.
+ *
+ * This stream is seekable, but it is very expensive to seek backwards since we have to reset the cipher and re-encrypt everything up to that point.
+ * So seeking should be avoided if at all possible.
+ *
+ * Or it can be used in the opposite direction where the stream is a sink and all input to the stream will be encrypted or decrypted and then sent to the
+ * sink stream.
+ *
+ * This is particularly useful
+ * when receiving an encrypted file over the internet and writing it decrypted to disk. Another case may be that you have an ofstream and you want
+ * to write text to it from your program but have it go encrypted to disk.
+ *
+ * In output mode, this stream is not seekable.
+ */
+ class AWS_CORE_API SymmetricCryptoStream : public Aws::IOStream
+ {
+ public:
+ /**
+ * src stream to read from and encrypt or decrypt in transit
+ * mode of operation for cipher encryption or decryption
+ * cipher to use on the data
+ */
+ SymmetricCryptoStream(Aws::IStream& src, CipherMode mode, SymmetricCipher& cipher, size_t bufLen = DEFAULT_BUF_SIZE);
+ /**
+ * sink stream to write the data to and encrypt or decrypt in transit
+ * mode of operation for cipher encryption or decryption
+ * cipher to use on the data
+ */
+ SymmetricCryptoStream(Aws::OStream& sink, CipherMode mode, SymmetricCipher& cipher, size_t bufLen = DEFAULT_BUF_SIZE, int16_t blockOffset = 0 );
+ /**
+ * bufSrc streambuf to use
+ */
+ SymmetricCryptoStream(Aws::Utils::Crypto::SymmetricCryptoBufSrc& bufSrc);
+ /**
+ * bufSink streambuf to use
+ */
+ SymmetricCryptoStream(Aws::Utils::Crypto::SymmetricCryptoBufSink& bufSink);
+
+ SymmetricCryptoStream(const SymmetricCryptoStream&) = delete;
+ SymmetricCryptoStream(SymmetricCryptoStream&&) = delete;
+
+ virtual ~SymmetricCryptoStream();
+
+ SymmetricCryptoStream& operator=(const SymmetricCryptoStream&) = delete;
+ SymmetricCryptoStream& operator=(SymmetricCryptoStream&&) = delete;
+
+
+ /**
+ * Call this in output stream mode when you want to flush the output to file.
+ * It will be called by the destructor, but if you want to sync before then, call this method.
+ * This stream is unusable after this method has been called.
+ */
+ void Finalize();
+
+ private:
+ CryptoBuf* m_cryptoBuf;
+ bool m_hasOwnership;
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/EncryptionMaterials.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/EncryptionMaterials.h
new file mode 100644
index 00000000000..0fbc77c6b4b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/EncryptionMaterials.h
@@ -0,0 +1,46 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/crypto/CryptoBuf.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/core/utils/crypto/ContentCryptoMaterial.h>
+#include <aws/core/NoResult.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ enum class CryptoErrors
+ {
+ ENCRYPT_CONTENT_ENCRYPTION_KEY_FAILED,
+ DECRYPT_CONTENT_ENCRYPTION_KEY_FAILED,
+ GENERATE_CONTENT_ENCRYPTION_KEY_FAILED
+ };
+
+ typedef Outcome<Aws::NoResult, Aws::Client::AWSError<CryptoErrors>> CryptoOutcome;
+
+ class AWS_CORE_API EncryptionMaterials
+ {
+ public:
+ virtual ~EncryptionMaterials();
+
+ /*
+ * Override this method to control how to encrypt the content encryption key (CEK). This occurs in place.
+ */
+ virtual CryptoOutcome EncryptCEK(ContentCryptoMaterial& contentCryptoMaterial) = 0;
+
+ /*
+ * Override this method to control how to decrypt the content encryption key (CEK). This occurs in place.
+ */
+ virtual CryptoOutcome DecryptCEK(ContentCryptoMaterial& contentCryptoMaterial) = 0;
+ };
+ }//namespace Crypto
+ }//namespace Utils
+}//namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Factories.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Factories.h
new file mode 100644
index 00000000000..b4c17b2a96e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Factories.h
@@ -0,0 +1,147 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/Array.h>
+#include <memory>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ class Hash;
+ class HMAC;
+ class SymmetricCipher;
+ class HashFactory;
+ class HMACFactory;
+ class SymmetricCipherFactory;
+ class SecureRandomBytes;
+ class SecureRandomFactory;
+
+ /**
+ * You need to call this before using any of the cryptography libs. Should be called after setting the factories.
+ */
+ AWS_CORE_API void InitCrypto();
+ /**
+ * You need to call this upon program shutdown.
+ */
+ AWS_CORE_API void CleanupCrypto();
+ /**
+ * OpenSSL infects everything with its global state. If it is being used then we automatically initialize and clean it up.
+ * If this is a problem for you, set this to false. Be aware that if you don't use our init and cleanup and you are using
+ * crypto functionality, you are responsible for installing thread locking, and loading strings and error messages.
+ */
+ AWS_CORE_API void SetInitCleanupOpenSSLFlag(bool initCleanupFlag);
+
+ /**
+ * Create an MD5 Hash provider
+ */
+ AWS_CORE_API std::shared_ptr<Hash> CreateMD5Implementation();
+ /**
+ * Create a Sha256 Hash provider
+ */
+ AWS_CORE_API std::shared_ptr<Hash> CreateSha256Implementation();
+ /**
+ * Create a Sha256 HMACHash provider
+ */
+ AWS_CORE_API std::shared_ptr<HMAC> CreateSha256HMACImplementation();
+
+ /**
+ * Create AES in CBC mode off of a 256 bit key. Auto Generates a 16 byte secure random IV
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_CBCImplementation(const CryptoBuffer& key);
+ /**
+ * Create AES in CBC mode off of a 256 bit key and 16 byte IV
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_CBCImplementation(const CryptoBuffer& key, const CryptoBuffer& iv);
+ /**
+ * Create AES in CBC mode off of a 256 bit key and 16 byte IV
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_CBCImplementation(CryptoBuffer&& key, CryptoBuffer&& iv);
+
+ /**
+ * Create AES in CTR mode off of a 256 bit key. Auto Generates a 16 byte IV in the format
+ * [nonce 4bytes ] [securely random iv 8 bytes] [ CTR init 4bytes ]
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_CTRImplementation(const CryptoBuffer& key);
+ /**
+ * Create AES in CTR mode off of a 256 bit key and 16 byte IV
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_CTRImplementation(const CryptoBuffer& key, const CryptoBuffer& iv);
+ /**
+ * Create AES in CTR mode off of a 256 bit key and 16 byte IV
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_CTRImplementation(CryptoBuffer&& key, CryptoBuffer&& iv);
+
+ /**
+ * Create AES in GCM mode off of a 256 bit key. Auto Generates a 12 byte secure random IV.
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_GCMImplementation(const CryptoBuffer& key);
+ /**
+ * Create AES in GCM mode off of a 256 bit key. Auto Generates a 12 byte secure random IV and aad.
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_GCMImplementation(const CryptoBuffer& key, const CryptoBuffer* aad);
+ /**
+ * Create AES in GCM mode off of a 256 bit key, a 12 byte secure random IV, and an optional 16 byte Tag. If you are using this
+ * cipher to decrypt an encrypted payload, you must set the tag here.
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_GCMImplementation(const CryptoBuffer& key, const CryptoBuffer& iv,
+ const CryptoBuffer& tag = CryptoBuffer(0), const CryptoBuffer& aad = CryptoBuffer(0));
+ /**
+ * Create AES in GCM mode off of a 256 bit key, a 16 byte secure random IV, and an optional 16 byte Tag, as well an optional add. If you are using this
+ * cipher to decrypt an encrypted payload, you must set the tag here.
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_GCMImplementation(CryptoBuffer&& key, CryptoBuffer&& iv,
+ CryptoBuffer&& tag = CryptoBuffer(0), CryptoBuffer&& aad = CryptoBuffer(0));
+ /**
+ * Create AES in Key Wrap mode off of a 256 bit key.
+ */
+ AWS_CORE_API std::shared_ptr<SymmetricCipher> CreateAES_KeyWrapImplementation(const CryptoBuffer& key);
+
+ /**
+ * Create SecureRandomBytes instance
+ */
+ AWS_CORE_API std::shared_ptr<SecureRandomBytes> CreateSecureRandomBytesImplementation();
+
+ /**
+ * Set the global factory for MD5 Hash providers
+ */
+ AWS_CORE_API void SetMD5Factory(const std::shared_ptr<HashFactory>& factory);
+ /**
+ * Set the global factory for Sha256 Hash providers
+ */
+ AWS_CORE_API void SetSha256Factory(const std::shared_ptr<HashFactory>& factory);
+ /**
+ * Set the global factory for Sha256 HMAC Hash providers
+ */
+ AWS_CORE_API void SetSha256HMACFactory(const std::shared_ptr<HMACFactory>& factory);
+ /**
+ * Set the global factory for AES in CBC mode providers
+ */
+ AWS_CORE_API void SetAES_CBCFactory(const std::shared_ptr<SymmetricCipherFactory>& factory);
+ /**
+ * Set the global factory for AES in CTR mode providers
+ */
+ AWS_CORE_API void SetAES_CTRFactory(const std::shared_ptr<SymmetricCipherFactory>& factory);
+ /**
+ * Set the global factory for AES in GCM mode providers
+ */
+ AWS_CORE_API void SetAES_GCMFactory(const std::shared_ptr<SymmetricCipherFactory>& factory);
+ /**
+ * Set the global factory for AES in Key Wrap mode providers
+ */
+ AWS_CORE_API void SetAES_KeyWrapFactory(const std::shared_ptr<SymmetricCipherFactory>& factory);
+ /**
+ * Set the global factory for secure random bytes
+ */
+ AWS_CORE_API void SetSecureRandomFactory(const std::shared_ptr<SecureRandomFactory>& factory);
+
+ } // namespace Crypto
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HMAC.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HMAC.h
new file mode 100644
index 00000000000..450997c7360
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HMAC.h
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+ /*
+ * Interface for Sha256 encryptor and hmac
+ */
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/crypto/HashResult.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ /**
+ * Interface for HMAC hash providers. To implement an HMAC provider, inherit from this class and override Calculate.
+ */
+ class AWS_CORE_API HMAC
+ {
+ public:
+ HMAC() {};
+ virtual ~HMAC() {};
+
+ /**
+ * Calculates an HMAC digest
+ */
+ virtual HashResult Calculate(const Aws::Utils::ByteBuffer& toSign, const Aws::Utils::ByteBuffer& secret) = 0;
+
+ };
+
+ /**
+ * Simple abstract factory interface. Subclass this and create a factory if you want to control
+ * how HMAC Hash objects are created.
+ */
+ class AWS_CORE_API HMACFactory
+ {
+ public:
+ virtual ~HMACFactory() {}
+
+ /**
+ * Factory method. Returns hmac hash implementation.
+ */
+ virtual std::shared_ptr<HMAC> CreateImplementation() const = 0;
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ virtual void InitStaticState() {}
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ virtual void CleanupStaticState() {}
+ };
+
+ } // namespace Crypto
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Hash.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Hash.h
new file mode 100644
index 00000000000..8ebbe009fc4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Hash.h
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/crypto/HashResult.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ /**
+ * Interface for computing hash codes using various hash algorithms
+ */
+ class AWS_CORE_API Hash
+ {
+ public:
+
+ Hash() {}
+ virtual ~Hash() {}
+
+ /**
+ * Calculates a Hash digest
+ */
+ virtual HashResult Calculate(const Aws::String& str) = 0;
+
+ /**
+ * Calculates a Hash digest on a stream (the entire stream is read)
+ */
+ virtual HashResult Calculate(Aws::IStream& stream) = 0;
+
+ // when hashing streams, this is the size of our internal buffer we read the stream into
+ static const uint32_t INTERNAL_HASH_STREAM_BUFFER_SIZE = 8192;
+ };
+
+ /**
+ * Simple abstract factory interface. Subclass this and create a factory if you want to control
+ * how Hash objects are created.
+ */
+ class AWS_CORE_API HashFactory
+ {
+ public:
+ virtual ~HashFactory() {}
+
+ /**
+ * Factory method. Returns hash implementation.
+ */
+ virtual std::shared_ptr<Hash> CreateImplementation() const = 0;
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ virtual void InitStaticState() {}
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ virtual void CleanupStaticState() {}
+ };
+
+ } // namespace Crypto
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HashResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HashResult.h
new file mode 100644
index 00000000000..46b46d80955
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/HashResult.h
@@ -0,0 +1,25 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/Array.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+
+ template< typename R, typename E > class Outcome;
+
+ namespace Crypto
+ {
+ using HashResult = Outcome< ByteBuffer, bool >;
+
+ } // namespace Crypto
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/KeyWrapAlgorithm.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/KeyWrapAlgorithm.h
new file mode 100644
index 00000000000..0715f647400
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/KeyWrapAlgorithm.h
@@ -0,0 +1,33 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ enum class KeyWrapAlgorithm
+ {
+ KMS, // Deprecated
+ KMS_CONTEXT,
+ AES_KEY_WRAP, // Deprecated
+ AES_GCM,
+ NONE
+ };
+
+ namespace KeyWrapAlgorithmMapper
+ {
+ AWS_CORE_API KeyWrapAlgorithm GetKeyWrapAlgorithmForName(const Aws::String& name);
+
+ AWS_CORE_API Aws::String GetNameForKeyWrapAlgorithm(KeyWrapAlgorithm enumValue);
+ }
+ } //namespace Crypto
+
+ }//namespace Utils
+}//namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/MD5.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/MD5.h
new file mode 100644
index 00000000000..59304a4a88e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/MD5.h
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+ /*
+ * Interface for Sha256 encryptor and hmac
+ */
+#pragma once
+
+#ifdef __APPLE__
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif // __clang__
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif // __GNUC__
+
+#endif // __APPLE__
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/crypto/Hash.h>
+#include <aws/core/utils/Outcome.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ class WindowsHashImpl;
+
+ /**
+ * Md5 hash implementation
+ */
+ class AWS_CORE_API MD5 : public Hash
+ {
+ public:
+ /**
+ * Initializes platform crypto libs for md5
+ */
+ MD5();
+ virtual ~MD5();
+
+ /**
+ * Calculates an MD5 hash
+ */
+ virtual HashResult Calculate(const Aws::String& str) override;
+
+ /**
+ * Calculates a Hash digest on a stream (the entire stream is read)
+ */
+ virtual HashResult Calculate(Aws::IStream& stream) override;
+
+ private:
+
+ std::shared_ptr<Hash> m_hashImpl;
+ };
+
+ } // namespace Crypto
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/SecureRandom.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/SecureRandom.h
new file mode 100644
index 00000000000..7f48dc008da
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/SecureRandom.h
@@ -0,0 +1,116 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+#include <type_traits>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ /**
+ * Interface for generating Random Bytes with guaranteed entropy for use with cryptographic functions.
+ * An instance is not guaranteed to be thread safe. This is intentional, that is needless overhead to
+ * pay for something you probably don't need. If you encounter a need for thread safety, you are responsible
+ * for memory fencing.
+ */
+ class SecureRandomBytes
+ {
+ public:
+ SecureRandomBytes() : m_failure(false)
+ {
+ }
+
+ virtual ~SecureRandomBytes() = default;
+
+ /**
+ * fill in buffer of size bufferSize with random bytes
+ */
+ virtual void GetBytes(unsigned char* buffer, size_t bufferSize) = 0;
+
+ /**
+ * Always check this. If anything goes wrong, this tells you
+ */
+ operator bool() const { return !m_failure; }
+
+ protected:
+ bool m_failure;
+ };
+
+ /**
+ * Random Number generator for integral types. Guaranteed to have entropy or your program will crash.
+ */
+ template <typename DataType = uint64_t>
+ class SecureRandom
+ {
+ public:
+ /**
+ * Initialize with the results of CreateSecureRandomBytesImplementation().
+ * An instance is not guaranteed to be thread safe. This is intentional, that is needless overhead to
+ * pay for something you probably don't need. If you encounter a need for thread safety, you are responsible
+ * for memory fencing.
+ */
+ SecureRandom(const std::shared_ptr<SecureRandomBytes>& entropySource) : m_entropy(entropySource)
+ { static_assert(std::is_unsigned<DataType>::value, "Type DataType must be integral"); }
+
+ virtual ~SecureRandom() = default;
+
+ virtual void Reset() {}
+
+ /**
+ * Generate a random number of DataType
+ */
+ virtual DataType operator()()
+ {
+ DataType value(0);
+ unsigned char buffer[sizeof(DataType)];
+ m_entropy->GetBytes(buffer, sizeof(DataType));
+
+ assert(*m_entropy);
+ if(*m_entropy)
+ {
+ for (size_t i = 0; i < sizeof(DataType); ++i)
+ {
+ value <<= 8;
+ value |= buffer[i];
+
+ }
+ }
+
+ return value;
+ }
+
+ operator bool() const { return *m_entropy; }
+
+ private:
+ std::shared_ptr<SecureRandomBytes> m_entropy;
+ };
+
+ class SecureRandomFactory
+ {
+ public:
+ virtual ~SecureRandomFactory() = default;
+
+ /**
+ * Factory method. Returns SecureRandom implementation.
+ */
+ virtual std::shared_ptr<SecureRandomBytes> CreateImplementation() const = 0;
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ virtual void InitStaticState() {}
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ virtual void CleanupStaticState() {}
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256.h
new file mode 100644
index 00000000000..441752b0a66
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256.h
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+ /*
+ * Interface for Sha256 encryptor and hmac
+ */
+#pragma once
+
+#ifdef __APPLE__
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif // __clang__
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif // __GNUC__
+
+#endif // __APPLE__
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/crypto/Hash.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ class WindowsHashImpl;
+
+ /**
+ * Sha256 hash implementation.
+ */
+ class AWS_CORE_API Sha256 : public Hash
+ {
+ public:
+ /**
+ * Initializes platform crypto libs.
+ */
+ Sha256();
+ virtual ~Sha256();
+
+ /**
+ * Calculates a SHA256 Hash digest (not hex encoded)
+ */
+ virtual HashResult Calculate(const Aws::String& str) override;
+
+ /**
+ * Calculates a Hash digest on a stream (the entire stream is read)
+ */
+ virtual HashResult Calculate(Aws::IStream& stream) override;
+
+ private:
+
+ std::shared_ptr< Hash > m_hashImpl;
+ };
+
+ } // namespace Crypto
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256HMAC.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256HMAC.h
new file mode 100644
index 00000000000..d035b99da5e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/Sha256HMAC.h
@@ -0,0 +1,59 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+ /*
+ * Interface for Sha256 encryptor and hmac
+ */
+#pragma once
+
+#ifdef __APPLE__
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif // __clang__
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif // __GNUC__
+
+#endif // __APPLE__
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/crypto/HMAC.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ /**
+ * Sha256 HMAC implementation
+ */
+ class AWS_CORE_API Sha256HMAC : public HMAC
+ {
+ public:
+ /**
+ * initializes platform specific libs.
+ */
+ Sha256HMAC();
+ virtual ~Sha256HMAC();
+
+ /**
+ * Calculates a SHA256 HMAC digest (not hex encoded)
+ */
+ virtual HashResult Calculate(const Aws::Utils::ByteBuffer& toSign, const Aws::Utils::ByteBuffer& secret) override;
+
+ private:
+
+ std::shared_ptr< HMAC > m_hmacImpl;
+ };
+
+ } // namespace Sha256
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/openssl/CryptoImpl.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/openssl/CryptoImpl.h
new file mode 100644
index 00000000000..e3f37edda93
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/crypto/openssl/CryptoImpl.h
@@ -0,0 +1,371 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/utils/crypto/Hash.h>
+#include <aws/core/utils/crypto/HMAC.h>
+#include <aws/core/utils/crypto/Cipher.h>
+#include <aws/core/utils/crypto/SecureRandom.h>
+#include <aws/core/utils/GetTheLights.h>
+#include <openssl/ossl_typ.h>
+#include <openssl/evp.h>
+#include <openssl/hmac.h>
+#include <openssl/rand.h>
+#include <atomic>
+#include <mutex>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ namespace OpenSSL
+ {
+ extern GetTheLights getTheLights;
+
+ void init_static_state();
+
+ void cleanup_static_state();
+
+ void locking_fn(int mode, int n, const char* file, int line);
+
+ unsigned long id_fn();
+ }
+
+ /**
+ * OpenSSL implementation for SecureRandomBytes.
+ * Incidentally, this implementation is thread safe, though it is not
+ * on other platforms. You should treat an instance of SecureRandomBytes
+ * as needed to be memory fenced if you will be using accross multiple threads
+ */
+ class SecureRandomBytes_OpenSSLImpl : public SecureRandomBytes
+ {
+ public:
+ SecureRandomBytes_OpenSSLImpl()
+ { }
+
+ ~SecureRandomBytes_OpenSSLImpl() = default;
+
+ /**
+ * Reads bufferSize bytes from RAND_bytes into buffer.
+ */
+ void GetBytes(unsigned char* buffer, size_t bufferSize) override;
+ };
+
+ class MD5OpenSSLImpl : public Hash
+ {
+ public:
+
+ MD5OpenSSLImpl()
+ { }
+
+ virtual ~MD5OpenSSLImpl() = default;
+
+ virtual HashResult Calculate(const Aws::String& str) override;
+
+ virtual HashResult Calculate(Aws::IStream& stream) override;
+
+ };
+
+ class Sha256OpenSSLImpl : public Hash
+ {
+ public:
+ Sha256OpenSSLImpl()
+ { }
+
+ virtual ~Sha256OpenSSLImpl() = default;
+
+ virtual HashResult Calculate(const Aws::String& str) override;
+
+ virtual HashResult Calculate(Aws::IStream& stream) override;
+ };
+
+ class Sha256HMACOpenSSLImpl : public HMAC
+ {
+ public:
+ virtual ~Sha256HMACOpenSSLImpl() = default;
+
+ virtual HashResult Calculate(const ByteBuffer& toSign, const ByteBuffer& secret) override;
+ };
+
+ /**
+ * OpenSSL implementation for SymmetricCipher
+ */
+ class OpenSSLCipher : public SymmetricCipher
+ {
+ public:
+ /**
+ * Creates new OpenSSL based cipher for key, and autogenerates a secure IV of size ivSize
+ */
+ OpenSSLCipher(const CryptoBuffer& key, size_t ivSize, bool ctrMode = false);
+
+ /**
+ * Creates new OpenSSL based cipher for key, initializationVector, and optional tag. If this is an authenticated
+ * cipher being used for decryption.
+ */
+ OpenSSLCipher(CryptoBuffer&& key, CryptoBuffer&& initializationVector,
+ CryptoBuffer&& tag = CryptoBuffer(0));
+
+ /**
+ * Creates new OpenSSL based cipher for key, initializationVector, and optional tag. If this is an authenticated
+ * cipher being used for decryption.
+ */
+ OpenSSLCipher(const CryptoBuffer& key, const CryptoBuffer& initializationVector,
+ const CryptoBuffer& tag = CryptoBuffer(0));
+
+ OpenSSLCipher(const OpenSSLCipher& other) = delete;
+
+ OpenSSLCipher& operator=(const OpenSSLCipher& other) = delete;
+
+ /**
+ * Normally we don't work around VS 2013 not auto-generating these, but they are kind of expensive,
+ * so let's go ahead and optimize by defining default move operations. Implementors of this class
+ * need to be sure to define the move operations and call the base class.
+ */
+ OpenSSLCipher(OpenSSLCipher&& toMove);
+
+ /**
+ * Normally we don't work around VS 2013 not auto-generating these, but they are kind of expensive,
+ * so let's go ahead and optimize by defining default move operations. Implementors of this class
+ * need to be sure to define the move operations and call the base class.
+ */
+ OpenSSLCipher& operator=(OpenSSLCipher&& toMove) = default;
+
+
+ virtual ~OpenSSLCipher();
+
+ /**
+ * Encrypt a buffer of data. Part of the contract for this interface is that intention that
+ * a user call this function multiple times for a large stream. As such, multiple calls to this function
+ * on the same instance should produce valid sequential output for an encrypted stream.
+ */
+ CryptoBuffer EncryptBuffer(const CryptoBuffer& unEncryptedData) override;
+
+ /**
+ * Finalize Encryption, returns anything remaining in the last block
+ */
+ CryptoBuffer FinalizeEncryption() override;
+
+ /**
+ * Decrypt a buffer of data. Part of the contract for this interface is that intention that
+ * a user call this function multiple times for a large stream. As such, multiple calls to this function
+ * on the same instance should produce valid sequential output from an encrypted stream.
+ */
+ CryptoBuffer DecryptBuffer(const CryptoBuffer& encryptedData) override;
+
+ /**
+ * Finalize Decryption, returns anything remaining in the last block
+ */
+ CryptoBuffer FinalizeDecryption() override;
+
+ void Reset() override;
+
+ protected:
+ virtual size_t GetBlockSizeBytes() const = 0;
+ virtual size_t GetKeyLengthBits() const = 0;
+ bool CheckKeyAndIVLength(size_t expectedKeyLength, size_t expectedIVLength);
+
+ EVP_CIPHER_CTX* m_encryptor_ctx;
+ EVP_CIPHER_CTX* m_decryptor_ctx;
+ private:
+ void Init();
+ void Cleanup();
+
+ /* openssl has bug finalize decryption of an empty string */
+ bool m_emptyPlaintext;
+ };
+
+ /**
+ * OpenSSL implementation for AES in CBC mode
+ */
+ class AES_CBC_Cipher_OpenSSL : public OpenSSLCipher
+ {
+ public:
+ /**
+ * Create AES in CBC mode off of a 256 bit key. Auto Generates a 16 byte secure random IV
+ */
+ AES_CBC_Cipher_OpenSSL(const CryptoBuffer& key);
+
+ /**
+ * Create AES in CBC mode off of a 256 bit key and 16 byte IV
+ */
+ AES_CBC_Cipher_OpenSSL(CryptoBuffer&& key, CryptoBuffer&& initializationVector);
+
+ /**
+ * Create AES in CBC mode off of a 256 bit key and 16 byte IV
+ */
+ AES_CBC_Cipher_OpenSSL(const CryptoBuffer& key, const CryptoBuffer& initializationVector);
+
+ AES_CBC_Cipher_OpenSSL(const AES_CBC_Cipher_OpenSSL& other) = delete;
+
+ AES_CBC_Cipher_OpenSSL& operator=(const AES_CBC_Cipher_OpenSSL& other) = delete;
+
+ AES_CBC_Cipher_OpenSSL(AES_CBC_Cipher_OpenSSL&& toMove) = default;
+
+ void Reset() override;
+
+ protected:
+ size_t GetBlockSizeBytes() const override;
+
+ size_t GetKeyLengthBits() const override;
+
+ private:
+ void InitCipher();
+
+ static size_t BlockSizeBytes;
+ static size_t KeyLengthBits;
+ };
+
+ /**
+ * OpenSSL implementation for AES in CTR mode
+ */
+ class AES_CTR_Cipher_OpenSSL : public OpenSSLCipher
+ {
+ public:
+ /**
+ * Create AES in CTR mode off of a 256 bit key. Auto Generates a 16 byte IV in the format
+ * [nonce 4bytes ] [securely random iv 8 bytes] [ CTR init 4bytes ]
+ */
+ AES_CTR_Cipher_OpenSSL(const CryptoBuffer& key);
+
+ /**
+ * Create AES in CTR mode off of a 256 bit key and 16 byte IV
+ */
+ AES_CTR_Cipher_OpenSSL(CryptoBuffer&& key, CryptoBuffer&& initializationVector);
+
+ /**
+ * Create AES in CTR mode off of a 256 bit key and 16 byte IV
+ */
+ AES_CTR_Cipher_OpenSSL(const CryptoBuffer& key, const CryptoBuffer& initializationVector);
+
+ AES_CTR_Cipher_OpenSSL(const AES_CTR_Cipher_OpenSSL& other) = delete;
+
+ AES_CTR_Cipher_OpenSSL& operator=(const AES_CTR_Cipher_OpenSSL& other) = delete;
+
+ AES_CTR_Cipher_OpenSSL(AES_CTR_Cipher_OpenSSL&& toMove) = default;
+
+ void Reset() override;
+
+ protected:
+ size_t GetBlockSizeBytes() const override;
+
+ size_t GetKeyLengthBits() const override;
+
+ private:
+ void InitCipher();
+
+ static size_t BlockSizeBytes;
+ static size_t KeyLengthBits;
+ };
+
+ /**
+ * OpenSSL implementation for AES in GCM mode
+ */
+ class AES_GCM_Cipher_OpenSSL : public OpenSSLCipher
+ {
+ public:
+ /**
+ * Create AES in GCM mode off of a 256 bit key. Auto Generates a 12 byte secure random IV.
+ */
+ AES_GCM_Cipher_OpenSSL(const CryptoBuffer& key);
+
+ /**
+ * Create AES in GCM mode off of a 256 bit key and AAD. Auto Generates a 12 byte IV in the format
+ */
+ AES_GCM_Cipher_OpenSSL(const CryptoBuffer& key, const CryptoBuffer* aad);
+
+ /**
+ * Create AES in GCM mode off of a 256 bit key, a 12 byte secure random IV, and an optional 16 byte Tag and additional authentication data (AAD).
+ * Note that tag could be acquired from encrypt mode and should only be set for decrypt mode.
+ * If you are using this cipher to decrypt an encrypted payload, you must set the tag here.
+ */
+ AES_GCM_Cipher_OpenSSL(CryptoBuffer&& key, CryptoBuffer&& initializationVector,
+ CryptoBuffer&& tag = CryptoBuffer(0), CryptoBuffer&& aad = CryptoBuffer(0));
+
+ /**
+ * Create AES in GCM mode off of a 256 bit key, a 12 byte secure random IV, and an optional 16 byte Tag and additional authentication data (AAD).
+ * Note that tag could be acquired from encrypt mode and should only be set for decrypt mode.
+ * If you are using this cipher to decrypt an encrypted payload, you must set the tag here.
+ */
+ AES_GCM_Cipher_OpenSSL(const CryptoBuffer& key, const CryptoBuffer& initializationVector,
+ const CryptoBuffer& tag = CryptoBuffer(0), const CryptoBuffer& aad = CryptoBuffer(0));
+
+ AES_GCM_Cipher_OpenSSL(const AES_GCM_Cipher_OpenSSL& other) = delete;
+
+ AES_GCM_Cipher_OpenSSL& operator=(const AES_GCM_Cipher_OpenSSL& other) = delete;
+
+ AES_GCM_Cipher_OpenSSL(AES_GCM_Cipher_OpenSSL&& toMove) = default;
+
+ /**
+ * Calls base class first, then grabs the tag from the cipher and sets it on m_tag.
+ * After calling FinalizeEncryption, be sure to call GetTag() and do something with it
+ * or you will not be able to decrypt the payload.
+ */
+ CryptoBuffer FinalizeEncryption() override;
+
+ void Reset() override;
+
+ protected:
+ size_t GetBlockSizeBytes() const override;
+
+ size_t GetKeyLengthBits() const override;
+
+ size_t GetTagLengthBytes() const;
+
+ private:
+ void InitCipher();
+
+ CryptoBuffer m_aad;
+ static size_t BlockSizeBytes;
+ static size_t IVLengthBytes;
+ static size_t KeyLengthBits;
+ static size_t TagLengthBytes;
+ };
+
+ /**
+ * OpenSSL implementation for AES in Key Wrap mode. The key for the c_tor is the Kek,
+ * it either encrypts a CEK or decrypts it.
+ */
+ class AES_KeyWrap_Cipher_OpenSSL : public OpenSSLCipher
+ {
+ public:
+
+ /**
+ * Create AES in Key Wrap mode off of a 256 bit key.
+ */
+ AES_KeyWrap_Cipher_OpenSSL(const CryptoBuffer& key);
+
+ AES_KeyWrap_Cipher_OpenSSL(const AES_KeyWrap_Cipher_OpenSSL&) = delete;
+
+ AES_KeyWrap_Cipher_OpenSSL& operator=(const AES_KeyWrap_Cipher_OpenSSL&) = delete;
+
+ AES_KeyWrap_Cipher_OpenSSL(AES_KeyWrap_Cipher_OpenSSL&&) = default;
+
+ CryptoBuffer EncryptBuffer(const CryptoBuffer&) override;
+ CryptoBuffer FinalizeEncryption() override;
+
+ CryptoBuffer DecryptBuffer(const CryptoBuffer&) override;
+ CryptoBuffer FinalizeDecryption() override;
+
+ void Reset() override;
+
+ protected:
+ inline size_t GetBlockSizeBytes() const override { return BlockSizeBytes; }
+
+ inline size_t GetKeyLengthBits() const override { return KeyLengthBits; }
+
+ private:
+ void InitCipher();
+
+ static size_t BlockSizeBytes;
+ static size_t KeyLengthBits;
+
+ CryptoBuffer m_workingKeyBuffer;
+ };
+
+ } // namespace Crypto
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventDecoderStream.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventDecoderStream.h
new file mode 100644
index 00000000000..81a8f92eb98
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventDecoderStream.h
@@ -0,0 +1,43 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/event/EventStreamBuf.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ extern AWS_CORE_API const size_t DEFAULT_BUF_SIZE;
+
+ /**
+ * A buffered I/O stream that binary-decodes the bits written to it according to the AWS event-stream spec.
+ * The decoding process will result in invoking callbacks on the handler assigned to the decoder parameter.
+ */
+ class AWS_CORE_API EventDecoderStream : public Aws::IOStream
+ {
+ public:
+ /**
+ * Creates a stream for decoding events sent by the service.
+ * @param decoder decodes the stream from server side, so as to invoke related callback functions.
+ * @param eventStreamBufLength The length of the underlying buffer.
+ */
+ EventDecoderStream(EventStreamDecoder& decoder, size_t bufferSize = DEFAULT_BUF_SIZE);
+
+ private:
+ EventDecoderStream(const EventDecoderStream&) = delete;
+ EventDecoderStream(EventDecoderStream&&) = delete;
+ EventDecoderStream& operator=(const EventDecoderStream&) = delete;
+ EventDecoderStream& operator=(EventDecoderStream&&) = delete;
+
+ EventStreamBuf m_eventStreamBuf;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventEncoderStream.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventEncoderStream.h
new file mode 100644
index 00000000000..19cf2a58749
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventEncoderStream.h
@@ -0,0 +1,69 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/stream/ConcurrentStreamBuf.h>
+#include <aws/core/utils/event/EventMessage.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/event/EventStreamEncoder.h>
+
+namespace Aws
+{
+ namespace Client
+ {
+ class AWSAuthSigner;
+ }
+
+ namespace Utils
+ {
+ namespace Event
+ {
+ extern AWS_CORE_API const size_t DEFAULT_BUF_SIZE;
+
+ /**
+ * A buffered I/O stream that binary-encodes the bits written to it according to the AWS event-stream spec.
+ */
+ class AWS_CORE_API EventEncoderStream : public Aws::IOStream
+ {
+ public:
+
+ /**
+ * Creates a stream for encoding events sent by the client.
+ * @param bufferSize The length of the underlying buffer.
+ */
+ explicit EventEncoderStream(size_t bufferSize = DEFAULT_BUF_SIZE);
+
+ /**
+ * Sets the signature seed used by event-stream events.
+ * Every event uses its previous event's signature to calculate its own signature.
+ * Setting this value affects the signature calculation of the first event.
+ */
+ void SetSignatureSeed(const Aws::String& seed) { m_encoder.SetSignatureSeed(seed); }
+
+ /**
+ * Writes an event-stream message to the underlying buffer.
+ */
+ EventEncoderStream& WriteEvent(const Aws::Utils::Event::Message& msg);
+
+ /**
+ * Sets the signer implementation used for every event.
+ */
+ void SetSigner(Aws::Client::AWSAuthSigner* signer) { m_encoder.SetSigner(signer); }
+
+ /**
+ * Allows a stream writer to communicate the end of the stream to a stream reader.
+ *
+ * Any writes to the stream after this call are not guaranteed to be read by another concurrent
+ * read thread.
+ */
+ void Close() { m_streambuf.SetEof(); setstate(eofbit); }
+
+ private:
+ Stream::ConcurrentStreamBuf m_streambuf;
+ EventStreamEncoder m_encoder;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h
new file mode 100644
index 00000000000..c60dda04358
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h
@@ -0,0 +1,311 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/UUID.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/event-stream/event_stream.h>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ static const char CLASS_TAG[] = "EventHeader";
+ /**
+ * Interface of the header value of a message in event stream.
+ * Each type of header value should have it's own associated derived class based on this class.
+ */
+ class AWS_CORE_API EventHeaderValue
+ {
+ public:
+ enum class EventHeaderType
+ {
+ BOOL_TRUE = 0,
+ BOOL_FALSE,
+ BYTE,
+ INT16,
+ INT32,
+ INT64,
+ BYTE_BUF,
+ STRING,
+ /* 64 bit integer (millis since epoch) */
+ TIMESTAMP,
+ UUID,
+ UNKNOWN
+ };
+
+ EventHeaderValue() = default;
+
+ EventHeaderValue(aws_event_stream_header_value_pair* header) :
+ m_eventHeaderType(static_cast<EventHeaderType>(header->header_value_type))
+ {
+ switch (m_eventHeaderType)
+ {
+ case EventHeaderType::BOOL_TRUE:
+ case EventHeaderType::BOOL_FALSE:
+ m_eventHeaderStaticValue.boolValue = aws_event_stream_header_value_as_bool(header) != 0;
+ break;
+ case EventHeaderType::BYTE:
+ m_eventHeaderStaticValue.byteValue = aws_event_stream_header_value_as_byte(header);
+ break;
+ case EventHeaderType::INT16:
+ m_eventHeaderStaticValue.int16Value = aws_event_stream_header_value_as_int16(header);
+ break;
+ case EventHeaderType::INT32:
+ m_eventHeaderStaticValue.int32Value = aws_event_stream_header_value_as_int32(header);
+ break;
+ case EventHeaderType::INT64:
+ m_eventHeaderStaticValue.int64Value = aws_event_stream_header_value_as_int64(header);
+ break;
+ case EventHeaderType::BYTE_BUF:
+ m_eventHeaderVariableLengthValue = ByteBuffer(static_cast<uint8_t*>(aws_event_stream_header_value_as_bytebuf(header).buffer), header->header_value_len);
+ break;
+ case EventHeaderType::STRING:
+ m_eventHeaderVariableLengthValue = ByteBuffer(static_cast<uint8_t*>(aws_event_stream_header_value_as_string(header).buffer), header->header_value_len);
+ break;
+ case EventHeaderType::TIMESTAMP:
+ m_eventHeaderStaticValue.timestampValue = aws_event_stream_header_value_as_timestamp(header);
+ break;
+ case EventHeaderType::UUID:
+ assert(header->header_value_len == 16u);
+ m_eventHeaderVariableLengthValue = ByteBuffer(static_cast<uint8_t*>(aws_event_stream_header_value_as_uuid(header).buffer), header->header_value_len);
+ break;
+ default:
+ AWS_LOG_ERROR(CLASS_TAG, "Encountered unknown type of header.");
+ break;
+ }
+ };
+
+ EventHeaderValue(const Aws::String& s) :
+ m_eventHeaderType(EventHeaderType::STRING),
+ m_eventHeaderVariableLengthValue(reinterpret_cast<const uint8_t*>(s.data()), s.length())
+ {
+ }
+
+ EventHeaderValue(const ByteBuffer& bb) :
+ m_eventHeaderType(EventHeaderType::BYTE_BUF),
+ m_eventHeaderVariableLengthValue(bb)
+ {
+ }
+
+ EventHeaderValue(ByteBuffer&& bb) :
+ m_eventHeaderType(EventHeaderType::BYTE_BUF),
+ m_eventHeaderVariableLengthValue(std::move(bb))
+ {
+ }
+
+
+ explicit EventHeaderValue(unsigned char byte) :
+ m_eventHeaderType(EventHeaderType::BYTE)
+ {
+ m_eventHeaderStaticValue.byteValue = byte;
+ }
+
+ explicit EventHeaderValue(bool b) :
+ m_eventHeaderType(b ? EventHeaderType::BOOL_TRUE : EventHeaderType::BOOL_FALSE)
+ {
+ m_eventHeaderStaticValue.boolValue = b;
+ }
+
+ explicit EventHeaderValue(int16_t n) :
+ m_eventHeaderType(EventHeaderType::INT16)
+ {
+ m_eventHeaderStaticValue.int16Value = n;
+ }
+
+ explicit EventHeaderValue(int32_t n) :
+ m_eventHeaderType(EventHeaderType::INT32)
+ {
+ m_eventHeaderStaticValue.int32Value = n;
+ }
+
+ explicit EventHeaderValue(int64_t n, EventHeaderType type = EventHeaderType::INT64) :
+ m_eventHeaderType(type)
+ {
+ if (type == EventHeaderType::TIMESTAMP)
+ {
+ m_eventHeaderStaticValue.timestampValue = n;
+ }
+ else
+ {
+ m_eventHeaderStaticValue.int64Value = n;
+ }
+ }
+
+ EventHeaderType GetType() const { return m_eventHeaderType; }
+
+
+ static EventHeaderType GetEventHeaderTypeForName(const Aws::String& name);
+ static Aws::String GetNameForEventHeaderType(EventHeaderType value);
+
+ /**
+ * Get header value as boolean.
+ * Log error if derived class doesn't override this function.
+ */
+ inline bool GetEventHeaderValueAsBoolean() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::BOOL_TRUE || m_eventHeaderType == EventHeaderType::BOOL_FALSE);
+ if (m_eventHeaderType != EventHeaderType::BOOL_TRUE && m_eventHeaderType != EventHeaderType::BOOL_FALSE)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is TRUE or FALSE, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return false;
+ }
+ return m_eventHeaderStaticValue.boolValue;
+ }
+
+ /**
+ * Get header value as byte.
+ * Log error if derived class doesn't override this function.
+ */
+ inline uint8_t GetEventHeaderValueAsByte() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::BYTE);
+ if (m_eventHeaderType != EventHeaderType::BYTE)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is BYTE, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return static_cast<uint8_t>(0);
+ }
+ return m_eventHeaderStaticValue.byteValue;
+ }
+
+ /**
+ * Get header value as 16 bit integer.
+ * Log error if derived class doesn't override this function.
+ */
+ inline int16_t GetEventHeaderValueAsInt16() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::INT16);
+ if (m_eventHeaderType != EventHeaderType::INT16)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is INT16, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return static_cast<int16_t>(0);
+ }
+ return m_eventHeaderStaticValue.int16Value;
+ }
+
+ /**
+ * Get header value as 32 bit integer.
+ * Log error if derived class doesn't override this function.
+ */
+ inline int32_t GetEventHeaderValueAsInt32() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::INT32);
+ if (m_eventHeaderType != EventHeaderType::INT32)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is INT32, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return static_cast<int32_t>(0);
+ }
+ return m_eventHeaderStaticValue.int32Value;
+ }
+
+ /**
+ * Get header value as 64 bit integer.
+ * Log error if derived class doesn't override this function.
+ */
+ inline int64_t GetEventHeaderValueAsInt64() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::INT64);
+ if (m_eventHeaderType != EventHeaderType::INT64)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is INT64, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return static_cast<uint64_t>(0);
+ }
+ return m_eventHeaderStaticValue.int64Value;
+ }
+
+ /**
+ * Get header value as ByteBuffer.
+ * Log error if derived class doesn't override this function.
+ */
+ inline ByteBuffer GetEventHeaderValueAsBytebuf() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::BYTE_BUF);
+ if (m_eventHeaderType != EventHeaderType::BYTE_BUF)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is BYTE_BUF, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return ByteBuffer();
+ }
+ return m_eventHeaderVariableLengthValue;
+ }
+
+ /**
+ * Get header value as String.
+ * Log error if derived class doesn't override this function.
+ */
+ inline Aws::String GetEventHeaderValueAsString() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::STRING);
+ if (m_eventHeaderType != EventHeaderType::STRING)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is STRING, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return {};
+ }
+ return Aws::String(reinterpret_cast<char*>(m_eventHeaderVariableLengthValue.GetUnderlyingData()), m_eventHeaderVariableLengthValue.GetLength());
+ }
+
+ /**
+ * Get header value as timestamp in 64 bit integer.
+ * Log error if derived class doesn't override this function.
+ */
+ inline int64_t GetEventHeaderValueAsTimestamp() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::TIMESTAMP);
+ if (m_eventHeaderType != EventHeaderType::TIMESTAMP)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is TIMESTAMP, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ return static_cast<int64_t>(0);
+ }
+ return m_eventHeaderStaticValue.timestampValue;
+ }
+
+ /**
+ * Get header value as UUID.
+ * Log error if derived class doesn't override this function.
+ */
+ inline Aws::Utils::UUID GetEventHeaderValueAsUuid() const
+ {
+ assert(m_eventHeaderType == EventHeaderType::UUID);
+ assert(m_eventHeaderVariableLengthValue.GetLength() == 16u);
+ if (m_eventHeaderType != EventHeaderType::UUID)
+ {
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Expected event header type is UUID, but encountered " << GetNameForEventHeaderType(m_eventHeaderType));
+ char uuid[32] = {0};
+ return Aws::Utils::UUID(uuid);
+ }
+ return Aws::Utils::UUID(m_eventHeaderVariableLengthValue.GetUnderlyingData());
+ }
+
+ inline const ByteBuffer& GetUnderlyingBuffer() const
+ {
+ return m_eventHeaderVariableLengthValue;
+ }
+
+ private:
+ EventHeaderType m_eventHeaderType;
+ ByteBuffer m_eventHeaderVariableLengthValue;
+ union
+ {
+ bool boolValue;
+ uint8_t byteValue;
+ int16_t int16Value;
+ int32_t int32Value;
+ int64_t int64Value;
+ int64_t timestampValue;
+ } m_eventHeaderStaticValue;
+ };
+
+ typedef std::pair<Aws::String, EventHeaderValue> EventHeaderValuePair;
+ typedef Aws::Map<Aws::String, EventHeaderValue> EventHeaderValueCollection;
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventMessage.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventMessage.h
new file mode 100644
index 00000000000..4540fbe79c5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventMessage.h
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/event/EventHeader.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ extern AWS_CORE_API const char EVENT_TYPE_HEADER[];
+ extern AWS_CORE_API const char CONTENT_TYPE_HEADER[];
+ extern AWS_CORE_API const char MESSAGE_TYPE_HEADER[];
+ extern AWS_CORE_API const char ERROR_CODE_HEADER[];
+ extern AWS_CORE_API const char ERROR_MESSAGE_HEADER[];
+ extern AWS_CORE_API const char EXCEPTION_TYPE_HEADER[];
+
+ /**
+ * A typical message in event stream consists of two parts: Prelude and Data, as well as the prelude CRC and message CRC.
+ * Prelude consists of total byte length and headers byte length.
+ * Data consists of headers and payload.
+ */
+ class AWS_CORE_API Message
+ {
+ public:
+ enum class MessageType
+ {
+ UNKNOWN,
+ EVENT,
+ REQUEST_LEVEL_ERROR,
+ REQUEST_LEVEL_EXCEPTION
+ };
+
+ enum class ContentType
+ {
+ UNKNOWN,
+ APPLICATION_OCTET_STREAM,
+ APPLICATION_JSON,
+ TEXT_PLAIN
+ };
+
+ static MessageType GetMessageTypeForName(const Aws::String& name);
+ static Aws::String GetNameForMessageType(MessageType value);
+
+ static ContentType GetContentTypeForName(const Aws::String& name);
+ static Aws::String GetNameForContentType(ContentType value);
+
+
+ /**
+ * Clean up the message, including the metadata, headers and payload received.
+ */
+ void Reset();
+
+ /**
+ * Get/set the total length of this message: prelude(8 bytes) + prelude CRC(4 bytes) + Data(headers length + payload length) + message CRC(4 bytes).
+ */
+ inline void SetTotalLength(size_t length)
+ {
+ m_totalLength = length;
+ m_eventPayload.reserve(length);
+ }
+
+ inline size_t GetTotalLength() const { return m_totalLength; }
+
+ /**
+ * Get/set the length of the headers.
+ * Each header consists of: header name byte-length(1 byte) + header name + header value type(1 byte) + header value.
+ */
+ inline void SetHeadersLength(size_t length) { m_headersLength = length; }
+ inline size_t GetHeadersLength() const { return m_headersLength; }
+
+ /**
+ * Get/set the length of payload.
+ */
+ inline void SetPayloadLength(size_t length) { m_payloadLength = length; }
+ inline size_t GetPayloadLength() const { return m_payloadLength; }
+
+ /**
+ * Set/get event headers.
+ */
+ inline void InsertEventHeader(const Aws::String& headerName, const EventHeaderValue& eventHeaderValue)
+ {
+ m_eventHeaders.emplace(Aws::Utils::Event::EventHeaderValuePair(headerName, eventHeaderValue));
+ }
+
+ inline const Aws::Utils::Event::EventHeaderValueCollection& GetEventHeaders() const { return m_eventHeaders; }
+
+ /**
+ * Set event payload.
+ */
+ void WriteEventPayload(const unsigned char* data, size_t length);
+ void WriteEventPayload(const Aws::Vector<unsigned char>& bits);
+ void WriteEventPayload(const Aws::String& bits);
+ /**
+ * Get the byte array of the payload with transferring ownership.
+ */
+ Aws::Vector<unsigned char>&& GetEventPayloadWithOwnership() { return std::move(m_eventPayload); }
+ const Aws::Vector<unsigned char>& GetEventPayload() const { return m_eventPayload; }
+ Aws::Vector<unsigned char>& GetEventPayload() { return m_eventPayload; }
+ /**
+ * Convert byte array of the payload to string without transferring ownership.
+ */
+ inline Aws::String GetEventPayloadAsString() { return Aws::String(m_eventPayload.begin(), m_eventPayload.end()); }
+
+ private:
+ size_t m_totalLength;
+ size_t m_headersLength;
+ size_t m_payloadLength;
+
+ Aws::Utils::Event::EventHeaderValueCollection m_eventHeaders;
+ Aws::Vector<unsigned char> m_eventPayload;
+ };
+
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStream.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStream.h
new file mode 100644
index 00000000000..daa9cbf57d2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStream.h
@@ -0,0 +1,8 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/utils/event/EventDecoderStream.h>
+#include <aws/core/utils/event/EventEncoderStream.h>
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamBuf.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamBuf.h
new file mode 100644
index 00000000000..ad5c4403234
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamBuf.h
@@ -0,0 +1,52 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <ios>
+#include <aws/core/utils/event/EventStreamDecoder.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ extern AWS_CORE_API const size_t DEFAULT_BUF_SIZE;
+
+ /**
+ * Derived from std::streambuf, used as the underlying buffer for EventStream.
+ * Handle the payload from server side and pass data to underlying decoder.
+ */
+ class AWS_CORE_API EventStreamBuf : public std::streambuf
+ {
+ public:
+ /**
+ * @param decoder decodes the stream from server side, so as to invoke related callback functions.
+ * @param bufferSize The length of buffer, will be 1024 bytes by default.
+ */
+ EventStreamBuf(EventStreamDecoder& decoder, size_t bufferLength = DEFAULT_BUF_SIZE);
+ virtual ~EventStreamBuf();
+
+ protected:
+ std::streampos seekoff(std::streamoff off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+ std::streampos seekpos(std::streampos pos, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+
+ int underflow() override;
+ int overflow(int ch) override;
+ int sync() override;
+
+ private:
+ void writeToDecoder();
+
+ ByteBuffer m_byteBuffer;
+ size_t m_bufferLength;
+ Aws::StringStream m_err;
+ EventStreamDecoder& m_decoder;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamDecoder.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamDecoder.h
new file mode 100644
index 00000000000..8f737e7bc74
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamDecoder.h
@@ -0,0 +1,109 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/event/EventStreamHandler.h>
+#include <aws/event-stream/event_stream.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ class AWS_CORE_API EventStreamDecoder
+ {
+ public:
+ EventStreamDecoder(EventStreamHandler* handler);
+ ~EventStreamDecoder();
+
+ /**
+ * Whether or not the decoder is in good state. Return false if the decoder encounters errors.
+ */
+ inline explicit operator bool() const { return *m_eventStreamHandler; }
+
+ /**
+ * A wrapper of aws_event_stream_streaming_decoder_pump in aws-c-event-stream.
+ * Pass data to the underlying decoder.
+ */
+ void Pump(const ByteBuffer& data);
+ void Pump(const ByteBuffer& data, size_t length);
+
+ /**
+ * Reset decoder and it's handler.
+ */
+ void Reset();
+
+ /**
+ * Reset event stream handler of the decoder
+ */
+ void ResetEventStreamHandler(EventStreamHandler* handler);
+
+ protected:
+ /**
+ * Callback function invoked when payload data has been received.
+ * @param decoder The underlying decoder defined in the aws-c-event-stream.
+ * @param payload The payload data received, it doesn't belong to you, make a copy if necessary.
+ * @param isFinalSegment A flag indicates the current data is the last payload buffer for that message if it equals to 1.
+ * @param context A context pointer, will cast it to a pointer of flow handler.
+ */
+ static void onPayloadSegment(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_byte_buf* payload,
+ int8_t isFinalSegment,
+ void* context);
+
+ /**
+ * Callback function invoked when a new message has arrived.
+ * @param decoder The underlying decoder defined in the aws-c-event-stream.
+ * @param prelude The metadata of the message, including total message length and header length.
+ * @param context A context pointer, will cast it to a pointer of flow handler.
+ */
+ static void onPreludeReceived(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_event_stream_message_prelude* prelude,
+ void* context);
+
+ /**
+ * Callback function invoked when a header is encountered.
+ * @param decoder The underlying decoder defined in the aws-c-event-stream.
+ * @param prelude The metadata of the message, including total message length and header length.
+ * @param header A header of the message.
+ * @param context A context pointer, will cast it to a pointer of flow handler.
+ */
+ static void onHeaderReceived(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_event_stream_message_prelude* prelude,
+ aws_event_stream_header_value_pair* header,
+ void* context);
+
+ /**
+ * Callback function invoked when an error is encountered.
+ * @param decoder The underlying decoder defined in aws-c-event-stream.
+ * @param prelude The metadata of the message, including total message length and header length.
+ * @param errorCode Error code indicates the type of the error encountered.
+ * @param message Error message indicates the details of the error encountered.
+ * @param context A context pointer, will cast it to a pointer of flow handler.
+ */
+ static void onError(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_event_stream_message_prelude* prelude,
+ int errorCode,
+ const char* message,
+ void* context);
+
+ /**
+ * The underlying decoder defined in aws-c-event-stream.
+ * The decoder will invoke callback functions when the streaming messages received.
+ */
+ aws_event_stream_streaming_decoder m_decoder;
+ EventStreamHandler* m_eventStreamHandler;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamEncoder.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamEncoder.h
new file mode 100644
index 00000000000..3cd06a9df22
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamEncoder.h
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/event-stream/event_stream.h>
+
+namespace Aws
+{
+ namespace Client
+ {
+ class AWSAuthSigner;
+ }
+
+ namespace Utils
+ {
+ namespace Event
+ {
+ /**
+ * Utility class that wraps the logic of translating event messages to their binary format according to the
+ * AWS streaming specification.
+ * This class is _not_ thread-safe.
+ */
+ class AWS_CORE_API EventStreamEncoder
+ {
+ public:
+ EventStreamEncoder(Aws::Client::AWSAuthSigner* signer = nullptr);
+
+
+ void SetSignatureSeed(const Aws::String& seed) { m_signatureSeed = seed; }
+
+ void SetSigner(Aws::Client::AWSAuthSigner* signer) { m_signer = signer; }
+
+ /**
+ * Encodes the input message in the event-stream binary format and signs the resulting bits.
+ * The signing is done via the signer member.
+ */
+ Aws::Vector<unsigned char> EncodeAndSign(const Aws::Utils::Event::Message& msg);
+ private:
+ aws_event_stream_message Encode(const Aws::Utils::Event::Message& msg);
+ aws_event_stream_message Sign(aws_event_stream_message* msg);
+ Aws::Client::AWSAuthSigner* m_signer;
+ Aws::String m_signatureSeed;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamErrors.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamErrors.h
new file mode 100644
index 00000000000..d85e4fdd1f6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamErrors.h
@@ -0,0 +1,47 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/Core_EXPORTS.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ /**
+ * Errors encountered in event stream.
+ * These errors are associated with those in aws-c-event-stream library.
+ */
+ enum class EventStreamErrors
+ {
+ EVENT_STREAM_NO_ERROR = 0,
+ EVENT_STREAM_BUFFER_LENGTH_MISMATCH = 0x1000,
+ EVENT_STREAM_INSUFFICIENT_BUFFER_LEN,
+ EVENT_STREAM_MESSAGE_FIELD_SIZE_EXCEEDED,
+ EVENT_STREAM_PRELUDE_CHECKSUM_FAILURE,
+ EVENT_STREAM_MESSAGE_CHECKSUM_FAILURE,
+ EVENT_STREAM_MESSAGE_INVALID_HEADERS_LEN,
+ EVENT_STREAM_MESSAGE_UNKNOWN_HEADER_TYPE,
+ EVENT_STREAM_MESSAGE_PARSER_ILLEGAL_STATE,
+ EVENT_STREAM_UNKNOWN_ERROR
+ };
+
+ namespace EventStreamErrorsMapper
+ {
+ /**
+ * Get name by its error type in event stream.
+ */
+ AWS_CORE_API const char* GetNameForError(Event::EventStreamErrors error);
+ /**
+ * Get AWSError by EventStreamError. The Error type will always be CoreErrors::UNKNOWN as an internal error in Event Stream, and it's always not retryable.
+ */
+ AWS_CORE_API Aws::Client::AWSError<Aws::Client::CoreErrors> GetAwsErrorForEventStreamError(Event::EventStreamErrors error);
+ } // namespace EventStreamErrorsMapper
+ } // namespace Event
+ } // namespace Utils
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamHandler.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamHandler.h
new file mode 100644
index 00000000000..257bfd82888
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/event/EventStreamHandler.h
@@ -0,0 +1,147 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/http/HttpTypes.h>
+#include <aws/core/utils/event/EventHeader.h>
+#include <aws/core/utils/event/EventMessage.h>
+#include <aws/core/utils/event/EventStreamErrors.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ /**
+ * Handler of event stream.
+ * Includes context and callback function while scanning the event stream.
+ */
+ class AWS_CORE_API EventStreamHandler
+ {
+ public:
+ EventStreamHandler() :
+ m_failure(false), m_internalError(EventStreamErrors::EVENT_STREAM_NO_ERROR), m_headersBytesReceived(0), m_payloadBytesReceived(0)
+ {}
+
+ virtual ~EventStreamHandler() = default;
+
+ /**
+ * Whether or not flow handler is in a good state. Return false if handler encounters errors.
+ */
+ inline operator bool() const { return !m_failure; }
+
+ /**
+ * Fail the handler from outside.
+ */
+ inline void SetFailure() { m_failure = true; }
+
+ /**
+ * Clean up current bytes of data received, as well as the latest message.
+ */
+ inline virtual void Reset()
+ {
+ m_failure = false;
+ m_internalError = EventStreamErrors::EVENT_STREAM_NO_ERROR;
+ m_headersBytesReceived = 0;
+ m_payloadBytesReceived = 0;
+
+ m_message.Reset();
+ }
+
+ /**
+ * Set internal Event Stream Errors, which is associated with errors in aws-c-event-stream library.
+ */
+ inline void SetInternalError(int errorCode = 0)
+ {
+ m_internalError = static_cast<EventStreamErrors>(errorCode);
+ }
+
+ /**
+ * Get internal Event Stream Errors.
+ */
+ inline EventStreamErrors GetInternalError()
+ {
+ return m_internalError;
+ }
+
+ /**
+ * The message is considered to completed with the following scenarios:
+ * 1. Message doesn't have headers or payloads. Or
+ * 2. Message has headers but doesn't have payloads. Or
+ * 3. Message has both headers and payloads.
+ */
+ inline virtual bool IsMessageCompleted()
+ {
+ return m_message.GetHeadersLength() == m_headersBytesReceived && m_message.GetPayloadLength() == m_payloadBytesReceived;
+ }
+
+ /**
+ * Set message metadata, including total message length, headers length and payload length.
+ */
+ inline virtual void SetMessageMetadata(size_t totalLength, size_t headersLength, size_t payloadLength)
+ {
+ m_message.SetTotalLength(totalLength);
+ m_message.SetHeadersLength(headersLength);
+ m_message.SetPayloadLength(payloadLength);
+ assert(totalLength == 12/*prelude length*/ + headersLength + payloadLength + 4/*message crc length*/);
+ if (totalLength != headersLength + payloadLength + 16)
+ {
+ AWS_LOG_WARN("EventStreamHandler", "Message total length mismatch.");
+ }
+ }
+
+ /**
+ * Write data to underlying stream, and update payload bytes received.
+ */
+ inline virtual void WriteMessageEventPayload(const unsigned char* data, size_t dataLength)
+ {
+ m_message.WriteEventPayload(data, dataLength);
+ m_payloadBytesReceived += dataLength;
+ }
+
+ /**
+ * Get underlying byte array of the message just received.
+ */
+ inline virtual Aws::Vector<unsigned char>&& GetEventPayloadWithOwnership() { return m_message.GetEventPayloadWithOwnership(); }
+
+ /**
+ * Convert underlying byte array to string without transferring ownership.
+ */
+ inline virtual Aws::String GetEventPayloadAsString() { return m_message.GetEventPayloadAsString(); }
+
+ /**
+ * Insert event header to a underlying event header value map, and update headers bytes received.
+ */
+ inline virtual void InsertMessageEventHeader(const String& eventHeaderName, size_t eventHeaderLength, const Aws::Utils::Event::EventHeaderValue& eventHeaderValue)
+ {
+ m_message.InsertEventHeader(eventHeaderName, eventHeaderValue);
+ m_headersBytesReceived += eventHeaderLength;
+ }
+
+ inline virtual const Aws::Utils::Event::EventHeaderValueCollection& GetEventHeaders() { return m_message.GetEventHeaders(); }
+
+ /**
+ * Entry point of all callback functions.
+ * Will trigger associated functions based on m_message.
+ */
+ virtual void OnEvent() = 0;
+
+ private:
+ bool m_failure;
+ EventStreamErrors m_internalError;
+ size_t m_headersBytesReceived;
+ size_t m_payloadBytesReceived;
+ Aws::Utils::Event::Message m_message;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h
new file mode 100644
index 00000000000..657ee6eff48
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h
@@ -0,0 +1,381 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/external/cjson/cJSON.h>
+
+#include <utility>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Json
+ {
+ class JsonView;
+ /**
+ * JSON DOM manipulation class.
+ * To read or serialize use @ref View function.
+ */
+ class AWS_CORE_API JsonValue
+ {
+ public:
+ /**
+ * Constructs empty JSON DOM.
+ */
+ JsonValue();
+
+ /**
+ * Constructs a JSON DOM by parsing the input string.
+ */
+ JsonValue(const Aws::String& value);
+
+ /**
+ * Constructs a JSON DOM by parsing the text in the input stream.
+ */
+ JsonValue(Aws::IStream& istream);
+
+ /**
+ * Performs a deep copy of the JSON DOM parameter.
+ * Prefer using a @ref JsonView if copying is not needed.
+ */
+ JsonValue(const JsonValue& value);
+
+ /**
+ * Moves the ownership of the internal JSON DOM.
+ * No copying is performed.
+ */
+ JsonValue(JsonValue&& value);
+
+ ~JsonValue();
+
+ /**
+ * Performs a deep copy of the JSON DOM parameter.
+ */
+ JsonValue& operator=(const JsonValue& other);
+
+ /**
+ * Moves the ownership of the internal JSON DOM of the parameter to the current object.
+ * No copying is performed.
+ * A DOM currently owned by the object will be freed prior to copying.
+ * @warning This will result in invalidating any outstanding views of the current DOM. However, views
+ * to the moved-from DOM would still valid.
+ */
+ JsonValue& operator=(JsonValue&& other);
+
+ bool operator==(const JsonValue& other) const;
+ bool operator!=(const JsonValue& other) const;
+
+ /**
+ * Adds a string to the top level of this node with key.
+ */
+ JsonValue& WithString(const Aws::String& key, const Aws::String& value);
+ JsonValue& WithString(const char* key, const Aws::String& value);
+
+ /**
+ * Converts the current JSON node to a string.
+ */
+ JsonValue& AsString(const Aws::String& value);
+
+ /**
+ * Adds a bool value with key to the top level of this node.
+ */
+ JsonValue& WithBool(const Aws::String& key, bool value);
+ JsonValue& WithBool(const char* key, bool value);
+
+ /**
+ * Converts the current JSON node to a bool.
+ */
+ JsonValue& AsBool(bool value);
+
+ /**
+ * Adds an integer value at key at the top level of this node.
+ */
+ JsonValue& WithInteger(const Aws::String& key, int value);
+ JsonValue& WithInteger(const char* key, int value);
+
+ /**
+ * Converts the current JSON node to an integer.
+ */
+ JsonValue& AsInteger(int value);
+
+ /**
+ * Adds a 64-bit integer value at key to the top level of this node.
+ */
+ JsonValue& WithInt64(const Aws::String& key, long long value);
+ JsonValue& WithInt64(const char* key, long long value);
+
+ /**
+ * Converts the current JSON node to a 64-bit integer.
+ */
+ JsonValue& AsInt64(long long value);
+
+ /**
+ * Adds a double value at key at the top level of this node.
+ */
+ JsonValue& WithDouble(const Aws::String& key, double value);
+ JsonValue& WithDouble(const char* key, double value);
+
+ /**
+ * Converts the current JSON node to a double.
+ */
+ JsonValue& AsDouble(double value);
+
+ /**
+ * Adds an array of strings to the top level of this node at key.
+ */
+ JsonValue& WithArray(const Aws::String& key, const Array<Aws::String>& array);
+ JsonValue& WithArray(const char* key, const Array<Aws::String>& array);
+
+ /**
+ * Adds an array of arbitrary JSON objects to the top level of this node at key.
+ * The values in the array parameter will be deep-copied.
+ */
+ JsonValue& WithArray(const Aws::String& key, const Array<JsonValue>& array);
+
+ /**
+ * Adds an array of arbitrary JSON objects to the top level of this node at key.
+ * The values in the array parameter will be moved-from.
+ */
+ JsonValue& WithArray(const Aws::String& key, Array<JsonValue>&& array);
+
+ /**
+ * Converts the current JSON node to an array whose values are deep-copied from the array parameter.
+ */
+ JsonValue& AsArray(const Array<JsonValue>& array);
+
+ /**
+ * Converts the current JSON node to an array whose values are moved from the array parameter.
+ */
+ JsonValue& AsArray(Array<JsonValue>&& array);
+
+ /**
+ * Adds a JSON object to the top level of this node at key.
+ * The object parameter is deep-copied.
+ */
+ JsonValue& WithObject(const Aws::String& key, const JsonValue& value);
+ JsonValue& WithObject(const char* key, const JsonValue& value);
+
+ /**
+ * Adds a JSON object to the top level of this node at key.
+ */
+ JsonValue& WithObject(const Aws::String& key, JsonValue&& value);
+ JsonValue& WithObject(const char* key, JsonValue&& value);
+
+ /**
+ * Converts the current JSON node to a JSON object by deep-copying the parameter.
+ */
+ JsonValue& AsObject(const JsonValue& value);
+
+ /**
+ * Converts the current JSON node to a JSON object by moving from the parameter.
+ */
+ JsonValue& AsObject(JsonValue&& value);
+
+ /**
+ * Returns true if the last parse request was successful. If this returns false,
+ * you can call GetErrorMessage() to find the cause.
+ */
+ inline bool WasParseSuccessful() const
+ {
+ return m_wasParseSuccessful;
+ }
+
+ /**
+ * Returns the last error message from a failed parse attempt. Returns empty string if no error.
+ */
+ inline const Aws::String& GetErrorMessage() const
+ {
+ return m_errorMessage;
+ }
+
+ /**
+ * Creates a view from the current root JSON node.
+ */
+ JsonView View() const;
+
+ private:
+ void Destroy();
+ JsonValue(cJSON* value);
+ cJSON* m_value;
+ bool m_wasParseSuccessful;
+ Aws::String m_errorMessage;
+ friend class JsonView;
+ };
+
+ /**
+ * Provides read-only view to an existing JsonValue. This allows lightweight copying without making deep
+ * copies of the JsonValue.
+ * Note: This class does not extend the lifetime of the given JsonValue. It's your responsibility to ensure
+ * the lifetime of the JsonValue is extended beyond the lifetime of its view.
+ */
+ class AWS_CORE_API JsonView
+ {
+ public:
+ /* constructors */
+ JsonView();
+ JsonView(const JsonValue& v);
+ JsonView& operator=(const JsonValue& v);
+
+ /**
+ * Gets a string from this node by its key.
+ */
+ Aws::String GetString(const Aws::String& key) const;
+
+ /**
+ * Returns the value of this node as a string.
+ * The behavior is undefined if the node is _not_ of type string.
+ */
+ Aws::String AsString() const;
+
+ /**
+ * Gets a boolean value from this node by its key.
+ */
+ bool GetBool(const Aws::String& key) const;
+
+ /**
+ * Returns the value of this node as a boolean.
+ */
+ bool AsBool() const;
+
+ /**
+ * Gets an integer value from this node by its key.
+ * The integer is of the same size as an int on the machine.
+ */
+ int GetInteger(const Aws::String& key) const;
+
+ /**
+ * Returns the value of this node as an int.
+ */
+ int AsInteger() const;
+
+ /**
+ * Gets a 64-bit integer value from this node by its key.
+ * The value is 64-bit regardless of the platform/machine.
+ */
+ int64_t GetInt64(const Aws::String& key) const;
+
+ /**
+ * Returns the value of this node as 64-bit integer.
+ */
+ int64_t AsInt64() const;
+
+ /**
+ * Gets a double precision floating-point value from this node by its key.
+ */
+ double GetDouble(const Aws::String& key) const;
+
+ /**
+ * Returns the value of this node as a double precision floating-point.
+ */
+ double AsDouble() const;
+
+ /**
+ * Gets an array of JsonView objects from this node by its key.
+ */
+ Array<JsonView> GetArray(const Aws::String& key) const;
+
+ /**
+ * Returns the value of this node as an array of JsonView objects.
+ */
+ Array<JsonView> AsArray() const;
+
+ /**
+ * Gets a JsonView object from this node by its key.
+ */
+ JsonView GetObject(const Aws::String& key) const;
+
+ /**
+ * Returns the value of this node as a JsonView object.
+ */
+ JsonView AsObject() const;
+
+ /**
+ * Reads all json objects at the top level of this node (does not traverse the tree any further)
+ * along with their keys.
+ */
+ Aws::Map<Aws::String, JsonView> GetAllObjects() const;
+
+ /**
+ * Tests whether a value exists at the current node level for the given key.
+ * Returns true if a value has been found and its value is not null, false otherwise.
+ */
+ bool ValueExists(const Aws::String& key) const;
+
+ /**
+ * Tests whether a key exists at the current node level.
+ */
+ bool KeyExists(const Aws::String& key) const;
+
+ /**
+ * Tests whether the current value is a JSON object.
+ */
+ bool IsObject() const;
+
+ /**
+ * Tests whether the current value is a boolean.
+ */
+ bool IsBool() const;
+
+ /**
+ * Tests whether the current value is a string.
+ */
+ bool IsString() const;
+
+ /**
+ * Tests whether the current value is an int or int64_t.
+ * Returns false if the value is floating-point.
+ */
+ bool IsIntegerType() const;
+
+ /**
+ * Tests whether the current value is a floating-point.
+ */
+ bool IsFloatingPointType() const;
+
+ /**
+ * Tests whether the current value is a JSON array.
+ */
+ bool IsListType() const;
+
+ /**
+ * Tests whether the current value is NULL.
+ */
+ bool IsNull() const;
+
+ /**
+ * Writes the current JSON view without whitespace characters starting at the current level to a string.
+ * @param treatAsObject if the current value is empty, writes out '{}' rather than an empty string.
+ */
+ Aws::String WriteCompact(bool treatAsObject = true) const;
+
+ /**
+ * Writes the current JSON view to a string in a human friendly format.
+ * @param treatAsObject if the current value is empty, writes out '{}' rather than an empty string.
+ */
+ Aws::String WriteReadable(bool treatAsObject = true) const;
+
+ /**
+ * Creates a deep copy of the JSON value rooted in the current JSON view.
+ */
+ JsonValue Materialize() const;
+
+ private:
+ JsonView(cJSON* val);
+ JsonView& operator=(cJSON* val);
+ cJSON* m_value;
+ };
+
+ } // namespace Json
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/AWSLogging.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/AWSLogging.h
new file mode 100644
index 00000000000..be572ad23b2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/AWSLogging.h
@@ -0,0 +1,50 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <memory>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Logging
+ {
+ class LogSystemInterface;
+
+ // Standard interface
+
+ /**
+ * Call this at the beginning of your program, prior to any AWS calls.
+ */
+ AWS_CORE_API void InitializeAWSLogging(const std::shared_ptr<LogSystemInterface>& logSystem);
+
+ /**
+ * Call this at the exit point of your program, after all calls have finished.
+ */
+ AWS_CORE_API void ShutdownAWSLogging(void);
+
+ /**
+ * Get currently configured log system instance.
+ */
+ AWS_CORE_API LogSystemInterface* GetLogSystem();
+
+ // Testing interface
+
+ /**
+ * Replaces the current logger with a new one, while pushing the old one onto a 1-deep stack; primarily for testing
+ */
+ AWS_CORE_API void PushLogger(const std::shared_ptr<LogSystemInterface> &logSystem);
+
+ /**
+ * Pops the logger off the logger stack and replaces the current logger with it. Disables logging if the top logger is actually a nullptr
+ */
+ AWS_CORE_API void PopLogger();
+
+ } // namespace Logging
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/ConsoleLogSystem.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/ConsoleLogSystem.h
new file mode 100644
index 00000000000..b7fb714ed62
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/ConsoleLogSystem.h
@@ -0,0 +1,45 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/logging/FormattedLogSystem.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Logging
+ {
+ /**
+ * Log system interface that logs to std::cout
+ */
+ class AWS_CORE_API ConsoleLogSystem : public FormattedLogSystem
+ {
+ public:
+
+ using Base = FormattedLogSystem;
+
+ ConsoleLogSystem(LogLevel logLevel) :
+ Base(logLevel)
+ {}
+
+ virtual ~ConsoleLogSystem() {}
+
+ /**
+ * Flushes buffered messages to stdout.
+ */
+ void Flush() override;
+
+ protected:
+
+ virtual void ProcessFormattedStatement(Aws::String&& statement) override;
+ };
+
+ } // namespace Logging
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/DefaultLogSystem.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/DefaultLogSystem.h
new file mode 100644
index 00000000000..dbeed83cb1a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/DefaultLogSystem.h
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/logging/FormattedLogSystem.h>
+#include <aws/core/utils/logging/LogLevel.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+
+#include <thread>
+#include <memory>
+#include <mutex>
+#include <atomic>
+#include <condition_variable>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Logging
+ {
+ /**
+ * Default behavior logger. It has a background thread that reads a log queue and prints the messages
+ * out to file as quickly as possible. This implementation also rolls the file every hour.
+ */
+ class AWS_CORE_API DefaultLogSystem : public FormattedLogSystem
+ {
+ public:
+ using Base = FormattedLogSystem;
+
+ /**
+ * Initialize the logging system to write to the supplied logfile output. Creates logging thread on construction.
+ */
+ DefaultLogSystem(LogLevel logLevel, const std::shared_ptr<Aws::OStream>& logFile);
+ /**
+ * Initialize the logging system to write to a computed file path filenamePrefix + "timestamp.log". Creates logging thread
+ * on construction.
+ */
+ DefaultLogSystem(LogLevel logLevel, const Aws::String& filenamePrefix);
+
+ virtual ~DefaultLogSystem();
+
+ /**
+ * Flushes buffered messages to the file system.
+ * This method is thread-safe.
+ */
+ void Flush() override;
+
+ /**
+ * Structure containing semaphores, queue etc...
+ */
+ struct LogSynchronizationData
+ {
+ public:
+ LogSynchronizationData() : m_stopLogging(false) {}
+
+ std::mutex m_logQueueMutex;
+ std::condition_variable m_queueSignal;
+ Aws::Vector<Aws::String> m_queuedLogMessages;
+ bool m_stopLogging;
+
+ private:
+ LogSynchronizationData(const LogSynchronizationData& rhs) = delete;
+ LogSynchronizationData& operator =(const LogSynchronizationData& rhs) = delete;
+ };
+
+ protected:
+ /**
+ * Pushes log onto the queue and notifies the background thread.
+ */
+ virtual void ProcessFormattedStatement(Aws::String&& statement) override;
+
+ private:
+ DefaultLogSystem(const DefaultLogSystem& rhs) = delete;
+ DefaultLogSystem& operator =(const DefaultLogSystem& rhs) = delete;
+
+ LogSynchronizationData m_syncData;
+
+ std::thread m_loggingThread;
+ };
+
+ } // namespace Logging
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/FormattedLogSystem.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/FormattedLogSystem.h
new file mode 100644
index 00000000000..6157c45528b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/FormattedLogSystem.h
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/logging/LogSystemInterface.h>
+#include <aws/core/utils/logging/LogLevel.h>
+
+#include <atomic>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Logging
+ {
+ /**
+ * Logger that formats log messages into [LEVEL] timestamp [threadid] message
+ */
+ class AWS_CORE_API FormattedLogSystem : public LogSystemInterface
+ {
+ public:
+ using Base = LogSystemInterface;
+
+ /**
+ * Initializes log system with logLevel
+ */
+ FormattedLogSystem(LogLevel logLevel);
+ virtual ~FormattedLogSystem() = default;
+
+ /**
+ * Gets the currently configured log level.
+ */
+ virtual LogLevel GetLogLevel(void) const override { return m_logLevel; }
+ /**
+ * Set a new log level. This has the immediate effect of changing the log output to the new level.
+ */
+ void SetLogLevel(LogLevel logLevel) { m_logLevel.store(logLevel); }
+
+ /**
+ * Does a printf style output to ProcessFormattedStatement. Don't use this, it's unsafe. See LogStream
+ */
+ virtual void Log(LogLevel logLevel, const char* tag, const char* formatStr, ...) override;
+
+ /**
+ * Writes the stream to ProcessFormattedStatement.
+ */
+ virtual void LogStream(LogLevel logLevel, const char* tag, const Aws::OStringStream &messageStream) override;
+
+ protected:
+ /**
+ * This is the method that most logger implementations will want to override.
+ * At this point the message is formatted and is ready to go to the output stream
+ */
+ virtual void ProcessFormattedStatement(Aws::String&& statement) = 0;
+
+ private:
+ std::atomic<LogLevel> m_logLevel;
+ };
+
+ } // namespace Logging
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogLevel.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogLevel.h
new file mode 100644
index 00000000000..ff1dd36c0ed
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogLevel.h
@@ -0,0 +1,37 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Logging
+ {
+
+ /**
+ * LogLevel used to control verbosity of logging system.
+ */
+ enum class LogLevel : int
+ {
+ Off = 0,
+ Fatal = 1,
+ Error = 2,
+ Warn = 3,
+ Info = 4,
+ Debug = 5,
+ Trace = 6
+ };
+
+ AWS_CORE_API Aws::String GetLogLevelName(LogLevel logLevel);
+
+ } // namespace Logging
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogMacros.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogMacros.h
new file mode 100644
index 00000000000..b400340de45
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogMacros.h
@@ -0,0 +1,194 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/logging/LogLevel.h>
+#include <aws/core/utils/logging/AWSLogging.h>
+#include <aws/core/utils/logging/LogSystemInterface.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+// While macros are usually grotty, using them here lets us have a simple function call interface for logging that
+//
+// (1) Can be compiled out completely, so you don't even have to pay the cost to check the log level (which will be a virtual function call and a std::atomic<> read) if you don't want any AWS logging
+// (2) If you use logging and the log statement doesn't pass the conditional log filter level, not only do you not pay the cost of building the log string, you don't pay the cost for allocating or
+// getting any of the values used in building the log string, as they're in a scope (if-statement) that never gets entered.
+
+#ifdef DISABLE_AWS_LOGGING
+
+ #define AWS_LOG(level, tag, ...)
+ #define AWS_LOG_FATAL(tag, ...)
+ #define AWS_LOG_ERROR(tag, ...)
+ #define AWS_LOG_WARN(tag, ...)
+ #define AWS_LOG_INFO(tag, ...)
+ #define AWS_LOG_DEBUG(tag, ...)
+ #define AWS_LOG_TRACE(tag, ...)
+ #define AWS_LOG_FLUSH()
+
+ #define AWS_LOGSTREAM(level, tag, streamExpression)
+ #define AWS_LOGSTREAM_FATAL(tag, streamExpression)
+ #define AWS_LOGSTREAM_ERROR(tag, streamExpression)
+ #define AWS_LOGSTREAM_WARN(tag, streamExpression)
+ #define AWS_LOGSTREAM_INFO(tag, streamExpression)
+ #define AWS_LOGSTREAM_DEBUG(tag, streamExpression)
+ #define AWS_LOGSTREAM_TRACE(tag, streamExpression)
+ #define AWS_LOGSTREAM_FLUSH()
+
+#else
+
+ #define AWS_LOG_FLUSH() \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem ) \
+ { \
+ logSystem->Flush(); \
+ } \
+ }
+
+ #define AWS_LOG(level, tag, ...) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= level ) \
+ { \
+ logSystem->Log(level, tag, __VA_ARGS__); \
+ } \
+ }
+
+ #define AWS_LOG_FATAL(tag, ...) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Fatal ) \
+ { \
+ logSystem->Log(Aws::Utils::Logging::LogLevel::Fatal, tag, __VA_ARGS__); \
+ } \
+ }
+
+ #define AWS_LOG_ERROR(tag, ...) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Error ) \
+ { \
+ logSystem->Log(Aws::Utils::Logging::LogLevel::Error, tag, __VA_ARGS__); \
+ } \
+ }
+
+ #define AWS_LOG_WARN(tag, ...) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Warn ) \
+ { \
+ logSystem->Log(Aws::Utils::Logging::LogLevel::Warn, tag, __VA_ARGS__); \
+ } \
+ }
+
+ #define AWS_LOG_INFO(tag, ...) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Info ) \
+ { \
+ logSystem->Log(Aws::Utils::Logging::LogLevel::Info, tag, __VA_ARGS__); \
+ } \
+ }
+
+ #define AWS_LOG_DEBUG(tag, ...) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Debug ) \
+ { \
+ logSystem->Log(Aws::Utils::Logging::LogLevel::Debug, tag, __VA_ARGS__); \
+ } \
+ }
+
+ #define AWS_LOG_TRACE(tag, ...) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Trace ) \
+ { \
+ logSystem->Log(Aws::Utils::Logging::LogLevel::Trace, tag, __VA_ARGS__); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM(level, tag, streamExpression) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= level ) \
+ { \
+ Aws::OStringStream logStream; \
+ logStream << streamExpression; \
+ logSystem->LogStream( logLevel, tag, logStream ); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM_FATAL(tag, streamExpression) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Fatal ) \
+ { \
+ Aws::OStringStream logStream; \
+ logStream << streamExpression; \
+ logSystem->LogStream( Aws::Utils::Logging::LogLevel::Fatal, tag, logStream ); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM_ERROR(tag, streamExpression) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Error ) \
+ { \
+ Aws::OStringStream logStream; \
+ logStream << streamExpression; \
+ logSystem->LogStream( Aws::Utils::Logging::LogLevel::Error, tag, logStream ); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM_WARN(tag, streamExpression) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Warn ) \
+ { \
+ Aws::OStringStream logStream; \
+ logStream << streamExpression; \
+ logSystem->LogStream( Aws::Utils::Logging::LogLevel::Warn, tag, logStream ); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM_INFO(tag, streamExpression) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Info ) \
+ { \
+ Aws::OStringStream logStream; \
+ logStream << streamExpression; \
+ logSystem->LogStream( Aws::Utils::Logging::LogLevel::Info, tag, logStream ); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM_DEBUG(tag, streamExpression) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Debug ) \
+ { \
+ Aws::OStringStream logStream; \
+ logStream << streamExpression; \
+ logSystem->LogStream( Aws::Utils::Logging::LogLevel::Debug, tag, logStream ); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM_TRACE(tag, streamExpression) \
+ { \
+ Aws::Utils::Logging::LogSystemInterface* logSystem = Aws::Utils::Logging::GetLogSystem(); \
+ if ( logSystem && logSystem->GetLogLevel() >= Aws::Utils::Logging::LogLevel::Trace ) \
+ { \
+ Aws::OStringStream logStream; \
+ logStream << streamExpression; \
+ logSystem->LogStream( Aws::Utils::Logging::LogLevel::Trace, tag, logStream ); \
+ } \
+ }
+
+ #define AWS_LOGSTREAM_FLUSH() AWS_LOG_FLUSH()
+
+#endif // DISABLE_AWS_LOGGING
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogSystemInterface.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogSystemInterface.h
new file mode 100644
index 00000000000..642d1c30223
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/logging/LogSystemInterface.h
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Logging
+ {
+ enum class LogLevel : int;
+
+ /**
+ * Interface for logging implementations. If you want to write your own logger, you can start here, though you may have more
+ * luck going down one more level to FormattedLogSystem. It does a bit more of the work for you and still gives you the ability
+ * to override the IO portion.
+ */
+ class AWS_CORE_API LogSystemInterface
+ {
+ public:
+ virtual ~LogSystemInterface() = default;
+
+ /**
+ * Gets the currently configured log level for this logger.
+ */
+ virtual LogLevel GetLogLevel(void) const = 0;
+ /**
+ * Does a printf style output to the output stream. Don't use this, it's unsafe. See LogStream
+ */
+ virtual void Log(LogLevel logLevel, const char* tag, const char* formatStr, ...) = 0;
+ /**
+ * Writes the stream to the output stream.
+ */
+ virtual void LogStream(LogLevel logLevel, const char* tag, const Aws::OStringStream &messageStream) = 0;
+ /**
+ * Writes any buffered messages to the underlying device if the logger supports buffering.
+ */
+ virtual void Flush() = 0;
+ };
+
+ } // namespace Logging
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/AWSMemory.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/AWSMemory.h
new file mode 100644
index 00000000000..5b1221917a8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/AWSMemory.h
@@ -0,0 +1,291 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/UnreferencedParam.h>
+#include <aws/core/utils/memory/MemorySystemInterface.h>
+
+#include <memory>
+#include <cstdlib>
+#include <algorithm>
+#include <type_traits>
+
+struct aws_allocator;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Memory
+ {
+ /**
+ *InitializeAWSMemory should be called at the very start of your program
+ */
+ AWS_CORE_API void InitializeAWSMemorySystem(MemorySystemInterface& memorySystem);
+
+ /**
+ * ShutdownAWSMemory should be called the very end of your program
+ */
+ AWS_CORE_API void ShutdownAWSMemorySystem(void);
+
+ /**
+ * Get the globally install memory system, if it has been installed.
+ */
+ AWS_CORE_API MemorySystemInterface* GetMemorySystem();
+
+ } // namespace Memory
+ } // namespace Utils
+
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ AWS_CORE_API void* Malloc(const char* allocationTag, size_t allocationSize);
+
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ AWS_CORE_API void Free(void* memoryPtr);
+
+ AWS_CORE_API aws_allocator* get_aws_allocator();
+
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ template<typename T, typename ...ArgTypes>
+ T* New(const char* allocationTag, ArgTypes&&... args)
+ {
+ void *rawMemory = Malloc(allocationTag, sizeof(T));
+ // http://stackoverflow.com/questions/6783993/placement-new-and-delete
+ T *constructedMemory = new (rawMemory) T(std::forward<ArgTypes>(args)...);
+ return constructedMemory;
+ }
+/*
+ * dynamic_cast of all sorts do not work on MSVC if RTTI is turned off.
+ * This means that deleting an object via a pointer to one of its polymorphic base types that do not point to the
+ * address of their concrete class will result in undefined behavior.
+ * Example:
+ * struct Foo : InterfaceA, InterfaceB {};
+ * Aws::Delete(pointerToInterfaceB);
+ */
+#if defined(_MSC_VER) && !defined(_CPPRTTI)
+ template<typename T>
+ void Delete(T* pointerToT)
+ {
+ if (pointerToT == nullptr)
+ {
+ return;
+ }
+ pointerToT->~T();
+ Free(pointerToT);
+ }
+#else
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ template<typename T>
+ typename std::enable_if<!std::is_polymorphic<T>::value>::type Delete(T* pointerToT)
+ {
+ if (pointerToT == nullptr)
+ {
+ return;
+ }
+ //http://stackoverflow.com/questions/6783993/placement-new-and-delete
+ pointerToT->~T();
+ Free(pointerToT);
+ }
+
+ template<typename T>
+ typename std::enable_if<std::is_polymorphic<T>::value>::type Delete(T* pointerToT)
+ {
+ if (pointerToT == nullptr)
+ {
+ return;
+ }
+ // deal with deleting objects that implement multiple interfaces
+ // see casting to pointer to void in http://en.cppreference.com/w/cpp/language/dynamic_cast
+ // https://stackoverflow.com/questions/8123776/are-there-practical-uses-for-dynamic-casting-to-void-pointer
+ // NOTE: on some compilers, calling the destructor before doing the dynamic_cast affects how calculation of
+ // the address of the most derived class.
+ void* mostDerivedT = dynamic_cast<void*>(pointerToT);
+ pointerToT->~T();
+ Free(mostDerivedT);
+ }
+#endif // _CPPRTTI
+
+ template<typename T>
+ bool ShouldConstructArrayMembers()
+ {
+ return std::is_class<T>::value;
+ }
+
+ template<typename T>
+ bool ShouldDestroyArrayMembers()
+ {
+ return !std::is_trivially_destructible<T>::value;
+ }
+
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ template<typename T>
+ T* NewArray(std::size_t amount, const char* allocationTag)
+ {
+ if (amount > 0)
+ {
+ bool constructMembers = ShouldConstructArrayMembers<T>();
+ bool trackMemberCount = ShouldDestroyArrayMembers<T>();
+
+ // if we need to remember the # of items in the array (because we need to call their destructors) then allocate extra memory and keep the # of items in the extra slot
+ std::size_t allocationSize = amount * sizeof(T);
+#if defined(_MSC_VER) && _MSC_VER < 1900
+ std::size_t headerSize = (std::max)(sizeof(std::size_t), __alignof(T));
+#else
+ std::size_t headerSize = (std::max)(sizeof(std::size_t), alignof(T));
+#endif
+
+ if (trackMemberCount)
+ {
+ allocationSize += headerSize;
+ }
+
+ void* rawMemory = Malloc(allocationTag, allocationSize);
+ T* pointerToT = nullptr;
+
+ if (trackMemberCount)
+ {
+ std::size_t* pointerToAmount = reinterpret_cast<std::size_t*>(rawMemory);
+ *pointerToAmount = amount;
+ pointerToT = reinterpret_cast<T*>(reinterpret_cast<char*>(pointerToAmount) + headerSize);
+
+ }
+ else
+ {
+ pointerToT = reinterpret_cast<T*>(rawMemory);
+ }
+
+ if (constructMembers)
+ {
+ for (std::size_t i = 0; i < amount; ++i)
+ {
+ new (pointerToT + i) T;
+ }
+ }
+
+ return pointerToT;
+ }
+
+ return nullptr;
+ }
+
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ template<typename T>
+ void DeleteArray(T* pointerToTArray)
+ {
+ if (pointerToTArray == nullptr)
+ {
+ return;
+ }
+
+ bool destroyMembers = ShouldDestroyArrayMembers<T>();
+ void* rawMemory = nullptr;
+
+ if (destroyMembers)
+ {
+#if defined(_MSC_VER) && _MSC_VER < 1900
+ std::size_t headerSize = (std::max)(sizeof(std::size_t), __alignof(T));
+#else
+ std::size_t headerSize = (std::max)(sizeof(std::size_t), alignof(T));
+#endif
+
+ std::size_t *pointerToAmount = reinterpret_cast<std::size_t*>(reinterpret_cast<char*>(pointerToTArray) - headerSize);
+ std::size_t amount = *pointerToAmount;
+
+ for (std::size_t i = amount; i > 0; --i)
+ {
+ (pointerToTArray + i - 1)->~T();
+ }
+ rawMemory = reinterpret_cast<void *>(pointerToAmount);
+ }
+ else
+ {
+ rawMemory = reinterpret_cast<void *>(pointerToTArray);
+ }
+
+ Free(rawMemory);
+ }
+
+ /**
+ * modeled from std::default_delete
+ */
+ template<typename T>
+ struct Deleter
+ {
+ Deleter() {}
+
+ template<class U, class = typename std::enable_if<std::is_convertible<U *, T *>::value, void>::type>
+ Deleter(const Deleter<U>&)
+ {
+ }
+
+ void operator()(T *pointerToT) const
+ {
+ static_assert(0 < sizeof(T), "can't delete an incomplete type");
+ Aws::Delete(pointerToT);
+ }
+ };
+
+ template< typename T > using UniquePtr = std::unique_ptr< T, Deleter< T > >;
+
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ template<typename T, typename ...ArgTypes>
+ UniquePtr<T> MakeUnique(const char* allocationTag, ArgTypes&&... args)
+ {
+ return UniquePtr<T>(Aws::New<T>(allocationTag, std::forward<ArgTypes>(args)...));
+ }
+
+ template<typename T>
+ struct ArrayDeleter
+ {
+ ArrayDeleter() {}
+
+ template<class U, class = typename std::enable_if<std::is_convertible<U *, T *>::value, void>::type>
+ ArrayDeleter(const ArrayDeleter<U>&)
+ {
+ }
+
+ void operator()(T *pointerToTArray) const
+ {
+ static_assert(0 < sizeof(T), "can't delete an incomplete type");
+ Aws::DeleteArray(pointerToTArray);
+ }
+ };
+
+ template< typename T > using UniqueArrayPtr = std::unique_ptr< T, ArrayDeleter< T > >;
+
+ /**
+ * ::new, ::delete, ::malloc, ::free, std::make_shared, and std::make_unique should not be used in SDK code
+ * use these functions instead or Aws::MakeShared
+ */
+ template<typename T, typename ...ArgTypes>
+ UniqueArrayPtr<T> MakeUniqueArray(std::size_t amount, const char* allocationTag, ArgTypes&&... args)
+ {
+ return UniqueArrayPtr<T>(Aws::NewArray<T>(amount, allocationTag, std::forward<ArgTypes>(args)...));
+ }
+
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/MemorySystemInterface.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/MemorySystemInterface.h
new file mode 100644
index 00000000000..0a8341ff86c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/MemorySystemInterface.h
@@ -0,0 +1,50 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <cstdlib>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Memory
+ {
+ /**
+ * Central interface for memory management customizations. To create a custom memory manager, implement this interface and then
+ * call InitializeAWSMemorySystem().
+ */
+ class AWS_CORE_API MemorySystemInterface
+ {
+ public:
+ virtual ~MemorySystemInterface() = default;
+
+ /**
+ * This is for initializing your memory manager in a static context. This can be empty if you don't need to do that.
+ */
+ virtual void Begin() = 0;
+ /**
+ * This is for cleaning up your memory manager in a static context. This can be empty if you don't need to do that.
+ */
+ virtual void End() = 0;
+
+ /**
+ * Allocate your memory inside this method. blocksize and alignment are exactly the same as the std::allocator interfaces.
+ * The allocationTag parameter is for memory tracking; you don't have to handle it.
+ */
+ virtual void* AllocateMemory(std::size_t blockSize, std::size_t alignment, const char *allocationTag = nullptr) = 0;
+
+ /**
+ * Free the memory pointed to by memoryPtr.
+ */
+ virtual void FreeMemory(void* memoryPtr) = 0;
+ };
+
+ } // namespace Memory
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSAllocator.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSAllocator.h
new file mode 100644
index 00000000000..932408b761d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSAllocator.h
@@ -0,0 +1,100 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/SDKConfig.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/memory/MemorySystemInterface.h>
+
+#include <memory>
+#include <cstdlib>
+
+namespace Aws
+{
+#ifdef USE_AWS_MEMORY_MANAGEMENT
+ /**
+ * Std allocator interface that is used for all STL types in the event that Custom Memory Management is being used.
+ */
+ template <typename T>
+ class Allocator : public std::allocator<T>
+ {
+ public:
+
+ typedef std::allocator<T> Base;
+
+ Allocator() throw() :
+ Base()
+ {}
+
+ Allocator(const Allocator<T>& a) throw() :
+ Base(a)
+ {}
+
+ template <class U>
+ Allocator(const Allocator<U>& a) throw() :
+ Base(a)
+ {}
+
+ ~Allocator() throw() {}
+
+ typedef std::size_t size_type;
+
+ template<typename U>
+ struct rebind
+ {
+ typedef Allocator<U> other;
+ };
+
+ typename Base::pointer allocate(size_type n, const void *hint = nullptr)
+ {
+ AWS_UNREFERENCED_PARAM(hint);
+
+ return reinterpret_cast<typename Base::pointer>(Malloc("AWSSTL", n * sizeof(T)));
+ }
+
+ void deallocate(typename Base::pointer p, size_type n)
+ {
+ AWS_UNREFERENCED_PARAM(n);
+
+ Free(p);
+ }
+
+ };
+
+#ifdef __ANDROID__
+#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
+ template< typename T >
+ bool operator ==(const Allocator< T >& lhs, const Allocator< T >& rhs)
+ {
+ AWS_UNREFERENCED_PARAM(lhs);
+ AWS_UNREFERENCED_PARAM(rhs);
+
+ return false;
+ }
+#endif // _GLIBCXX_FULLY_DYNAMIC_STRING == 0
+#endif // __ANDROID__
+
+#else
+
+ template< typename T > using Allocator = std::allocator<T>;
+
+#endif // USE_AWS_MEMORY_MANAGEMENT
+ /**
+ * Creates a shared_ptr using AWS Allocator hooks.
+ * allocationTag is for memory tracking purposes.
+ */
+ template<typename T, typename ...ArgTypes>
+ std::shared_ptr<T> MakeShared(const char* allocationTag, ArgTypes&&... args)
+ {
+ AWS_UNREFERENCED_PARAM(allocationTag);
+
+ return std::allocate_shared<T, Aws::Allocator<T>>(Aws::Allocator<T>(), std::forward<ArgTypes>(args)...);
+ }
+
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSDeque.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSDeque.h
new file mode 100644
index 00000000000..ed63b8e9394
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSDeque.h
@@ -0,0 +1,19 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+#include <deque>
+
+namespace Aws
+{
+
+template< typename T > using Deque = std::deque< T, Aws::Allocator< T > >;
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSList.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSList.h
new file mode 100644
index 00000000000..49341325a8f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSList.h
@@ -0,0 +1,19 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+#include <list>
+
+namespace Aws
+{
+
+template< typename T > using List = std::list< T, Aws::Allocator< T > >;
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSMap.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSMap.h
new file mode 100644
index 00000000000..66dc98bb8f3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSMap.h
@@ -0,0 +1,33 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+#include <map>
+#include <unordered_map>
+#include <cstring>
+
+namespace Aws
+{
+
+template< typename K, typename V > using Map = std::map< K, V, std::less< K >, Aws::Allocator< std::pair< const K, V > > >;
+template< typename K, typename V > using UnorderedMap = std::unordered_map< K, V, std::hash< K >, std::equal_to< K >, Aws::Allocator< std::pair< const K, V > > >;
+template< typename K, typename V > using MultiMap = std::multimap< K, V, std::less< K >, Aws::Allocator< std::pair< const K, V > > >;
+
+struct CompareStrings
+{
+ bool operator()(const char* a, const char* b) const
+ {
+ return std::strcmp(a, b) < 0;
+ }
+};
+
+template<typename V> using CStringMap = std::map<const char*, V, CompareStrings, Aws::Allocator<std::pair<const char*, V> > >;
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSQueue.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSQueue.h
new file mode 100644
index 00000000000..d45b245ad03
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSQueue.h
@@ -0,0 +1,21 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+#include <aws/core/utils/memory/stl/AWSDeque.h>
+
+#include <deque>
+#include <queue>
+
+namespace Aws
+{
+
+template< typename T > using Queue = std::queue< T, Deque< T > >;
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSSet.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSSet.h
new file mode 100644
index 00000000000..6aee204f398
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSSet.h
@@ -0,0 +1,19 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+#include <set>
+
+namespace Aws
+{
+
+template< typename T > using Set = std::set< T, std::less< T >, Aws::Allocator< T > >;
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStack.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStack.h
new file mode 100644
index 00000000000..7a3f5612443
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStack.h
@@ -0,0 +1,21 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+#include <aws/core/utils/memory/stl/AWSDeque.h>
+
+#include <deque>
+#include <stack>
+
+namespace Aws
+{
+
+template< typename T > using Stack = std::stack< T, Deque< T > >;
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStreamFwd.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStreamFwd.h
new file mode 100644
index 00000000000..335346a31b1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStreamFwd.h
@@ -0,0 +1,28 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <iostream>
+#include <functional>
+
+namespace Aws
+{
+
+// Serves no purpose other than to help my conversion process
+typedef std::basic_ifstream< char, std::char_traits< char > > IFStream;
+typedef std::basic_ofstream< char, std::char_traits< char > > OFStream;
+typedef std::basic_fstream< char, std::char_traits< char > > FStream;
+typedef std::basic_istream< char, std::char_traits< char > > IStream;
+typedef std::basic_ostream< char, std::char_traits< char > > OStream;
+typedef std::basic_iostream< char, std::char_traits< char > > IOStream;
+typedef std::istreambuf_iterator< char, std::char_traits< char > > IStreamBufIterator;
+
+using IOStreamFactory = std::function< Aws::IOStream*(void) >;
+
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSString.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSString.h
new file mode 100644
index 00000000000..3cd013e3f8d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSString.h
@@ -0,0 +1,108 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+#include <functional>
+#include <string>
+
+namespace Aws
+{
+
+#if defined(_GLIBCXX_FULLY_DYNAMIC_STRING) && _GLIBCXX_FULLY_DYNAMIC_STRING == 0 && defined(__ANDROID__)
+
+/*
+using std::string with shared libraries is broken on android when using gnustl
+due to the platform-level decision to set _GLIBCXX_FULLY_DYNAMIC_STRING to 0
+
+The problem:
+
+(1) _GLIBCXX_FULLY_DYNAMIC_STRING is set to 0 in Android's c++config.h for gnustl
+(2) The optimization that this enables is completely broken if using shared libraries and there is no way to opt out of using it.
+ An optimization that uses a comparison to a static memory address is death for shared libraries.
+
+Supposing you have a shared library B that depends on another shared library A. There are a variety of innocuous scenarios where you end up crashing
+in the std::basic_string destructor because it's attempting to free a static memory address (&std::string::_Rep_Base::_S_empty_rep_storage -- you'll need to temporarily
+flip the struct to "public:" in order to take this address from your code).
+If you take the address of this location, you will get two
+different answers depending on whether you query it in library A or library B (oddly enough, if you look the symbol itself up, it only shows up as public weak in
+libgnustl_shared.so). When the string destructor is run from the context of library B, the _Rep::_M_dispose function will end up attempting to free
+an address that is static memory (from library A).
+
+
+Lessons (with the empty string optimization forced on you):
+ (1) You can't move std::strings across shared libraries (as a part of another class, Outcome in our case)
+ (2) If you default initialize a std::string member variable, you can't have a mismatched constructor/destructor pair such that one is in a cpp file and the other
+ is missing/implicit or defined in the header file
+
+Solutions:
+
+Use libc++ rather than gnustl
+
+For those who must use gnustl, we have provided a working solution by cobbling together a set of hacks:
+
+We prevent the empty string optimization from ever being run on our strings by:
+ (1) Make Aws::Allocator always fail equality checks with itself; this check is part of the empty string optimization in several std::basic_string constructors
+ (2) All other cases are prevented by turning Aws::String into a subclass whose default constructor and move operations go to baseclass versions which will not
+ perform the empty string optimization
+
+Those changes prevent crashes, but lead to very poor performance when using a string stream; every character added will result in multiple copies of the entire
+string (ie, quadratic).
+
+To fix the performance problems, we have put together a set of replacement classes, SimpleStreamBuf and SimpleStringStream, that
+replace std::stringstream and std::stringbuf in SDK code. These replacements use raw buffers rather than strings in order to
+avoid the performance issues.
+
+This solution is only enabled if using gnustl on Android. In all other situations, normal STL types are used.
+*/
+
+using AndroidBasicString = std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > >;
+
+class String : public AndroidBasicString
+{
+ public:
+ using Base = AndroidBasicString;
+
+ String() : Base("") {} // allocator comparison failure will cause empty string optimisation to be skipped
+ String(const String& rhs ) : Base(rhs) {}
+ String(String&& rhs) : Base(rhs) {} // DO NOT CALL std::move, let this go to the const ref constructor
+ String(const AndroidBasicString& rhs) : Base(rhs) {}
+ String(AndroidBasicString&& rhs) : Base(rhs) {} // DO NOT CALL std::move, let this go to the const ref constructor
+ String(const char* str) : Base(str) {}
+ String(const char* str_begin, const char* str_end) : Base(str_begin, str_end) {}
+ String(const AndroidBasicString& str, size_type pos, size_type count) : Base(str, pos, count) {}
+ String(const String& str, size_type pos, size_type count) : Base(str, pos, count) {}
+ String(const char* str, size_type count) : Base(str, count) {}
+ String(size_type count, char c) : Base(count, c) {}
+ String(std::initializer_list<char> __l) : Base(__l) {}
+
+ template<class _InputIterator>
+ String(_InputIterator __beg, _InputIterator __end) : Base(__beg, __end) {}
+
+ String& operator=(const String& rhs) { Base::operator=(rhs); return *this; }
+ String& operator=(String&& rhs) { Base::operator=(rhs); return *this; } // might be ok to use std::move (base class uses swap) but let's be safe
+ String& operator=(const AndroidBasicString& rhs) { Base::operator=(rhs); return *this; }
+ String& operator=(AndroidBasicString&& rhs) { Base::operator=(rhs); return *this; } // might be ok to use std::move (base class uses swap) but let's be safe
+ String& operator=(const char* str) { Base::operator=(str); return *this; }
+};
+
+#else
+
+using String = std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > >;
+
+#ifdef _WIN32
+using WString = std::basic_string< wchar_t, std::char_traits< wchar_t >, Aws::Allocator< wchar_t > >;
+#endif
+
+#endif // __ANDROID
+
+} // namespace Aws
+
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStringStream.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStringStream.h
new file mode 100644
index 00000000000..a5e6f4ae485
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStringStream.h
@@ -0,0 +1,42 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#if defined(_GLIBCXX_FULLY_DYNAMIC_STRING) && _GLIBCXX_FULLY_DYNAMIC_STRING == 0 && defined(__ANDROID__)
+
+#include <aws/core/utils/memory/stl/SimpleStringStream.h>
+
+#else
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+#include <sstream>
+
+#endif
+
+namespace Aws
+{
+
+#if defined(_GLIBCXX_FULLY_DYNAMIC_STRING) && _GLIBCXX_FULLY_DYNAMIC_STRING == 0 && defined(__ANDROID__)
+
+// see the large comment block in AWSString.h for an explanation
+typedef Aws::SimpleStringStream StringStream;
+typedef Aws::SimpleIStringStream IStringStream;
+typedef Aws::SimpleOStringStream OStringStream;
+typedef Aws::Utils::Stream::SimpleStreamBuf StringBuf;
+
+#else
+
+typedef std::basic_stringstream< char, std::char_traits< char >, Aws::Allocator< char > > StringStream;
+typedef std::basic_istringstream< char, std::char_traits< char >, Aws::Allocator< char > > IStringStream;
+typedef std::basic_ostringstream< char, std::char_traits< char >, Aws::Allocator< char > > OStringStream;
+typedef std::basic_stringbuf< char, std::char_traits< char >, Aws::Allocator< char > > StringBuf;
+
+#endif
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSVector.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSVector.h
new file mode 100644
index 00000000000..d9f67825c77
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSVector.h
@@ -0,0 +1,19 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+#include <vector>
+
+namespace Aws
+{
+
+template< typename T > using Vector = std::vector< T, Aws::Allocator< T > >;
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/SimpleStringStream.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/SimpleStringStream.h
new file mode 100644
index 00000000000..45c4d0a448d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/memory/stl/SimpleStringStream.h
@@ -0,0 +1,126 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/stream/SimpleStreamBuf.h>
+
+#include <iostream>
+
+namespace Aws
+{
+
+class AWS_CORE_API SimpleStringStream : public std::iostream
+{
+ public:
+
+ using char_type = char;
+ using traits_type = std::char_traits<char>;
+ using allocator_type = Aws::Allocator<char>;
+ using int_type = int;
+ using pos_type = std::streampos;
+ using off_type = std::streamoff;
+
+ using base = std::iostream;
+
+ SimpleStringStream();
+ SimpleStringStream(const Aws::String& value);
+
+ virtual ~SimpleStringStream() {}
+
+ // disabling copies of course
+ SimpleStringStream(const SimpleStringStream& rhs) = delete;
+ SimpleStringStream& operator=(const SimpleStringStream& rhs) = delete;
+
+ // also disabling moves until there's a valid need
+ SimpleStringStream(SimpleStringStream&& rhs) = delete;
+ SimpleStringStream& operator=(SimpleStringStream&& rhs) = delete;
+
+ Aws::Utils::Stream::SimpleStreamBuf* rdbuf() const { return const_cast<Aws::Utils::Stream::SimpleStreamBuf*>(&m_streamBuffer); }
+
+ Aws::String str() const { return m_streamBuffer.str(); }
+ void str(const Aws::String& value);
+
+ private:
+
+ Aws::Utils::Stream::SimpleStreamBuf m_streamBuffer;
+};
+
+class AWS_CORE_API SimpleIStringStream : public std::istream
+{
+ public:
+
+ using char_type = char;
+ using traits_type = std::char_traits<char>;
+ using allocator_type = Aws::Allocator<char>;
+ using int_type = int;
+ using pos_type = std::streampos;
+ using off_type = std::streamoff;
+
+ using base = std::istream;
+
+ SimpleIStringStream();
+ SimpleIStringStream(const Aws::String& value);
+
+ virtual ~SimpleIStringStream() {}
+
+ // disabling copies of course
+ SimpleIStringStream(const SimpleIStringStream& rhs) = delete;
+ SimpleIStringStream& operator=(const SimpleIStringStream& rhs) = delete;
+
+ // also disabling moves until there's a valid need
+ SimpleIStringStream(SimpleIStringStream&& rhs) = delete;
+ SimpleIStringStream& operator=(SimpleIStringStream&& rhs) = delete;
+
+ Aws::Utils::Stream::SimpleStreamBuf* rdbuf() const { return const_cast<Aws::Utils::Stream::SimpleStreamBuf*>(&m_streamBuffer); }
+
+ Aws::String str() const { return m_streamBuffer.str(); }
+ void str(const Aws::String& value);
+
+ private:
+
+ Aws::Utils::Stream::SimpleStreamBuf m_streamBuffer;
+};
+
+class AWS_CORE_API SimpleOStringStream : public std::ostream
+{
+ public:
+
+ using char_type = char;
+ using traits_type = std::char_traits<char>;
+ using allocator_type = Aws::Allocator<char>;
+ using int_type = int;
+ using pos_type = std::streampos;
+ using off_type = std::streamoff;
+
+ using base = std::ostream;
+
+ SimpleOStringStream();
+ SimpleOStringStream(const Aws::String& value);
+
+ virtual ~SimpleOStringStream() {}
+
+ // disabling copies of course
+ SimpleOStringStream(const SimpleOStringStream& rhs) = delete;
+ SimpleOStringStream& operator=(const SimpleOStringStream& rhs) = delete;
+
+ // also disabling moves until there's a valid need
+ SimpleOStringStream(SimpleOStringStream&& rhs) = delete;
+ SimpleOStringStream& operator=(SimpleOStringStream&& rhs) = delete;
+
+ Aws::Utils::Stream::SimpleStreamBuf* rdbuf() const { return const_cast<Aws::Utils::Stream::SimpleStreamBuf*>(&m_streamBuffer); }
+
+ Aws::String str() const { return m_streamBuffer.str(); }
+ void str(const Aws::String& value);
+
+ private:
+
+ Aws::Utils::Stream::SimpleStreamBuf m_streamBuffer;
+};
+
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/DefaultRateLimiter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/DefaultRateLimiter.h
new file mode 100644
index 00000000000..974dbefb021
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/DefaultRateLimiter.h
@@ -0,0 +1,205 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/ratelimiter/RateLimiterInterface.h>
+
+#include <algorithm>
+#include <mutex>
+#include <thread>
+#include <functional>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace RateLimits
+ {
+ /**
+ * High precision rate limiter. If you need to limit your bandwidth by a budget, this is very likely the implementation you want.
+ */
+ template<typename CLOCK = std::chrono::high_resolution_clock, typename DUR = std::chrono::seconds, bool RENORMALIZE_RATE_CHANGES = true>
+ class DefaultRateLimiter : public RateLimiterInterface
+ {
+ public:
+ using Base = RateLimiterInterface;
+
+ using InternalTimePointType = std::chrono::time_point<CLOCK>;
+ using ElapsedTimeFunctionType = std::function< InternalTimePointType() >;
+
+ /**
+ * Initializes state, starts counts, does some basic validation.
+ */
+ DefaultRateLimiter(int64_t maxRate, ElapsedTimeFunctionType elapsedTimeFunction = CLOCK::now) :
+ m_elapsedTimeFunction(elapsedTimeFunction),
+ m_maxRate(0),
+ m_accumulatorLock(),
+ m_accumulator(0),
+ m_accumulatorFraction(0),
+ m_accumulatorUpdated(),
+ m_replenishNumerator(0),
+ m_replenishDenominator(0),
+ m_delayNumerator(0),
+ m_delayDenominator(0)
+ {
+ // verify we're not going to divide by zero due to goofy type parameterization
+ static_assert(DUR::period::num > 0, "Rate duration must have positive numerator");
+ static_assert(DUR::period::den > 0, "Rate duration must have positive denominator");
+ static_assert(CLOCK::duration::period::num > 0, "RateLimiter clock duration must have positive numerator");
+ static_assert(CLOCK::duration::period::den > 0, "RateLimiter clock duration must have positive denominator");
+
+ DefaultRateLimiter::SetRate(maxRate, true);
+ }
+
+ virtual ~DefaultRateLimiter() = default;
+
+ /**
+ * Calculates time in milliseconds that should be delayed before letting anymore data through.
+ */
+ virtual DelayType ApplyCost(int64_t cost) override
+ {
+ std::lock_guard<std::recursive_mutex> lock(m_accumulatorLock);
+
+ auto now = m_elapsedTimeFunction();
+ auto elapsedTime = (now - m_accumulatorUpdated).count();
+
+ // replenish the accumulator based on how much time has passed
+ auto temp = elapsedTime * m_replenishNumerator + m_accumulatorFraction;
+ m_accumulator += temp / m_replenishDenominator;
+ m_accumulatorFraction = temp % m_replenishDenominator;
+
+ // the accumulator is capped based on the maximum rate
+ m_accumulator = (std::min)(m_accumulator, m_maxRate);
+ if (m_accumulator == m_maxRate)
+ {
+ m_accumulatorFraction = 0;
+ }
+
+ // if the accumulator is still negative, then we'll have to wait
+ DelayType delay(0);
+ if (m_accumulator < 0)
+ {
+ delay = DelayType(-m_accumulator * m_delayDenominator / m_delayNumerator);
+ }
+
+ // apply the cost to the accumulator after the delay has been calculated; the next call will end up paying for our cost
+ m_accumulator -= cost;
+ m_accumulatorUpdated = now;
+
+ return delay;
+ }
+
+ /**
+ * Same as ApplyCost() but then goes ahead and sleeps the current thread.
+ */
+ virtual void ApplyAndPayForCost(int64_t cost) override
+ {
+ auto costInMilliseconds = ApplyCost(cost);
+ if(costInMilliseconds.count() > 0)
+ {
+ std::this_thread::sleep_for(costInMilliseconds);
+ }
+ }
+
+ /**
+ * Update the bandwidth rate to allow.
+ */
+ virtual void SetRate(int64_t rate, bool resetAccumulator = false) override
+ {
+ std::lock_guard<std::recursive_mutex> lock(m_accumulatorLock);
+
+ // rate must always be positive
+ rate = (std::max)(static_cast<int64_t>(1), rate);
+
+ if (resetAccumulator)
+ {
+ m_accumulator = rate;
+ m_accumulatorFraction = 0;
+ m_accumulatorUpdated = m_elapsedTimeFunction();
+ }
+ else
+ {
+ // sync the accumulator to current time
+ ApplyCost(0); // this call is why we need a recursive mutex
+
+ if (ShouldRenormalizeAccumulatorOnRateChange())
+ {
+ // now renormalize the accumulator and its fractional part against the new rate
+ // the idea here is we want to preserve the desired wait based on the previous rate
+ //
+ // As an example:
+ // Say we had a rate of 100/s and our accumulator was -500 (ie the next ApplyCost would incur a 5 second delay)
+ // If we change the rate to 1000/s and want to preserve that delay, we need to scale the accumulator to -5000
+ m_accumulator = m_accumulator * rate / m_maxRate;
+ m_accumulatorFraction = m_accumulatorFraction * rate / m_maxRate;
+ }
+ }
+
+ m_maxRate = rate;
+
+ // Helper constants that represent the amount replenished per CLOCK time period; use the gcd to reduce them in order to try and minimize the chance of integer overflow
+ m_replenishNumerator = m_maxRate * DUR::period::den * CLOCK::duration::period::num;
+ m_replenishDenominator = DUR::period::num * CLOCK::duration::period::den;
+ auto gcd = ComputeGCD(m_replenishNumerator, m_replenishDenominator);
+ m_replenishNumerator /= gcd;
+ m_replenishDenominator /= gcd;
+
+ // Helper constants that represent the delay per unit of costAccumulator; use the gcd to reduce them in order to try and minimize the chance of integer overflow
+ m_delayNumerator = m_maxRate * DelayType::period::num * DUR::period::den;
+ m_delayDenominator = DelayType::period::den * DUR::period::num;
+ gcd = ComputeGCD(m_delayNumerator, m_delayDenominator);
+ m_delayNumerator /= gcd;
+ m_delayDenominator /= gcd;
+ }
+
+ private:
+
+ int64_t ComputeGCD(int64_t num1, int64_t num2) const
+ {
+ // Euclid's
+ while (num2 != 0)
+ {
+ int64_t rem = num1 % num2;
+ num1 = num2;
+ num2 = rem;
+ }
+
+ return num1;
+ }
+
+ bool ShouldRenormalizeAccumulatorOnRateChange() const { return RENORMALIZE_RATE_CHANGES; }
+
+ /// Function that returns the current time
+ ElapsedTimeFunctionType m_elapsedTimeFunction;
+
+ /// The rate we want to limit to
+ int64_t m_maxRate;
+
+ /// We need to pretty much lock everything while either setting the rate or applying a cost
+ std::recursive_mutex m_accumulatorLock;
+
+ /// Tracks how much "rate" we currently have to give; if this drops below zero then we start having to wait in order to perform operations and maintain the rate
+ /// Replenishes over time based on m_maxRate
+ int64_t m_accumulator;
+
+ /// Updates can occur at any time, leading to a fractional accumulation; represents the fraction (m_accumulatorFraction / m_replenishDenominator)
+ int64_t m_accumulatorFraction;
+
+ /// Last time point the accumulator was updated
+ InternalTimePointType m_accumulatorUpdated;
+
+ /// Some helper constants that represents fixed (per m_maxRate) ratios used in the delay and replenishment calculations
+ int64_t m_replenishNumerator;
+ int64_t m_replenishDenominator;
+ int64_t m_delayNumerator;
+ int64_t m_delayDenominator;
+ };
+
+ } // namespace RateLimits
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/RateLimiterInterface.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/RateLimiterInterface.h
new file mode 100644
index 00000000000..578c9ed8446
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/ratelimiter/RateLimiterInterface.h
@@ -0,0 +1,45 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <stdint.h>
+#include <chrono>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace RateLimits
+ {
+ /**
+ * Interface for bandwidth limiters. You likely don't want to implement your own as DefaultRateLimiter is probably what you need.
+ * If you need to implement one, then this is the interface to implement.
+ */
+ class RateLimiterInterface
+ {
+ public:
+ using DelayType = std::chrono::milliseconds;
+
+ virtual ~RateLimiterInterface() {}
+ /**
+ * Calculates time in milliseconds that should be delayed before letting anymore data through.
+ */
+ virtual DelayType ApplyCost(int64_t cost) = 0;
+ /**
+ * Same as ApplyCost() but then goes ahead and sleeps the current thread.
+ */
+ virtual void ApplyAndPayForCost(int64_t cost) = 0;
+ /**
+ * Update the bandwidth rate to allow.
+ */
+ virtual void SetRate(int64_t rate, bool resetAccumulator = false) = 0;
+ };
+
+ } // namespace RateLimits
+ } // namespace Utils
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ConcurrentStreamBuf.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ConcurrentStreamBuf.h
new file mode 100644
index 00000000000..9ef7d9763e1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ConcurrentStreamBuf.h
@@ -0,0 +1,58 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/auth/AWSAuthSigner.h>
+#include <aws/common/array_list.h>
+
+#include <mutex>
+#include <condition_variable>
+#include <streambuf>
+#include <ios>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Stream
+ {
+ /**
+ * A thread-safe streambuf implementation that allows simultaneous reading and writing.
+ * NOTE: iostreams maintain state for readers and writers. This means that you can have at most two
+ * concurrent threads, one for reading and one for writing. Multiple readers or multiple writers are not
+ * thread-safe and will result in race-conditions.
+ */
+ class AWS_CORE_API ConcurrentStreamBuf : public std::streambuf
+ {
+ public:
+
+ explicit ConcurrentStreamBuf(size_t bufferLength = 4 * 1024);
+
+ void SetEof();
+
+ protected:
+ std::streampos seekoff(std::streamoff off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+ std::streampos seekpos(std::streampos pos, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+
+ int underflow() override;
+ int overflow(int ch) override;
+ int sync() override;
+ std::streamsize showmanyc() override;
+
+ void FlushPutArea();
+
+ private:
+ Aws::Vector<unsigned char> m_getArea;
+ Aws::Vector<unsigned char> m_putArea;
+ Aws::Vector<unsigned char> m_backbuf; // used to shuttle data from the put area to the get area
+ std::mutex m_lock; // synchronize access to the common backbuffer
+ std::condition_variable m_signal;
+ bool m_eof;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/PreallocatedStreamBuf.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/PreallocatedStreamBuf.h
new file mode 100644
index 00000000000..ad9dc2a929b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/PreallocatedStreamBuf.h
@@ -0,0 +1,56 @@
+
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/Array.h>
+#include <streambuf>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Stream
+ {
+ /**
+ * this is a stream buf to use with std::iostream that uses a preallocated buffer under the hood.
+ */
+ class AWS_CORE_API PreallocatedStreamBuf : public std::streambuf
+ {
+ public:
+ /**
+ * Initialize the stream buffer with a pointer to your buffer. This class never takes ownership
+ * of the buffer. It is your responsibility to delete it once the stream is no longer in use.
+ * @param buffer buffer to initialize from.
+ * @param lengthToRead length in bytes to actually use in the buffer (e.g. you have a 1kb buffer, but only want the stream
+ * to see 500 b of it.
+ */
+ PreallocatedStreamBuf(unsigned char* buffer, uint64_t lengthToRead);
+
+ PreallocatedStreamBuf(const PreallocatedStreamBuf&) = delete;
+ PreallocatedStreamBuf& operator=(const PreallocatedStreamBuf&) = delete;
+
+ PreallocatedStreamBuf(PreallocatedStreamBuf&& toMove) = delete;
+ PreallocatedStreamBuf& operator=(PreallocatedStreamBuf&&) = delete;
+
+ /**
+ * Get the buffer that is being used by the stream buffer.
+ * @return Pointer to the underlying buffer (probably for a Aws::Delete() call).
+ */
+ unsigned char* GetBuffer() { return m_underlyingBuffer; }
+
+ protected:
+ pos_type seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+ pos_type seekpos(pos_type pos, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+
+ private:
+ unsigned char* m_underlyingBuffer;
+ const uint64_t m_lengthToRead;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ResponseStream.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ResponseStream.h
new file mode 100644
index 00000000000..e82e6448cde
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/ResponseStream.h
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Stream
+ {
+ /**
+ * Encapsulates and manages ownership of custom response streams. This is a move only type.
+ */
+ class AWS_CORE_API ResponseStream
+ {
+ public:
+ /**
+ * sets underlying stream to nullptr
+ */
+ ResponseStream();
+ /**
+ * moves the underlying stream
+ */
+ ResponseStream(ResponseStream&&);
+ /**
+ * Uses factory to allocate underlying stream
+ */
+ ResponseStream(const Aws::IOStreamFactory& factory);
+ /**
+ * Takes ownership of an underlying stream.
+ */
+ ResponseStream(IOStream* underlyingStreamToManage);
+ ResponseStream(const ResponseStream&) = delete;
+ ~ResponseStream();
+
+ /**
+ * moves the underlying stream
+ */
+ ResponseStream& operator=(ResponseStream&&);
+ ResponseStream& operator=(const ResponseStream&) = delete;
+
+ /**
+ * Gives access to underlying stream, but keep in mind that this changes state of the stream
+ */
+ inline Aws::IOStream& GetUnderlyingStream() const { return *m_underlyingStream; }
+
+ private:
+ void ReleaseStream();
+
+ Aws::IOStream* m_underlyingStream;
+ };
+
+ class AWS_CORE_API DefaultUnderlyingStream : public Aws::IOStream
+ {
+ public:
+ using Base = Aws::IOStream;
+
+ DefaultUnderlyingStream();
+ DefaultUnderlyingStream(Aws::UniquePtr<std::streambuf> buf);
+ virtual ~DefaultUnderlyingStream();
+ };
+
+ AWS_CORE_API Aws::IOStream* DefaultResponseStreamFactoryMethod();
+
+ } //namespace Stream
+ } //namespace Utils
+} //namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/SimpleStreamBuf.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/SimpleStreamBuf.h
new file mode 100644
index 00000000000..ef12c60ba39
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/stream/SimpleStreamBuf.h
@@ -0,0 +1,64 @@
+
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <streambuf>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Stream
+{
+ /**
+ * A replacement for std::stringbuf when using Android and gnustl together
+ */
+ class AWS_CORE_API SimpleStreamBuf : public std::streambuf
+ {
+ public:
+
+ using base = std::streambuf;
+
+ SimpleStreamBuf();
+ explicit SimpleStreamBuf(const Aws::String& value);
+
+ SimpleStreamBuf(const SimpleStreamBuf&) = delete;
+ SimpleStreamBuf& operator=(const SimpleStreamBuf&) = delete;
+
+ SimpleStreamBuf(SimpleStreamBuf&& toMove) = delete;
+ SimpleStreamBuf& operator=(SimpleStreamBuf&&) = delete;
+
+ virtual ~SimpleStreamBuf();
+
+ Aws::String str() const;
+ void str(const Aws::String& value);
+
+ void swap(SimpleStreamBuf& rhs);
+
+ protected:
+ virtual std::streampos seekoff(std::streamoff off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+ virtual std::streampos seekpos(std::streampos pos, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override;
+
+ virtual int overflow (int c = EOF) override;
+ virtual int underflow() override;
+
+ virtual std::streamsize xsputn(const char* s, std::streamsize n) override;
+
+ private:
+
+ bool GrowBuffer();
+
+ char* m_buffer;
+ size_t m_bufferSize;
+ };
+
+}
+}
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h
new file mode 100644
index 00000000000..36975af5130
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h
@@ -0,0 +1,119 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSQueue.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/threading/Semaphore.h>
+#include <functional>
+#include <future>
+#include <mutex>
+#include <atomic>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Threading
+ {
+ class ThreadTask;
+
+ /**
+ * Interface for implementing an Executor, to implement a custom thread execution strategy, inherit from this class
+ * and override SubmitToThread().
+ */
+ class AWS_CORE_API Executor
+ {
+ public:
+ virtual ~Executor() = default;
+
+ /**
+ * Send function and its arguments to the SubmitToThread function.
+ */
+ template<class Fn, class ... Args>
+ bool Submit(Fn&& fn, Args&& ... args)
+ {
+ std::function<void()> callable{ std::bind(std::forward<Fn>(fn), std::forward<Args>(args)...) };
+ return SubmitToThread(std::move(callable));
+ }
+
+ protected:
+ /**
+ * To implement your own executor implementation, then simply subclass Executor and implement this method.
+ */
+ virtual bool SubmitToThread(std::function<void()>&&) = 0;
+ };
+
+
+ /**
+ * Default Executor implementation. Simply spawns a thread and detaches it.
+ */
+ class AWS_CORE_API DefaultExecutor : public Executor
+ {
+ public:
+ DefaultExecutor() : m_state(State::Free) {}
+ ~DefaultExecutor();
+ protected:
+ enum class State
+ {
+ Free, Locked, Shutdown
+ };
+ bool SubmitToThread(std::function<void()>&&) override;
+ void Detach(std::thread::id id);
+ std::atomic<State> m_state;
+ Aws::UnorderedMap<std::thread::id, std::thread> m_threads;
+ };
+
+ enum class OverflowPolicy
+ {
+ QUEUE_TASKS_EVENLY_ACCROSS_THREADS,
+ REJECT_IMMEDIATELY
+ };
+
+ /**
+ * Thread Pool Executor implementation.
+ */
+ class AWS_CORE_API PooledThreadExecutor : public Executor
+ {
+ public:
+ PooledThreadExecutor(size_t poolSize, OverflowPolicy overflowPolicy = OverflowPolicy::QUEUE_TASKS_EVENLY_ACCROSS_THREADS);
+ ~PooledThreadExecutor();
+
+ /**
+ * Rule of 5 stuff.
+ * Don't copy or move
+ */
+ PooledThreadExecutor(const PooledThreadExecutor&) = delete;
+ PooledThreadExecutor& operator =(const PooledThreadExecutor&) = delete;
+ PooledThreadExecutor(PooledThreadExecutor&&) = delete;
+ PooledThreadExecutor& operator =(PooledThreadExecutor&&) = delete;
+
+ protected:
+ bool SubmitToThread(std::function<void()>&&) override;
+
+ private:
+ Aws::Queue<std::function<void()>*> m_tasks;
+ std::mutex m_queueLock;
+ Aws::Utils::Threading::Semaphore m_sync;
+ Aws::Vector<ThreadTask*> m_threadTaskHandles;
+ size_t m_poolSize;
+ OverflowPolicy m_overflowPolicy;
+
+ /**
+ * Once you call this, you are responsible for freeing the memory pointed to by task.
+ */
+ std::function<void()>* PopTask();
+ bool HasTasks();
+
+ friend class ThreadTask;
+ };
+
+
+ } // namespace Threading
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ReaderWriterLock.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ReaderWriterLock.h
new file mode 100644
index 00000000000..5d757dcecbf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ReaderWriterLock.h
@@ -0,0 +1,116 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <aws/core/utils/threading/Semaphore.h>
+#include <mutex>
+#include <atomic>
+#include <condition_variable>
+#include <cstdint>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Threading
+ {
+ /**
+ * This lock is optimized for frequent reads and infrequent writes.
+ * However, writers get priority to the lock.
+ */
+ class AWS_CORE_API ReaderWriterLock
+ {
+ public:
+ ReaderWriterLock();
+ /**
+ * Enters the lock in Reader-mode.
+ * This call blocks until no writers are acquiring the lock.
+ */
+ void LockReader();
+
+ /**
+ * Decrements the readers count by one and if the count is zero, signals any waiting writers to acquire
+ * the lock.
+ * NOTE: Calling this function without a matching LockReader results in undefined behavior.
+ */
+ void UnlockReader();
+
+ /**
+ * Enters the lock in Writer-mode.
+ * This call blocks until no readers nor writers are acquiring the lock.
+ */
+ void LockWriter();
+
+ /**
+ * Decrements the number of writers by one and signals any waiting readers or writers to acquire the
+ * lock.
+ * NOTE: Calling this function without a matching LockWriter results in undefined behavior.
+ */
+ void UnlockWriter();
+ private:
+ std::atomic<int64_t> m_readers;
+ std::atomic<int64_t> m_holdouts;
+ Semaphore m_readerSem;
+ Semaphore m_writerSem;
+ std::mutex m_writerLock;
+ };
+
+ class AWS_CORE_API ReaderLockGuard
+ {
+ public:
+ explicit ReaderLockGuard(ReaderWriterLock& rwl) : m_rwlock(rwl), m_upgraded(false)
+ {
+ m_rwlock.LockReader();
+ }
+
+ void UpgradeToWriterLock()
+ {
+ m_rwlock.UnlockReader();
+ m_rwlock.LockWriter();
+ m_upgraded = true;
+ }
+
+ ~ReaderLockGuard()
+ {
+ if(m_upgraded)
+ {
+ m_rwlock.UnlockWriter();
+ }
+ else
+ {
+ m_rwlock.UnlockReader();
+ }
+ }
+ // for VS2013
+ ReaderLockGuard(const ReaderLockGuard&) = delete;
+ ReaderLockGuard& operator=(const ReaderLockGuard&) = delete;
+ private:
+ ReaderWriterLock& m_rwlock;
+ bool m_upgraded;
+ };
+
+ class AWS_CORE_API WriterLockGuard
+ {
+ public:
+ explicit WriterLockGuard(ReaderWriterLock& rwl) : m_rwlock(rwl)
+ {
+ m_rwlock.LockWriter();
+ }
+
+ ~WriterLockGuard()
+ {
+ m_rwlock.UnlockWriter();
+ }
+ // for VS2013
+ WriterLockGuard(const WriterLockGuard&) = delete;
+ WriterLockGuard& operator=(const WriterLockGuard&) = delete;
+ private:
+ ReaderWriterLock& m_rwlock;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Semaphore.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Semaphore.h
new file mode 100644
index 00000000000..bad50532ddc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/Semaphore.h
@@ -0,0 +1,45 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <mutex>
+#include <condition_variable>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Threading
+ {
+ class AWS_CORE_API Semaphore {
+ public:
+ /**
+ * Initializes a new instance of Semaphore class specifying the initial number of entries and
+ * the maximum number of concurrent entries.
+ */
+ Semaphore(size_t initialCount, size_t maxCount);
+ /**
+ * Blocks the current thread until it receives a signal.
+ */
+ void WaitOne();
+ /**
+ * Exits the semaphore once.
+ */
+ void Release();
+ /**
+ * Exit the semaphore up to the maximum number of entries available.
+ */
+ void ReleaseAll();
+ private:
+ size_t m_count;
+ const size_t m_maxCount;
+ std::mutex m_mutex;
+ std::condition_variable m_syncPoint;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ThreadTask.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ThreadTask.h
new file mode 100644
index 00000000000..79326b3a151
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/threading/ThreadTask.h
@@ -0,0 +1,48 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+#include <functional>
+#include <thread>
+#include <atomic>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Threading
+ {
+ class PooledThreadExecutor;
+
+ class AWS_CORE_API ThreadTask
+ {
+ public:
+ ThreadTask(PooledThreadExecutor& executor);
+ ~ThreadTask();
+
+ /**
+ * Rule of 5 stuff.
+ * Don't copy or move
+ */
+ ThreadTask(const ThreadTask&) = delete;
+ ThreadTask& operator =(const ThreadTask&) = delete;
+ ThreadTask(ThreadTask&&) = delete;
+ ThreadTask& operator =(ThreadTask&&) = delete;
+
+ void StopProcessingWork();
+
+ protected:
+ void MainTaskRunner();
+
+ private:
+ std::atomic<bool> m_continue;
+ PooledThreadExecutor& m_executor;
+ std::thread m_thread;
+ };
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/xml/XmlSerializer.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/xml/XmlSerializer.h
new file mode 100644
index 00000000000..d1ca79ffabf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/utils/xml/XmlSerializer.h
@@ -0,0 +1,218 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/Core_EXPORTS.h>
+
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+ namespace External
+ {
+ namespace tinyxml2
+ {
+ class XMLNode;
+
+ class XMLDocument;
+ } // namespace tinyxml2
+ } // namespace External
+} // namespace Aws
+
+namespace Aws
+{
+ template<typename PAYLOAD_TYPE>
+ class AmazonWebServiceResult;
+ namespace Client
+ {
+ enum class CoreErrors;
+ template<typename ERROR_TYPE>
+ class AWSError;
+ class AWSXMLClient;
+ } // namespace Client
+ namespace Utils
+ {
+ namespace Xml
+ {
+ /**
+ * Converts escaped xml text back to the original characters (e.g. < ! > = etc...)
+ */
+ AWS_CORE_API Aws::String DecodeEscapedXmlText(const Aws::String& textToDecode);
+
+ class XmlDocument;
+
+ /**
+ * Node in an Xml Document
+ */
+ class AWS_CORE_API XmlNode
+ {
+ public:
+ /**
+ * copies node and document over.
+ */
+ XmlNode(const XmlNode& other);
+ /**
+ * copies node and document over.
+ */
+ XmlNode& operator=(const XmlNode& other);
+ /**
+ * Get the name of the node.
+ */
+ const Aws::String GetName() const;
+ /**
+ * Set the name of the node.
+ */
+ void SetName(const Aws::String& name);
+ /**
+ * Get Value of an attribute specified by name.
+ */
+ const Aws::String GetAttributeValue(const Aws::String& name) const;
+ /**
+ * Set an attribute at name to value
+ */
+ void SetAttributeValue(const Aws::String& name, const Aws::String& value);
+ /**
+ * Get the inner text of the node (potentially includes other nodes)
+ */
+ Aws::String GetText() const;
+ /**
+ * Set the inner text of the node
+ */
+ void SetText(const Aws::String& textValue);
+ /**
+ * returns true if this node has another sibling.
+ */
+ bool HasNextNode() const;
+ /**
+ * returns the next sibling.
+ */
+ XmlNode NextNode() const;
+ /**
+ * returns the next sibling that matches node name.
+ */
+ XmlNode NextNode(const char* name) const;
+ /**
+ * returns the next sibling that matches node name.
+ */
+ XmlNode NextNode(const Aws::String& name) const;
+ /**
+ * return the first child node of this node.
+ */
+ XmlNode FirstChild() const;
+ /**
+ * returns the first child node of this node that has name.
+ */
+ XmlNode FirstChild(const char* name) const;
+ /**
+ * returns the first child node of this node that has name.
+ */
+ XmlNode FirstChild(const Aws::String& name) const;
+ /**
+ * returns true if this node has child nodes.
+ */
+ bool HasChildren() const;
+ /**
+ * returns the parent of this node.
+ */
+ XmlNode Parent() const;
+ /**
+ * Creates a new child element to this with name
+ */
+ XmlNode CreateChildElement(const Aws::String& name);
+ /**
+ * Creates a new child element to this with name
+ */
+ XmlNode CreateSiblingElement(const Aws::String& name);
+ /**
+ * If current node is valid.
+ */
+ bool IsNull();
+
+ private:
+ XmlNode(Aws::External::tinyxml2::XMLNode* node, const XmlDocument& document) :
+ m_node(node), m_doc(&document)
+ {
+ }
+
+ //we do not own these.... I just had to change it from ref because the compiler was
+ //confused about which assignment operator to call. Do not... I repeat... do not delete
+ //these pointers in your destructor.
+ Aws::External::tinyxml2::XMLNode* m_node;
+ const XmlDocument* m_doc;
+
+ friend class XmlDocument;
+ };
+
+ /**
+ * Container for Xml Document as a whole. All nodes have a reference to their parent document. Any changes
+ * you make to the nodes will be reflected here.
+ */
+ class AWS_CORE_API XmlDocument
+ {
+ public:
+ /**
+ * move document memory
+ */
+ XmlDocument(const XmlDocument& other);
+ XmlDocument(XmlDocument&& doc);
+
+ XmlDocument& operator=(const XmlDocument& other);
+ XmlDocument& operator=(XmlDocument&& other);
+
+ ~XmlDocument();
+
+ /**
+ * Get root element of the document
+ */
+ XmlNode GetRootElement() const;
+ /**
+ * Convert entire document to string. Use this if you for example, want to save the document to a file.
+ */
+ Aws::String ConvertToString() const;
+ /**
+ * Returns true if the call to CreateFromXml* was successful, otherwise false.
+ * if this returns false, you can call GetErrorMessage() to see details.
+ */
+ bool WasParseSuccessful() const;
+ /**
+ * Returns the error message if the call to CreateFromXml* failed.
+ */
+ Aws::String GetErrorMessage() const;
+ /**
+ * Parses the stream into an XMLDocument
+ */
+ static XmlDocument CreateFromXmlStream(Aws::IOStream&);
+ /**
+ * Parses the string into an XMLDocument
+ */
+ static XmlDocument CreateFromXmlString(const Aws::String&);
+ /**
+ * Creates an empty document with root node name
+ */
+ static XmlDocument CreateWithRootNode(const Aws::String&);
+
+ private:
+ XmlDocument();
+ void InitDoc();
+
+ Aws::External::tinyxml2::XMLDocument* m_doc;
+
+ friend class XmlNode;
+
+ //allow outcome call the default constructor to handle it's error case.
+ friend class Aws::Utils::Outcome<Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>, Aws::Client::AWSError<Aws::Client::CoreErrors>>;
+ friend class Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>;
+ template<typename T>
+ friend class Client::AWSError;
+ friend class Client::AWSXMLClient;
+ };
+
+ } // namespace Xml
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonSerializableWebServiceRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonSerializableWebServiceRequest.cpp
new file mode 100644
index 00000000000..0c401b01b20
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonSerializableWebServiceRequest.cpp
@@ -0,0 +1,24 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/AmazonSerializableWebServiceRequest.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+using namespace Aws;
+
+std::shared_ptr<Aws::IOStream> AmazonSerializableWebServiceRequest::GetBody() const
+{
+ Aws::String&& payload = SerializePayload();
+ std::shared_ptr<Aws::IOStream> payloadBody;
+
+ if (!payload.empty())
+ {
+ payloadBody = Aws::MakeShared<Aws::StringStream>("AmazonSerializableWebServiceRequest");
+ *payloadBody << payload;
+ }
+
+ return payloadBody;
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonStreamingWebServiceRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonStreamingWebServiceRequest.cpp
new file mode 100644
index 00000000000..92e61c7ad41
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonStreamingWebServiceRequest.cpp
@@ -0,0 +1,12 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/AmazonStreamingWebServiceRequest.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+using namespace Aws;
+
+AmazonStreamingWebServiceRequest::~AmazonStreamingWebServiceRequest() {}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonWebServiceRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonWebServiceRequest.cpp
new file mode 100644
index 00000000000..a6b0406683c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/AmazonWebServiceRequest.cpp
@@ -0,0 +1,20 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/AmazonWebServiceRequest.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+using namespace Aws;
+
+AmazonWebServiceRequest::AmazonWebServiceRequest() :
+ m_responseStreamFactory(Aws::Utils::Stream::DefaultResponseStreamFactoryMethod),
+ m_onDataReceived(nullptr),
+ m_onDataSent(nullptr),
+ m_continueRequest(nullptr),
+ m_onRequestSigned(nullptr),
+ m_requestRetryHandler(nullptr)
+{
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Aws.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Aws.cpp
new file mode 100644
index 00000000000..1eaa477fca6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Aws.cpp
@@ -0,0 +1,134 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/Version.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/Aws.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/utils/logging/AWSLogging.h>
+#include <aws/core/utils/logging/DefaultLogSystem.h>
+#include <aws/core/Globals.h>
+#include <aws/core/external/cjson/cJSON.h>
+#include <aws/core/monitoring/MonitoringManager.h>
+#include <aws/core/net/Net.h>
+#include <aws/core/config/AWSProfileConfigLoader.h>
+#include <aws/core/internal/AWSHttpResourceClient.h>
+
+namespace Aws
+{
+ static const char* ALLOCATION_TAG = "Aws_Init_Cleanup";
+
+ void InitAPI(const SDKOptions &options)
+ {
+#ifdef USE_AWS_MEMORY_MANAGEMENT
+ if(options.memoryManagementOptions.memoryManager)
+ {
+ Aws::Utils::Memory::InitializeAWSMemorySystem(*options.memoryManagementOptions.memoryManager);
+ }
+#endif // USE_AWS_MEMORY_MANAGEMENT
+ Aws::Client::CoreErrorsMapper::InitCoreErrorsMapper();
+ if(options.loggingOptions.logLevel != Aws::Utils::Logging::LogLevel::Off)
+ {
+ if(options.loggingOptions.logger_create_fn)
+ {
+ Aws::Utils::Logging::InitializeAWSLogging(options.loggingOptions.logger_create_fn());
+ }
+ else
+ {
+ Aws::Utils::Logging::InitializeAWSLogging(
+ Aws::MakeShared<Aws::Utils::Logging::DefaultLogSystem>(ALLOCATION_TAG, options.loggingOptions.logLevel, options.loggingOptions.defaultLogPrefix));
+ }
+ // For users to better debugging in case multiple versions of SDK installed
+ AWS_LOGSTREAM_INFO(ALLOCATION_TAG, "Initiate AWS SDK for C++ with Version:" << Aws::String(Aws::Version::GetVersionString()));
+ }
+
+ Aws::Config::InitConfigAndCredentialsCacheManager();
+
+ if (options.cryptoOptions.aes_CBCFactory_create_fn)
+ {
+ Aws::Utils::Crypto::SetAES_CBCFactory(options.cryptoOptions.aes_CBCFactory_create_fn());
+ }
+
+ if(options.cryptoOptions.aes_CTRFactory_create_fn)
+ {
+ Aws::Utils::Crypto::SetAES_CTRFactory(options.cryptoOptions.aes_CTRFactory_create_fn());
+ }
+
+ if(options.cryptoOptions.aes_GCMFactory_create_fn)
+ {
+ Aws::Utils::Crypto::SetAES_GCMFactory(options.cryptoOptions.aes_GCMFactory_create_fn());
+ }
+
+ if(options.cryptoOptions.md5Factory_create_fn)
+ {
+ Aws::Utils::Crypto::SetMD5Factory(options.cryptoOptions.md5Factory_create_fn());
+ }
+
+ if(options.cryptoOptions.sha256Factory_create_fn)
+ {
+ Aws::Utils::Crypto::SetSha256Factory(options.cryptoOptions.sha256Factory_create_fn());
+ }
+
+ if(options.cryptoOptions.sha256HMACFactory_create_fn)
+ {
+ Aws::Utils::Crypto::SetSha256HMACFactory(options.cryptoOptions.sha256HMACFactory_create_fn());
+ }
+
+ if (options.cryptoOptions.aes_KeyWrapFactory_create_fn)
+ {
+ Aws::Utils::Crypto::SetAES_KeyWrapFactory(options.cryptoOptions.aes_KeyWrapFactory_create_fn());
+ }
+
+ if(options.cryptoOptions.secureRandomFactory_create_fn)
+ {
+ Aws::Utils::Crypto::SetSecureRandomFactory(options.cryptoOptions.secureRandomFactory_create_fn());
+ }
+
+ Aws::Utils::Crypto::SetInitCleanupOpenSSLFlag(options.cryptoOptions.initAndCleanupOpenSSL);
+ Aws::Utils::Crypto::InitCrypto();
+
+ if(options.httpOptions.httpClientFactory_create_fn)
+ {
+ Aws::Http::SetHttpClientFactory(options.httpOptions.httpClientFactory_create_fn());
+ }
+
+ Aws::Http::SetInitCleanupCurlFlag(options.httpOptions.initAndCleanupCurl);
+ Aws::Http::SetInstallSigPipeHandlerFlag(options.httpOptions.installSigPipeHandler);
+ Aws::Http::InitHttp();
+ Aws::InitializeEnumOverflowContainer();
+ cJSON_Hooks hooks;
+ hooks.malloc_fn = [](size_t sz) { return Aws::Malloc("cJSON_Tag", sz); };
+ hooks.free_fn = Aws::Free;
+ cJSON_InitHooks(&hooks);
+ Aws::Net::InitNetwork();
+ Aws::Internal::InitEC2MetadataClient();
+ Aws::Monitoring::InitMonitoring(options.monitoringOptions.customizedMonitoringFactory_create_fn);
+ }
+
+ void ShutdownAPI(const SDKOptions& options)
+ {
+ Aws::Monitoring::CleanupMonitoring();
+ Aws::Internal::CleanupEC2MetadataClient();
+ Aws::Net::CleanupNetwork();
+ Aws::CleanupEnumOverflowContainer();
+ Aws::Http::CleanupHttp();
+ Aws::Utils::Crypto::CleanupCrypto();
+
+ Aws::Config::CleanupConfigAndCredentialsCacheManager();
+
+ if(options.loggingOptions.logLevel != Aws::Utils::Logging::LogLevel::Off)
+ {
+ Aws::Utils::Logging::ShutdownAWSLogging();
+ }
+
+ Aws::Client::CoreErrorsMapper::CleanupCoreErrorsMapper();
+
+#ifdef USE_AWS_MEMORY_MANAGEMENT
+ if(options.memoryManagementOptions.memoryManager)
+ {
+ Aws::Utils::Memory::ShutdownAWSMemorySystem();
+ }
+#endif // USE_AWS_MEMORY_MANAGEMENT
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Globals.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Globals.cpp
new file mode 100644
index 00000000000..55f2ee92203
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Globals.cpp
@@ -0,0 +1,28 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+
+namespace Aws
+{
+ static const char TAG[] = "GlobalEnumOverflowContainer";
+ static Utils::EnumParseOverflowContainer* g_enumOverflow;
+
+ Utils::EnumParseOverflowContainer* GetEnumOverflowContainer()
+ {
+ return g_enumOverflow;
+ }
+
+ void InitializeEnumOverflowContainer()
+ {
+ g_enumOverflow = Aws::New<Aws::Utils::EnumParseOverflowContainer>(TAG);
+ }
+
+ void CleanupEnumOverflowContainer()
+ {
+ Aws::Delete(g_enumOverflow);
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Region.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Region.cpp
new file mode 100644
index 00000000000..4b18bf2a2af
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Region.cpp
@@ -0,0 +1,36 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/Region.h>
+namespace Aws
+{
+ namespace Region
+ {
+ Aws::String ComputeSignerRegion(const Aws::String& region)
+ {
+ if (region == Aws::Region::AWS_GLOBAL)
+ {
+ return Aws::Region::US_EAST_1;
+ }
+ else if (region == "s3-external-1")
+ {
+ return Aws::Region::US_EAST_1;
+ }
+ else if (region.size() >= 5 && region.compare(0, 5, "fips-") == 0)
+ {
+ return region.substr(5);
+ }
+ else if (region.size() >= 5 && region.compare(region.size() - 5, 5, "-fips") == 0)
+ {
+ return region.substr(0, region.size() - 5);
+ }
+ else
+ {
+ return region;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Version.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Version.cpp
new file mode 100644
index 00000000000..35291906b77
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/Version.cpp
@@ -0,0 +1,53 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/Version.h>
+#include <aws/core/VersionConfig.h>
+
+namespace Aws
+{
+namespace Version
+{
+ const char* GetVersionString()
+ {
+ return AWS_SDK_VERSION_STRING;
+ }
+
+ unsigned GetVersionMajor()
+ {
+ return AWS_SDK_VERSION_MAJOR;
+ }
+
+ unsigned GetVersionMinor()
+ {
+ return AWS_SDK_VERSION_MINOR;
+ }
+
+ unsigned GetVersionPatch()
+ {
+ return AWS_SDK_VERSION_PATCH;
+ }
+
+
+ const char* GetCompilerVersionString()
+ {
+#define xstr(s) str(s)
+#define str(s) #s
+#if defined(_MSC_VER)
+ return "MSVC/" xstr(_MSC_VER);
+#elif defined(__clang__)
+ return "Clang/" xstr(__clang_major__) "." xstr(__clang_minor__) "." xstr(__clang_patchlevel__);
+#elif defined(__GNUC__)
+ return "GCC/" xstr(__GNUC__) "." xstr(__GNUC_MINOR__) "." xstr(__GNUC_PATCHLEVEL__);
+#else
+ return "UnknownCompiler";
+#endif
+#undef str
+#undef xstr
+ }
+} //namespace Version
+} //namespace Aws
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSigner.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSigner.cpp
new file mode 100644
index 00000000000..de4826fa5b9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSigner.cpp
@@ -0,0 +1,806 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/auth/AWSAuthSigner.h>
+
+#include <aws/core/auth/AWSCredentialsProvider.h>
+#include <aws/core/client/ClientConfiguration.h>
+#include <aws/core/http/HttpRequest.h>
+#include <aws/core/http/HttpResponse.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/crypto/Sha256.h>
+#include <aws/core/utils/crypto/Sha256HMAC.h>
+#include <aws/core/utils/stream/PreallocatedStreamBuf.h>
+#include <aws/core/utils/event/EventMessage.h>
+#include <aws/core/utils/event/EventHeader.h>
+
+#include <cstdio>
+#include <iomanip>
+#include <math.h>
+#include <cstring>
+
+using namespace Aws;
+using namespace Aws::Client;
+using namespace Aws::Auth;
+using namespace Aws::Http;
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+
+static const char* EQ = "=";
+static const char* AWS_HMAC_SHA256 = "AWS4-HMAC-SHA256";
+static const char* EVENT_STREAM_CONTENT_SHA256 = "STREAMING-AWS4-HMAC-SHA256-EVENTS";
+static const char* EVENT_STREAM_PAYLOAD = "AWS4-HMAC-SHA256-PAYLOAD";
+static const char* AWS4_REQUEST = "aws4_request";
+static const char* SIGNED_HEADERS = "SignedHeaders";
+static const char* CREDENTIAL = "Credential";
+static const char* NEWLINE = "\n";
+static const char* X_AMZ_SIGNED_HEADERS = "X-Amz-SignedHeaders";
+static const char* X_AMZ_ALGORITHM = "X-Amz-Algorithm";
+static const char* X_AMZ_CREDENTIAL = "X-Amz-Credential";
+static const char* UNSIGNED_PAYLOAD = "UNSIGNED-PAYLOAD";
+static const char* X_AMZ_SIGNATURE = "X-Amz-Signature";
+static const char* X_AMZN_TRACE_ID = "x-amzn-trace-id";
+static const char* X_AMZ_CONTENT_SHA256 = "x-amz-content-sha256";
+static const char* USER_AGENT = "user-agent";
+static const char* SIGNING_KEY = "AWS4";
+static const char* SIMPLE_DATE_FORMAT_STR = "%Y%m%d";
+static const char* EMPTY_STRING_SHA256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
+
+static const char v4LogTag[] = "AWSAuthV4Signer";
+static const char v4StreamingLogTag[] = "AWSAuthEventStreamV4Signer";
+
+namespace Aws
+{
+ namespace Auth
+ {
+ const char SIGNATURE[] = "Signature";
+ const char SIGV4_SIGNER[] = "SignatureV4";
+ const char EVENTSTREAM_SIGV4_SIGNER[] = "EventStreamSignatureV4";
+ const char EVENTSTREAM_SIGNATURE_HEADER[] = ":chunk-signature";
+ const char EVENTSTREAM_DATE_HEADER[] = ":date";
+ const char NULL_SIGNER[] = "NullSigner";
+ }
+}
+
+static Aws::String CanonicalizeRequestSigningString(HttpRequest& request, bool urlEscapePath)
+{
+ request.CanonicalizeRequest();
+ Aws::StringStream signingStringStream;
+ signingStringStream << HttpMethodMapper::GetNameForHttpMethod(request.GetMethod());
+
+ URI uriCpy = request.GetUri();
+ // Many AWS services do not decode the URL before calculating SignatureV4 on their end.
+ // This results in the signature getting calculated with a double encoded URL.
+ // That means we have to double encode it here for the signature to match on the service side.
+ if(urlEscapePath)
+ {
+ // RFC3986 is how we encode the URL before sending it on the wire.
+ auto rfc3986EncodedPath = URI::URLEncodePathRFC3986(uriCpy.GetPath());
+ uriCpy.SetPath(rfc3986EncodedPath);
+ // However, SignatureV4 uses this URL encoding scheme
+ signingStringStream << NEWLINE << uriCpy.GetURLEncodedPath() << NEWLINE;
+ }
+ else
+ {
+ // For the services that DO decode the URL first; we don't need to double encode it.
+ uriCpy.SetPath(uriCpy.GetURLEncodedPath());
+ signingStringStream << NEWLINE << uriCpy.GetPath() << NEWLINE;
+ }
+
+ if (request.GetQueryString().find('=') != std::string::npos)
+ {
+ signingStringStream << request.GetQueryString().substr(1) << NEWLINE;
+ }
+ else if (request.GetQueryString().size() > 1)
+ {
+ signingStringStream << request.GetQueryString().substr(1) << "=" << NEWLINE;
+ }
+ else
+ {
+ signingStringStream << NEWLINE;
+ }
+
+ return signingStringStream.str();
+}
+
+static Http::HeaderValueCollection CanonicalizeHeaders(Http::HeaderValueCollection&& headers)
+{
+ Http::HeaderValueCollection canonicalHeaders;
+ for (const auto& header : headers)
+ {
+ auto trimmedHeaderName = StringUtils::Trim(header.first.c_str());
+ auto trimmedHeaderValue = StringUtils::Trim(header.second.c_str());
+
+ //multiline gets converted to line1,line2,etc...
+ auto headerMultiLine = StringUtils::SplitOnLine(trimmedHeaderValue);
+ Aws::String headerValue = headerMultiLine.size() == 0 ? "" : headerMultiLine[0];
+
+ if (headerMultiLine.size() > 1)
+ {
+ for(size_t i = 1; i < headerMultiLine.size(); ++i)
+ {
+ headerValue += ",";
+ headerValue += StringUtils::Trim(headerMultiLine[i].c_str());
+ }
+ }
+
+ //duplicate spaces need to be converted to one.
+ Aws::String::iterator new_end =
+ std::unique(headerValue.begin(), headerValue.end(),
+ [=](char lhs, char rhs) { return (lhs == rhs) && (lhs == ' '); }
+ );
+ headerValue.erase(new_end, headerValue.end());
+
+ canonicalHeaders[trimmedHeaderName] = headerValue;
+ }
+
+ return canonicalHeaders;
+}
+
+AWSAuthV4Signer::AWSAuthV4Signer(const std::shared_ptr<Auth::AWSCredentialsProvider>& credentialsProvider,
+ const char* serviceName, const Aws::String& region, PayloadSigningPolicy signingPolicy, bool urlEscapePath) :
+ m_includeSha256HashHeader(true),
+ m_credentialsProvider(credentialsProvider),
+ m_serviceName(serviceName),
+ m_region(region),
+ m_hash(Aws::MakeUnique<Aws::Utils::Crypto::Sha256>(v4LogTag)),
+ m_HMAC(Aws::MakeUnique<Aws::Utils::Crypto::Sha256HMAC>(v4LogTag)),
+ m_unsignedHeaders({USER_AGENT, X_AMZN_TRACE_ID}),
+ m_payloadSigningPolicy(signingPolicy),
+ m_urlEscapePath(urlEscapePath)
+{
+ //go ahead and warm up the signing cache.
+ ComputeHash(credentialsProvider->GetAWSCredentials().GetAWSSecretKey(), DateTime::CalculateGmtTimestampAsString(SIMPLE_DATE_FORMAT_STR), region, m_serviceName);
+}
+
+AWSAuthV4Signer::~AWSAuthV4Signer()
+{
+ // empty destructor in .cpp file to keep from needing the implementation of (AWSCredentialsProvider, Sha256, Sha256HMAC) in the header file
+}
+
+
+bool AWSAuthV4Signer::ShouldSignHeader(const Aws::String& header) const
+{
+ return m_unsignedHeaders.find(Aws::Utils::StringUtils::ToLower(header.c_str())) == m_unsignedHeaders.cend();
+}
+
+bool AWSAuthV4Signer::SignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, bool signBody) const
+{
+ AWSCredentials credentials = m_credentialsProvider->GetAWSCredentials();
+
+ //don't sign anonymous requests
+ if (credentials.GetAWSAccessKeyId().empty() || credentials.GetAWSSecretKey().empty())
+ {
+ return true;
+ }
+
+ if (!credentials.GetSessionToken().empty())
+ {
+ request.SetAwsSessionToken(credentials.GetSessionToken());
+ }
+
+ Aws::String payloadHash(UNSIGNED_PAYLOAD);
+ switch(m_payloadSigningPolicy)
+ {
+ case PayloadSigningPolicy::Always:
+ signBody = true;
+ break;
+ case PayloadSigningPolicy::Never:
+ signBody = false;
+ break;
+ case PayloadSigningPolicy::RequestDependent:
+ // respect the request setting
+ default:
+ break;
+ }
+
+ if(signBody || request.GetUri().GetScheme() != Http::Scheme::HTTPS)
+ {
+ payloadHash = ComputePayloadHash(request);
+ if (payloadHash.empty())
+ {
+ return false;
+ }
+ }
+ else
+ {
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Note: Http payloads are not being signed. signPayloads=" << signBody
+ << " http scheme=" << Http::SchemeMapper::ToString(request.GetUri().GetScheme()));
+ }
+
+ if(m_includeSha256HashHeader)
+ {
+ request.SetHeaderValue(X_AMZ_CONTENT_SHA256, payloadHash);
+ }
+
+ //calculate date header to use in internal signature (this also goes into date header).
+ DateTime now = GetSigningTimestamp();
+ Aws::String dateHeaderValue = now.ToGmtString(DateFormat::ISO_8601_BASIC);
+ request.SetHeaderValue(AWS_DATE_HEADER, dateHeaderValue);
+
+ Aws::StringStream headersStream;
+ Aws::StringStream signedHeadersStream;
+
+ for (const auto& header : CanonicalizeHeaders(request.GetHeaders()))
+ {
+ if(ShouldSignHeader(header.first))
+ {
+ headersStream << header.first.c_str() << ":" << header.second.c_str() << NEWLINE;
+ signedHeadersStream << header.first.c_str() << ";";
+ }
+ }
+
+ Aws::String canonicalHeadersString = headersStream.str();
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Canonical Header String: " << canonicalHeadersString);
+
+ //calculate signed headers parameter
+ Aws::String signedHeadersValue = signedHeadersStream.str();
+ //remove that last semi-colon
+ if (!signedHeadersValue.empty())
+ {
+ signedHeadersValue.pop_back();
+ }
+
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Signed Headers value:" << signedHeadersValue);
+
+ //generate generalized canonicalized request string.
+ Aws::String canonicalRequestString = CanonicalizeRequestSigningString(request, m_urlEscapePath);
+
+ //append v4 stuff to the canonical request string.
+ canonicalRequestString.append(canonicalHeadersString);
+ canonicalRequestString.append(NEWLINE);
+ canonicalRequestString.append(signedHeadersValue);
+ canonicalRequestString.append(NEWLINE);
+ canonicalRequestString.append(payloadHash);
+
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Canonical Request String: " << canonicalRequestString);
+
+ //now compute sha256 on that request string
+ auto hashResult = m_hash->Calculate(canonicalRequestString);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Failed to hash (sha256) request string");
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "The request string is: \"" << canonicalRequestString << "\"");
+ return false;
+ }
+
+ auto sha256Digest = hashResult.GetResult();
+ Aws::String canonicalRequestHash = HashingUtils::HexEncode(sha256Digest);
+ Aws::String simpleDate = now.ToGmtString(SIMPLE_DATE_FORMAT_STR);
+
+ Aws::String signingRegion = region ? region : m_region;
+ Aws::String signingServiceName = serviceName ? serviceName : m_serviceName;
+ Aws::String stringToSign = GenerateStringToSign(dateHeaderValue, simpleDate, canonicalRequestHash, signingRegion, signingServiceName);
+ auto finalSignature = GenerateSignature(credentials, stringToSign, simpleDate, signingRegion, signingServiceName);
+
+ Aws::StringStream ss;
+ ss << AWS_HMAC_SHA256 << " " << CREDENTIAL << EQ << credentials.GetAWSAccessKeyId() << "/" << simpleDate
+ << "/" << signingRegion << "/" << signingServiceName << "/" << AWS4_REQUEST << ", " << SIGNED_HEADERS << EQ
+ << signedHeadersValue << ", " << SIGNATURE << EQ << finalSignature;
+
+ auto awsAuthString = ss.str();
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Signing request with: " << awsAuthString);
+ request.SetAwsAuthorization(awsAuthString);
+ request.SetSigningAccessKey(credentials.GetAWSAccessKeyId());
+ request.SetSigningRegion(signingRegion);
+ return true;
+}
+
+bool AWSAuthV4Signer::PresignRequest(Aws::Http::HttpRequest& request, long long expirationTimeInSeconds) const
+{
+ return PresignRequest(request, m_region.c_str(), expirationTimeInSeconds);
+}
+
+bool AWSAuthV4Signer::PresignRequest(Aws::Http::HttpRequest& request, const char* region, long long expirationInSeconds) const
+{
+ return PresignRequest(request, region, m_serviceName.c_str(), expirationInSeconds);
+}
+
+bool AWSAuthV4Signer::PresignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, long long expirationTimeInSeconds) const
+{
+ AWSCredentials credentials = m_credentialsProvider->GetAWSCredentials();
+
+ //don't sign anonymous requests
+ if (credentials.GetAWSAccessKeyId().empty() || credentials.GetAWSSecretKey().empty())
+ {
+ return true;
+ }
+
+ Aws::StringStream intConversionStream;
+ intConversionStream << expirationTimeInSeconds;
+ request.AddQueryStringParameter(Http::X_AMZ_EXPIRES_HEADER, intConversionStream.str());
+
+ if (!credentials.GetSessionToken().empty())
+ {
+ request.AddQueryStringParameter(Http::AWS_SECURITY_TOKEN, credentials.GetSessionToken());
+ }
+
+ //calculate date header to use in internal signature (this also goes into date header).
+ DateTime now = GetSigningTimestamp();
+ Aws::String dateQueryValue = now.ToGmtString(DateFormat::ISO_8601_BASIC);
+ request.AddQueryStringParameter(Http::AWS_DATE_HEADER, dateQueryValue);
+
+ Aws::StringStream headersStream;
+ Aws::StringStream signedHeadersStream;
+ for (const auto& header : CanonicalizeHeaders(request.GetHeaders()))
+ {
+ if(ShouldSignHeader(header.first))
+ {
+ headersStream << header.first.c_str() << ":" << header.second.c_str() << NEWLINE;
+ signedHeadersStream << header.first.c_str() << ";";
+ }
+ }
+
+ Aws::String canonicalHeadersString = headersStream.str();
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Canonical Header String: " << canonicalHeadersString);
+
+ //calculate signed headers parameter
+ Aws::String signedHeadersValue(signedHeadersStream.str());
+ //remove that last semi-colon
+ if (!signedHeadersValue.empty())
+ {
+ signedHeadersValue.pop_back();
+ }
+
+ request.AddQueryStringParameter(X_AMZ_SIGNED_HEADERS, signedHeadersValue);
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Signed Headers value: " << signedHeadersValue);
+
+ Aws::StringStream ss;
+ Aws::String signingRegion = region ? region : m_region;
+ Aws::String signingServiceName = serviceName ? serviceName : m_serviceName;
+ Aws::String simpleDate = now.ToGmtString(SIMPLE_DATE_FORMAT_STR);
+ ss << credentials.GetAWSAccessKeyId() << "/" << simpleDate
+ << "/" << signingRegion << "/" << signingServiceName << "/" << AWS4_REQUEST;
+
+ request.AddQueryStringParameter(X_AMZ_ALGORITHM, AWS_HMAC_SHA256);
+ request.AddQueryStringParameter(X_AMZ_CREDENTIAL, ss.str());
+ ss.str("");
+
+ request.SetSigningAccessKey(credentials.GetAWSAccessKeyId());
+ request.SetSigningRegion(signingRegion);
+
+ //generate generalized canonicalized request string.
+ Aws::String canonicalRequestString = CanonicalizeRequestSigningString(request, m_urlEscapePath);
+
+ //append v4 stuff to the canonical request string.
+ canonicalRequestString.append(canonicalHeadersString);
+ canonicalRequestString.append(NEWLINE);
+ canonicalRequestString.append(signedHeadersValue);
+ canonicalRequestString.append(NEWLINE);
+ if (ServiceRequireUnsignedPayload(signingServiceName))
+ {
+ canonicalRequestString.append(UNSIGNED_PAYLOAD);
+ }
+ else
+ {
+ canonicalRequestString.append(EMPTY_STRING_SHA256);
+ }
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Canonical Request String: " << canonicalRequestString);
+
+ //now compute sha256 on that request string
+ auto hashResult = m_hash->Calculate(canonicalRequestString);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Failed to hash (sha256) request string");
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "The request string is: \"" << canonicalRequestString << "\"");
+ return false;
+ }
+
+ auto sha256Digest = hashResult.GetResult();
+ auto canonicalRequestHash = HashingUtils::HexEncode(sha256Digest);
+
+ auto stringToSign = GenerateStringToSign(dateQueryValue, simpleDate, canonicalRequestHash, signingRegion, signingServiceName);
+ auto finalSigningHash = GenerateSignature(credentials, stringToSign, simpleDate, signingRegion, signingServiceName);
+ if (finalSigningHash.empty())
+ {
+ return false;
+ }
+
+ //add that the signature to the query string
+ request.AddQueryStringParameter(X_AMZ_SIGNATURE, finalSigningHash);
+
+ return true;
+}
+
+bool AWSAuthV4Signer::ServiceRequireUnsignedPayload(const Aws::String& serviceName) const
+{
+ // S3 uses a magic string (instead of the empty string) for its body hash for presigned URLs as outlined here:
+ // https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
+ // this is true for PUT, POST, GET, DELETE and HEAD operations.
+ // However, other services (for example RDS) implement the specification as outlined here:
+ // https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
+ // which states that body-less requests should use the empty-string SHA256 hash.
+ return "s3" == serviceName;
+}
+
+Aws::String AWSAuthV4Signer::GenerateSignature(const AWSCredentials& credentials, const Aws::String& stringToSign,
+ const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const
+{
+ auto key = ComputeHash(credentials.GetAWSSecretKey(), simpleDate, region, serviceName);
+ return GenerateSignature(stringToSign, key);
+}
+
+Aws::String AWSAuthV4Signer::GenerateSignature(const Aws::String& stringToSign, const ByteBuffer& key) const
+{
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Final String to sign: " << stringToSign);
+
+ Aws::StringStream ss;
+
+ auto hashResult = m_HMAC->Calculate(ByteBuffer((unsigned char*)stringToSign.c_str(), stringToSign.length()), key);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Unable to hmac (sha256) final string");
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "The final string is: \"" << stringToSign << "\"");
+ return {};
+ }
+
+ //now we finally sign our request string with our hex encoded derived hash.
+ auto finalSigningDigest = hashResult.GetResult();
+
+ auto finalSigningHash = HashingUtils::HexEncode(finalSigningDigest);
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Final computed signing hash: " << finalSigningHash);
+
+ return finalSigningHash;
+}
+
+Aws::String AWSAuthV4Signer::ComputePayloadHash(Aws::Http::HttpRequest& request) const
+{
+ if (!request.GetContentBody())
+ {
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Using cached empty string sha256 " << EMPTY_STRING_SHA256 << " because payload is empty.");
+ return EMPTY_STRING_SHA256;
+ }
+
+ //compute hash on payload if it exists.
+ auto hashResult = m_hash->Calculate(*request.GetContentBody());
+
+ if(request.GetContentBody())
+ {
+ request.GetContentBody()->clear();
+ request.GetContentBody()->seekg(0);
+ }
+
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Unable to hash (sha256) request body");
+ return {};
+ }
+
+ auto sha256Digest = hashResult.GetResult();
+
+ Aws::String payloadHash(HashingUtils::HexEncode(sha256Digest));
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "Calculated sha256 " << payloadHash << " for payload.");
+ return payloadHash;
+}
+
+Aws::String AWSAuthV4Signer::GenerateStringToSign(const Aws::String& dateValue, const Aws::String& simpleDate,
+ const Aws::String& canonicalRequestHash, const Aws::String& region, const Aws::String& serviceName) const
+{
+ //generate the actual string we will use in signing the final request.
+ Aws::StringStream ss;
+
+ ss << AWS_HMAC_SHA256 << NEWLINE << dateValue << NEWLINE << simpleDate << "/" << region << "/"
+ << serviceName << "/" << AWS4_REQUEST << NEWLINE << canonicalRequestHash;
+
+ return ss.str();
+}
+
+Aws::Utils::ByteBuffer AWSAuthV4Signer::ComputeHash(const Aws::String& secretKey,
+ const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const
+{
+ Aws::String signingKey(SIGNING_KEY);
+ signingKey.append(secretKey);
+ auto hashResult = m_HMAC->Calculate(ByteBuffer((unsigned char*)simpleDate.c_str(), simpleDate.length()),
+ ByteBuffer((unsigned char*)signingKey.c_str(), signingKey.length()));
+
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Failed to HMAC (SHA256) date string \"" << simpleDate << "\"");
+ return {};
+ }
+
+ auto kDate = hashResult.GetResult();
+ hashResult = m_HMAC->Calculate(ByteBuffer((unsigned char*)region.c_str(), region.length()), kDate);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Failed to HMAC (SHA256) region string \"" << region << "\"");
+ return {};
+ }
+
+ auto kRegion = hashResult.GetResult();
+ hashResult = m_HMAC->Calculate(ByteBuffer((unsigned char*)serviceName.c_str(), serviceName.length()), kRegion);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Failed to HMAC (SHA256) service string \"" << m_serviceName << "\"");
+ return {};
+ }
+
+ auto kService = hashResult.GetResult();
+ hashResult = m_HMAC->Calculate(ByteBuffer((unsigned char*)AWS4_REQUEST, strlen(AWS4_REQUEST)), kService);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4LogTag, "Unable to HMAC (SHA256) request string");
+ AWS_LOGSTREAM_DEBUG(v4LogTag, "The request string is: \"" << AWS4_REQUEST << "\"");
+ return {};
+ }
+ return hashResult.GetResult();
+}
+
+AWSAuthEventStreamV4Signer::AWSAuthEventStreamV4Signer(const std::shared_ptr<Auth::AWSCredentialsProvider>&
+ credentialsProvider, const char* serviceName, const Aws::String& region) :
+ m_serviceName(serviceName),
+ m_region(region),
+ m_credentialsProvider(credentialsProvider)
+{
+
+ m_unsignedHeaders.emplace_back(X_AMZN_TRACE_ID);
+ m_unsignedHeaders.emplace_back(USER_AGENT_HEADER);
+}
+
+bool AWSAuthEventStreamV4Signer::SignRequest(Aws::Http::HttpRequest& request, const char* region, const char* serviceName, bool /* signBody */) const
+{
+ AWSCredentials credentials = m_credentialsProvider->GetAWSCredentials();
+
+ //don't sign anonymous requests
+ if (credentials.GetAWSAccessKeyId().empty() || credentials.GetAWSSecretKey().empty())
+ {
+ return true;
+ }
+
+ if (!credentials.GetSessionToken().empty())
+ {
+ request.SetAwsSessionToken(credentials.GetSessionToken());
+ }
+
+ request.SetHeaderValue(X_AMZ_CONTENT_SHA256, EVENT_STREAM_CONTENT_SHA256);
+
+ //calculate date header to use in internal signature (this also goes into date header).
+ DateTime now = GetSigningTimestamp();
+ Aws::String dateHeaderValue = now.ToGmtString(DateFormat::ISO_8601_BASIC);
+ request.SetHeaderValue(AWS_DATE_HEADER, dateHeaderValue);
+
+ Aws::StringStream headersStream;
+ Aws::StringStream signedHeadersStream;
+
+ for (const auto& header : CanonicalizeHeaders(request.GetHeaders()))
+ {
+ if(ShouldSignHeader(header.first))
+ {
+ headersStream << header.first.c_str() << ":" << header.second.c_str() << NEWLINE;
+ signedHeadersStream << header.first.c_str() << ";";
+ }
+ }
+
+ Aws::String canonicalHeadersString = headersStream.str();
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "Canonical Header String: " << canonicalHeadersString);
+
+ //calculate signed headers parameter
+ Aws::String signedHeadersValue = signedHeadersStream.str();
+ //remove that last semi-colon
+ if (!signedHeadersValue.empty())
+ {
+ signedHeadersValue.pop_back();
+ }
+
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "Signed Headers value:" << signedHeadersValue);
+
+ //generate generalized canonicalized request string.
+ Aws::String canonicalRequestString = CanonicalizeRequestSigningString(request, true/* m_urlEscapePath */);
+
+ //append v4 stuff to the canonical request string.
+ canonicalRequestString.append(canonicalHeadersString);
+ canonicalRequestString.append(NEWLINE);
+ canonicalRequestString.append(signedHeadersValue);
+ canonicalRequestString.append(NEWLINE);
+ canonicalRequestString.append(EVENT_STREAM_CONTENT_SHA256);
+
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "Canonical Request String: " << canonicalRequestString);
+
+ //now compute sha256 on that request string
+ auto hashResult = m_hash.Calculate(canonicalRequestString);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Failed to hash (sha256) request string");
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "The request string is: \"" << canonicalRequestString << "\"");
+ return false;
+ }
+
+ auto sha256Digest = hashResult.GetResult();
+ Aws::String canonicalRequestHash = HashingUtils::HexEncode(sha256Digest);
+ Aws::String simpleDate = now.ToGmtString(SIMPLE_DATE_FORMAT_STR);
+
+ Aws::String signingRegion = region ? region : m_region;
+ Aws::String signingServiceName = serviceName ? serviceName : m_serviceName;
+ Aws::String stringToSign = GenerateStringToSign(dateHeaderValue, simpleDate, canonicalRequestHash, signingRegion, signingServiceName);
+ auto finalSignature = GenerateSignature(credentials, stringToSign, simpleDate, signingRegion, signingServiceName);
+
+ Aws::StringStream ss;
+ ss << AWS_HMAC_SHA256 << " " << CREDENTIAL << EQ << credentials.GetAWSAccessKeyId() << "/" << simpleDate
+ << "/" << signingRegion << "/" << signingServiceName << "/" << AWS4_REQUEST << ", " << SIGNED_HEADERS << EQ
+ << signedHeadersValue << ", " << SIGNATURE << EQ << HashingUtils::HexEncode(finalSignature);
+
+ auto awsAuthString = ss.str();
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "Signing request with: " << awsAuthString);
+ request.SetAwsAuthorization(awsAuthString);
+ request.SetSigningAccessKey(credentials.GetAWSAccessKeyId());
+ request.SetSigningRegion(signingRegion);
+ return true;
+}
+
+// this works regardless if the current machine is Big/Little Endian
+static void WriteBigEndian(Aws::String& str, uint64_t n)
+{
+ int shift = 56;
+ while(shift >= 0)
+ {
+ str.push_back((n >> shift) & 0xFF);
+ shift -= 8;
+ }
+}
+
+bool AWSAuthEventStreamV4Signer::SignEventMessage(Event::Message& message, Aws::String& priorSignature) const
+{
+ using Event::EventHeaderValue;
+
+ Aws::StringStream stringToSign;
+ stringToSign << EVENT_STREAM_PAYLOAD << NEWLINE;
+ const DateTime now = GetSigningTimestamp();
+ const auto simpleDate = now.ToGmtString(SIMPLE_DATE_FORMAT_STR);
+ stringToSign << now.ToGmtString(DateFormat::ISO_8601_BASIC) << NEWLINE
+ << simpleDate << "/" << m_region << "/"
+ << m_serviceName << "/aws4_request" << NEWLINE << priorSignature << NEWLINE;
+
+
+ Aws::String nonSignatureHeaders;
+ nonSignatureHeaders.push_back(char(sizeof(EVENTSTREAM_DATE_HEADER) - 1)); // length of the string
+ nonSignatureHeaders += EVENTSTREAM_DATE_HEADER;
+ nonSignatureHeaders.push_back(static_cast<char>(EventHeaderValue::EventHeaderType::TIMESTAMP)); // type of the value
+ WriteBigEndian(nonSignatureHeaders, static_cast<uint64_t>(now.Millis())); // the value of the timestamp in big-endian
+
+ auto hashOutcome = m_hash.Calculate(nonSignatureHeaders);
+ if (!hashOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Failed to hash (sha256) non-signature headers.");
+ return false;
+ }
+
+ const auto nonSignatureHeadersHash = hashOutcome.GetResult();
+ stringToSign << HashingUtils::HexEncode(nonSignatureHeadersHash) << NEWLINE;
+
+ if (message.GetEventPayload().empty())
+ {
+ AWS_LOGSTREAM_WARN(v4StreamingLogTag, "Attempting to sign an empty message (no payload and no headers). "
+ "It is unlikely that this is the intended behavior.");
+ }
+ else
+ {
+ // use a preallocatedStreamBuf to avoid making a copy.
+ // The Hashing API requires either Aws::String or IStream as input.
+ // TODO: the hashing API should be accept 'unsigned char*' as input.
+ Utils::Stream::PreallocatedStreamBuf streamBuf(message.GetEventPayload().data(), message.GetEventPayload().size());
+ Aws::IOStream payload(&streamBuf);
+ hashOutcome = m_hash.Calculate(payload);
+
+ if (!hashOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Failed to hash (sha256) non-signature headers.");
+ return false;
+ }
+ const auto payloadHash = hashOutcome.GetResult();
+ stringToSign << HashingUtils::HexEncode(payloadHash);
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "Payload hash - " << HashingUtils::HexEncode(payloadHash));
+ }
+
+ Utils::ByteBuffer finalSignatureDigest = GenerateSignature(m_credentialsProvider->GetAWSCredentials(), stringToSign.str(), simpleDate, m_region, m_serviceName);
+ const auto finalSignature = HashingUtils::HexEncode(finalSignatureDigest);
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "Final computed signing hash: " << finalSignature);
+ priorSignature = finalSignature;
+
+ message.InsertEventHeader(EVENTSTREAM_DATE_HEADER, EventHeaderValue(now.Millis(), EventHeaderValue::EventHeaderType::TIMESTAMP));
+ message.InsertEventHeader(EVENTSTREAM_SIGNATURE_HEADER, std::move(finalSignatureDigest));
+
+ AWS_LOGSTREAM_INFO(v4StreamingLogTag, "Event chunk final signature - " << finalSignature);
+ return true;
+}
+
+bool AWSAuthEventStreamV4Signer::ShouldSignHeader(const Aws::String& header) const
+{
+ return std::find(m_unsignedHeaders.cbegin(), m_unsignedHeaders.cend(), Aws::Utils::StringUtils::ToLower(header.c_str())) == m_unsignedHeaders.cend();
+}
+
+Utils::ByteBuffer AWSAuthEventStreamV4Signer::GenerateSignature(const AWSCredentials& credentials, const Aws::String& stringToSign,
+ const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const
+{
+ Utils::Threading::ReaderLockGuard guard(m_derivedKeyLock);
+ const auto& secretKey = credentials.GetAWSSecretKey();
+ if (secretKey != m_currentSecretKey || simpleDate != m_currentDateStr)
+ {
+ guard.UpgradeToWriterLock();
+ // double-checked lock to prevent updating twice
+ if (m_currentDateStr != simpleDate || m_currentSecretKey != secretKey)
+ {
+ m_currentSecretKey = secretKey;
+ m_currentDateStr = simpleDate;
+ m_derivedKey = ComputeHash(m_currentSecretKey, m_currentDateStr, region, serviceName);
+ }
+
+ }
+ return GenerateSignature(stringToSign, m_derivedKey);
+}
+
+Utils::ByteBuffer AWSAuthEventStreamV4Signer::GenerateSignature(const Aws::String& stringToSign, const ByteBuffer& key) const
+{
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "Final String to sign: " << stringToSign);
+
+ Aws::StringStream ss;
+
+ auto hashResult = m_HMAC.Calculate(ByteBuffer((unsigned char*)stringToSign.c_str(), stringToSign.length()), key);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Unable to hmac (sha256) final string");
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "The final string is: \"" << stringToSign << "\"");
+ return {};
+ }
+
+ return hashResult.GetResult();
+}
+
+Aws::String AWSAuthEventStreamV4Signer::GenerateStringToSign(const Aws::String& dateValue, const Aws::String& simpleDate,
+ const Aws::String& canonicalRequestHash, const Aws::String& region, const Aws::String& serviceName) const
+{
+ //generate the actual string we will use in signing the final request.
+ Aws::StringStream ss;
+
+ ss << AWS_HMAC_SHA256 << NEWLINE << dateValue << NEWLINE << simpleDate << "/" << region << "/"
+ << serviceName << "/" << AWS4_REQUEST << NEWLINE << canonicalRequestHash;
+
+ return ss.str();
+}
+
+Aws::Utils::ByteBuffer AWSAuthEventStreamV4Signer::ComputeHash(const Aws::String& secretKey,
+ const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const
+{
+ Aws::String signingKey(SIGNING_KEY);
+ signingKey.append(secretKey);
+ auto hashResult = m_HMAC.Calculate(ByteBuffer((unsigned char*)simpleDate.c_str(), simpleDate.length()),
+ ByteBuffer((unsigned char*)signingKey.c_str(), signingKey.length()));
+
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Failed to HMAC (SHA256) date string \"" << simpleDate << "\"");
+ return {};
+ }
+
+ auto kDate = hashResult.GetResult();
+ hashResult = m_HMAC.Calculate(ByteBuffer((unsigned char*)region.c_str(), region.length()), kDate);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Failed to HMAC (SHA256) region string \"" << region << "\"");
+ return {};
+ }
+
+ auto kRegion = hashResult.GetResult();
+ hashResult = m_HMAC.Calculate(ByteBuffer((unsigned char*)serviceName.c_str(), serviceName.length()), kRegion);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Failed to HMAC (SHA256) service string \"" << m_serviceName << "\"");
+ return {};
+ }
+
+ auto kService = hashResult.GetResult();
+ hashResult = m_HMAC.Calculate(ByteBuffer((unsigned char*)AWS4_REQUEST, strlen(AWS4_REQUEST)), kService);
+ if (!hashResult.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(v4StreamingLogTag, "Unable to HMAC (SHA256) request string");
+ AWS_LOGSTREAM_DEBUG(v4StreamingLogTag, "The request string is: \"" << AWS4_REQUEST << "\"");
+ return {};
+ }
+ return hashResult.GetResult();
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSignerProvider.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSignerProvider.cpp
new file mode 100644
index 00000000000..31fd6c006ba
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSAuthSignerProvider.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/auth/AWSAuthSignerProvider.h>
+#include <aws/core/auth/AWSAuthSigner.h>
+#include <aws/core/auth/AWSCredentialsProvider.h>
+#include <aws/core/utils/memory/stl/AWSAllocator.h>
+
+const char CLASS_TAG[] = "AuthSignerProvider";
+
+using namespace Aws::Auth;
+
+DefaultAuthSignerProvider::DefaultAuthSignerProvider(const std::shared_ptr<AWSCredentialsProvider>& credentialsProvider,
+ const Aws::String& serviceName, const Aws::String& region)
+{
+ m_signers.emplace_back(Aws::MakeShared<Aws::Client::AWSAuthV4Signer>(CLASS_TAG, credentialsProvider, serviceName.c_str(), region));
+ m_signers.emplace_back(Aws::MakeShared<Aws::Client::AWSAuthEventStreamV4Signer>(CLASS_TAG, credentialsProvider, serviceName.c_str(), region));
+ m_signers.emplace_back(Aws::MakeShared<Aws::Client::AWSNullSigner>(CLASS_TAG));
+}
+
+DefaultAuthSignerProvider::DefaultAuthSignerProvider(const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer)
+{
+ m_signers.emplace_back(Aws::MakeShared<Aws::Client::AWSNullSigner>(CLASS_TAG));
+ if(signer)
+ {
+ m_signers.emplace_back(signer);
+ }
+}
+
+std::shared_ptr<Aws::Client::AWSAuthSigner> DefaultAuthSignerProvider::GetSigner(const Aws::String& signerName) const
+{
+ for(const auto& signer : m_signers)
+ {
+ if(signer->GetName() == signerName)
+ {
+ return signer;
+ }
+ }
+ AWS_LOGSTREAM_ERROR(CLASS_TAG, "Request's signer: '" << signerName << "' is not found in the signer's map.");
+ assert(false);
+ return nullptr;
+}
+
+void DefaultAuthSignerProvider::AddSigner(std::shared_ptr<Aws::Client::AWSAuthSigner>& signer)
+{
+ assert(signer);
+ m_signers.emplace_back(signer);
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProvider.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProvider.cpp
new file mode 100644
index 00000000000..31e28b996fa
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProvider.cpp
@@ -0,0 +1,466 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/auth/AWSCredentialsProvider.h>
+
+#include <aws/core/config/AWSProfileConfigLoader.h>
+#include <aws/core/platform/Environment.h>
+#include <aws/core/platform/FileSystem.h>
+#include <aws/core/platform/OSVersionInfo.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/json/JsonSerializer.h>
+#include <aws/core/utils/FileSystemUtils.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <cstdlib>
+#include <fstream>
+#include <string.h>
+#include <climits>
+
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+using namespace Aws::Auth;
+using namespace Aws::Internal;
+using namespace Aws::FileSystem;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Client;
+using Aws::Utils::Threading::ReaderLockGuard;
+using Aws::Utils::Threading::WriterLockGuard;
+
+static const char ACCESS_KEY_ENV_VAR[] = "AWS_ACCESS_KEY_ID";
+static const char SECRET_KEY_ENV_VAR[] = "AWS_SECRET_ACCESS_KEY";
+static const char SESSION_TOKEN_ENV_VAR[] = "AWS_SESSION_TOKEN";
+static const char DEFAULT_PROFILE[] = "default";
+static const char AWS_PROFILE_ENV_VAR[] = "AWS_PROFILE";
+static const char AWS_PROFILE_DEFAULT_ENV_VAR[] = "AWS_DEFAULT_PROFILE";
+
+static const char AWS_CREDENTIALS_FILE[] = "AWS_SHARED_CREDENTIALS_FILE";
+extern const char AWS_CONFIG_FILE[] = "AWS_CONFIG_FILE";
+
+extern const char PROFILE_DIRECTORY[] = ".aws";
+static const char DEFAULT_CREDENTIALS_FILE[] = "credentials";
+extern const char DEFAULT_CONFIG_FILE[] = "config";
+
+
+static const int EXPIRATION_GRACE_PERIOD = 5 * 1000;
+
+void AWSCredentialsProvider::Reload()
+{
+ m_lastLoadedMs = DateTime::Now().Millis();
+}
+
+bool AWSCredentialsProvider::IsTimeToRefresh(long reloadFrequency)
+{
+ if (DateTime::Now().Millis() - m_lastLoadedMs > reloadFrequency)
+ {
+ return true;
+ }
+ return false;
+}
+
+
+static const char* ENVIRONMENT_LOG_TAG = "EnvironmentAWSCredentialsProvider";
+
+
+AWSCredentials EnvironmentAWSCredentialsProvider::GetAWSCredentials()
+{
+ auto accessKey = Aws::Environment::GetEnv(ACCESS_KEY_ENV_VAR);
+ AWSCredentials credentials;
+
+ if (!accessKey.empty())
+ {
+ credentials.SetAWSAccessKeyId(accessKey);
+
+ AWS_LOGSTREAM_DEBUG(ENVIRONMENT_LOG_TAG, "Found credential in environment with access key id " << accessKey);
+ auto secretKey = Aws::Environment::GetEnv(SECRET_KEY_ENV_VAR);
+
+ if (!secretKey.empty())
+ {
+ credentials.SetAWSSecretKey(secretKey);
+ AWS_LOGSTREAM_INFO(ENVIRONMENT_LOG_TAG, "Found secret key");
+ }
+
+ auto sessionToken = Aws::Environment::GetEnv(SESSION_TOKEN_ENV_VAR);
+
+ if(!sessionToken.empty())
+ {
+ credentials.SetSessionToken(sessionToken);
+ AWS_LOGSTREAM_INFO(ENVIRONMENT_LOG_TAG, "Found sessionToken");
+ }
+ }
+
+ return credentials;
+}
+
+Aws::String Aws::Auth::GetConfigProfileFilename()
+{
+ auto configFileNameFromVar = Aws::Environment::GetEnv(AWS_CONFIG_FILE);
+ if (!configFileNameFromVar.empty())
+ {
+ return configFileNameFromVar;
+ }
+ else
+ {
+ return Aws::FileSystem::GetHomeDirectory() + PROFILE_DIRECTORY + PATH_DELIM + DEFAULT_CONFIG_FILE;
+ }
+}
+
+Aws::String Aws::Auth::GetConfigProfileName()
+{
+ auto profileFromVar = Aws::Environment::GetEnv(AWS_PROFILE_DEFAULT_ENV_VAR);
+ if (profileFromVar.empty())
+ {
+ profileFromVar = Aws::Environment::GetEnv(AWS_PROFILE_ENV_VAR);
+ }
+
+ if (profileFromVar.empty())
+ {
+ return Aws::String(DEFAULT_PROFILE);
+ }
+ else
+ {
+ return profileFromVar;
+ }
+}
+
+static const char* PROFILE_LOG_TAG = "ProfileConfigFileAWSCredentialsProvider";
+
+Aws::String ProfileConfigFileAWSCredentialsProvider::GetCredentialsProfileFilename()
+{
+ auto credentialsFileNameFromVar = Aws::Environment::GetEnv(AWS_CREDENTIALS_FILE);
+
+ if (credentialsFileNameFromVar.empty())
+ {
+ return Aws::FileSystem::GetHomeDirectory() + PROFILE_DIRECTORY + PATH_DELIM + DEFAULT_CREDENTIALS_FILE;
+ }
+ else
+ {
+ return credentialsFileNameFromVar;
+ }
+}
+
+Aws::String ProfileConfigFileAWSCredentialsProvider::GetProfileDirectory()
+{
+ Aws::String credentialsFileName = GetCredentialsProfileFilename();
+ auto lastSeparator = credentialsFileName.find_last_of(PATH_DELIM);
+ if (lastSeparator != std::string::npos)
+ {
+ return credentialsFileName.substr(0, lastSeparator);
+ }
+ else
+ {
+ return {};
+ }
+}
+
+ProfileConfigFileAWSCredentialsProvider::ProfileConfigFileAWSCredentialsProvider(long refreshRateMs) :
+ m_profileToUse(Aws::Auth::GetConfigProfileName()),
+ m_credentialsFileLoader(GetCredentialsProfileFilename()),
+ m_loadFrequencyMs(refreshRateMs)
+{
+ AWS_LOGSTREAM_INFO(PROFILE_LOG_TAG, "Setting provider to read credentials from " << GetCredentialsProfileFilename() << " for credentials file"
+ << " and " << GetConfigProfileFilename() << " for the config file "
+ << ", for use with profile " << m_profileToUse);
+}
+
+ProfileConfigFileAWSCredentialsProvider::ProfileConfigFileAWSCredentialsProvider(const char* profile, long refreshRateMs) :
+ m_profileToUse(profile),
+ m_credentialsFileLoader(GetCredentialsProfileFilename()),
+ m_loadFrequencyMs(refreshRateMs)
+{
+ AWS_LOGSTREAM_INFO(PROFILE_LOG_TAG, "Setting provider to read credentials from " << GetCredentialsProfileFilename() << " for credentials file"
+ << " and " << GetConfigProfileFilename() << " for the config file "
+ << ", for use with profile " << m_profileToUse);
+}
+
+AWSCredentials ProfileConfigFileAWSCredentialsProvider::GetAWSCredentials()
+{
+ RefreshIfExpired();
+ ReaderLockGuard guard(m_reloadLock);
+ auto credsFileProfileIter = m_credentialsFileLoader.GetProfiles().find(m_profileToUse);
+
+ if(credsFileProfileIter != m_credentialsFileLoader.GetProfiles().end())
+ {
+ return credsFileProfileIter->second.GetCredentials();
+ }
+
+ return AWSCredentials();
+}
+
+
+void ProfileConfigFileAWSCredentialsProvider::Reload()
+{
+ m_credentialsFileLoader.Load();
+ AWSCredentialsProvider::Reload();
+}
+
+void ProfileConfigFileAWSCredentialsProvider::RefreshIfExpired()
+{
+ ReaderLockGuard guard(m_reloadLock);
+ if (!IsTimeToRefresh(m_loadFrequencyMs))
+ {
+ return;
+ }
+
+ guard.UpgradeToWriterLock();
+ if (!IsTimeToRefresh(m_loadFrequencyMs)) // double-checked lock to avoid refreshing twice
+ {
+ return;
+ }
+
+ Reload();
+}
+
+static const char* INSTANCE_LOG_TAG = "InstanceProfileCredentialsProvider";
+
+InstanceProfileCredentialsProvider::InstanceProfileCredentialsProvider(long refreshRateMs) :
+ m_ec2MetadataConfigLoader(Aws::MakeShared<Aws::Config::EC2InstanceProfileConfigLoader>(INSTANCE_LOG_TAG)),
+ m_loadFrequencyMs(refreshRateMs)
+{
+ AWS_LOGSTREAM_INFO(INSTANCE_LOG_TAG, "Creating Instance with default EC2MetadataClient and refresh rate " << refreshRateMs);
+}
+
+
+InstanceProfileCredentialsProvider::InstanceProfileCredentialsProvider(const std::shared_ptr<Aws::Config::EC2InstanceProfileConfigLoader>& loader, long refreshRateMs) :
+ m_ec2MetadataConfigLoader(loader),
+ m_loadFrequencyMs(refreshRateMs)
+{
+ AWS_LOGSTREAM_INFO(INSTANCE_LOG_TAG, "Creating Instance with injected EC2MetadataClient and refresh rate " << refreshRateMs);
+}
+
+
+AWSCredentials InstanceProfileCredentialsProvider::GetAWSCredentials()
+{
+ RefreshIfExpired();
+ ReaderLockGuard guard(m_reloadLock);
+ auto profileIter = m_ec2MetadataConfigLoader->GetProfiles().find(Aws::Config::INSTANCE_PROFILE_KEY);
+
+ if(profileIter != m_ec2MetadataConfigLoader->GetProfiles().end())
+ {
+ return profileIter->second.GetCredentials();
+ }
+
+ return AWSCredentials();
+}
+
+void InstanceProfileCredentialsProvider::Reload()
+{
+ AWS_LOGSTREAM_INFO(INSTANCE_LOG_TAG, "Credentials have expired attempting to repull from EC2 Metadata Service.");
+ m_ec2MetadataConfigLoader->Load();
+ AWSCredentialsProvider::Reload();
+}
+
+void InstanceProfileCredentialsProvider::RefreshIfExpired()
+{
+ AWS_LOGSTREAM_DEBUG(INSTANCE_LOG_TAG, "Checking if latest credential pull has expired.");
+ ReaderLockGuard guard(m_reloadLock);
+ if (!IsTimeToRefresh(m_loadFrequencyMs))
+ {
+ return;
+ }
+
+ guard.UpgradeToWriterLock();
+ if (!IsTimeToRefresh(m_loadFrequencyMs)) // double-checked lock to avoid refreshing twice
+ {
+ return;
+ }
+ Reload();
+}
+
+static const char TASK_ROLE_LOG_TAG[] = "TaskRoleCredentialsProvider";
+
+TaskRoleCredentialsProvider::TaskRoleCredentialsProvider(const char* URI, long refreshRateMs) :
+ m_ecsCredentialsClient(Aws::MakeShared<Aws::Internal::ECSCredentialsClient>(TASK_ROLE_LOG_TAG, URI)),
+ m_loadFrequencyMs(refreshRateMs)
+{
+ AWS_LOGSTREAM_INFO(TASK_ROLE_LOG_TAG, "Creating TaskRole with default ECSCredentialsClient and refresh rate " << refreshRateMs);
+}
+
+TaskRoleCredentialsProvider::TaskRoleCredentialsProvider(const char* endpoint, const char* token, long refreshRateMs) :
+ m_ecsCredentialsClient(Aws::MakeShared<Aws::Internal::ECSCredentialsClient>(TASK_ROLE_LOG_TAG, ""/*resourcePath*/, endpoint, token)),
+ m_loadFrequencyMs(refreshRateMs)
+{
+ AWS_LOGSTREAM_INFO(TASK_ROLE_LOG_TAG, "Creating TaskRole with default ECSCredentialsClient and refresh rate " << refreshRateMs);
+}
+
+TaskRoleCredentialsProvider::TaskRoleCredentialsProvider(
+ const std::shared_ptr<Aws::Internal::ECSCredentialsClient>& client, long refreshRateMs) :
+ m_ecsCredentialsClient(client),
+ m_loadFrequencyMs(refreshRateMs)
+{
+ AWS_LOGSTREAM_INFO(TASK_ROLE_LOG_TAG, "Creating TaskRole with default ECSCredentialsClient and refresh rate " << refreshRateMs);
+}
+
+AWSCredentials TaskRoleCredentialsProvider::GetAWSCredentials()
+{
+ RefreshIfExpired();
+ ReaderLockGuard guard(m_reloadLock);
+ return m_credentials;
+}
+
+bool TaskRoleCredentialsProvider::ExpiresSoon() const
+{
+ return ((m_credentials.GetExpiration() - Aws::Utils::DateTime::Now()).count() < EXPIRATION_GRACE_PERIOD);
+}
+
+void TaskRoleCredentialsProvider::Reload()
+{
+ AWS_LOGSTREAM_INFO(TASK_ROLE_LOG_TAG, "Credentials have expired or will expire, attempting to repull from ECS IAM Service.");
+
+ auto credentialsStr = m_ecsCredentialsClient->GetECSCredentials();
+ if (credentialsStr.empty()) return;
+
+ Json::JsonValue credentialsDoc(credentialsStr);
+ if (!credentialsDoc.WasParseSuccessful())
+ {
+ AWS_LOGSTREAM_ERROR(TASK_ROLE_LOG_TAG, "Failed to parse output from ECSCredentialService.");
+ return;
+ }
+
+ Aws::String accessKey, secretKey, token;
+ Utils::Json::JsonView credentialsView(credentialsDoc);
+ accessKey = credentialsView.GetString("AccessKeyId");
+ secretKey = credentialsView.GetString("SecretAccessKey");
+ token = credentialsView.GetString("Token");
+ AWS_LOGSTREAM_DEBUG(TASK_ROLE_LOG_TAG, "Successfully pulled credentials from metadata service with access key " << accessKey);
+
+ m_credentials.SetAWSAccessKeyId(accessKey);
+ m_credentials.SetAWSSecretKey(secretKey);
+ m_credentials.SetSessionToken(token);
+ m_credentials.SetExpiration(Aws::Utils::DateTime(credentialsView.GetString("Expiration"), DateFormat::ISO_8601));
+ AWSCredentialsProvider::Reload();
+}
+
+void TaskRoleCredentialsProvider::RefreshIfExpired()
+{
+ AWS_LOGSTREAM_DEBUG(TASK_ROLE_LOG_TAG, "Checking if latest credential pull has expired.");
+ ReaderLockGuard guard(m_reloadLock);
+ if (!m_credentials.IsEmpty() && !IsTimeToRefresh(m_loadFrequencyMs) && !ExpiresSoon())
+ {
+ return;
+ }
+
+ guard.UpgradeToWriterLock();
+
+ if (!m_credentials.IsEmpty() && !IsTimeToRefresh(m_loadFrequencyMs) && !ExpiresSoon())
+ {
+ return;
+ }
+
+ Reload();
+}
+
+static const char PROCESS_LOG_TAG[] = "ProcessCredentialsProvider";
+ProcessCredentialsProvider::ProcessCredentialsProvider() :
+ m_profileToUse(Aws::Auth::GetConfigProfileName())
+{
+ AWS_LOGSTREAM_INFO(PROCESS_LOG_TAG, "Setting process credentials provider to read config from " << m_profileToUse);
+}
+
+ProcessCredentialsProvider::ProcessCredentialsProvider(const Aws::String& profile) :
+ m_profileToUse(profile)
+{
+ AWS_LOGSTREAM_INFO(PROCESS_LOG_TAG, "Setting process credentials provider to read config from " << m_profileToUse);
+}
+
+AWSCredentials ProcessCredentialsProvider::GetAWSCredentials()
+{
+ RefreshIfExpired();
+ ReaderLockGuard guard(m_reloadLock);
+ return m_credentials;
+}
+
+
+void ProcessCredentialsProvider::Reload()
+{
+ auto profile = Aws::Config::GetCachedConfigProfile(m_profileToUse);
+ const Aws::String &command = profile.GetCredentialProcess();
+ if (command.empty())
+ {
+ AWS_LOGSTREAM_ERROR(PROCESS_LOG_TAG, "Failed to find credential process's profile: " << m_profileToUse);
+ return;
+ }
+ m_credentials = GetCredentialsFromProcess(command);
+}
+
+void ProcessCredentialsProvider::RefreshIfExpired()
+{
+ ReaderLockGuard guard(m_reloadLock);
+ if (!m_credentials.IsExpiredOrEmpty())
+ {
+ return;
+ }
+
+ guard.UpgradeToWriterLock();
+ if (!m_credentials.IsExpiredOrEmpty()) // double-checked lock to avoid refreshing twice
+ {
+ return;
+ }
+
+ Reload();
+}
+
+AWSCredentials Aws::Auth::GetCredentialsFromProcess(const Aws::String& process)
+{
+ Aws::String command = process;
+ command.append(" 2>&1"); // redirect stderr to stdout
+ Aws::String result = Aws::Utils::StringUtils::Trim(Aws::OSVersionInfo::GetSysCommandOutput(command.c_str()).c_str());
+ Json::JsonValue credentialsDoc(result);
+ if (!credentialsDoc.WasParseSuccessful())
+ {
+ AWS_LOGSTREAM_ERROR(PROFILE_LOG_TAG, "Failed to load credential from running: " << command << " Error: " << result);
+ return {};
+ }
+
+ Aws::Utils::Json::JsonView credentialsView(credentialsDoc);
+ if (!credentialsView.KeyExists("Version") || credentialsView.GetInteger("Version") != 1)
+ {
+ AWS_LOGSTREAM_ERROR(PROFILE_LOG_TAG, "Encountered an unsupported process credentials payload version:" << credentialsView.GetInteger("Version"));
+ return {};
+ }
+
+ AWSCredentials credentials;
+ Aws::String accessKey, secretKey, token, expire;
+ if (credentialsView.KeyExists("AccessKeyId"))
+ {
+ credentials.SetAWSAccessKeyId(credentialsView.GetString("AccessKeyId"));
+ }
+
+ if (credentialsView.KeyExists("SecretAccessKey"))
+ {
+ credentials.SetAWSSecretKey(credentialsView.GetString("SecretAccessKey"));
+ }
+
+ if (credentialsView.KeyExists("SessionToken"))
+ {
+ credentials.SetSessionToken(credentialsView.GetString("SessionToken"));
+ }
+
+ if (credentialsView.KeyExists("Expiration"))
+ {
+ const auto expiration = Aws::Utils::DateTime(credentialsView.GetString("Expiration"), DateFormat::ISO_8601);
+ if (expiration.WasParseSuccessful())
+ {
+ credentials.SetExpiration(expiration);
+ }
+ else
+ {
+ AWS_LOGSTREAM_ERROR(PROFILE_LOG_TAG, "Failed to parse credential's expiration value as an ISO 8601 Date. Credentials will be marked expired.");
+ credentials.SetExpiration(Aws::Utils::DateTime::Now());
+ }
+ }
+ else
+ {
+ credentials.SetExpiration((std::chrono::time_point<std::chrono::system_clock>::max)());
+ }
+
+ AWS_LOGSTREAM_DEBUG(PROFILE_LOG_TAG, "Successfully pulled credentials from process credential with AccessKey: " << accessKey << ", Expiration:" << credentialsView.GetString("Expiration"));
+ return credentials;
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp
new file mode 100644
index 00000000000..373136d96a8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/auth/AWSCredentialsProviderChain.h>
+#include <aws/core/auth/STSCredentialsProvider.h>
+#include <aws/core/platform/Environment.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/logging/LogMacros.h>
+
+using namespace Aws::Auth;
+
+static const char AWS_ECS_CONTAINER_CREDENTIALS_RELATIVE_URI[] = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI";
+static const char AWS_ECS_CONTAINER_CREDENTIALS_FULL_URI[] = "AWS_CONTAINER_CREDENTIALS_FULL_URI";
+static const char AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN[] = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
+static const char AWS_EC2_METADATA_DISABLED[] = "AWS_EC2_METADATA_DISABLED";
+static const char DefaultCredentialsProviderChainTag[] = "DefaultAWSCredentialsProviderChain";
+
+AWSCredentials AWSCredentialsProviderChain::GetAWSCredentials()
+{
+ for (auto&& credentialsProvider : m_providerChain)
+ {
+ AWSCredentials credentials = credentialsProvider->GetAWSCredentials();
+ if (!credentials.GetAWSAccessKeyId().empty() && !credentials.GetAWSSecretKey().empty())
+ {
+ return credentials;
+ }
+ }
+
+ return AWSCredentials();
+}
+
+DefaultAWSCredentialsProviderChain::DefaultAWSCredentialsProviderChain() : AWSCredentialsProviderChain()
+{
+ AddProvider(Aws::MakeShared<EnvironmentAWSCredentialsProvider>(DefaultCredentialsProviderChainTag));
+ AddProvider(Aws::MakeShared<ProfileConfigFileAWSCredentialsProvider>(DefaultCredentialsProviderChainTag));
+ AddProvider(Aws::MakeShared<ProcessCredentialsProvider>(DefaultCredentialsProviderChainTag));
+ AddProvider(Aws::MakeShared<STSAssumeRoleWebIdentityCredentialsProvider>(DefaultCredentialsProviderChainTag));
+
+ //ECS TaskRole Credentials only available when ENVIRONMENT VARIABLE is set
+ const auto relativeUri = Aws::Environment::GetEnv(AWS_ECS_CONTAINER_CREDENTIALS_RELATIVE_URI);
+ AWS_LOGSTREAM_DEBUG(DefaultCredentialsProviderChainTag, "The environment variable value " << AWS_ECS_CONTAINER_CREDENTIALS_RELATIVE_URI
+ << " is " << relativeUri);
+
+ const auto absoluteUri = Aws::Environment::GetEnv(AWS_ECS_CONTAINER_CREDENTIALS_FULL_URI);
+ AWS_LOGSTREAM_DEBUG(DefaultCredentialsProviderChainTag, "The environment variable value " << AWS_ECS_CONTAINER_CREDENTIALS_FULL_URI
+ << " is " << absoluteUri);
+
+ const auto ec2MetadataDisabled = Aws::Environment::GetEnv(AWS_EC2_METADATA_DISABLED);
+ AWS_LOGSTREAM_DEBUG(DefaultCredentialsProviderChainTag, "The environment variable value " << AWS_EC2_METADATA_DISABLED
+ << " is " << ec2MetadataDisabled);
+
+ if (!relativeUri.empty())
+ {
+ AddProvider(Aws::MakeShared<TaskRoleCredentialsProvider>(DefaultCredentialsProviderChainTag, relativeUri.c_str()));
+ AWS_LOGSTREAM_INFO(DefaultCredentialsProviderChainTag, "Added ECS metadata service credentials provider with relative path: ["
+ << relativeUri << "] to the provider chain.");
+ }
+ else if (!absoluteUri.empty())
+ {
+ const auto token = Aws::Environment::GetEnv(AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN);
+ AddProvider(Aws::MakeShared<TaskRoleCredentialsProvider>(DefaultCredentialsProviderChainTag,
+ absoluteUri.c_str(), token.c_str()));
+
+ //DO NOT log the value of the authorization token for security purposes.
+ AWS_LOGSTREAM_INFO(DefaultCredentialsProviderChainTag, "Added ECS credentials provider with URI: ["
+ << absoluteUri << "] to the provider chain with a" << (token.empty() ? "n empty " : " non-empty ")
+ << "authorization token.");
+ }
+ else if (Aws::Utils::StringUtils::ToLower(ec2MetadataDisabled.c_str()) != "true")
+ {
+ AddProvider(Aws::MakeShared<InstanceProfileCredentialsProvider>(DefaultCredentialsProviderChainTag));
+ AWS_LOGSTREAM_INFO(DefaultCredentialsProviderChainTag, "Added EC2 metadata service credentials provider to the provider chain.");
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/STSCredentialsProvider.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/STSCredentialsProvider.cpp
new file mode 100644
index 00000000000..3f48c9e0c7d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/auth/STSCredentialsProvider.cpp
@@ -0,0 +1,163 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/auth/STSCredentialsProvider.h>
+#include <aws/core/config/AWSProfileConfigLoader.h>
+#include <aws/core/platform/Environment.h>
+#include <aws/core/platform/FileSystem.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/FileSystemUtils.h>
+#include <aws/core/client/SpecifiedRetryableErrorsRetryStrategy.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/UUID.h>
+#include <cstdlib>
+#include <fstream>
+#include <string.h>
+#include <climits>
+
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+using namespace Aws::Auth;
+using namespace Aws::Internal;
+using namespace Aws::FileSystem;
+using namespace Aws::Client;
+using Aws::Utils::Threading::ReaderLockGuard;
+using Aws::Utils::Threading::WriterLockGuard;
+
+static const char STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG[] = "STSAssumeRoleWithWebIdentityCredentialsProvider";
+STSAssumeRoleWebIdentityCredentialsProvider::STSAssumeRoleWebIdentityCredentialsProvider() :
+ m_initialized(false)
+{
+ // check environment variables
+ Aws::String tmpRegion = Aws::Environment::GetEnv("AWS_DEFAULT_REGION");
+ m_roleArn = Aws::Environment::GetEnv("AWS_ROLE_ARN");
+ m_tokenFile = Aws::Environment::GetEnv("AWS_WEB_IDENTITY_TOKEN_FILE");
+ m_sessionName = Aws::Environment::GetEnv("AWS_ROLE_SESSION_NAME");
+
+ // check profile_config if either m_roleArn or m_tokenFile is not loaded from environment variable
+ // region source is not enforced, but we need it to construct sts endpoint, if we can't find from environment, we should check if it's set in config file.
+ if (m_roleArn.empty() || m_tokenFile.empty() || tmpRegion.empty())
+ {
+ auto profile = Aws::Config::GetCachedConfigProfile(Aws::Auth::GetConfigProfileName());
+ if (tmpRegion.empty())
+ {
+ tmpRegion = profile.GetRegion();
+ }
+ // If either of these two were not found from environment, use whatever found for all three in config file
+ if (m_roleArn.empty() || m_tokenFile.empty())
+ {
+ m_roleArn = profile.GetRoleArn();
+ m_tokenFile = profile.GetValue("web_identity_token_file");
+ m_sessionName = profile.GetValue("role_session_name");
+ }
+ }
+
+ if (m_tokenFile.empty())
+ {
+ AWS_LOGSTREAM_WARN(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Token file must be specified to use STS AssumeRole web identity creds provider.");
+ return; // No need to do further constructing
+ }
+ else
+ {
+ AWS_LOGSTREAM_DEBUG(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Resolved token_file from profile_config or environment variable to be " << m_tokenFile);
+ }
+
+ if (m_roleArn.empty())
+ {
+ AWS_LOGSTREAM_WARN(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "RoleArn must be specified to use STS AssumeRole web identity creds provider.");
+ return; // No need to do further constructing
+ }
+ else
+ {
+ AWS_LOGSTREAM_DEBUG(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Resolved role_arn from profile_config or environment variable to be " << m_roleArn);
+ }
+
+ if (tmpRegion.empty())
+ {
+ tmpRegion = Aws::Region::US_EAST_1;
+ }
+ else
+ {
+ AWS_LOGSTREAM_DEBUG(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Resolved region from profile_config or environment variable to be " << tmpRegion);
+ }
+
+ if (m_sessionName.empty())
+ {
+ m_sessionName = Aws::Utils::UUID::RandomUUID();
+ }
+ else
+ {
+ AWS_LOGSTREAM_DEBUG(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Resolved session_name from profile_config or environment variable to be " << m_sessionName);
+ }
+
+ Aws::Client::ClientConfiguration config;
+ config.scheme = Aws::Http::Scheme::HTTPS;
+ config.region = tmpRegion;
+
+ Aws::Vector<Aws::String> retryableErrors;
+ retryableErrors.push_back("IDPCommunicationError");
+ retryableErrors.push_back("InvalidIdentityToken");
+
+ config.retryStrategy = Aws::MakeShared<SpecifiedRetryableErrorsRetryStrategy>(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, retryableErrors, 3/*maxRetries*/);
+
+ m_client = Aws::MakeUnique<Aws::Internal::STSCredentialsClient>(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, config);
+ m_initialized = true;
+ AWS_LOGSTREAM_INFO(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Creating STS AssumeRole with web identity creds provider.");
+}
+
+AWSCredentials STSAssumeRoleWebIdentityCredentialsProvider::GetAWSCredentials()
+{
+ // A valid client means required information like role arn and token file were constructed correctly.
+ // We can use this provider to load creds, otherwise, we can just return empty creds.
+ if (!m_initialized)
+ {
+ return Aws::Auth::AWSCredentials();
+ }
+ RefreshIfExpired();
+ ReaderLockGuard guard(m_reloadLock);
+ return m_credentials;
+}
+
+void STSAssumeRoleWebIdentityCredentialsProvider::Reload()
+{
+ AWS_LOGSTREAM_INFO(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Credentials have expired, attempting to renew from STS.");
+
+ Aws::IFStream tokenFile(m_tokenFile.c_str());
+ if(tokenFile)
+ {
+ Aws::String token((std::istreambuf_iterator<char>(tokenFile)), std::istreambuf_iterator<char>());
+ m_token = token;
+ }
+ else
+ {
+ AWS_LOGSTREAM_ERROR(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Can't open token file: " << m_tokenFile);
+ return;
+ }
+ STSCredentialsClient::STSAssumeRoleWithWebIdentityRequest request {m_sessionName, m_roleArn, m_token};
+
+ auto result = m_client->GetAssumeRoleWithWebIdentityCredentials(request);
+ AWS_LOGSTREAM_TRACE(STS_ASSUME_ROLE_WEB_IDENTITY_LOG_TAG, "Successfully retrieved credentials with AWS_ACCESS_KEY: " << result.creds.GetAWSAccessKeyId());
+ m_credentials = result.creds;
+}
+
+void STSAssumeRoleWebIdentityCredentialsProvider::RefreshIfExpired()
+{
+ ReaderLockGuard guard(m_reloadLock);
+ if (!m_credentials.IsExpiredOrEmpty())
+ {
+ return;
+ }
+
+ guard.UpgradeToWriterLock();
+ if (!m_credentials.IsExpiredOrEmpty()) // double-checked lock to avoid refreshing twice
+ {
+ return;
+ }
+
+ Reload();
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSClient.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSClient.cpp
new file mode 100644
index 00000000000..e1ff064840f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSClient.cpp
@@ -0,0 +1,1098 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/AWSClient.h>
+#include <aws/core/AmazonWebServiceRequest.h>
+#include <aws/core/auth/AWSAuthSigner.h>
+#include <aws/core/auth/AWSAuthSignerProvider.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/AWSErrorMarshaller.h>
+#include <aws/core/client/ClientConfiguration.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/client/RetryStrategy.h>
+#include <aws/core/http/HttpClient.h>
+#include <aws/core/http/HttpClientFactory.h>
+#include <aws/core/http/HttpResponse.h>
+#include <aws/core/http/standard/StandardHttpResponse.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/utils/json/JsonSerializer.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+#include <aws/core/utils/crypto/MD5.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/crypto/Factories.h>
+#include <aws/core/utils/event/EventStream.h>
+#include <aws/core/utils/UUID.h>
+#include <aws/core/monitoring/MonitoringManager.h>
+#include <aws/core/Region.h>
+#include <aws/core/utils/DNS.h>
+#include <aws/core/Version.h>
+#include <aws/core/platform/OSVersionInfo.h>
+
+#include <cstring>
+#include <cassert>
+
+using namespace Aws;
+using namespace Aws::Client;
+using namespace Aws::Http;
+using namespace Aws::Utils;
+using namespace Aws::Utils::Json;
+using namespace Aws::Utils::Xml;
+
+static const int SUCCESS_RESPONSE_MIN = 200;
+static const int SUCCESS_RESPONSE_MAX = 299;
+
+static const char AWS_CLIENT_LOG_TAG[] = "AWSClient";
+//4 Minutes
+static const std::chrono::milliseconds TIME_DIFF_MAX = std::chrono::minutes(4);
+//-4 Minutes
+static const std::chrono::milliseconds TIME_DIFF_MIN = std::chrono::minutes(-4);
+
+static CoreErrors GuessBodylessErrorType(Aws::Http::HttpResponseCode responseCode)
+{
+ switch (responseCode)
+ {
+ case HttpResponseCode::FORBIDDEN:
+ case HttpResponseCode::UNAUTHORIZED:
+ return CoreErrors::ACCESS_DENIED;
+ case HttpResponseCode::NOT_FOUND:
+ return CoreErrors::RESOURCE_NOT_FOUND;
+ default:
+ return CoreErrors::UNKNOWN;
+ }
+}
+
+struct RequestInfo
+{
+ Aws::Utils::DateTime ttl;
+ long attempt;
+ long maxAttempts;
+
+ operator String()
+ {
+ Aws::StringStream ss;
+ if (ttl.WasParseSuccessful() && ttl != DateTime())
+ {
+ assert(attempt > 1);
+ ss << "ttl=" << ttl.ToGmtString(DateFormat::ISO_8601_BASIC) << "; ";
+ }
+ ss << "attempt=" << attempt;
+ if (maxAttempts > 0)
+ {
+ ss << "; max=" << maxAttempts;
+ }
+ return ss.str();
+ }
+};
+
+AWSClient::AWSClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller) :
+ m_region(configuration.region),
+ m_httpClient(CreateHttpClient(configuration)),
+ m_signerProvider(Aws::MakeUnique<Aws::Auth::DefaultAuthSignerProvider>(AWS_CLIENT_LOG_TAG, signer)),
+ m_errorMarshaller(errorMarshaller),
+ m_retryStrategy(configuration.retryStrategy),
+ m_writeRateLimiter(configuration.writeRateLimiter),
+ m_readRateLimiter(configuration.readRateLimiter),
+ m_userAgent(configuration.userAgent),
+ m_customizedUserAgent(!m_userAgent.empty()),
+ m_hash(Aws::Utils::Crypto::CreateMD5Implementation()),
+ m_requestTimeoutMs(configuration.requestTimeoutMs),
+ m_enableClockSkewAdjustment(configuration.enableClockSkewAdjustment)
+{
+ SetServiceClientName("AWSBaseClient");
+}
+
+AWSClient::AWSClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller) :
+ m_region(configuration.region),
+ m_httpClient(CreateHttpClient(configuration)),
+ m_signerProvider(signerProvider),
+ m_errorMarshaller(errorMarshaller),
+ m_retryStrategy(configuration.retryStrategy),
+ m_writeRateLimiter(configuration.writeRateLimiter),
+ m_readRateLimiter(configuration.readRateLimiter),
+ m_userAgent(configuration.userAgent),
+ m_customizedUserAgent(!m_userAgent.empty()),
+ m_hash(Aws::Utils::Crypto::CreateMD5Implementation()),
+ m_requestTimeoutMs(configuration.requestTimeoutMs),
+ m_enableClockSkewAdjustment(configuration.enableClockSkewAdjustment)
+{
+ SetServiceClientName("AWSBaseClient");
+}
+
+void AWSClient::SetServiceClientName(const Aws::String& name)
+{
+ m_serviceName = name;
+ if (!m_customizedUserAgent)
+ {
+ Aws::StringStream ss;
+ ss << "aws-sdk-cpp/" << Version::GetVersionString() << "/" << m_serviceName << "/" << Aws::OSVersionInfo::ComputeOSVersionString()
+ << " " << Version::GetCompilerVersionString();
+ m_userAgent = ss.str();
+ }
+}
+
+void AWSClient::DisableRequestProcessing()
+{
+ m_httpClient->DisableRequestProcessing();
+}
+
+void AWSClient::EnableRequestProcessing()
+{
+ m_httpClient->EnableRequestProcessing();
+}
+
+Aws::Client::AWSAuthSigner* AWSClient::GetSignerByName(const char* name) const
+{
+ const auto& signer = m_signerProvider->GetSigner(name);
+ return signer ? signer.get() : nullptr;
+}
+
+static DateTime GetServerTimeFromError(const AWSError<CoreErrors> error)
+{
+ const Http::HeaderValueCollection& headers = error.GetResponseHeaders();
+ auto awsDateHeaderIter = headers.find(StringUtils::ToLower(Http::AWS_DATE_HEADER));
+ auto dateHeaderIter = headers.find(StringUtils::ToLower(Http::DATE_HEADER));
+ if (awsDateHeaderIter != headers.end())
+ {
+ return DateTime(awsDateHeaderIter->second.c_str(), DateFormat::AutoDetect);
+ }
+ else if (dateHeaderIter != headers.end())
+ {
+ return DateTime(dateHeaderIter->second.c_str(), DateFormat::AutoDetect);
+ }
+ else
+ {
+ return DateTime();
+ }
+}
+
+bool AWSClient::AdjustClockSkew(HttpResponseOutcome& outcome, const char* signerName) const
+{
+ if (m_enableClockSkewAdjustment)
+ {
+ auto signer = GetSignerByName(signerName);
+ //detect clock skew and try to correct.
+ AWS_LOGSTREAM_WARN(AWS_CLIENT_LOG_TAG, "If the signature check failed. This could be because of a time skew. Attempting to adjust the signer.");
+
+ DateTime serverTime = GetServerTimeFromError(outcome.GetError());
+ const auto signingTimestamp = signer->GetSigningTimestamp();
+ if (!serverTime.WasParseSuccessful() || serverTime == DateTime())
+ {
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Date header was not found in the response, can't attempt to detect clock skew");
+ return false;
+ }
+
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Server time is " << serverTime.ToGmtString(DateFormat::RFC822) << ", while client time is " << DateTime::Now().ToGmtString(DateFormat::RFC822));
+ auto diff = DateTime::Diff(serverTime, signingTimestamp);
+ //only try again if clock skew was the cause of the error.
+ if (diff >= TIME_DIFF_MAX || diff <= TIME_DIFF_MIN)
+ {
+ diff = DateTime::Diff(serverTime, DateTime::Now());
+ AWS_LOGSTREAM_INFO(AWS_CLIENT_LOG_TAG, "Computed time difference as " << diff.count() << " milliseconds. Adjusting signer with the skew.");
+ signer->SetClockSkew(diff);
+ AWSError<CoreErrors> newError(
+ outcome.GetError().GetErrorType(), outcome.GetError().GetExceptionName(), outcome.GetError().GetMessage(), true);
+ newError.SetResponseHeaders(outcome.GetError().GetResponseHeaders());
+ newError.SetResponseCode(outcome.GetError().GetResponseCode());
+ outcome = std::move(newError);
+ return true;
+ }
+ }
+ return false;
+}
+
+HttpResponseOutcome AWSClient::AttemptExhaustively(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ HttpMethod method,
+ const char* signerName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ if (!Aws::Utils::IsValidHost(uri.GetAuthority()))
+ {
+ return HttpResponseOutcome(AWSError<CoreErrors>(CoreErrors::VALIDATION, "", "Invalid DNS Label found in URI host", false/*retryable*/));
+ }
+ std::shared_ptr<HttpRequest> httpRequest(CreateHttpRequest(uri, method, request.GetResponseStreamFactory()));
+ HttpResponseOutcome outcome;
+ AWSError<CoreErrors> lastError;
+ Aws::Monitoring::CoreMetricsCollection coreMetrics;
+ auto contexts = Aws::Monitoring::OnRequestStarted(this->GetServiceClientName(), request.GetServiceRequestName(), httpRequest);
+ const char* signerRegion = signerRegionOverride;
+ Aws::String regionFromResponse;
+
+ Aws::String invocationId = UUID::RandomUUID();
+ RequestInfo requestInfo;
+ requestInfo.attempt = 1;
+ requestInfo.maxAttempts = 0;
+ httpRequest->SetHeaderValue(Http::SDK_INVOCATION_ID_HEADER, invocationId);
+ httpRequest->SetHeaderValue(Http::SDK_REQUEST_HEADER, requestInfo);
+
+ for (long retries = 0;; retries++)
+ {
+ m_retryStrategy->GetSendToken();
+ httpRequest->SetEventStreamRequest(request.IsEventStreamRequest());
+
+ outcome = AttemptOneRequest(httpRequest, request, signerName, signerRegion, signerServiceNameOverride);
+ if (retries == 0)
+ {
+ m_retryStrategy->RequestBookkeeping(outcome);
+ }
+ else
+ {
+ m_retryStrategy->RequestBookkeeping(outcome, lastError);
+ }
+ coreMetrics.httpClientMetrics = httpRequest->GetRequestMetrics();
+ if (outcome.IsSuccess())
+ {
+ Aws::Monitoring::OnRequestSucceeded(this->GetServiceClientName(), request.GetServiceRequestName(), httpRequest, outcome, coreMetrics, contexts);
+ AWS_LOGSTREAM_TRACE(AWS_CLIENT_LOG_TAG, "Request successful returning.");
+ break;
+ }
+ lastError = outcome.GetError();
+
+ DateTime serverTime = GetServerTimeFromError(outcome.GetError());
+ auto clockSkew = DateTime::Diff(serverTime, DateTime::Now());
+
+ Aws::Monitoring::OnRequestFailed(this->GetServiceClientName(), request.GetServiceRequestName(), httpRequest, outcome, coreMetrics, contexts);
+
+ if (!m_httpClient->IsRequestProcessingEnabled())
+ {
+ AWS_LOGSTREAM_TRACE(AWS_CLIENT_LOG_TAG, "Request was cancelled externally.");
+ break;
+ }
+
+ // Adjust region
+ bool retryWithCorrectRegion = false;
+ HttpResponseCode httpResponseCode = outcome.GetError().GetResponseCode();
+ if (httpResponseCode == HttpResponseCode::MOVED_PERMANENTLY || // 301
+ httpResponseCode == HttpResponseCode::TEMPORARY_REDIRECT || // 307
+ httpResponseCode == HttpResponseCode::BAD_REQUEST || // 400
+ httpResponseCode == HttpResponseCode::FORBIDDEN) // 403
+ {
+ regionFromResponse = GetErrorMarshaller()->ExtractRegion(outcome.GetError());
+ if (m_region == Aws::Region::AWS_GLOBAL && !regionFromResponse.empty() && regionFromResponse != signerRegion)
+ {
+ signerRegion = regionFromResponse.c_str();
+ retryWithCorrectRegion = true;
+ }
+ }
+
+ long sleepMillis = m_retryStrategy->CalculateDelayBeforeNextRetry(outcome.GetError(), retries);
+ //AdjustClockSkew returns true means clock skew was the problem and skew was adjusted, false otherwise.
+ //sleep if clock skew and region was NOT the problem. AdjustClockSkew may update error inside outcome.
+ bool shouldSleep = !AdjustClockSkew(outcome, signerName) && !retryWithCorrectRegion;
+
+ if (!retryWithCorrectRegion && !m_retryStrategy->ShouldRetry(outcome.GetError(), retries))
+ {
+ break;
+ }
+
+ AWS_LOGSTREAM_WARN(AWS_CLIENT_LOG_TAG, "Request failed, now waiting " << sleepMillis << " ms before attempting again.");
+ if(request.GetBody())
+ {
+ request.GetBody()->clear();
+ request.GetBody()->seekg(0);
+ }
+
+ if (request.GetRequestRetryHandler())
+ {
+ request.GetRequestRetryHandler()(request);
+ }
+
+ if (shouldSleep)
+ {
+ m_httpClient->RetryRequestSleep(std::chrono::milliseconds(sleepMillis));
+ }
+
+ Aws::Http::URI newUri = uri;
+ Aws::String newEndpoint = GetErrorMarshaller()->ExtractEndpoint(outcome.GetError());
+ if (!newEndpoint.empty())
+ {
+ newUri.SetAuthority(newEndpoint);
+ }
+ httpRequest = CreateHttpRequest(newUri, method, request.GetResponseStreamFactory());
+
+ httpRequest->SetHeaderValue(Http::SDK_INVOCATION_ID_HEADER, invocationId);
+ if (serverTime.WasParseSuccessful() && serverTime != DateTime())
+ {
+ requestInfo.ttl = DateTime::Now() + clockSkew + std::chrono::milliseconds(m_requestTimeoutMs);
+ }
+ requestInfo.attempt ++;
+ requestInfo.maxAttempts = m_retryStrategy->GetMaxAttempts();
+ httpRequest->SetHeaderValue(Http::SDK_REQUEST_HEADER, requestInfo);
+ Aws::Monitoring::OnRequestRetry(this->GetServiceClientName(), request.GetServiceRequestName(), httpRequest, contexts);
+ }
+ Aws::Monitoring::OnFinish(this->GetServiceClientName(), request.GetServiceRequestName(), httpRequest, contexts);
+ return outcome;
+}
+
+HttpResponseOutcome AWSClient::AttemptExhaustively(const Aws::Http::URI& uri,
+ HttpMethod method,
+ const char* signerName,
+ const char* requestName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ if (!Aws::Utils::IsValidHost(uri.GetAuthority()))
+ {
+ return HttpResponseOutcome(AWSError<CoreErrors>(CoreErrors::VALIDATION, "", "Invalid DNS Label found in URI host", false/*retryable*/));
+ }
+
+ std::shared_ptr<HttpRequest> httpRequest(CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));
+ HttpResponseOutcome outcome;
+ AWSError<CoreErrors> lastError;
+ Aws::Monitoring::CoreMetricsCollection coreMetrics;
+ auto contexts = Aws::Monitoring::OnRequestStarted(this->GetServiceClientName(), requestName, httpRequest);
+ const char* signerRegion = signerRegionOverride;
+ Aws::String regionFromResponse;
+
+ Aws::String invocationId = UUID::RandomUUID();
+ RequestInfo requestInfo;
+ requestInfo.attempt = 1;
+ requestInfo.maxAttempts = 0;
+ httpRequest->SetHeaderValue(Http::SDK_INVOCATION_ID_HEADER, invocationId);
+ httpRequest->SetHeaderValue(Http::SDK_REQUEST_HEADER, requestInfo);
+
+ for (long retries = 0;; retries++)
+ {
+ m_retryStrategy->GetSendToken();
+ outcome = AttemptOneRequest(httpRequest, signerName, requestName, signerRegion, signerServiceNameOverride);
+ if (retries == 0)
+ {
+ m_retryStrategy->RequestBookkeeping(outcome);
+ }
+ else
+ {
+ m_retryStrategy->RequestBookkeeping(outcome, lastError);
+ }
+ coreMetrics.httpClientMetrics = httpRequest->GetRequestMetrics();
+ if (outcome.IsSuccess())
+ {
+ Aws::Monitoring::OnRequestSucceeded(this->GetServiceClientName(), requestName, httpRequest, outcome, coreMetrics, contexts);
+ AWS_LOGSTREAM_TRACE(AWS_CLIENT_LOG_TAG, "Request successful returning.");
+ break;
+ }
+ lastError = outcome.GetError();
+
+ DateTime serverTime = GetServerTimeFromError(outcome.GetError());
+ auto clockSkew = DateTime::Diff(serverTime, DateTime::Now());
+
+ Aws::Monitoring::OnRequestFailed(this->GetServiceClientName(), requestName, httpRequest, outcome, coreMetrics, contexts);
+
+ if (!m_httpClient->IsRequestProcessingEnabled())
+ {
+ AWS_LOGSTREAM_TRACE(AWS_CLIENT_LOG_TAG, "Request was cancelled externally.");
+ break;
+ }
+
+ // Adjust region
+ bool retryWithCorrectRegion = false;
+ HttpResponseCode httpResponseCode = outcome.GetError().GetResponseCode();
+ if (httpResponseCode == HttpResponseCode::MOVED_PERMANENTLY || // 301
+ httpResponseCode == HttpResponseCode::TEMPORARY_REDIRECT || // 307
+ httpResponseCode == HttpResponseCode::BAD_REQUEST || // 400
+ httpResponseCode == HttpResponseCode::FORBIDDEN) // 403
+ {
+ regionFromResponse = GetErrorMarshaller()->ExtractRegion(outcome.GetError());
+ if (m_region == Aws::Region::AWS_GLOBAL && !regionFromResponse.empty() && regionFromResponse != signerRegion)
+ {
+ signerRegion = regionFromResponse.c_str();
+ retryWithCorrectRegion = true;
+ }
+ }
+
+ long sleepMillis = m_retryStrategy->CalculateDelayBeforeNextRetry(outcome.GetError(), retries);
+ //AdjustClockSkew returns true means clock skew was the problem and skew was adjusted, false otherwise.
+ //sleep if clock skew and region was NOT the problem. AdjustClockSkew may update error inside outcome.
+ bool shouldSleep = !AdjustClockSkew(outcome, signerName) && !retryWithCorrectRegion;
+
+ if (!retryWithCorrectRegion && !m_retryStrategy->ShouldRetry(outcome.GetError(), retries))
+ {
+ break;
+ }
+
+ AWS_LOGSTREAM_WARN(AWS_CLIENT_LOG_TAG, "Request failed, now waiting " << sleepMillis << " ms before attempting again.");
+
+ if (shouldSleep)
+ {
+ m_httpClient->RetryRequestSleep(std::chrono::milliseconds(sleepMillis));
+ }
+
+ Aws::Http::URI newUri = uri;
+ Aws::String newEndpoint = GetErrorMarshaller()->ExtractEndpoint(outcome.GetError());
+ if (!newEndpoint.empty())
+ {
+ newUri.SetAuthority(newEndpoint);
+ }
+ httpRequest = CreateHttpRequest(newUri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+
+ httpRequest->SetHeaderValue(Http::SDK_INVOCATION_ID_HEADER, invocationId);
+ if (serverTime.WasParseSuccessful() && serverTime != DateTime())
+ {
+ requestInfo.ttl = DateTime::Now() + clockSkew + std::chrono::milliseconds(m_requestTimeoutMs);
+ }
+ requestInfo.attempt ++;
+ requestInfo.maxAttempts = m_retryStrategy->GetMaxAttempts();
+ httpRequest->SetHeaderValue(Http::SDK_REQUEST_HEADER, requestInfo);
+ Aws::Monitoring::OnRequestRetry(this->GetServiceClientName(), requestName, httpRequest, contexts);
+ }
+ Aws::Monitoring::OnFinish(this->GetServiceClientName(), requestName, httpRequest, contexts);
+ return outcome;
+}
+
+static bool DoesResponseGenerateError(const std::shared_ptr<HttpResponse>& response)
+{
+ if (response->HasClientError()) return true;
+
+ int responseCode = static_cast<int>(response->GetResponseCode());
+ return responseCode < SUCCESS_RESPONSE_MIN || responseCode > SUCCESS_RESPONSE_MAX;
+
+}
+
+HttpResponseOutcome AWSClient::AttemptOneRequest(const std::shared_ptr<HttpRequest>& httpRequest, const Aws::AmazonWebServiceRequest& request,
+ const char* signerName, const char* signerRegionOverride, const char* signerServiceNameOverride) const
+{
+ BuildHttpRequest(request, httpRequest);
+ auto signer = GetSignerByName(signerName);
+ if (!signer->SignRequest(*httpRequest, signerRegionOverride, signerServiceNameOverride, request.SignBody()))
+ {
+ AWS_LOGSTREAM_ERROR(AWS_CLIENT_LOG_TAG, "Request signing failed. Returning error.");
+ return HttpResponseOutcome(AWSError<CoreErrors>(CoreErrors::CLIENT_SIGNING_FAILURE, "", "SDK failed to sign the request", false/*retryable*/));
+ }
+
+ if (request.GetRequestSignedHandler())
+ {
+ request.GetRequestSignedHandler()(*httpRequest);
+ }
+
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request Successfully signed");
+ std::shared_ptr<HttpResponse> httpResponse(
+ m_httpClient->MakeRequest(httpRequest, m_readRateLimiter.get(), m_writeRateLimiter.get()));
+
+ if (DoesResponseGenerateError(httpResponse))
+ {
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned error. Attempting to generate appropriate error codes from response");
+ auto error = BuildAWSError(httpResponse);
+ return HttpResponseOutcome(std::move(error));
+ }
+
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned successful response.");
+
+ return HttpResponseOutcome(std::move(httpResponse));
+}
+
+HttpResponseOutcome AWSClient::AttemptOneRequest(const std::shared_ptr<HttpRequest>& httpRequest,
+ const char* signerName, const char* requestName, const char* signerRegionOverride, const char* signerServiceNameOverride) const
+{
+ AWS_UNREFERENCED_PARAM(requestName);
+
+ auto signer = GetSignerByName(signerName);
+ if (!signer->SignRequest(*httpRequest, signerRegionOverride, signerServiceNameOverride, true))
+ {
+ AWS_LOGSTREAM_ERROR(AWS_CLIENT_LOG_TAG, "Request signing failed. Returning error.");
+ return HttpResponseOutcome(AWSError<CoreErrors>(CoreErrors::CLIENT_SIGNING_FAILURE, "", "SDK failed to sign the request", false/*retryable*/));
+ }
+
+ //user agent and headers like that shouldn't be signed for the sake of compatibility with proxies which MAY mutate that header.
+ AddCommonHeaders(*httpRequest);
+
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request Successfully signed");
+ std::shared_ptr<HttpResponse> httpResponse(
+ m_httpClient->MakeRequest(httpRequest, m_readRateLimiter.get(), m_writeRateLimiter.get()));
+
+ if (DoesResponseGenerateError(httpResponse))
+ {
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned error. Attempting to generate appropriate error codes from response");
+ auto error = BuildAWSError(httpResponse);
+ return HttpResponseOutcome(std::move(error));
+ }
+
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned successful response.");
+
+ return HttpResponseOutcome(std::move(httpResponse));
+}
+
+StreamOutcome AWSClient::MakeRequestWithUnparsedResponse(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpResponseOutcome = AttemptExhaustively(uri, request, method, signerName, signerRegionOverride, signerServiceNameOverride);
+ if (httpResponseOutcome.IsSuccess())
+ {
+ return StreamOutcome(AmazonWebServiceResult<Stream::ResponseStream>(
+ httpResponseOutcome.GetResult()->SwapResponseStreamOwnership(),
+ httpResponseOutcome.GetResult()->GetHeaders(), httpResponseOutcome.GetResult()->GetResponseCode()));
+ }
+
+ return StreamOutcome(std::move(httpResponseOutcome));
+}
+
+StreamOutcome AWSClient::MakeRequestWithUnparsedResponse(const Aws::Http::URI& uri,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* requestName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpResponseOutcome = AttemptExhaustively(uri, method, signerName, requestName, signerRegionOverride, signerServiceNameOverride);
+ if (httpResponseOutcome.IsSuccess())
+ {
+ return StreamOutcome(AmazonWebServiceResult<Stream::ResponseStream>(
+ httpResponseOutcome.GetResult()->SwapResponseStreamOwnership(),
+ httpResponseOutcome.GetResult()->GetHeaders(), httpResponseOutcome.GetResult()->GetResponseCode()));
+ }
+
+ return StreamOutcome(std::move(httpResponseOutcome));
+}
+
+XmlOutcome AWSXMLClient::MakeRequestWithEventStream(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpOutcome = AttemptExhaustively(uri, request, method, signerName, signerRegionOverride, signerServiceNameOverride);
+ if (httpOutcome.IsSuccess())
+ {
+ return XmlOutcome(AmazonWebServiceResult<XmlDocument>(XmlDocument(), httpOutcome.GetResult()->GetHeaders()));
+ }
+
+ return XmlOutcome(std::move(httpOutcome));
+}
+
+XmlOutcome AWSXMLClient::MakeRequestWithEventStream(const Aws::Http::URI& uri,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* requestName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpOutcome = AttemptExhaustively(uri, method, signerName, requestName, signerRegionOverride, signerServiceNameOverride);
+ if (httpOutcome.IsSuccess())
+ {
+ return XmlOutcome(AmazonWebServiceResult<XmlDocument>(XmlDocument(), httpOutcome.GetResult()->GetHeaders()));
+ }
+
+ return XmlOutcome(std::move(httpOutcome));
+}
+
+void AWSClient::AddHeadersToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest,
+ const Http::HeaderValueCollection& headerValues) const
+{
+ for (auto const& headerValue : headerValues)
+ {
+ httpRequest->SetHeaderValue(headerValue.first, headerValue.second);
+ }
+
+ AddCommonHeaders(*httpRequest);
+}
+
+void AWSClient::AddContentBodyToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest,
+ const std::shared_ptr<Aws::IOStream>& body, bool needsContentMd5, bool isChunked) const
+{
+ httpRequest->AddContentBody(body);
+
+ //If there is no body, we have a content length of 0
+ //note: we also used to remove content-type, but S3 actually needs content-type on InitiateMultipartUpload and it isn't
+ //forbiden by the spec. If we start getting weird errors related to this, make sure it isn't caused by this removal.
+ if (!body)
+ {
+ AWS_LOGSTREAM_TRACE(AWS_CLIENT_LOG_TAG, "No content body, content-length headers");
+
+ if(httpRequest->GetMethod() == HttpMethod::HTTP_POST || httpRequest->GetMethod() == HttpMethod::HTTP_PUT)
+ {
+ httpRequest->SetHeaderValue(Http::CONTENT_LENGTH_HEADER, "0");
+ }
+ else
+ {
+ httpRequest->DeleteHeader(Http::CONTENT_LENGTH_HEADER);
+ }
+ }
+
+ //Add transfer-encoding:chunked to header
+ if (body && isChunked)
+ {
+ httpRequest->SetTransferEncoding(CHUNKED_VALUE);
+ }
+ //in the scenario where we are adding a content body as a stream, the request object likely already
+ //has a content-length header set and we don't want to seek the stream just to find this information.
+ else if (body && !httpRequest->HasHeader(Http::CONTENT_LENGTH_HEADER))
+ {
+ if (!m_httpClient->SupportsChunkedTransferEncoding())
+ {
+ AWS_LOGSTREAM_WARN(AWS_CLIENT_LOG_TAG, "This http client doesn't support transfer-encoding:chunked. " <<
+ "The request may fail if it's not a seekable stream.");
+ }
+ AWS_LOGSTREAM_TRACE(AWS_CLIENT_LOG_TAG, "Found body, but content-length has not been set, attempting to compute content-length");
+ body->seekg(0, body->end);
+ auto streamSize = body->tellg();
+ body->seekg(0, body->beg);
+ Aws::StringStream ss;
+ ss << streamSize;
+ httpRequest->SetContentLength(ss.str());
+ }
+
+ if (needsContentMd5 && body && !httpRequest->HasHeader(Http::CONTENT_MD5_HEADER))
+ {
+ AWS_LOGSTREAM_TRACE(AWS_CLIENT_LOG_TAG, "Found body, and content-md5 needs to be set" <<
+ ", attempting to compute content-md5");
+
+ //changing the internal state of the hash computation is not a logical state
+ //change as far as constness goes for this class. Due to the platform specificness
+ //of hash computations, we can't control the fact that computing a hash mutates
+ //state on some platforms such as windows (but that isn't a concern of this class.
+ auto md5HashResult = const_cast<AWSClient*>(this)->m_hash->Calculate(*body);
+ body->clear();
+ if (md5HashResult.IsSuccess())
+ {
+ httpRequest->SetHeaderValue(Http::CONTENT_MD5_HEADER, HashingUtils::Base64Encode(md5HashResult.GetResult()));
+ }
+ }
+}
+
+Aws::String Aws::Client::GetAuthorizationHeader(const Aws::Http::HttpRequest& httpRequest)
+{
+ // Extract the hex-encoded signature from the authorization header rather than recalculating it.
+ assert(httpRequest.HasAwsAuthorization());
+ const auto& authHeader = httpRequest.GetAwsAuthorization();
+ auto signaturePosition = authHeader.rfind(Aws::Auth::SIGNATURE);
+ // The auth header should end with 'Signature=<64 chars>'
+ // Make sure we found the word 'Signature' in the header and make sure it's the last item followed by its 64 hex chars
+ if (signaturePosition == Aws::String::npos || (signaturePosition + strlen(Aws::Auth::SIGNATURE) + 1/*'=' character*/ + 64/*hex chars*/) != authHeader.length())
+ {
+ AWS_LOGSTREAM_ERROR(AWS_CLIENT_LOG_TAG, "Failed to extract signature from authorization header.");
+ return {};
+ }
+ return authHeader.substr(signaturePosition + strlen(Aws::Auth::SIGNATURE) + 1);
+}
+
+void AWSClient::BuildHttpRequest(const Aws::AmazonWebServiceRequest& request,
+ const std::shared_ptr<HttpRequest>& httpRequest) const
+{
+ //do headers first since the request likely will set content-length as it's own header.
+ AddHeadersToRequest(httpRequest, request.GetHeaders());
+
+ if (request.IsEventStreamRequest())
+ {
+ httpRequest->AddContentBody(request.GetBody());
+ }
+ else
+ {
+ AddContentBodyToRequest(httpRequest, request.GetBody(), request.ShouldComputeContentMd5(), request.IsStreaming() && request.IsChunked() && m_httpClient->SupportsChunkedTransferEncoding());
+ }
+
+ // Pass along handlers for processing data sent/received in bytes
+ httpRequest->SetDataReceivedEventHandler(request.GetDataReceivedEventHandler());
+ httpRequest->SetDataSentEventHandler(request.GetDataSentEventHandler());
+ httpRequest->SetContinueRequestHandle(request.GetContinueRequestHandler());
+
+ request.AddQueryStringParameters(httpRequest->GetUri());
+}
+
+void AWSClient::AddCommonHeaders(HttpRequest& httpRequest) const
+{
+ httpRequest.SetUserAgent(m_userAgent);
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(URI& uri, HttpMethod method, long long expirationInSeconds)
+{
+ std::shared_ptr<HttpRequest> request = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*request, expirationInSeconds))
+ {
+ return request->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(URI& uri, HttpMethod method, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds)
+{
+ std::shared_ptr<HttpRequest> request = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+ for (const auto& it: customizedHeaders)
+ {
+ request->SetHeaderValue(it.first.c_str(), it.second);
+ }
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*request, expirationInSeconds))
+ {
+ return request->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(URI& uri, HttpMethod method, const char* region, long long expirationInSeconds) const
+{
+ std::shared_ptr<HttpRequest> request = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*request, region, expirationInSeconds))
+ {
+ return request->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(URI& uri, HttpMethod method, const char* region, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds)
+{
+ std::shared_ptr<HttpRequest> request = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+ for (const auto& it: customizedHeaders)
+ {
+ request->SetHeaderValue(it.first.c_str(), it.second);
+ }
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*request, region, expirationInSeconds))
+ {
+ return request->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, long long expirationInSeconds) const
+{
+ std::shared_ptr<HttpRequest> request = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*request, region, serviceName, expirationInSeconds))
+ {
+ return request->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds)
+{
+ std::shared_ptr<HttpRequest> request = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+ for (const auto& it: customizedHeaders)
+ {
+ request->SetHeaderValue(it.first.c_str(), it.second);
+ }
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*request, region, serviceName, expirationInSeconds))
+ {
+ return request->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region,
+ const Aws::Http::QueryStringParameterCollection& extraParams, long long expirationInSeconds) const
+{
+ std::shared_ptr<HttpRequest> httpRequest =
+ ConvertToRequestForPresigning(request, uri, method, extraParams);
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*httpRequest, region, expirationInSeconds))
+ {
+ return httpRequest->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName,
+const Aws::Http::QueryStringParameterCollection& extraParams, long long expirationInSeconds) const
+{
+ std::shared_ptr<HttpRequest> httpRequest =
+ ConvertToRequestForPresigning(request, uri, method, extraParams);
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*httpRequest, region, serviceName, expirationInSeconds))
+ {
+ return httpRequest->GetURIString();
+ }
+
+ return {};
+}
+
+Aws::String AWSClient::GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri, Aws::Http::HttpMethod method,
+ const Aws::Http::QueryStringParameterCollection& extraParams, long long expirationInSeconds) const
+{
+ std::shared_ptr<HttpRequest> httpRequest =
+ ConvertToRequestForPresigning(request, uri, method, extraParams);
+ auto signer = GetSignerByName(Aws::Auth::SIGV4_SIGNER);
+ if (signer->PresignRequest(*httpRequest, expirationInSeconds))
+ {
+ return httpRequest->GetURIString();
+ }
+
+ return {};
+}
+
+std::shared_ptr<Aws::Http::HttpRequest> AWSClient::ConvertToRequestForPresigning(const Aws::AmazonWebServiceRequest& request, Aws::Http::URI& uri,
+ Aws::Http::HttpMethod method, const Aws::Http::QueryStringParameterCollection& extraParams) const
+{
+ request.PutToPresignedUrl(uri);
+ std::shared_ptr<HttpRequest> httpRequest = CreateHttpRequest(uri, method, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
+
+ for (auto& param : extraParams)
+ {
+ httpRequest->AddQueryStringParameter(param.first.c_str(), param.second);
+ }
+
+ return httpRequest;
+}
+
+std::shared_ptr<Aws::Http::HttpResponse> AWSClient::MakeHttpRequest(std::shared_ptr<Aws::Http::HttpRequest>& request) const
+{
+ return m_httpClient->MakeRequest(request, m_readRateLimiter.get(), m_writeRateLimiter.get());
+}
+
+
+////////////////////////////////////////////////////////////////////////////
+AWSJsonClient::AWSJsonClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller) :
+ BASECLASS(configuration, signer, errorMarshaller)
+{
+}
+
+AWSJsonClient::AWSJsonClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller) :
+ BASECLASS(configuration, signerProvider, errorMarshaller)
+{
+}
+
+
+JsonOutcome AWSJsonClient::MakeRequest(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpOutcome(BASECLASS::AttemptExhaustively(uri, request, method, signerName, signerRegionOverride, signerServiceNameOverride));
+ if (!httpOutcome.IsSuccess())
+ {
+ return JsonOutcome(std::move(httpOutcome));
+ }
+
+ if (httpOutcome.GetResult()->GetResponseBody().tellp() > 0)
+ //this is stupid, but gcc doesn't pick up the covariant on the dereference so we have to give it a little hint.
+ return JsonOutcome(AmazonWebServiceResult<JsonValue>(JsonValue(httpOutcome.GetResult()->GetResponseBody()),
+ httpOutcome.GetResult()->GetHeaders(),
+ httpOutcome.GetResult()->GetResponseCode()));
+
+ else
+ return JsonOutcome(AmazonWebServiceResult<JsonValue>(JsonValue(), httpOutcome.GetResult()->GetHeaders()));
+}
+
+JsonOutcome AWSJsonClient::MakeRequest(const Aws::Http::URI& uri,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* requestName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpOutcome(BASECLASS::AttemptExhaustively(uri, method, signerName, requestName, signerRegionOverride, signerServiceNameOverride));
+ if (!httpOutcome.IsSuccess())
+ {
+ return JsonOutcome(std::move(httpOutcome));
+ }
+
+ if (httpOutcome.GetResult()->GetResponseBody().tellp() > 0)
+ {
+ JsonValue jsonValue(httpOutcome.GetResult()->GetResponseBody());
+ if (!jsonValue.WasParseSuccessful())
+ {
+ return JsonOutcome(AWSError<CoreErrors>(CoreErrors::UNKNOWN, "Json Parser Error", jsonValue.GetErrorMessage(), false));
+ }
+
+ //this is stupid, but gcc doesn't pick up the covariant on the dereference so we have to give it a little hint.
+ return JsonOutcome(AmazonWebServiceResult<JsonValue>(std::move(jsonValue),
+ httpOutcome.GetResult()->GetHeaders(),
+ httpOutcome.GetResult()->GetResponseCode()));
+ }
+
+ return JsonOutcome(AmazonWebServiceResult<JsonValue>(JsonValue(), httpOutcome.GetResult()->GetHeaders()));
+}
+
+JsonOutcome AWSJsonClient::MakeEventStreamRequest(std::shared_ptr<Aws::Http::HttpRequest>& request) const
+{
+ // request is assumed to be signed
+ std::shared_ptr<HttpResponse> httpResponse = MakeHttpRequest(request);
+
+ if (DoesResponseGenerateError(httpResponse))
+ {
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned error. Attempting to generate appropriate error codes from response");
+ auto error = BuildAWSError(httpResponse);
+ return JsonOutcome(std::move(error));
+ }
+
+ AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned successful response.");
+
+ HttpResponseOutcome httpOutcome(std::move(httpResponse));
+
+ if (httpOutcome.GetResult()->GetResponseBody().tellp() > 0)
+ {
+ JsonValue jsonValue(httpOutcome.GetResult()->GetResponseBody());
+ if (!jsonValue.WasParseSuccessful())
+ {
+ return JsonOutcome(AWSError<CoreErrors>(CoreErrors::UNKNOWN, "Json Parser Error", jsonValue.GetErrorMessage(), false));
+ }
+
+ //this is stupid, but gcc doesn't pick up the covariant on the dereference so we have to give it a little hint.
+ return JsonOutcome(AmazonWebServiceResult<JsonValue>(std::move(jsonValue),
+ httpOutcome.GetResult()->GetHeaders(),
+ httpOutcome.GetResult()->GetResponseCode()));
+ }
+
+ return JsonOutcome(AmazonWebServiceResult<JsonValue>(JsonValue(), httpOutcome.GetResult()->GetHeaders()));
+}
+
+AWSError<CoreErrors> AWSJsonClient::BuildAWSError(
+ const std::shared_ptr<Aws::Http::HttpResponse>& httpResponse) const
+{
+ AWSError<CoreErrors> error;
+ if (httpResponse->HasClientError())
+ {
+ bool retryable = httpResponse->GetClientErrorType() == CoreErrors::NETWORK_CONNECTION ? true : false;
+ error = AWSError<CoreErrors>(httpResponse->GetClientErrorType(), "", httpResponse->GetClientErrorMessage(), retryable);
+ }
+ else if (!httpResponse->GetResponseBody() || httpResponse->GetResponseBody().tellp() < 1)
+ {
+ auto responseCode = httpResponse->GetResponseCode();
+ auto errorCode = GuessBodylessErrorType(responseCode);
+
+ Aws::StringStream ss;
+ ss << "No response body.";
+ error = AWSError<CoreErrors>(errorCode, "", ss.str(),
+ IsRetryableHttpResponseCode(responseCode));
+ }
+ else
+ {
+ assert(httpResponse->GetResponseCode() != HttpResponseCode::OK);
+ error = GetErrorMarshaller()->Marshall(*httpResponse);
+ }
+
+ error.SetResponseHeaders(httpResponse->GetHeaders());
+ error.SetResponseCode(httpResponse->GetResponseCode());
+ error.SetRemoteHostIpAddress(httpResponse->GetOriginatingRequest().GetResolvedRemoteHost());
+ AWS_LOGSTREAM_ERROR(AWS_CLIENT_LOG_TAG, error);
+ return error;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+AWSXMLClient::AWSXMLClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller) :
+ BASECLASS(configuration, signer, errorMarshaller)
+{
+}
+
+AWSXMLClient::AWSXMLClient(const Aws::Client::ClientConfiguration& configuration,
+ const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
+ const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller) :
+ BASECLASS(configuration, signerProvider, errorMarshaller)
+{
+}
+
+XmlOutcome AWSXMLClient::MakeRequest(const Aws::Http::URI& uri,
+ const Aws::AmazonWebServiceRequest& request,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpOutcome(BASECLASS::AttemptExhaustively(uri, request, method, signerName, signerRegionOverride, signerServiceNameOverride));
+ if (!httpOutcome.IsSuccess())
+ {
+ return XmlOutcome(std::move(httpOutcome));
+ }
+
+ if (httpOutcome.GetResult()->GetResponseBody().tellp() > 0)
+ {
+ XmlDocument xmlDoc = XmlDocument::CreateFromXmlStream(httpOutcome.GetResult()->GetResponseBody());
+
+ if (!xmlDoc.WasParseSuccessful())
+ {
+ AWS_LOGSTREAM_ERROR(AWS_CLIENT_LOG_TAG, "Xml parsing for error failed with message " << xmlDoc.GetErrorMessage().c_str());
+ return AWSError<CoreErrors>(CoreErrors::UNKNOWN, "Xml Parse Error", xmlDoc.GetErrorMessage(), false);
+ }
+
+ return XmlOutcome(AmazonWebServiceResult<XmlDocument>(std::move(xmlDoc),
+ httpOutcome.GetResult()->GetHeaders(), httpOutcome.GetResult()->GetResponseCode()));
+ }
+
+ return XmlOutcome(AmazonWebServiceResult<XmlDocument>(XmlDocument(), httpOutcome.GetResult()->GetHeaders()));
+}
+
+XmlOutcome AWSXMLClient::MakeRequest(const Aws::Http::URI& uri,
+ Http::HttpMethod method,
+ const char* signerName,
+ const char* requestName,
+ const char* signerRegionOverride,
+ const char* signerServiceNameOverride) const
+{
+ HttpResponseOutcome httpOutcome(BASECLASS::AttemptExhaustively(uri, method, signerName, requestName, signerRegionOverride, signerServiceNameOverride));
+ if (!httpOutcome.IsSuccess())
+ {
+ return XmlOutcome(std::move(httpOutcome));
+ }
+
+ if (httpOutcome.GetResult()->GetResponseBody().tellp() > 0)
+ {
+ return XmlOutcome(AmazonWebServiceResult<XmlDocument>(
+ XmlDocument::CreateFromXmlStream(httpOutcome.GetResult()->GetResponseBody()),
+ httpOutcome.GetResult()->GetHeaders(), httpOutcome.GetResult()->GetResponseCode()));
+ }
+
+ return XmlOutcome(AmazonWebServiceResult<XmlDocument>(XmlDocument(), httpOutcome.GetResult()->GetHeaders()));
+}
+
+AWSError<CoreErrors> AWSXMLClient::BuildAWSError(const std::shared_ptr<Http::HttpResponse>& httpResponse) const
+{
+ AWSError<CoreErrors> error;
+ if (httpResponse->HasClientError())
+ {
+ bool retryable = httpResponse->GetClientErrorType() == CoreErrors::NETWORK_CONNECTION ? true : false;
+ error = AWSError<CoreErrors>(httpResponse->GetClientErrorType(), "", httpResponse->GetClientErrorMessage(), retryable);
+ }
+ else if (!httpResponse->GetResponseBody() || httpResponse->GetResponseBody().tellp() < 1)
+ {
+ auto responseCode = httpResponse->GetResponseCode();
+ auto errorCode = GuessBodylessErrorType(responseCode);
+
+ Aws::StringStream ss;
+ ss << "No response body.";
+ error = AWSError<CoreErrors>(errorCode, "", ss.str(), IsRetryableHttpResponseCode(responseCode));
+ }
+ else
+ {
+ assert(httpResponse->GetResponseCode() != HttpResponseCode::OK);
+
+ // When trying to build an AWS Error from a response which is an FStream, we need to rewind the
+ // file pointer back to the beginning in order to correctly read the input using the XML string iterator
+ if ((httpResponse->GetResponseBody().tellp() > 0)
+ && (httpResponse->GetResponseBody().tellg() > 0))
+ {
+ httpResponse->GetResponseBody().seekg(0);
+ }
+
+ error = GetErrorMarshaller()->Marshall(*httpResponse);
+ }
+
+ error.SetResponseHeaders(httpResponse->GetHeaders());
+ error.SetResponseCode(httpResponse->GetResponseCode());
+ error.SetRemoteHostIpAddress(httpResponse->GetOriginatingRequest().GetResolvedRemoteHost());
+ AWS_LOGSTREAM_ERROR(AWS_CLIENT_LOG_TAG, error);
+ return error;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp
new file mode 100644
index 00000000000..f5fa676f986
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp
@@ -0,0 +1,180 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/AWSErrorMarshaller.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/json/JsonSerializer.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/CoreErrors.h>
+
+using namespace Aws::Utils::Logging;
+using namespace Aws::Utils::Json;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Http;
+using namespace Aws::Utils;
+using namespace Aws::Client;
+
+static const char AWS_ERROR_MARSHALLER_LOG_TAG[] = "AWSErrorMarshaller";
+AWS_CORE_API extern const char MESSAGE_LOWER_CASE[] = "message";
+AWS_CORE_API extern const char MESSAGE_CAMEL_CASE[] = "Message";
+AWS_CORE_API extern const char ERROR_TYPE_HEADER[] = "x-amzn-ErrorType";
+AWS_CORE_API extern const char REQUEST_ID_HEADER[] = "x-amzn-RequestId";
+AWS_CORE_API extern const char TYPE[] = "__type";
+
+AWSError<CoreErrors> JsonErrorMarshaller::Marshall(const Aws::Http::HttpResponse& httpResponse) const
+{
+ JsonValue exceptionPayload(httpResponse.GetResponseBody());
+ JsonView payloadView(exceptionPayload);
+ AWSError<CoreErrors> error;
+ if (exceptionPayload.WasParseSuccessful())
+ {
+ AWS_LOGSTREAM_TRACE(AWS_ERROR_MARSHALLER_LOG_TAG, "Error response is " << payloadView.WriteReadable());
+
+ Aws::String message(payloadView.ValueExists(MESSAGE_CAMEL_CASE) ? payloadView.GetString(MESSAGE_CAMEL_CASE) :
+ payloadView.ValueExists(MESSAGE_LOWER_CASE) ? payloadView.GetString(MESSAGE_LOWER_CASE) : "");
+
+ if (httpResponse.HasHeader(ERROR_TYPE_HEADER))
+ {
+ error = Marshall(httpResponse.GetHeader(ERROR_TYPE_HEADER), message);
+ }
+ else if (payloadView.ValueExists(TYPE))
+ {
+ error = Marshall(payloadView.GetString(TYPE), message);
+ }
+ else
+ {
+ error = FindErrorByHttpResponseCode(httpResponse.GetResponseCode());
+ error.SetMessage(message);
+ }
+ }
+ else
+ {
+ error = AWSError<CoreErrors>(CoreErrors::UNKNOWN, "", "Failed to parse error payload", false);
+ }
+
+ error.SetRequestId(httpResponse.HasHeader(REQUEST_ID_HEADER) ? httpResponse.GetHeader(REQUEST_ID_HEADER) : "");
+ error.SetJsonPayload(std::move(exceptionPayload));
+ return error;
+}
+
+const JsonValue& JsonErrorMarshaller::GetJsonPayloadFromError(const AWSError<CoreErrors>& error) const
+{
+ return error.GetJsonPayload();
+}
+
+AWSError<CoreErrors> XmlErrorMarshaller::Marshall(const Aws::Http::HttpResponse& httpResponse) const
+{
+ XmlDocument doc = XmlDocument::CreateFromXmlStream(httpResponse.GetResponseBody());
+ AWS_LOGSTREAM_TRACE(AWS_ERROR_MARSHALLER_LOG_TAG, "Error response is " << doc.ConvertToString());
+ bool errorParsed = false;
+ AWSError<CoreErrors> error;
+ if (doc.WasParseSuccessful() && !doc.GetRootElement().IsNull())
+ {
+ XmlNode errorNode = doc.GetRootElement();
+
+ Aws::String requestId(!errorNode.FirstChild("RequestId").IsNull() ? errorNode.FirstChild("RequestId").GetText() :
+ !errorNode.FirstChild("RequestID").IsNull() ? errorNode.FirstChild("RequestID").GetText() : "");
+
+ if (errorNode.GetName() != "Error")
+ {
+ errorNode = doc.GetRootElement().FirstChild("Error");
+ }
+ if (errorNode.IsNull())
+ {
+ errorNode = doc.GetRootElement().FirstChild("Errors");
+ if(!errorNode.IsNull())
+ {
+ errorNode = errorNode.FirstChild("Error");
+ }
+ }
+
+ if (!errorNode.IsNull())
+ {
+ requestId = !requestId.empty() ? requestId : !errorNode.FirstChild("RequestId").IsNull() ? errorNode.FirstChild("RequestId").GetText() :
+ !errorNode.FirstChild("RequestID").IsNull() ? errorNode.FirstChild("RequestID").GetText() : "";
+
+ XmlNode codeNode = errorNode.FirstChild("Code");
+ XmlNode messageNode = errorNode.FirstChild("Message");
+
+ if (!codeNode.IsNull())
+ {
+ error = Marshall(StringUtils::Trim(codeNode.GetText().c_str()),
+ StringUtils::Trim(messageNode.GetText().c_str()));
+ errorParsed = true;
+ }
+ }
+
+ error.SetRequestId(requestId);
+ }
+
+ if(!errorParsed)
+ {
+ // An error occurred attempting to parse the httpResponse as an XML stream, so we're just
+ // going to dump the XML parsing error and the http response code as a string
+ AWS_LOGSTREAM_WARN(AWS_ERROR_MARSHALLER_LOG_TAG, "Unable to generate a proper httpResponse from the response "
+ "stream. Response code: " << static_cast< uint32_t >(httpResponse.GetResponseCode()));
+ error = FindErrorByHttpResponseCode(httpResponse.GetResponseCode());
+ }
+
+ error.SetXmlPayload(std::move(doc));
+ return error;
+}
+
+const XmlDocument& XmlErrorMarshaller::GetXmlPayloadFromError(const AWSError<CoreErrors>& error) const
+{
+ return error.GetXmlPayload();
+}
+
+AWSError<CoreErrors> AWSErrorMarshaller::Marshall(const Aws::String& exceptionName, const Aws::String& message) const
+{
+ if(exceptionName.empty())
+ {
+ return AWSError<CoreErrors>(CoreErrors::UNKNOWN, "", message, false);
+ }
+
+ auto locationOfPound = exceptionName.find_first_of('#');
+ auto locationOfColon = exceptionName.find_first_of(':');
+ Aws::String formalExceptionName;
+
+ if (locationOfPound != Aws::String::npos)
+ {
+ formalExceptionName = exceptionName.substr(locationOfPound + 1);
+ }
+ else if (locationOfColon != Aws::String::npos)
+ {
+ formalExceptionName = exceptionName.substr(0, locationOfColon);
+ }
+ else
+ {
+ formalExceptionName = exceptionName;
+ }
+
+ AWSError<CoreErrors> error = FindErrorByName(formalExceptionName.c_str());
+ if (error.GetErrorType() != CoreErrors::UNKNOWN)
+ {
+ AWS_LOGSTREAM_WARN(AWS_ERROR_MARSHALLER_LOG_TAG, "Encountered AWSError '" << formalExceptionName.c_str() <<
+ "': " << message.c_str());
+ error.SetExceptionName(formalExceptionName);
+ error.SetMessage(message);
+ return error;
+ }
+
+ AWS_LOGSTREAM_WARN(AWS_ERROR_MARSHALLER_LOG_TAG, "Encountered Unknown AWSError '" << exceptionName.c_str() <<
+ "': " << message.c_str());
+
+ return AWSError<CoreErrors>(CoreErrors::UNKNOWN, exceptionName, "Unable to parse ExceptionName: " + exceptionName + " Message: " + message, false);
+}
+
+AWSError<CoreErrors> AWSErrorMarshaller::FindErrorByName(const char* errorName) const
+{
+ return CoreErrorsMapper::GetErrorForName(errorName);
+}
+
+AWSError<CoreErrors> AWSErrorMarshaller::FindErrorByHttpResponseCode(Aws::Http::HttpResponseCode code) const
+{
+ return CoreErrorsMapper::GetErrorForHttpResponseCode(code);
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AsyncCallerContext.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AsyncCallerContext.cpp
new file mode 100644
index 00000000000..4f9abdc9e41
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/AsyncCallerContext.cpp
@@ -0,0 +1,16 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/AsyncCallerContext.h>
+#include <aws/core/utils/UUID.h>
+
+namespace Aws
+{
+ namespace Client
+ {
+ AsyncCallerContext::AsyncCallerContext() : m_uuid(Aws::Utils::UUID::RandomUUID())
+ {}
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/ClientConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/ClientConfiguration.cpp
new file mode 100644
index 00000000000..e517379a779
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/ClientConfiguration.cpp
@@ -0,0 +1,160 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/ClientConfiguration.h>
+#include <aws/core/auth/AWSCredentialsProvider.h>
+#include <aws/core/client/DefaultRetryStrategy.h>
+#include <aws/core/platform/Environment.h>
+#include <aws/core/platform/OSVersionInfo.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/threading/Executor.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/Version.h>
+#include <aws/core/config/AWSProfileConfigLoader.h>
+#include <aws/core/utils/logging/LogMacros.h>
+
+namespace Aws
+{
+namespace Auth
+{
+ AWS_CORE_API Aws::String GetConfigProfileFilename();
+}
+namespace Client
+{
+
+static const char* CLIENT_CONFIG_TAG = "ClientConfiguration";
+
+AWS_CORE_API Aws::String ComputeUserAgentString()
+{
+ Aws::StringStream ss;
+ ss << "aws-sdk-cpp/" << Version::GetVersionString() << " " << Aws::OSVersionInfo::ComputeOSVersionString()
+ << " " << Version::GetCompilerVersionString();
+ return ss.str();
+}
+
+ClientConfiguration::ClientConfiguration() :
+ scheme(Aws::Http::Scheme::HTTPS),
+ useDualStack(false),
+ maxConnections(25),
+ httpRequestTimeoutMs(0),
+ requestTimeoutMs(3000),
+ connectTimeoutMs(1000),
+ enableTcpKeepAlive(true),
+ tcpKeepAliveIntervalMs(30000),
+ lowSpeedLimit(1),
+ proxyScheme(Aws::Http::Scheme::HTTP),
+ proxyPort(0),
+ executor(Aws::MakeShared<Aws::Utils::Threading::DefaultExecutor>(CLIENT_CONFIG_TAG)),
+ verifySSL(true),
+ writeRateLimiter(nullptr),
+ readRateLimiter(nullptr),
+ httpLibOverride(Aws::Http::TransferLibType::DEFAULT_CLIENT),
+ followRedirects(FollowRedirectsPolicy::DEFAULT),
+ disableExpectHeader(false),
+ enableClockSkewAdjustment(true),
+ enableHostPrefixInjection(true),
+ enableEndpointDiscovery(false),
+ profileName(Aws::Auth::GetConfigProfileName())
+{
+ AWS_LOGSTREAM_DEBUG(CLIENT_CONFIG_TAG, "ClientConfiguration will use SDK Auto Resolved profile: [" << profileName << "] if not specified by users.");
+
+ // Initialize Retry Strategy
+ int maxAttempts;
+ Aws::String maxAttemptsString = Aws::Environment::GetEnv("AWS_MAX_ATTEMPTS");
+ if (maxAttemptsString.empty())
+ {
+ maxAttemptsString = Aws::Config::GetCachedConfigValue("max_attempts");
+ }
+ // In case users specify 0 explicitly to disable retry.
+ if (maxAttemptsString == "0")
+ {
+ maxAttempts = 0;
+ }
+ else
+ {
+ maxAttempts = static_cast<int>(Aws::Utils::StringUtils::ConvertToInt32(maxAttemptsString.c_str()));
+ if (maxAttempts == 0)
+ {
+ AWS_LOGSTREAM_WARN(CLIENT_CONFIG_TAG, "Retry Strategy will use the default max attempts.");
+ maxAttempts = -1;
+ }
+ }
+
+ Aws::String retryMode = Aws::Environment::GetEnv("AWS_RETRY_MODE");
+ if (retryMode.empty())
+ {
+ retryMode = Aws::Config::GetCachedConfigValue("retry_mode");
+ }
+ if (retryMode == "standard")
+ {
+ if (maxAttempts < 0)
+ {
+ retryStrategy = Aws::MakeShared<StandardRetryStrategy>(CLIENT_CONFIG_TAG);
+ }
+ else
+ {
+ retryStrategy = Aws::MakeShared<StandardRetryStrategy>(CLIENT_CONFIG_TAG, maxAttempts);
+ }
+ }
+ else
+ {
+ retryStrategy = Aws::MakeShared<DefaultRetryStrategy>(CLIENT_CONFIG_TAG);
+ }
+
+ // Automatically determine the AWS region from environment variables, configuration file and EC2 metadata.
+ region = Aws::Environment::GetEnv("AWS_DEFAULT_REGION");
+ if (!region.empty())
+ {
+ return;
+ }
+
+ region = Aws::Environment::GetEnv("AWS_REGION");
+ if (!region.empty())
+ {
+ return;
+ }
+
+ region = Aws::Config::GetCachedConfigValue("region");
+ if (!region.empty())
+ {
+ return;
+ }
+
+ if (Aws::Utils::StringUtils::ToLower(Aws::Environment::GetEnv("AWS_EC2_METADATA_DISABLED").c_str()) != "true")
+ {
+ auto client = Aws::Internal::GetEC2MetadataClient();
+ if (client)
+ {
+ region = client->GetCurrentRegion();
+ }
+ }
+
+ if (!region.empty())
+ {
+ return;
+ }
+
+ region = Aws::String(Aws::Region::US_EAST_1);
+}
+
+ClientConfiguration::ClientConfiguration(const char* profile) : ClientConfiguration()
+{
+ if (profile && Aws::Config::HasCachedConfigProfile(profile))
+ {
+ this->profileName = Aws::String(profile);
+ AWS_LOGSTREAM_DEBUG(CLIENT_CONFIG_TAG, "Use user specified profile: [" << this->profileName << "] for ClientConfiguration.");
+ auto tmpRegion = Aws::Config::GetCachedConfigProfile(this->profileName).GetRegion();
+ if (!tmpRegion.empty())
+ {
+ region = tmpRegion;
+ }
+ return;
+ }
+ AWS_LOGSTREAM_WARN(CLIENT_CONFIG_TAG, "User specified profile: [" << profile << "] is not found, will use the SDK resolved one.");
+}
+
+} // namespace Client
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/CoreErrors.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/CoreErrors.cpp
new file mode 100644
index 00000000000..8c2c288dcd4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/CoreErrors.cpp
@@ -0,0 +1,151 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/HashingUtils.h>
+
+using namespace Aws::Client;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+#ifdef _MSC_VER
+#pragma warning(push)
+// VS2015 compiler's bug, warning s_CoreErrorsMapper: symbol will be dynamically initialized (implementation limitation)
+#pragma warning(disable : 4592)
+#endif
+
+static Aws::UniquePtr<Aws::Map<Aws::String, AWSError<CoreErrors> > > s_CoreErrorsMapper(nullptr);
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+void CoreErrorsMapper::InitCoreErrorsMapper()
+{
+ if (s_CoreErrorsMapper)
+ {
+ return;
+ }
+ s_CoreErrorsMapper = Aws::MakeUnique<Aws::Map<Aws::String, AWSError<CoreErrors> > >("InitCoreErrorsMapper");
+
+ s_CoreErrorsMapper->emplace("IncompleteSignature", AWSError<CoreErrors>(CoreErrors::INCOMPLETE_SIGNATURE, false));
+ s_CoreErrorsMapper->emplace("IncompleteSignatureException", AWSError<CoreErrors>(CoreErrors::INCOMPLETE_SIGNATURE, false));
+ s_CoreErrorsMapper->emplace("InvalidSignatureException", AWSError<CoreErrors>(CoreErrors::INVALID_SIGNATURE, false));
+ s_CoreErrorsMapper->emplace("InvalidSignature", AWSError<CoreErrors>(CoreErrors::INVALID_SIGNATURE, false));
+ s_CoreErrorsMapper->emplace("InternalFailureException", AWSError<CoreErrors>(CoreErrors::INTERNAL_FAILURE, true));
+ s_CoreErrorsMapper->emplace("InternalFailure", AWSError<CoreErrors>(CoreErrors::INTERNAL_FAILURE, true));
+ s_CoreErrorsMapper->emplace("InternalServerError", AWSError<CoreErrors>(CoreErrors::INTERNAL_FAILURE, true));
+ s_CoreErrorsMapper->emplace("InternalError", AWSError<CoreErrors>(CoreErrors::INTERNAL_FAILURE, true));
+ s_CoreErrorsMapper->emplace("InvalidActionException", AWSError<CoreErrors>(CoreErrors::INVALID_ACTION, false));
+ s_CoreErrorsMapper->emplace("InvalidAction", AWSError<CoreErrors>(CoreErrors::INVALID_ACTION, false));
+ s_CoreErrorsMapper->emplace("InvalidClientTokenIdException", AWSError<CoreErrors>(CoreErrors::INVALID_CLIENT_TOKEN_ID, false));
+ s_CoreErrorsMapper->emplace("InvalidClientTokenId", AWSError<CoreErrors>(CoreErrors::INVALID_CLIENT_TOKEN_ID, false));
+ s_CoreErrorsMapper->emplace("InvalidParameterCombinationException", AWSError<CoreErrors>(CoreErrors::INVALID_PARAMETER_COMBINATION, false));
+ s_CoreErrorsMapper->emplace("InvalidParameterCombination", AWSError<CoreErrors>(CoreErrors::INVALID_PARAMETER_COMBINATION, false));
+ s_CoreErrorsMapper->emplace("InvalidParameterValueException", AWSError<CoreErrors>(CoreErrors::INVALID_PARAMETER_VALUE, false));
+ s_CoreErrorsMapper->emplace("InvalidParameterValue", AWSError<CoreErrors>(CoreErrors::INVALID_PARAMETER_VALUE, false));
+ s_CoreErrorsMapper->emplace("InvalidQueryParameterException", AWSError<CoreErrors>(CoreErrors::INVALID_QUERY_PARAMETER, false));
+ s_CoreErrorsMapper->emplace("InvalidQueryParameter", AWSError<CoreErrors>(CoreErrors::INVALID_QUERY_PARAMETER, false));
+ s_CoreErrorsMapper->emplace("MalformedQueryStringException", AWSError<CoreErrors>(CoreErrors::MALFORMED_QUERY_STRING, false));
+ s_CoreErrorsMapper->emplace("MalformedQueryString", AWSError<CoreErrors>(CoreErrors::MALFORMED_QUERY_STRING, false));
+ s_CoreErrorsMapper->emplace("MissingActionException", AWSError<CoreErrors>(CoreErrors::MISSING_ACTION, false));
+ s_CoreErrorsMapper->emplace("MissingAction", AWSError<CoreErrors>(CoreErrors::MISSING_ACTION, false));
+ s_CoreErrorsMapper->emplace("MissingAuthenticationTokenException", AWSError<CoreErrors>(CoreErrors::MISSING_AUTHENTICATION_TOKEN, false));
+ s_CoreErrorsMapper->emplace("MissingAuthenticationToken", AWSError<CoreErrors>(CoreErrors::MISSING_AUTHENTICATION_TOKEN, false));
+ s_CoreErrorsMapper->emplace("MissingParameterException", AWSError<CoreErrors>(CoreErrors::MISSING_PARAMETER, false));
+ s_CoreErrorsMapper->emplace("MissingParameter", AWSError<CoreErrors>(CoreErrors::MISSING_PARAMETER, false));
+ s_CoreErrorsMapper->emplace("OptInRequired", AWSError<CoreErrors>(CoreErrors::OPT_IN_REQUIRED, false));
+ s_CoreErrorsMapper->emplace("RequestExpiredException", AWSError<CoreErrors>(CoreErrors::REQUEST_EXPIRED, true));
+ s_CoreErrorsMapper->emplace("RequestExpired", AWSError<CoreErrors>(CoreErrors::REQUEST_EXPIRED, true));
+ s_CoreErrorsMapper->emplace("ServiceUnavailableException", AWSError<CoreErrors>(CoreErrors::SERVICE_UNAVAILABLE, true));
+ s_CoreErrorsMapper->emplace("ServiceUnavailableError", AWSError<CoreErrors>(CoreErrors::SERVICE_UNAVAILABLE, true));
+ s_CoreErrorsMapper->emplace("ServiceUnavailable", AWSError<CoreErrors>(CoreErrors::SERVICE_UNAVAILABLE, true));
+ s_CoreErrorsMapper->emplace("RequestThrottledException", AWSError<CoreErrors>(CoreErrors::THROTTLING, true));
+ s_CoreErrorsMapper->emplace("RequestThrottled", AWSError<CoreErrors>(CoreErrors::THROTTLING, true));
+ s_CoreErrorsMapper->emplace("ThrottlingException", AWSError<CoreErrors>(CoreErrors::THROTTLING, true));
+ s_CoreErrorsMapper->emplace("ThrottledException", AWSError<CoreErrors>(CoreErrors::THROTTLING, true));
+ s_CoreErrorsMapper->emplace("Throttling", AWSError<CoreErrors>(CoreErrors::THROTTLING, true));
+ s_CoreErrorsMapper->emplace("ValidationErrorException", AWSError<CoreErrors>(CoreErrors::VALIDATION, false));
+ s_CoreErrorsMapper->emplace("ValidationException", AWSError<CoreErrors>(CoreErrors::VALIDATION, false));
+ s_CoreErrorsMapper->emplace("ValidationError", AWSError<CoreErrors>(CoreErrors::VALIDATION, false));
+ s_CoreErrorsMapper->emplace("AccessDeniedException", AWSError<CoreErrors>(CoreErrors::ACCESS_DENIED, false));
+ s_CoreErrorsMapper->emplace("AccessDenied", AWSError<CoreErrors>(CoreErrors::ACCESS_DENIED, false));
+ s_CoreErrorsMapper->emplace("ResourceNotFoundException", AWSError<CoreErrors>(CoreErrors::RESOURCE_NOT_FOUND, false));
+ s_CoreErrorsMapper->emplace("ResourceNotFound", AWSError<CoreErrors>(CoreErrors::RESOURCE_NOT_FOUND, false));
+ s_CoreErrorsMapper->emplace("UnrecognizedClientException", AWSError<CoreErrors>(CoreErrors::UNRECOGNIZED_CLIENT, false));
+ s_CoreErrorsMapper->emplace("UnrecognizedClient", AWSError<CoreErrors>(CoreErrors::UNRECOGNIZED_CLIENT, false));
+ s_CoreErrorsMapper->emplace("SlowDownException", AWSError<CoreErrors>(CoreErrors::SLOW_DOWN, true));
+ s_CoreErrorsMapper->emplace("SlowDown", AWSError<CoreErrors>(CoreErrors::SLOW_DOWN, true));
+ s_CoreErrorsMapper->emplace("SignatureDoesNotMatchException", AWSError<CoreErrors>(CoreErrors::SIGNATURE_DOES_NOT_MATCH, false));
+ s_CoreErrorsMapper->emplace("SignatureDoesNotMatch", AWSError<CoreErrors>(CoreErrors::SIGNATURE_DOES_NOT_MATCH, false));
+ s_CoreErrorsMapper->emplace("InvalidAccessKeyIdException", AWSError<CoreErrors>(CoreErrors::INVALID_ACCESS_KEY_ID, false));
+ s_CoreErrorsMapper->emplace("InvalidAccessKeyId", AWSError<CoreErrors>(CoreErrors::INVALID_ACCESS_KEY_ID, false));
+ s_CoreErrorsMapper->emplace("RequestTimeTooSkewedException", AWSError<CoreErrors>(CoreErrors::REQUEST_TIME_TOO_SKEWED, true));
+ s_CoreErrorsMapper->emplace("RequestTimeTooSkewed", AWSError<CoreErrors>(CoreErrors::REQUEST_TIME_TOO_SKEWED, true));
+ s_CoreErrorsMapper->emplace("RequestTimeoutException", AWSError<CoreErrors>(CoreErrors::REQUEST_TIMEOUT, true));
+ s_CoreErrorsMapper->emplace("RequestTimeout", AWSError<CoreErrors>(CoreErrors::REQUEST_TIMEOUT, true));
+}
+
+void CoreErrorsMapper::CleanupCoreErrorsMapper()
+{
+ if (s_CoreErrorsMapper)
+ {
+ s_CoreErrorsMapper = nullptr;
+ }
+}
+
+AWSError<CoreErrors> CoreErrorsMapper::GetErrorForName(const char* errorName)
+{
+ auto iter = s_CoreErrorsMapper->find(errorName);
+ if (iter != s_CoreErrorsMapper->end())
+ {
+ return iter->second;
+ }
+ return AWSError<CoreErrors>(CoreErrors::UNKNOWN, false);
+}
+
+AWS_CORE_API AWSError<CoreErrors> CoreErrorsMapper::GetErrorForHttpResponseCode(HttpResponseCode code)
+{
+ // best effort attempt to map HTTP response codes to CoreErrors
+ bool retryable = IsRetryableHttpResponseCode(code);
+ AWSError<CoreErrors> error;
+ switch (code)
+ {
+ case HttpResponseCode::UNAUTHORIZED:
+ case HttpResponseCode::FORBIDDEN:
+ error = AWSError<CoreErrors>(CoreErrors::ACCESS_DENIED, retryable);
+ break;
+ case HttpResponseCode::NOT_FOUND:
+ error = AWSError<CoreErrors>(CoreErrors::RESOURCE_NOT_FOUND, retryable);
+ break;
+ case HttpResponseCode::TOO_MANY_REQUESTS:
+ error = AWSError<CoreErrors>(CoreErrors::SLOW_DOWN, retryable);
+ break;
+ case HttpResponseCode::INTERNAL_SERVER_ERROR:
+ error = AWSError<CoreErrors>(CoreErrors::INTERNAL_FAILURE, retryable);
+ break;
+ case HttpResponseCode::BANDWIDTH_LIMIT_EXCEEDED:
+ error = AWSError<CoreErrors>(CoreErrors::THROTTLING, retryable);
+ break;
+ case HttpResponseCode::SERVICE_UNAVAILABLE:
+ error = AWSError<CoreErrors>(CoreErrors::SERVICE_UNAVAILABLE, retryable);
+ break;
+ case HttpResponseCode::REQUEST_TIMEOUT:
+ case HttpResponseCode::AUTHENTICATION_TIMEOUT:
+ case HttpResponseCode::LOGIN_TIMEOUT:
+ case HttpResponseCode::GATEWAY_TIMEOUT:
+ case HttpResponseCode::NETWORK_READ_TIMEOUT:
+ case HttpResponseCode::NETWORK_CONNECT_TIMEOUT:
+ error = AWSError<CoreErrors>(CoreErrors::REQUEST_TIMEOUT, retryable);
+ break;
+ default:
+ int codeValue = static_cast<int>(code);
+ error = AWSError<CoreErrors>(CoreErrors::UNKNOWN, codeValue >= 500 && codeValue < 600);
+ }
+ error.SetResponseCode(code);
+ return error;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/DefaultRetryStrategy.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/DefaultRetryStrategy.cpp
new file mode 100644
index 00000000000..7e57c79ffc4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/DefaultRetryStrategy.cpp
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/DefaultRetryStrategy.h>
+
+#include <aws/core/client/AWSError.h>
+#include <aws/core/utils/UnreferencedParam.h>
+
+using namespace Aws;
+using namespace Aws::Client;
+
+bool DefaultRetryStrategy::ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const
+{
+ if (attemptedRetries >= m_maxRetries)
+ return false;
+
+ return error.ShouldRetry();
+}
+
+long DefaultRetryStrategy::CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const
+{
+ AWS_UNREFERENCED_PARAM(error);
+
+ if (attemptedRetries == 0)
+ {
+ return 0;
+ }
+
+ return (1 << attemptedRetries) * m_scaleFactor;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/RetryStrategy.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/RetryStrategy.cpp
new file mode 100644
index 00000000000..b439b7ca995
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/RetryStrategy.cpp
@@ -0,0 +1,102 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/RetryStrategy.h>
+
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/utils/Outcome.h>
+
+using namespace Aws::Utils::Threading;
+
+namespace Aws
+{
+ namespace Client
+ {
+ static const int INITIAL_RETRY_TOKENS = 500;
+ static const int RETRY_COST = 5;
+ static const int NO_RETRY_INCREMENT = 1;
+ static const int TIMEOUT_RETRY_COST = 10;
+
+ StandardRetryStrategy::StandardRetryStrategy(long maxAttempts) :
+ m_retryQuotaContainer(Aws::MakeShared<DefaultRetryQuotaContainer>("StandardRetryStrategy")),
+ m_maxAttempts(maxAttempts)
+ {}
+
+ StandardRetryStrategy::StandardRetryStrategy(std::shared_ptr<RetryQuotaContainer> retryQuotaContainer, long maxAttempts) :
+ m_retryQuotaContainer(retryQuotaContainer),
+ m_maxAttempts(maxAttempts)
+ {}
+
+ void StandardRetryStrategy::RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome)
+ {
+ if (httpResponseOutcome.IsSuccess())
+ {
+ m_retryQuotaContainer->ReleaseRetryQuota(NO_RETRY_INCREMENT);
+ }
+ }
+
+ void StandardRetryStrategy::RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome, const AWSError<CoreErrors>& lastError)
+ {
+ if (httpResponseOutcome.IsSuccess())
+ {
+ m_retryQuotaContainer->ReleaseRetryQuota(lastError);
+ }
+ }
+
+ bool StandardRetryStrategy::ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const
+ {
+ if (!error.ShouldRetry())
+ return false;
+
+ if (attemptedRetries + 1 >= m_maxAttempts)
+ return false;
+
+ return m_retryQuotaContainer->AcquireRetryQuota(error);
+ }
+
+ long StandardRetryStrategy::CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const
+ {
+ AWS_UNREFERENCED_PARAM(error);
+ return (std::min)(rand() % 1000 * (1 << attemptedRetries), 20000);
+ }
+
+ DefaultRetryQuotaContainer::DefaultRetryQuotaContainer() : m_retryQuota(INITIAL_RETRY_TOKENS)
+ {}
+
+ bool DefaultRetryQuotaContainer::AcquireRetryQuota(int capacityAmount)
+ {
+ WriterLockGuard guard(m_retryQuotaLock);
+
+ if (capacityAmount > m_retryQuota)
+ {
+ return false;
+ }
+ else
+ {
+ m_retryQuota -= capacityAmount;
+ return true;
+ }
+ }
+
+ bool DefaultRetryQuotaContainer::AcquireRetryQuota(const AWSError<CoreErrors>& error)
+ {
+ int capacityAmount = error.GetErrorType() == CoreErrors::REQUEST_TIMEOUT ? TIMEOUT_RETRY_COST : RETRY_COST;
+ return AcquireRetryQuota(capacityAmount);
+ }
+
+ void DefaultRetryQuotaContainer::ReleaseRetryQuota(int capacityAmount)
+ {
+ WriterLockGuard guard(m_retryQuotaLock);
+ m_retryQuota = (std::min)(m_retryQuota + capacityAmount, INITIAL_RETRY_TOKENS);
+ }
+
+ void DefaultRetryQuotaContainer::ReleaseRetryQuota(const AWSError<CoreErrors>& error)
+ {
+ int capacityAmount = error.GetErrorType() == CoreErrors::REQUEST_TIMEOUT ? TIMEOUT_RETRY_COST : RETRY_COST;
+ ReleaseRetryQuota(capacityAmount);
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/SpecifiedRetryableErrorsRetryStrategy.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/SpecifiedRetryableErrorsRetryStrategy.cpp
new file mode 100644
index 00000000000..ec4e3733048
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/client/SpecifiedRetryableErrorsRetryStrategy.cpp
@@ -0,0 +1,28 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/SpecifiedRetryableErrorsRetryStrategy.h>
+
+#include <aws/core/client/AWSError.h>
+
+using namespace Aws;
+using namespace Aws::Client;
+
+bool SpecifiedRetryableErrorsRetryStrategy::ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const
+{
+ if (attemptedRetries >= m_maxRetries)
+ {
+ return false;
+ }
+ for (const auto& err: m_specifiedRetryableErrors)
+ {
+ if (error.GetExceptionName() == err)
+ {
+ return true;
+ }
+ }
+
+ return error.ShouldRetry();
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/config/AWSProfileConfigLoader.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/config/AWSProfileConfigLoader.cpp
new file mode 100644
index 00000000000..9ec2e54f551
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/config/AWSProfileConfigLoader.cpp
@@ -0,0 +1,540 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/config/AWSProfileConfigLoader.h>
+#include <aws/core/internal/AWSHttpResourceClient.h>
+#include <aws/core/auth/AWSCredentialsProvider.h>
+#include <aws/core/utils/memory/stl/AWSList.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/json/JsonSerializer.h>
+#include <fstream>
+
+namespace Aws
+{
+ namespace Config
+ {
+ using namespace Aws::Utils;
+ using namespace Aws::Auth;
+
+ static const char* const CONFIG_LOADER_TAG = "Aws::Config::AWSProfileConfigLoader";
+ #ifdef _MSC_VER
+ // VS2015 compiler's bug, warning s_CoreErrorsMapper: symbol will be dynamically initialized (implementation limitation)
+ AWS_SUPPRESS_WARNING(4592,
+ static Aws::UniquePtr<ConfigAndCredentialsCacheManager> s_configManager(nullptr);
+ )
+ #else
+ static Aws::UniquePtr<ConfigAndCredentialsCacheManager> s_configManager(nullptr);
+ #endif
+
+ static const char CONFIG_CREDENTIALS_CACHE_MANAGER_TAG[] = "ConfigAndCredentialsCacheManager";
+
+ bool AWSProfileConfigLoader::Load()
+ {
+ if(LoadInternal())
+ {
+ AWS_LOGSTREAM_INFO(CONFIG_LOADER_TAG, "Successfully reloaded configuration.");
+ m_lastLoadTime = DateTime::Now();
+ AWS_LOGSTREAM_TRACE(CONFIG_LOADER_TAG, "reloaded config at "
+ << m_lastLoadTime.ToGmtString(DateFormat::ISO_8601));
+ return true;
+ }
+
+ AWS_LOGSTREAM_INFO(CONFIG_LOADER_TAG, "Failed to reload configuration.");
+ return false;
+ }
+
+ bool AWSProfileConfigLoader::PersistProfiles(const Aws::Map<Aws::String, Profile>& profiles)
+ {
+ if(PersistInternal(profiles))
+ {
+ AWS_LOGSTREAM_INFO(CONFIG_LOADER_TAG, "Successfully persisted configuration.");
+ m_profiles = profiles;
+ m_lastLoadTime = DateTime::Now();
+ AWS_LOGSTREAM_TRACE(CONFIG_LOADER_TAG, "persisted config at "
+ << m_lastLoadTime.ToGmtString(DateFormat::ISO_8601));
+ return true;
+ }
+
+ AWS_LOGSTREAM_WARN(CONFIG_LOADER_TAG, "Failed to persist configuration.");
+ return false;
+ }
+
+ static const char REGION_KEY[] = "region";
+ static const char ACCESS_KEY_ID_KEY[] = "aws_access_key_id";
+ static const char SECRET_KEY_KEY[] = "aws_secret_access_key";
+ static const char SESSION_TOKEN_KEY[] = "aws_session_token";
+ static const char ROLE_ARN_KEY[] = "role_arn";
+ static const char EXTERNAL_ID_KEY[] = "external_id";
+ static const char CREDENTIAL_PROCESS_COMMAND[] = "credential_process";
+ static const char SOURCE_PROFILE_KEY[] = "source_profile";
+ static const char PROFILE_PREFIX[] = "profile ";
+ static const char EQ = '=';
+ static const char LEFT_BRACKET = '[';
+ static const char RIGHT_BRACKET = ']';
+ static const char PARSER_TAG[] = "Aws::Config::ConfigFileProfileFSM";
+
+ class ConfigFileProfileFSM
+ {
+ public:
+ ConfigFileProfileFSM() : m_parserState(START) {}
+
+ const Aws::Map<String, Profile>& GetProfiles() const { return m_foundProfiles; }
+
+ void ParseStream(Aws::IStream& stream)
+ {
+ static const size_t ASSUME_EMPTY_LEN = 3;
+
+ Aws::String line;
+ while(std::getline(stream, line) && m_parserState != FAILURE)
+ {
+ if (line.empty() || line.length() < ASSUME_EMPTY_LEN)
+ {
+ continue;
+ }
+
+ auto openPos = line.find(LEFT_BRACKET);
+ auto closePos = line.find(RIGHT_BRACKET);
+
+ switch(m_parserState)
+ {
+
+ case START:
+ if(openPos != std::string::npos && closePos != std::string::npos)
+ {
+ FlushProfileAndReset(line, openPos, closePos);
+ m_parserState = PROFILE_FOUND;
+ }
+ break;
+
+ //fallthrough here is intentional to reduce duplicate logic
+ case PROFILE_KEY_VALUE_FOUND:
+ if(openPos != std::string::npos && closePos != std::string::npos)
+ {
+ m_parserState = PROFILE_FOUND;
+ FlushProfileAndReset(line, openPos, closePos);
+ break;
+ }
+ // fall through
+ case PROFILE_FOUND:
+ {
+ auto equalsPos = line.find(EQ);
+ if (equalsPos != std::string::npos)
+ {
+ auto key = line.substr(0, equalsPos);
+ auto value = line.substr(equalsPos + 1);
+ m_profileKeyValuePairs[StringUtils::Trim(key.c_str())] =
+ StringUtils::Trim(value.c_str());
+ m_parserState = PROFILE_KEY_VALUE_FOUND;
+ }
+
+ break;
+ }
+ default:
+ m_parserState = FAILURE;
+ break;
+ }
+ }
+
+ FlushProfileAndReset(line, std::string::npos, std::string::npos);
+ }
+
+ private:
+
+ void FlushProfileAndReset(Aws::String& line, size_t openPos, size_t closePos)
+ {
+ if(!m_currentWorkingProfile.empty() && !m_profileKeyValuePairs.empty())
+ {
+ Profile profile;
+ profile.SetName(m_currentWorkingProfile);
+
+ auto regionIter = m_profileKeyValuePairs.find(REGION_KEY);
+ if (regionIter != m_profileKeyValuePairs.end())
+ {
+ AWS_LOGSTREAM_DEBUG(PARSER_TAG, "found region " << regionIter->second);
+ profile.SetRegion(regionIter->second);
+ }
+
+ auto accessKeyIdIter = m_profileKeyValuePairs.find(ACCESS_KEY_ID_KEY);
+ Aws::String accessKey, secretKey, sessionToken;
+ if (accessKeyIdIter != m_profileKeyValuePairs.end())
+ {
+ accessKey = accessKeyIdIter->second;
+ AWS_LOGSTREAM_DEBUG(PARSER_TAG, "found access key " << accessKey);
+
+ auto secretAccessKeyIter = m_profileKeyValuePairs.find(SECRET_KEY_KEY);
+ auto sessionTokenIter = m_profileKeyValuePairs.find(SESSION_TOKEN_KEY);
+ if (secretAccessKeyIter != m_profileKeyValuePairs.end())
+ {
+ secretKey = secretAccessKeyIter->second;
+ }
+ else
+ {
+ AWS_LOGSTREAM_ERROR(PARSER_TAG, "No secret access key found even though an access key was specified. This will cause all signed AWS calls to fail.");
+ }
+
+ if (sessionTokenIter != m_profileKeyValuePairs.end())
+ {
+ sessionToken = sessionTokenIter->second;
+ }
+
+ profile.SetCredentials(Aws::Auth::AWSCredentials(accessKey, secretKey, sessionToken));
+ }
+
+ auto assumeRoleArnIter = m_profileKeyValuePairs.find(ROLE_ARN_KEY);
+ if (assumeRoleArnIter != m_profileKeyValuePairs.end())
+ {
+ AWS_LOGSTREAM_DEBUG(PARSER_TAG, "found role arn " << assumeRoleArnIter->second);
+ profile.SetRoleArn(assumeRoleArnIter->second);
+ }
+
+ auto externalIdIter = m_profileKeyValuePairs.find(EXTERNAL_ID_KEY);
+ if (externalIdIter != m_profileKeyValuePairs.end())
+ {
+ AWS_LOGSTREAM_DEBUG(PARSER_TAG, "found external id " << externalIdIter->second);
+ profile.SetExternalId(externalIdIter->second);
+ }
+
+ auto sourceProfileIter = m_profileKeyValuePairs.find(SOURCE_PROFILE_KEY);
+ if (sourceProfileIter != m_profileKeyValuePairs.end())
+ {
+ AWS_LOGSTREAM_DEBUG(PARSER_TAG, "found source profile " << sourceProfileIter->second);
+ profile.SetSourceProfile(sourceProfileIter->second);
+ }
+
+ auto credentialProcessIter = m_profileKeyValuePairs.find(CREDENTIAL_PROCESS_COMMAND);
+ if (credentialProcessIter != m_profileKeyValuePairs.end())
+ {
+ AWS_LOGSTREAM_DEBUG(PARSER_TAG, "found credential process " << credentialProcessIter->second);
+ profile.SetCredentialProcess(credentialProcessIter->second);
+ }
+ profile.SetAllKeyValPairs(m_profileKeyValuePairs);
+
+ m_foundProfiles[profile.GetName()] = std::move(profile);
+ m_currentWorkingProfile.clear();
+ m_profileKeyValuePairs.clear();
+ }
+
+ if(!line.empty() && openPos != std::string::npos && closePos != std::string::npos)
+ {
+ m_currentWorkingProfile = StringUtils::Trim(line.substr(openPos + 1, closePos - openPos - 1).c_str());
+ StringUtils::Replace(m_currentWorkingProfile, PROFILE_PREFIX, "");
+ AWS_LOGSTREAM_DEBUG(PARSER_TAG, "found profile " << m_currentWorkingProfile);
+ }
+ }
+
+ enum State
+ {
+ START = 0,
+ PROFILE_FOUND,
+ PROFILE_KEY_VALUE_FOUND,
+ FAILURE
+ };
+
+ Aws::String m_currentWorkingProfile;
+ Aws::Map<String, String> m_profileKeyValuePairs;
+ State m_parserState;
+ Aws::Map<String, Profile> m_foundProfiles;
+ };
+
+ static const char* const CONFIG_FILE_LOADER = "Aws::Config::AWSConfigFileProfileConfigLoader";
+
+ AWSConfigFileProfileConfigLoader::AWSConfigFileProfileConfigLoader(const Aws::String& fileName, bool useProfilePrefix) :
+ m_fileName(fileName), m_useProfilePrefix(useProfilePrefix)
+ {
+ AWS_LOGSTREAM_INFO(CONFIG_FILE_LOADER, "Initializing config loader against fileName "
+ << fileName << " and using profilePrefix = " << useProfilePrefix);
+ }
+
+ bool AWSConfigFileProfileConfigLoader::LoadInternal()
+ {
+ m_profiles.clear();
+
+ Aws::IFStream inputFile(m_fileName.c_str());
+ if(inputFile)
+ {
+ ConfigFileProfileFSM parser;
+ parser.ParseStream(inputFile);
+ m_profiles = parser.GetProfiles();
+ return m_profiles.size() > 0;
+ }
+
+ AWS_LOGSTREAM_INFO(CONFIG_FILE_LOADER, "Unable to open config file " << m_fileName << " for reading.");
+
+ return false;
+ }
+
+ bool AWSConfigFileProfileConfigLoader::PersistInternal(const Aws::Map<Aws::String, Profile>& profiles)
+ {
+ Aws::OFStream outputFile(m_fileName.c_str(), std::ios_base::out | std::ios_base::trunc);
+ if(outputFile)
+ {
+ for(auto& profile : profiles)
+ {
+ Aws::String prefix = m_useProfilePrefix ? PROFILE_PREFIX : "";
+
+ AWS_LOGSTREAM_DEBUG(CONFIG_FILE_LOADER, "Writing profile " << profile.first << " to disk.");
+
+ outputFile << LEFT_BRACKET << prefix << profile.second.GetName() << RIGHT_BRACKET << std::endl;
+ const Aws::Auth::AWSCredentials& credentials = profile.second.GetCredentials();
+ outputFile << ACCESS_KEY_ID_KEY << EQ << credentials.GetAWSAccessKeyId() << std::endl;
+ outputFile << SECRET_KEY_KEY << EQ << credentials.GetAWSSecretKey() << std::endl;
+
+ if(!credentials.GetSessionToken().empty())
+ {
+ outputFile << SESSION_TOKEN_KEY << EQ << credentials.GetSessionToken() << std::endl;
+ }
+
+ if(!profile.second.GetRegion().empty())
+ {
+ outputFile << REGION_KEY << EQ << profile.second.GetRegion() << std::endl;
+ }
+
+ if(!profile.second.GetRoleArn().empty())
+ {
+ outputFile << ROLE_ARN_KEY << EQ << profile.second.GetRoleArn() << std::endl;
+ }
+
+ if(!profile.second.GetSourceProfile().empty())
+ {
+ outputFile << SOURCE_PROFILE_KEY << EQ << profile.second.GetSourceProfile() << std::endl;
+ }
+
+ outputFile << std::endl;
+ }
+
+ AWS_LOGSTREAM_INFO(CONFIG_FILE_LOADER, "Profiles written to config file " << m_fileName);
+
+ return true;
+ }
+
+ AWS_LOGSTREAM_WARN(CONFIG_FILE_LOADER, "Unable to open config file " << m_fileName << " for writing.");
+
+ return false;
+ }
+
+ static const char* const EC2_INSTANCE_PROFILE_LOG_TAG = "Aws::Config::EC2InstanceProfileConfigLoader";
+
+ EC2InstanceProfileConfigLoader::EC2InstanceProfileConfigLoader(const std::shared_ptr<Aws::Internal::EC2MetadataClient>& client)
+ : m_ec2metadataClient(client == nullptr ? Aws::MakeShared<Aws::Internal::EC2MetadataClient>(EC2_INSTANCE_PROFILE_LOG_TAG) : client)
+ {
+ }
+
+ bool EC2InstanceProfileConfigLoader::LoadInternal()
+ {
+ auto credentialsStr = m_ec2metadataClient->GetDefaultCredentialsSecurely();
+ if(credentialsStr.empty()) return false;
+
+ Json::JsonValue credentialsDoc(credentialsStr);
+ if (!credentialsDoc.WasParseSuccessful())
+ {
+ AWS_LOGSTREAM_ERROR(EC2_INSTANCE_PROFILE_LOG_TAG,
+ "Failed to parse output from EC2MetadataService.");
+ return false;
+ }
+ const char* accessKeyId = "AccessKeyId";
+ const char* secretAccessKey = "SecretAccessKey";
+ Aws::String accessKey, secretKey, token;
+
+ auto credentialsView = credentialsDoc.View();
+ accessKey = credentialsView.GetString(accessKeyId);
+ AWS_LOGSTREAM_INFO(EC2_INSTANCE_PROFILE_LOG_TAG,
+ "Successfully pulled credentials from metadata service with access key " << accessKey);
+
+ secretKey = credentialsView.GetString(secretAccessKey);
+ token = credentialsView.GetString("Token");
+
+ auto region = m_ec2metadataClient->GetCurrentRegion();
+
+ Profile profile;
+ profile.SetCredentials(AWSCredentials(accessKey, secretKey, token));
+ profile.SetRegion(region);
+ profile.SetName(INSTANCE_PROFILE_KEY);
+
+ m_profiles[INSTANCE_PROFILE_KEY] = profile;
+
+ return true;
+ }
+
+ ConfigAndCredentialsCacheManager::ConfigAndCredentialsCacheManager() :
+ m_credentialsFileLoader(Aws::Auth::ProfileConfigFileAWSCredentialsProvider::GetCredentialsProfileFilename()),
+ m_configFileLoader(Aws::Auth::GetConfigProfileFilename(), true/*use profile prefix*/)
+ {
+ ReloadCredentialsFile();
+ ReloadConfigFile();
+ }
+
+ void ConfigAndCredentialsCacheManager::ReloadConfigFile()
+ {
+ Aws::Utils::Threading::WriterLockGuard guard(m_configLock);
+ m_configFileLoader.SetFileName(Aws::Auth::GetConfigProfileFilename());
+ m_configFileLoader.Load();
+ }
+
+ void ConfigAndCredentialsCacheManager::ReloadCredentialsFile()
+ {
+ Aws::Utils::Threading::WriterLockGuard guard(m_credentialsLock);
+ m_credentialsFileLoader.SetFileName(Aws::Auth::ProfileConfigFileAWSCredentialsProvider::GetCredentialsProfileFilename());
+ m_credentialsFileLoader.Load();
+ }
+
+ bool ConfigAndCredentialsCacheManager::HasConfigProfile(const Aws::String& profileName) const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_configLock);
+ return (m_configFileLoader.GetProfiles().count(profileName) == 1);
+ }
+
+ Aws::Config::Profile ConfigAndCredentialsCacheManager::GetConfigProfile(const Aws::String& profileName) const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_configLock);
+ const auto& profiles = m_configFileLoader.GetProfiles();
+ const auto &iter = profiles.find(profileName);
+ if (iter == profiles.end())
+ {
+ return {};
+ }
+ return iter->second;
+ }
+
+ Aws::Map<Aws::String, Aws::Config::Profile> ConfigAndCredentialsCacheManager::GetConfigProfiles() const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_configLock);
+ return m_configFileLoader.GetProfiles();
+ }
+
+ Aws::String ConfigAndCredentialsCacheManager::GetConfig(const Aws::String& profileName, const Aws::String& key) const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_configLock);
+ const auto& profiles = m_configFileLoader.GetProfiles();
+ const auto &iter = profiles.find(profileName);
+ if (iter == profiles.end())
+ {
+ return {};
+ }
+ return iter->second.GetValue(key);
+ }
+
+ bool ConfigAndCredentialsCacheManager::HasCredentialsProfile(const Aws::String& profileName) const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_credentialsLock);
+ return (m_credentialsFileLoader.GetProfiles().count(profileName) == 1);
+ }
+
+ Aws::Config::Profile ConfigAndCredentialsCacheManager::GetCredentialsProfile(const Aws::String& profileName) const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_credentialsLock);
+ const auto &profiles = m_credentialsFileLoader.GetProfiles();
+ const auto &iter = profiles.find(profileName);
+ if (iter == profiles.end())
+ {
+ return {};
+ }
+ return iter->second;
+ }
+
+ Aws::Map<Aws::String, Aws::Config::Profile> ConfigAndCredentialsCacheManager::GetCredentialsProfiles() const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_credentialsLock);
+ return m_credentialsFileLoader.GetProfiles();
+ }
+
+ Aws::Auth::AWSCredentials ConfigAndCredentialsCacheManager::GetCredentials(const Aws::String& profileName) const
+ {
+ Aws::Utils::Threading::ReaderLockGuard guard(m_credentialsLock);
+ const auto& profiles = m_credentialsFileLoader.GetProfiles();
+ const auto &iter = profiles.find(profileName);
+ if (iter == profiles.end())
+ {
+ return {};
+ }
+ return iter->second.GetCredentials();
+ }
+
+ void InitConfigAndCredentialsCacheManager()
+ {
+ if (s_configManager)
+ {
+ return;
+ }
+ s_configManager = Aws::MakeUnique<ConfigAndCredentialsCacheManager>(CONFIG_CREDENTIALS_CACHE_MANAGER_TAG);
+ }
+
+ void CleanupConfigAndCredentialsCacheManager()
+ {
+ if (!s_configManager)
+ {
+ return;
+ }
+ s_configManager = nullptr;
+ }
+
+ void ReloadCachedConfigFile()
+ {
+ assert(s_configManager);
+ s_configManager->ReloadConfigFile();
+ }
+
+ void ReloadCachedCredentialsFile()
+ {
+ assert(s_configManager);
+ s_configManager->ReloadCredentialsFile();
+ }
+
+ bool HasCachedConfigProfile(const Aws::String& profileName)
+ {
+ assert(s_configManager);
+ return s_configManager->HasConfigProfile(profileName);
+ }
+
+ Aws::Config::Profile GetCachedConfigProfile(const Aws::String& profileName)
+ {
+ assert(s_configManager);
+ return s_configManager->GetConfigProfile(profileName);
+ }
+
+ Aws::Map<Aws::String, Aws::Config::Profile> GetCachedConfigProfiles()
+ {
+ assert(s_configManager);
+ return s_configManager->GetConfigProfiles();
+ }
+
+ Aws::String GetCachedConfigValue(const Aws::String &profileName, const Aws::String &key)
+ {
+ assert(s_configManager);
+ return s_configManager->GetConfig(profileName, key);
+ }
+
+ Aws::String GetCachedConfigValue(const Aws::String &key)
+ {
+ assert(s_configManager);
+ return s_configManager->GetConfig(Aws::Auth::GetConfigProfileName(), key);
+ }
+
+ bool HasCachedCredentialsProfile(const Aws::String& profileName)
+ {
+ assert(s_configManager);
+ return s_configManager->HasCredentialsProfile(profileName);
+ }
+
+ Aws::Config::Profile GetCachedCredentialsProfile(const Aws::String &profileName)
+ {
+ assert(s_configManager);
+ return s_configManager->GetCredentialsProfile(profileName);
+ }
+
+ Aws::Map<Aws::String, Aws::Config::Profile> GetCachedCredentialsProfiles()
+ {
+ assert(s_configManager);
+ return s_configManager->GetCredentialsProfiles();
+ }
+
+ Aws::Auth::AWSCredentials GetCachedCredentials(const Aws::String &profileName)
+ {
+ assert(s_configManager);
+ return s_configManager->GetCredentials(profileName);
+ }
+ } // Config namespace
+} // Aws namespace
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/cjson/cJSON.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/cjson/cJSON.cpp
new file mode 100644
index 00000000000..2525976334e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/cjson/cJSON.cpp
@@ -0,0 +1,2983 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+/* cJSON */
+/* JSON parser in C. */
+
+/* disable warnings about old C89 functions in MSVC */
+#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER)
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+#ifdef __GNUC__
+#pragma GCC visibility push(default)
+#endif
+#if defined(_MSC_VER)
+#pragma warning (push)
+/* disable warning about single line comments in system headers */
+#pragma warning (disable : 4001)
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <ctype.h>
+
+#ifdef ENABLE_LOCALES
+#include <locale.h>
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+#ifdef __GNUC__
+#pragma GCC visibility pop
+#endif
+
+#include <aws/core/external/cjson/cJSON.h>
+
+/* define our own boolean type */
+// #define true ((cJSON_bool)1)
+// #define false ((cJSON_bool)0)
+
+typedef struct {
+ const unsigned char *json;
+ size_t position;
+} error;
+static error global_error = { NULL, 0 };
+
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
+{
+ return (const char*) (global_error.json + global_error.position);
+}
+
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item) {
+ if (!cJSON_IsString(item)) {
+ return NULL;
+ }
+
+ return item->valuestring;
+}
+
+/* This is a safeguard to prevent copy-pasters from using incompatible C and header files */
+#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 7)
+ #error cJSON.h and cJSON.c have different versions. Make sure that both have the same.
+#endif
+
+CJSON_PUBLIC(const char*) cJSON_Version(void)
+{
+ static char version[15];
+ sprintf(version, "%i.%i.%i", CJSON_VERSION_MAJOR, CJSON_VERSION_MINOR, CJSON_VERSION_PATCH);
+
+ return version;
+}
+
+/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */
+static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2)
+{
+ if ((string1 == NULL) || (string2 == NULL))
+ {
+ return 1;
+ }
+
+ if (string1 == string2)
+ {
+ return 0;
+ }
+
+ for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++)
+ {
+ if (*string1 == '\0')
+ {
+ return 0;
+ }
+ }
+
+ return tolower(*string1) - tolower(*string2);
+}
+
+typedef struct internal_hooks
+{
+ void *(*allocate)(size_t size);
+ void (*deallocate)(void *pointer);
+ void *(*reallocate)(void *pointer, size_t size);
+} internal_hooks;
+
+#if defined(_MSC_VER)
+/* work around MSVC error C2322: '...' address of dillimport '...' is not static */
+static void *internal_malloc(size_t size)
+{
+ return malloc(size);
+}
+static void internal_free(void *pointer)
+{
+ free(pointer);
+}
+static void *internal_realloc(void *pointer, size_t size)
+{
+ return realloc(pointer, size);
+}
+#else
+#define internal_malloc malloc
+#define internal_free free
+#define internal_realloc realloc
+#endif
+
+static internal_hooks global_hooks = { internal_malloc, internal_free, internal_realloc };
+
+static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks)
+{
+ size_t length = 0;
+ unsigned char *copy = NULL;
+
+ if (string == NULL)
+ {
+ return NULL;
+ }
+
+ length = strlen((const char*)string) + sizeof("");
+ copy = (unsigned char*)hooks->allocate(length);
+ if (copy == NULL)
+ {
+ return NULL;
+ }
+ memcpy(copy, string, length);
+
+ return copy;
+}
+
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
+{
+ if (hooks == NULL)
+ {
+ /* Reset hooks */
+ global_hooks.allocate = malloc;
+ global_hooks.deallocate = free;
+ global_hooks.reallocate = realloc;
+ return;
+ }
+
+ global_hooks.allocate = malloc;
+ if (hooks->malloc_fn != NULL)
+ {
+ global_hooks.allocate = hooks->malloc_fn;
+ }
+
+ global_hooks.deallocate = free;
+ if (hooks->free_fn != NULL)
+ {
+ global_hooks.deallocate = hooks->free_fn;
+ }
+
+ /* use realloc only if both free and malloc are used */
+ global_hooks.reallocate = NULL;
+ if ((global_hooks.allocate == malloc) && (global_hooks.deallocate == free))
+ {
+ global_hooks.reallocate = realloc;
+ }
+}
+
+/* Internal constructor. */
+static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
+{
+ cJSON* node = (cJSON*)hooks->allocate(sizeof(cJSON));
+ if (node)
+ {
+ memset(node, '\0', sizeof(cJSON));
+ }
+
+ return node;
+}
+
+/* Delete a cJSON structure. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
+{
+ cJSON *next = NULL;
+ while (item != NULL)
+ {
+ next = item->next;
+ if (!(item->type & cJSON_IsReference) && (item->child != NULL))
+ {
+ cJSON_Delete(item->child);
+ }
+ if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL))
+ {
+ global_hooks.deallocate(item->valuestring);
+ }
+ if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
+ {
+ global_hooks.deallocate(item->string);
+ }
+ global_hooks.deallocate(item);
+ item = next;
+ }
+}
+
+/* get the decimal point character of the current locale */
+static unsigned char get_decimal_point(void)
+{
+#ifdef ENABLE_LOCALES
+ struct lconv *lconv = localeconv();
+ return (unsigned char) lconv->decimal_point[0];
+#else
+ return '.';
+#endif
+}
+
+typedef struct
+{
+ const unsigned char *content;
+ size_t length;
+ size_t offset;
+ size_t depth; /* How deeply nested (in arrays/objects) is the input at the current offset. */
+ internal_hooks hooks;
+} parse_buffer;
+
+/* check if the given size is left to read in a given parse buffer (starting with 1) */
+#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length))
+/* check if the buffer can be accessed at the given index (starting with 0) */
+#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length))
+#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index))
+/* get a pointer to the buffer at the position */
+#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset)
+
+/* Parse the input text to generate a number, and populate the result into item. */
+static cJSON_bool parse_number(cJSON * const item, parse_buffer * const input_buffer)
+{
+ double number = 0;
+ unsigned char *after_end = NULL;
+ unsigned char number_c_string[64];
+ unsigned char decimal_point = get_decimal_point();
+ bool isInteger = true;
+ size_t i = 0;
+
+ if ((input_buffer == NULL) || (input_buffer->content == NULL))
+ {
+ return false;
+ }
+
+ /* copy the number into a temporary buffer and replace '.' with the decimal point
+ * of the current locale (for strtod)
+ * This also takes care of '\0' not necessarily being available for marking the end of the input */
+ for (i = 0; (i < (sizeof(number_c_string) - 1)) && can_access_at_index(input_buffer, i); i++)
+ {
+ switch (buffer_at_offset(input_buffer)[i])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '+':
+ case '-':
+ number_c_string[i] = buffer_at_offset(input_buffer)[i];
+ break;
+ case 'e':
+ case 'E':
+ number_c_string[i] = buffer_at_offset(input_buffer)[i];
+ isInteger = false;
+ break;
+
+ case '.':
+ number_c_string[i] = decimal_point;
+ isInteger = false;
+ break;
+
+ default:
+ goto loop_end;
+ }
+ }
+loop_end:
+ number_c_string[i] = '\0';
+
+ number = strtod((const char*)number_c_string, (char**)&after_end);
+ if (number_c_string == after_end)
+ {
+ return false; /* parse_error */
+ }
+
+ item->valuedouble = number;
+ // For integer which is out of the range of [INT_MIN, INT_MAX], it may lose precision if we cast it to double.
+ // Instead, we keep the integer literal as a string.
+ if (isInteger && (number > INT_MAX || number < INT_MIN))
+ {
+ item->valuestring = (char*)cJSON_strdup(number_c_string, &global_hooks);
+ }
+
+ /* use saturation in case of overflow */
+ if (number >= INT_MAX)
+ {
+ item->valueint = INT_MAX;
+ }
+ else if (number <= INT_MIN)
+ {
+ item->valueint = INT_MIN;
+ }
+ else
+ {
+ item->valueint = (int)number;
+ }
+
+ item->type = cJSON_Number;
+
+ input_buffer->offset += (size_t)(after_end - number_c_string);
+ return true;
+}
+
+/* don't ask me, but the original cJSON_SetNumberValue returns an integer or double */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
+{
+ if (number >= INT_MAX)
+ {
+ object->valueint = INT_MAX;
+ }
+ else if (number <= INT_MIN)
+ {
+ object->valueint = INT_MIN;
+ }
+ else
+ {
+ object->valueint = (int)number;
+ }
+
+ return object->valuedouble = number;
+}
+
+typedef struct
+{
+ unsigned char *buffer;
+ size_t length;
+ size_t offset;
+ size_t depth; /* current nesting depth (for formatted printing) */
+ cJSON_bool noalloc;
+ cJSON_bool format; /* is this print a formatted print */
+ internal_hooks hooks;
+} printbuffer;
+
+/* realloc printbuffer if necessary to have at least "needed" bytes more */
+static unsigned char* ensure(printbuffer * const p, size_t needed)
+{
+ unsigned char *newbuffer = NULL;
+ size_t newsize = 0;
+
+ if ((p == NULL) || (p->buffer == NULL))
+ {
+ return NULL;
+ }
+
+ if ((p->length > 0) && (p->offset >= p->length))
+ {
+ /* make sure that offset is valid */
+ return NULL;
+ }
+
+ if (needed > INT_MAX)
+ {
+ /* sizes bigger than INT_MAX are currently not supported */
+ return NULL;
+ }
+
+ needed += p->offset + 1;
+ if (needed <= p->length)
+ {
+ return p->buffer + p->offset;
+ }
+
+ if (p->noalloc) {
+ return NULL;
+ }
+
+ /* calculate new buffer size */
+ if (needed > (INT_MAX / 2))
+ {
+ /* overflow of int, use INT_MAX if possible */
+ if (needed <= INT_MAX)
+ {
+ newsize = INT_MAX;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+ else
+ {
+ newsize = needed * 2;
+ }
+
+ if (p->hooks.reallocate != NULL)
+ {
+ /* reallocate with realloc if available */
+ newbuffer = (unsigned char*)p->hooks.reallocate(p->buffer, newsize);
+ if (newbuffer == NULL)
+ {
+ p->hooks.deallocate(p->buffer);
+ p->length = 0;
+ p->buffer = NULL;
+
+ return NULL;
+ }
+ }
+ else
+ {
+ /* otherwise reallocate manually */
+ newbuffer = (unsigned char*)p->hooks.allocate(newsize);
+ if (!newbuffer)
+ {
+ p->hooks.deallocate(p->buffer);
+ p->length = 0;
+ p->buffer = NULL;
+
+ return NULL;
+ }
+ if (newbuffer)
+ {
+ memcpy(newbuffer, p->buffer, p->offset + 1);
+ }
+ p->hooks.deallocate(p->buffer);
+ }
+ p->length = newsize;
+ p->buffer = newbuffer;
+
+ return newbuffer + p->offset;
+}
+
+/* calculate the new length of the string in a printbuffer and update the offset */
+static void update_offset(printbuffer * const buffer)
+{
+ const unsigned char *buffer_pointer = NULL;
+ if ((buffer == NULL) || (buffer->buffer == NULL))
+ {
+ return;
+ }
+ buffer_pointer = buffer->buffer + buffer->offset;
+
+ buffer->offset += strlen((const char*)buffer_pointer);
+}
+
+/* Render the number nicely from the given item into a string. */
+static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ double d = item->valuedouble;
+ int length = 0;
+ size_t i = 0;
+ unsigned char number_buffer[26]; /* temporary buffer to print the number into */
+ unsigned char decimal_point = get_decimal_point();
+ double test;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* For integer which is out of the range of [INT_MIN, INT_MAX], valuestring is an integer literal. */
+ if (item->valuestring)
+ {
+ length = sprintf((char*)number_buffer, "%s", item->valuestring);
+ }
+ /* This checks for NaN and Infinity */
+ else if ((d * 0) != 0)
+ {
+ length = sprintf((char*)number_buffer, "null");
+ }
+ else
+ {
+ /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
+ length = sprintf((char*)number_buffer, "%1.15g", d);
+
+ /* Check whether the original double can be recovered */
+ if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || ((double)test != d))
+ {
+ /* If not, print with 17 decimal places of precision */
+ length = sprintf((char*)number_buffer, "%1.17g", d);
+ }
+ }
+
+ /* sprintf failed or buffer overrun occurred */
+ if ((length < 0) || (length > (int)(sizeof(number_buffer) - 1)))
+ {
+ return false;
+ }
+
+ /* reserve appropriate space in the output */
+ output_pointer = ensure(output_buffer, (size_t)length + sizeof(""));
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ /* copy the printed number to the output and replace locale
+ * dependent decimal point with '.' */
+ for (i = 0; i < ((size_t)length); i++)
+ {
+ if (number_buffer[i] == decimal_point)
+ {
+ output_pointer[i] = '.';
+ continue;
+ }
+
+ output_pointer[i] = number_buffer[i];
+ }
+ output_pointer[i] = '\0';
+
+ output_buffer->offset += (size_t)length;
+
+ return true;
+}
+
+/* parse 4 digit hexadecimal number */
+static unsigned parse_hex4(const unsigned char * const input)
+{
+ unsigned int h = 0;
+ size_t i = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ /* parse digit */
+ if ((input[i] >= '0') && (input[i] <= '9'))
+ {
+ h += (unsigned int) input[i] - '0';
+ }
+ else if ((input[i] >= 'A') && (input[i] <= 'F'))
+ {
+ h += (unsigned int) 10 + input[i] - 'A';
+ }
+ else if ((input[i] >= 'a') && (input[i] <= 'f'))
+ {
+ h += (unsigned int) 10 + input[i] - 'a';
+ }
+ else /* invalid */
+ {
+ return 0;
+ }
+
+ if (i < 3)
+ {
+ /* shift left to make place for the next nibble */
+ h = h << 4;
+ }
+ }
+
+ return h;
+}
+
+/* converts a UTF-16 literal to UTF-8
+ * A literal can be one or two sequences of the form \uXXXX */
+static unsigned char utf16_literal_to_utf8(const unsigned char * const input_pointer, const unsigned char * const input_end, unsigned char **output_pointer)
+{
+ long unsigned int codepoint = 0;
+ unsigned int first_code = 0;
+ const unsigned char *first_sequence = input_pointer;
+ unsigned char utf8_length = 0;
+ unsigned char utf8_position = 0;
+ unsigned char sequence_length = 0;
+ unsigned char first_byte_mark = 0;
+
+ if ((input_end - first_sequence) < 6)
+ {
+ /* input ends unexpectedly */
+ goto fail;
+ }
+
+ /* get the first utf16 sequence */
+ first_code = parse_hex4(first_sequence + 2);
+
+ /* check that the code is valid */
+ if (((first_code >= 0xDC00) && (first_code <= 0xDFFF)))
+ {
+ goto fail;
+ }
+
+ /* UTF16 surrogate pair */
+ if ((first_code >= 0xD800) && (first_code <= 0xDBFF))
+ {
+ const unsigned char *second_sequence = first_sequence + 6;
+ unsigned int second_code = 0;
+ sequence_length = 12; /* \uXXXX\uXXXX */
+
+ if ((input_end - second_sequence) < 6)
+ {
+ /* input ends unexpectedly */
+ goto fail;
+ }
+
+ if ((second_sequence[0] != '\\') || (second_sequence[1] != 'u'))
+ {
+ /* missing second half of the surrogate pair */
+ goto fail;
+ }
+
+ /* get the second utf16 sequence */
+ second_code = parse_hex4(second_sequence + 2);
+ /* check that the code is valid */
+ if ((second_code < 0xDC00) || (second_code > 0xDFFF))
+ {
+ /* invalid second half of the surrogate pair */
+ goto fail;
+ }
+
+
+ /* calculate the unicode codepoint from the surrogate pair */
+ codepoint = 0x10000 + (((first_code & 0x3FF) << 10) | (second_code & 0x3FF));
+ }
+ else
+ {
+ sequence_length = 6; /* \uXXXX */
+ codepoint = first_code;
+ }
+
+ /* encode as UTF-8
+ * takes at maximum 4 bytes to encode:
+ * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ if (codepoint < 0x80)
+ {
+ /* normal ascii, encoding 0xxxxxxx */
+ utf8_length = 1;
+ }
+ else if (codepoint < 0x800)
+ {
+ /* two bytes, encoding 110xxxxx 10xxxxxx */
+ utf8_length = 2;
+ first_byte_mark = 0xC0; /* 11000000 */
+ }
+ else if (codepoint < 0x10000)
+ {
+ /* three bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx */
+ utf8_length = 3;
+ first_byte_mark = 0xE0; /* 11100000 */
+ }
+ else if (codepoint <= 0x10FFFF)
+ {
+ /* four bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ utf8_length = 4;
+ first_byte_mark = 0xF0; /* 11110000 */
+ }
+ else
+ {
+ /* invalid unicode codepoint */
+ goto fail;
+ }
+
+ /* encode as utf8 */
+ for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0; utf8_position--)
+ {
+ /* 10xxxxxx */
+ (*output_pointer)[utf8_position] = (unsigned char)((codepoint | 0x80) & 0xBF);
+ codepoint >>= 6;
+ }
+ /* encode first byte */
+ if (utf8_length > 1)
+ {
+ (*output_pointer)[0] = (unsigned char)((codepoint | first_byte_mark) & 0xFF);
+ }
+ else
+ {
+ (*output_pointer)[0] = (unsigned char)(codepoint & 0x7F);
+ }
+
+ *output_pointer += utf8_length;
+
+ return sequence_length;
+
+fail:
+ return 0;
+}
+
+/* Parse the input text into an unescaped cinput, and populate item. */
+static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_buffer)
+{
+ const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1;
+ const unsigned char *input_end = buffer_at_offset(input_buffer) + 1;
+ unsigned char *output_pointer = NULL;
+ unsigned char *output = NULL;
+
+ /* not a string */
+ if (buffer_at_offset(input_buffer)[0] != '\"')
+ {
+ goto fail;
+ }
+
+ {
+ /* calculate approximate size of the output (overestimate) */
+ size_t allocation_length = 0;
+ size_t skipped_bytes = 0;
+ while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"'))
+ {
+ /* is escape sequence */
+ if (input_end[0] == '\\')
+ {
+ if ((size_t)(input_end + 1 - input_buffer->content) >= input_buffer->length)
+ {
+ /* prevent buffer overflow when last input character is a backslash */
+ goto fail;
+ }
+ skipped_bytes++;
+ input_end++;
+ }
+ input_end++;
+ }
+ if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"'))
+ {
+ goto fail; /* string ended unexpectedly */
+ }
+
+ /* This is at most how much we need for the output */
+ allocation_length = (size_t) (input_end - buffer_at_offset(input_buffer)) - skipped_bytes;
+ output = (unsigned char*)input_buffer->hooks.allocate(allocation_length + sizeof(""));
+ if (output == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+ }
+
+ output_pointer = output;
+ /* loop through the string literal */
+ while (input_pointer < input_end)
+ {
+ if (*input_pointer != '\\')
+ {
+ *output_pointer++ = *input_pointer++;
+ }
+ /* escape sequence */
+ else
+ {
+ unsigned char sequence_length = 2;
+ if ((input_end - input_pointer) < 1)
+ {
+ goto fail;
+ }
+
+ switch (input_pointer[1])
+ {
+ case 'b':
+ *output_pointer++ = '\b';
+ break;
+ case 'f':
+ *output_pointer++ = '\f';
+ break;
+ case 'n':
+ *output_pointer++ = '\n';
+ break;
+ case 'r':
+ *output_pointer++ = '\r';
+ break;
+ case 't':
+ *output_pointer++ = '\t';
+ break;
+ case '\"':
+ case '\\':
+ case '/':
+ *output_pointer++ = input_pointer[1];
+ break;
+
+ /* UTF-16 literal */
+ case 'u':
+ sequence_length = utf16_literal_to_utf8(input_pointer, input_end, &output_pointer);
+ if (sequence_length == 0)
+ {
+ /* failed to convert UTF16-literal to UTF-8 */
+ goto fail;
+ }
+ break;
+
+ default:
+ goto fail;
+ }
+ input_pointer += sequence_length;
+ }
+ }
+
+ /* zero terminate the output */
+ *output_pointer = '\0';
+
+ item->type = cJSON_String;
+ item->valuestring = (char*)output;
+
+ input_buffer->offset = (size_t) (input_end - input_buffer->content);
+ input_buffer->offset++;
+
+ return true;
+
+fail:
+ if (output != NULL)
+ {
+ input_buffer->hooks.deallocate(output);
+ }
+
+ if (input_pointer != NULL)
+ {
+ input_buffer->offset = (size_t)(input_pointer - input_buffer->content);
+ }
+
+ return false;
+}
+
+/* Render the cstring provided to an escaped version that can be printed. */
+static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffer * const output_buffer)
+{
+ const unsigned char *input_pointer = NULL;
+ unsigned char *output = NULL;
+ unsigned char *output_pointer = NULL;
+ size_t output_length = 0;
+ /* numbers of additional characters needed for escaping */
+ size_t escape_characters = 0;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* empty string */
+ if (input == NULL)
+ {
+ output = ensure(output_buffer, sizeof("\"\""));
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "\"\"");
+
+ return true;
+ }
+
+ /* set "flag" to 1 if something needs to be escaped */
+ for (input_pointer = input; *input_pointer; input_pointer++)
+ {
+ switch (*input_pointer)
+ {
+ case '\"':
+ case '\\':
+ case '\b':
+ case '\f':
+ case '\n':
+ case '\r':
+ case '\t':
+ /* one character escape sequence */
+ escape_characters++;
+ break;
+ default:
+ if (*input_pointer < 32)
+ {
+ /* UTF-16 escape sequence uXXXX */
+ escape_characters += 5;
+ }
+ break;
+ }
+ }
+ output_length = (size_t)(input_pointer - input) + escape_characters;
+
+ output = ensure(output_buffer, output_length + sizeof("\"\""));
+ if (output == NULL)
+ {
+ return false;
+ }
+
+ /* no characters have to be escaped */
+ if (escape_characters == 0)
+ {
+ output[0] = '\"';
+ memcpy(output + 1, input, output_length);
+ output[output_length + 1] = '\"';
+ output[output_length + 2] = '\0';
+
+ return true;
+ }
+
+ output[0] = '\"';
+ output_pointer = output + 1;
+ /* copy the string */
+ for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++)
+ {
+ if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\'))
+ {
+ /* normal character, copy */
+ *output_pointer = *input_pointer;
+ }
+ else
+ {
+ /* character needs to be escaped */
+ *output_pointer++ = '\\';
+ switch (*input_pointer)
+ {
+ case '\\':
+ *output_pointer = '\\';
+ break;
+ case '\"':
+ *output_pointer = '\"';
+ break;
+ case '\b':
+ *output_pointer = 'b';
+ break;
+ case '\f':
+ *output_pointer = 'f';
+ break;
+ case '\n':
+ *output_pointer = 'n';
+ break;
+ case '\r':
+ *output_pointer = 'r';
+ break;
+ case '\t':
+ *output_pointer = 't';
+ break;
+ default:
+ /* escape and print as unicode codepoint */
+ sprintf((char*)output_pointer, "u%04x", *input_pointer);
+ output_pointer += 4;
+ break;
+ }
+ }
+ }
+ output[output_length + 1] = '\"';
+ output[output_length + 2] = '\0';
+
+ return true;
+}
+
+/* Invoke print_string_ptr (which is useful) on an item. */
+static cJSON_bool print_string(const cJSON * const item, printbuffer * const p)
+{
+ return print_string_ptr((unsigned char*)item->valuestring, p);
+}
+
+/* Predeclare these prototypes. */
+static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer);
+static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer);
+static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer);
+
+/* Utility to jump whitespace and cr/lf */
+static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
+{
+ if ((buffer == NULL) || (buffer->content == NULL))
+ {
+ return NULL;
+ }
+
+ while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 32))
+ {
+ buffer->offset++;
+ }
+
+ if (buffer->offset == buffer->length)
+ {
+ buffer->offset--;
+ }
+
+ return buffer;
+}
+
+/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer */
+static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
+{
+ if ((buffer == NULL) || (buffer->content == NULL) || (buffer->offset != 0))
+ {
+ return NULL;
+ }
+
+ if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0))
+ {
+ buffer->offset += 3;
+ }
+
+ return buffer;
+}
+
+/* Parse an object - create a new root, and populate. */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated)
+{
+ parse_buffer buffer = { 0, 0, 0, 0, { 0, 0, 0 } };
+ cJSON *item = NULL;
+
+ /* reset error position */
+ global_error.json = NULL;
+ global_error.position = 0;
+
+ if (value == NULL)
+ {
+ goto fail;
+ }
+
+ buffer.content = (const unsigned char*)value;
+ buffer.length = strlen((const char*)value) + sizeof("");
+ buffer.offset = 0;
+ buffer.hooks = global_hooks;
+
+ item = cJSON_New_Item(&global_hooks);
+ if (item == NULL) /* memory fail */
+ {
+ goto fail;
+ }
+
+ if (!parse_value(item, buffer_skip_whitespace(skip_utf8_bom(&buffer))))
+ {
+ /* parse failure. ep is set. */
+ goto fail;
+ }
+
+ /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */
+ if (require_null_terminated)
+ {
+ buffer_skip_whitespace(&buffer);
+ if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0')
+ {
+ goto fail;
+ }
+ }
+ if (return_parse_end)
+ {
+ *return_parse_end = (const char*)buffer_at_offset(&buffer);
+ }
+
+ return item;
+
+fail:
+ if (item != NULL)
+ {
+ cJSON_Delete(item);
+ }
+
+ if (value != NULL)
+ {
+ error local_error;
+ local_error.json = (const unsigned char*)value;
+ local_error.position = 0;
+
+ if (buffer.offset < buffer.length)
+ {
+ local_error.position = buffer.offset;
+ }
+ else if (buffer.length > 0)
+ {
+ local_error.position = buffer.length - 1;
+ }
+
+ if (return_parse_end != NULL)
+ {
+ *return_parse_end = (const char*)local_error.json + local_error.position;
+ }
+
+ global_error = local_error;
+ }
+
+ return NULL;
+}
+
+/* Default options for cJSON_Parse */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
+{
+ return cJSON_ParseWithOpts(value, 0, 0);
+}
+
+#define cjson_min(a, b) ((a < b) ? a : b)
+
+static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks)
+{
+ static const size_t default_buffer_size = 256;
+ printbuffer buffer[1];
+ unsigned char *printed = NULL;
+
+ memset(buffer, 0, sizeof(buffer));
+
+ /* create buffer */
+ buffer->buffer = (unsigned char*) hooks->allocate(default_buffer_size);
+ buffer->length = default_buffer_size;
+ buffer->format = format;
+ buffer->hooks = *hooks;
+ if (buffer->buffer == NULL)
+ {
+ goto fail;
+ }
+
+ /* print the value */
+ if (!print_value(item, buffer))
+ {
+ goto fail;
+ }
+ update_offset(buffer);
+
+ /* check if reallocate is available */
+ if (hooks->reallocate != NULL)
+ {
+ printed = (unsigned char*) hooks->reallocate(buffer->buffer, buffer->offset + 1);
+ if (printed == NULL) {
+ goto fail;
+ }
+ buffer->buffer = NULL;
+ }
+ else /* otherwise copy the JSON over to a new buffer */
+ {
+ printed = (unsigned char*) hooks->allocate(buffer->offset + 1);
+ if (printed == NULL)
+ {
+ goto fail;
+ }
+ memcpy(printed, buffer->buffer, cjson_min(buffer->length, buffer->offset + 1));
+ printed[buffer->offset] = '\0'; /* just to be sure */
+
+ /* free the buffer */
+ hooks->deallocate(buffer->buffer);
+ }
+
+ return printed;
+
+fail:
+ if (buffer->buffer != NULL)
+ {
+ hooks->deallocate(buffer->buffer);
+ }
+
+ if (printed != NULL)
+ {
+ hooks->deallocate(printed);
+ }
+
+ return NULL;
+}
+
+/* Render a cJSON item/entity/structure to text. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
+{
+ return (char*)print(item, true, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
+{
+ return (char*)print(item, false, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)
+{
+ printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
+
+ if (prebuffer < 0)
+ {
+ return NULL;
+ }
+
+ p.buffer = (unsigned char*)global_hooks.allocate((size_t)prebuffer);
+ if (!p.buffer)
+ {
+ return NULL;
+ }
+
+ p.length = (size_t)prebuffer;
+ p.offset = 0;
+ p.noalloc = false;
+ p.format = fmt;
+ p.hooks = global_hooks;
+
+ if (!print_value(item, &p))
+ {
+ global_hooks.deallocate(p.buffer);
+ return NULL;
+ }
+
+ return (char*)p.buffer;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cJSON_bool fmt)
+{
+ printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
+
+ if ((len < 0) || (buf == NULL))
+ {
+ return false;
+ }
+
+ p.buffer = (unsigned char*)buf;
+ p.length = (size_t)len;
+ p.offset = 0;
+ p.noalloc = true;
+ p.format = fmt;
+ p.hooks = global_hooks;
+
+ return print_value(item, &p);
+}
+
+/* Parser core - when encountering text, process appropriately. */
+static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer)
+{
+ if ((input_buffer == NULL) || (input_buffer->content == NULL))
+ {
+ return false; /* no input */
+ }
+
+ /* parse the different types of values */
+ /* null */
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0))
+ {
+ item->type = cJSON_NULL;
+ input_buffer->offset += 4;
+ return true;
+ }
+ /* false */
+ if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0))
+ {
+ item->type = cJSON_False;
+ input_buffer->offset += 5;
+ return true;
+ }
+ /* true */
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "true", 4) == 0))
+ {
+ item->type = cJSON_True;
+ item->valueint = 1;
+ input_buffer->offset += 4;
+ return true;
+ }
+ /* string */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '\"'))
+ {
+ return parse_string(item, input_buffer);
+ }
+ /* number */
+ if (can_access_at_index(input_buffer, 0) && ((buffer_at_offset(input_buffer)[0] == '-') || ((buffer_at_offset(input_buffer)[0] >= '0') && (buffer_at_offset(input_buffer)[0] <= '9'))))
+ {
+ return parse_number(item, input_buffer);
+ }
+ /* array */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '['))
+ {
+ return parse_array(item, input_buffer);
+ }
+ /* object */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '{'))
+ {
+ return parse_object(item, input_buffer);
+ }
+
+ return false;
+}
+
+/* Render a value to text. */
+static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output = NULL;
+
+ if ((item == NULL) || (output_buffer == NULL))
+ {
+ return false;
+ }
+
+ switch ((item->type) & 0xFF)
+ {
+ case cJSON_NULL:
+ output = ensure(output_buffer, 5);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "null");
+ return true;
+
+ case cJSON_False:
+ output = ensure(output_buffer, 6);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "false");
+ return true;
+
+ case cJSON_True:
+ output = ensure(output_buffer, 5);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "true");
+ return true;
+
+ case cJSON_Number:
+ return print_number(item, output_buffer);
+
+ case cJSON_Raw:
+ {
+ size_t raw_length = 0;
+ if (item->valuestring == NULL)
+ {
+ return false;
+ }
+
+ raw_length = strlen(item->valuestring) + sizeof("");
+ output = ensure(output_buffer, raw_length);
+ if (output == NULL)
+ {
+ return false;
+ }
+ memcpy(output, item->valuestring, raw_length);
+ return true;
+ }
+
+ case cJSON_String:
+ return print_string(item, output_buffer);
+
+ case cJSON_Array:
+ return print_array(item, output_buffer);
+
+ case cJSON_Object:
+ return print_object(item, output_buffer);
+
+ default:
+ return false;
+ }
+}
+
+/* Build an array from input text. */
+static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer)
+{
+ cJSON *head = NULL; /* head of the linked list */
+ cJSON *current_item = NULL;
+
+ if (input_buffer->depth >= CJSON_NESTING_LIMIT)
+ {
+ return false; /* to deeply nested */
+ }
+ input_buffer->depth++;
+
+ if (buffer_at_offset(input_buffer)[0] != '[')
+ {
+ /* not an array */
+ goto fail;
+ }
+
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ']'))
+ {
+ /* empty array */
+ goto success;
+ }
+
+ /* check if we skipped to the end of the buffer */
+ if (cannot_access_at_index(input_buffer, 0))
+ {
+ input_buffer->offset--;
+ goto fail;
+ }
+
+ /* step back to character in front of the first element */
+ input_buffer->offset--;
+ /* loop through the comma separated array elements */
+ do
+ {
+ /* allocate next item */
+ cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+ if (new_item == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+
+ /* attach next item to list */
+ if (head == NULL)
+ {
+ /* start the linked list */
+ current_item = head = new_item;
+ }
+ else
+ {
+ /* add to the end and advance */
+ current_item->next = new_item;
+ new_item->prev = current_item;
+ current_item = new_item;
+ }
+
+ /* parse next value */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_value(current_item, input_buffer))
+ {
+ goto fail; /* failed to parse value */
+ }
+ buffer_skip_whitespace(input_buffer);
+ }
+ while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ','));
+
+ if (cannot_access_at_index(input_buffer, 0) || buffer_at_offset(input_buffer)[0] != ']')
+ {
+ goto fail; /* expected end of array */
+ }
+
+success:
+ input_buffer->depth--;
+
+ item->type = cJSON_Array;
+ item->child = head;
+
+ input_buffer->offset++;
+
+ return true;
+
+fail:
+ if (head != NULL)
+ {
+ cJSON_Delete(head);
+ }
+
+ return false;
+}
+
+/* Render an array to text */
+static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ size_t length = 0;
+ cJSON *current_element = item->child;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* Compose the output array. */
+ /* opening square bracket */
+ output_pointer = ensure(output_buffer, 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ *output_pointer = '[';
+ output_buffer->offset++;
+ output_buffer->depth++;
+
+ while (current_element != NULL)
+ {
+ if (!print_value(current_element, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+ if (current_element->next)
+ {
+ length = (size_t) (output_buffer->format ? 2 : 1);
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ',';
+ if(output_buffer->format)
+ {
+ *output_pointer++ = ' ';
+ }
+ *output_pointer = '\0';
+ output_buffer->offset += length;
+ }
+ current_element = current_element->next;
+ }
+
+ output_pointer = ensure(output_buffer, 2);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ']';
+ *output_pointer = '\0';
+ output_buffer->depth--;
+
+ return true;
+}
+
+/* Build an object from the text. */
+static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer)
+{
+ cJSON *head = NULL; /* linked list head */
+ cJSON *current_item = NULL;
+
+ if (input_buffer->depth >= CJSON_NESTING_LIMIT)
+ {
+ return false; /* to deeply nested */
+ }
+ input_buffer->depth++;
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '{'))
+ {
+ goto fail; /* not an object */
+ }
+
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '}'))
+ {
+ goto success; /* empty object */
+ }
+
+ /* check if we skipped to the end of the buffer */
+ if (cannot_access_at_index(input_buffer, 0))
+ {
+ input_buffer->offset--;
+ goto fail;
+ }
+
+ /* step back to character in front of the first element */
+ input_buffer->offset--;
+ /* loop through the comma separated array elements */
+ do
+ {
+ /* allocate next item */
+ cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+ if (new_item == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+
+ /* attach next item to list */
+ if (head == NULL)
+ {
+ /* start the linked list */
+ current_item = head = new_item;
+ }
+ else
+ {
+ /* add to the end and advance */
+ current_item->next = new_item;
+ new_item->prev = current_item;
+ current_item = new_item;
+ }
+
+ /* parse the name of the child */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_string(current_item, input_buffer))
+ {
+ goto fail; /* failed to parse name */
+ }
+ buffer_skip_whitespace(input_buffer);
+
+ /* swap valuestring and string, because we parsed the name */
+ current_item->string = current_item->valuestring;
+ current_item->valuestring = NULL;
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != ':'))
+ {
+ goto fail; /* invalid object */
+ }
+
+ /* parse the value */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_value(current_item, input_buffer))
+ {
+ goto fail; /* failed to parse value */
+ }
+ buffer_skip_whitespace(input_buffer);
+ }
+ while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ','));
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '}'))
+ {
+ goto fail; /* expected end of object */
+ }
+
+success:
+ input_buffer->depth--;
+
+ item->type = cJSON_Object;
+ item->child = head;
+
+ input_buffer->offset++;
+ return true;
+
+fail:
+ if (head != NULL)
+ {
+ cJSON_Delete(head);
+ }
+
+ return false;
+}
+
+/* Render an object to text. */
+static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ size_t length = 0;
+ cJSON *current_item = item->child;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* Compose the output: */
+ length = (size_t) (output_buffer->format ? 2 : 1); /* fmt: {\n */
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ *output_pointer++ = '{';
+ output_buffer->depth++;
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\n';
+ }
+ output_buffer->offset += length;
+
+ while (current_item)
+ {
+ if (output_buffer->format)
+ {
+ size_t i;
+ output_pointer = ensure(output_buffer, output_buffer->depth);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ for (i = 0; i < output_buffer->depth; i++)
+ {
+ *output_pointer++ = '\t';
+ }
+ output_buffer->offset += output_buffer->depth;
+ }
+
+ /* print key */
+ if (!print_string_ptr((unsigned char*)current_item->string, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+
+ length = (size_t) (output_buffer->format ? 2 : 1);
+ output_pointer = ensure(output_buffer, length);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ':';
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\t';
+ }
+ output_buffer->offset += length;
+
+ /* print value */
+ if (!print_value(current_item, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+
+ /* print comma if not last */
+ length = (size_t) ((output_buffer->format ? 1 : 0) + (current_item->next ? 1 : 0));
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ if (current_item->next)
+ {
+ *output_pointer++ = ',';
+ }
+
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\n';
+ }
+ *output_pointer = '\0';
+ output_buffer->offset += length;
+
+ current_item = current_item->next;
+ }
+
+ output_pointer = ensure(output_buffer, output_buffer->format ? (output_buffer->depth + 1) : 2);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ if (output_buffer->format)
+ {
+ size_t i;
+ for (i = 0; i < (output_buffer->depth - 1); i++)
+ {
+ *output_pointer++ = '\t';
+ }
+ }
+ *output_pointer++ = '}';
+ *output_pointer = '\0';
+ output_buffer->depth--;
+
+ return true;
+}
+
+/* Get Array size/item / object item. */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array)
+{
+ cJSON *child = NULL;
+ size_t size = 0;
+
+ if (array == NULL)
+ {
+ return 0;
+ }
+
+ child = array->child;
+
+ while(child != NULL)
+ {
+ size++;
+ child = child->next;
+ }
+
+ /* FIXME: Can overflow here. Cannot be fixed without breaking the API */
+
+ return (int)size;
+}
+
+static cJSON* get_array_item(const cJSON *array, size_t index)
+{
+ cJSON *current_child = NULL;
+
+ if (array == NULL)
+ {
+ return NULL;
+ }
+
+ current_child = array->child;
+ while ((current_child != NULL) && (index > 0))
+ {
+ index--;
+ current_child = current_child->next;
+ }
+
+ return current_child;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index)
+{
+ if (index < 0)
+ {
+ return NULL;
+ }
+
+ return get_array_item(array, (size_t)index);
+}
+
+static cJSON *get_object_item(const cJSON * const object, const char * const name, const cJSON_bool case_sensitive)
+{
+ cJSON *current_element = NULL;
+
+ if ((object == NULL) || (name == NULL))
+ {
+ return NULL;
+ }
+
+ current_element = object->child;
+ if (case_sensitive)
+ {
+ while ((current_element != NULL) && (strcmp(name, current_element->string) != 0))
+ {
+ current_element = current_element->next;
+ }
+ }
+ else
+ {
+ while ((current_element != NULL) && (case_insensitive_strcmp((const unsigned char*)name, (const unsigned char*)(current_element->string)) != 0))
+ {
+ current_element = current_element->next;
+ }
+ }
+
+ return current_element;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string)
+{
+ return get_object_item(object, string, false);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string)
+{
+ return get_object_item(object, string, true);
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string)
+{
+ return cJSON_GetObjectItem(object, string) ? 1 : 0;
+}
+
+/* Utility for array list handling. */
+static void suffix_object(cJSON *prev, cJSON *item)
+{
+ prev->next = item;
+ item->prev = prev;
+}
+
+/* Utility for handling references. */
+static cJSON *create_reference(const cJSON *item, const internal_hooks * const hooks)
+{
+ cJSON *reference = NULL;
+ if (item == NULL)
+ {
+ return NULL;
+ }
+
+ reference = cJSON_New_Item(hooks);
+ if (reference == NULL)
+ {
+ return NULL;
+ }
+
+ memcpy(reference, item, sizeof(cJSON));
+ reference->string = NULL;
+ reference->type |= cJSON_IsReference;
+ reference->next = reference->prev = NULL;
+ return reference;
+}
+
+static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
+{
+ cJSON *child = NULL;
+
+ if ((item == NULL) || (array == NULL))
+ {
+ return false;
+ }
+
+ child = array->child;
+
+ if (child == NULL)
+ {
+ /* list is empty, start new one */
+ array->child = item;
+ }
+ else
+ {
+ /* append to the end */
+ while (child->next)
+ {
+ child = child->next;
+ }
+ suffix_object(child, item);
+ }
+
+ return true;
+}
+
+/* Add item to array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item)
+{
+ add_item_to_array(array, item);
+}
+
+#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+ #pragma GCC diagnostic push
+#endif
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+/* helper function to cast away const */
+static void* cast_away_const(const void* string)
+{
+ return (void*)string;
+}
+#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+ #pragma GCC diagnostic pop
+#endif
+
+
+static cJSON_bool add_item_to_object(cJSON * const object, const char * const string, cJSON * const item, const internal_hooks * const hooks, const cJSON_bool constant_key)
+{
+ char *new_key = NULL;
+ int new_type = cJSON_Invalid;
+
+ if ((object == NULL) || (string == NULL) || (item == NULL))
+ {
+ return false;
+ }
+
+ if (constant_key)
+ {
+ new_key = (char*)cast_away_const(string);
+ new_type = item->type | cJSON_StringIsConst;
+ }
+ else
+ {
+ new_key = (char*)cJSON_strdup((const unsigned char*)string, hooks);
+ if (new_key == NULL)
+ {
+ return false;
+ }
+
+ new_type = item->type & ~cJSON_StringIsConst;
+ }
+
+ if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
+ {
+ hooks->deallocate(item->string);
+ }
+
+ item->string = new_key;
+ item->type = new_type;
+
+ return add_item_to_array(object, item);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item)
+{
+ add_item_to_object(object, string, item, &global_hooks, false);
+}
+
+/* Add an item to an object with constant string as key */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item)
+{
+ add_item_to_object(object, string, item, &global_hooks, true);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item)
+{
+ if (array == NULL)
+ {
+ return;
+ }
+
+ add_item_to_array(array, create_reference(item, &global_hooks));
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item)
+{
+ if ((object == NULL) || (string == NULL))
+ {
+ return;
+ }
+
+ add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false);
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name)
+{
+ cJSON *null = cJSON_CreateNull();
+ if (add_item_to_object(object, name, null, &global_hooks, false))
+ {
+ return null;
+ }
+
+ cJSON_Delete(null);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name)
+{
+ cJSON *true_item = cJSON_CreateTrue();
+ if (add_item_to_object(object, name, true_item, &global_hooks, false))
+ {
+ return true_item;
+ }
+
+ cJSON_Delete(true_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name)
+{
+ cJSON *false_item = cJSON_CreateFalse();
+ if (add_item_to_object(object, name, false_item, &global_hooks, false))
+ {
+ return false_item;
+ }
+
+ cJSON_Delete(false_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean)
+{
+ cJSON *bool_item = cJSON_CreateBool(boolean);
+ if (add_item_to_object(object, name, bool_item, &global_hooks, false))
+ {
+ return bool_item;
+ }
+
+ cJSON_Delete(bool_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number)
+{
+ cJSON *number_item = cJSON_CreateNumber(number);
+ if (add_item_to_object(object, name, number_item, &global_hooks, false))
+ {
+ return number_item;
+ }
+
+ cJSON_Delete(number_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string)
+{
+ cJSON *string_item = cJSON_CreateString(string);
+ if (add_item_to_object(object, name, string_item, &global_hooks, false))
+ {
+ return string_item;
+ }
+
+ cJSON_Delete(string_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw)
+{
+ cJSON *raw_item = cJSON_CreateRaw(raw);
+ if (add_item_to_object(object, name, raw_item, &global_hooks, false))
+ {
+ return raw_item;
+ }
+
+ cJSON_Delete(raw_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name)
+{
+ cJSON *object_item = cJSON_CreateObject();
+ if (add_item_to_object(object, name, object_item, &global_hooks, false))
+ {
+ return object_item;
+ }
+
+ cJSON_Delete(object_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name)
+{
+ cJSON *array = cJSON_CreateArray();
+ if (add_item_to_object(object, name, array, &global_hooks, false))
+ {
+ return array;
+ }
+
+ cJSON_Delete(array);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item)
+{
+ if ((parent == NULL) || (item == NULL))
+ {
+ return NULL;
+ }
+
+ if (item->prev != NULL)
+ {
+ /* not the first element */
+ item->prev->next = item->next;
+ }
+ if (item->next != NULL)
+ {
+ /* not the last element */
+ item->next->prev = item->prev;
+ }
+
+ if (item == parent->child)
+ {
+ /* first element */
+ parent->child = item->next;
+ }
+ /* make sure the detached item doesn't point anywhere anymore */
+ item->prev = NULL;
+ item->next = NULL;
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which)
+{
+ if (which < 0)
+ {
+ return NULL;
+ }
+
+ return cJSON_DetachItemViaPointer(array, get_array_item(array, (size_t)which));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which)
+{
+ cJSON_Delete(cJSON_DetachItemFromArray(array, which));
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string)
+{
+ cJSON *to_detach = cJSON_GetObjectItem(object, string);
+
+ return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string)
+{
+ cJSON *to_detach = cJSON_GetObjectItemCaseSensitive(object, string);
+
+ return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string)
+{
+ cJSON_Delete(cJSON_DetachItemFromObject(object, string));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string)
+{
+ cJSON_Delete(cJSON_DetachItemFromObjectCaseSensitive(object, string));
+}
+
+/* Replace array/object items with new ones. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem)
+{
+ cJSON *after_inserted = NULL;
+
+ if (which < 0)
+ {
+ return;
+ }
+
+ after_inserted = get_array_item(array, (size_t)which);
+ if (after_inserted == NULL)
+ {
+ add_item_to_array(array, newitem);
+ return;
+ }
+
+ newitem->next = after_inserted;
+ newitem->prev = after_inserted->prev;
+ after_inserted->prev = newitem;
+ if (after_inserted == array->child)
+ {
+ array->child = newitem;
+ }
+ else
+ {
+ newitem->prev->next = newitem;
+ }
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement)
+{
+ if ((parent == NULL) || (replacement == NULL) || (item == NULL))
+ {
+ return false;
+ }
+
+ if (replacement == item)
+ {
+ return true;
+ }
+
+ replacement->next = item->next;
+ replacement->prev = item->prev;
+
+ if (replacement->next != NULL)
+ {
+ replacement->next->prev = replacement;
+ }
+ if (replacement->prev != NULL)
+ {
+ replacement->prev->next = replacement;
+ }
+ if (parent->child == item)
+ {
+ parent->child = replacement;
+ }
+
+ item->next = NULL;
+ item->prev = NULL;
+ cJSON_Delete(item);
+
+ return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem)
+{
+ if (which < 0)
+ {
+ return;
+ }
+
+ cJSON_ReplaceItemViaPointer(array, get_array_item(array, (size_t)which), newitem);
+}
+
+static cJSON_bool replace_item_in_object(cJSON *object, const char *string, cJSON *replacement, cJSON_bool case_sensitive)
+{
+ if ((replacement == NULL) || (string == NULL))
+ {
+ return false;
+ }
+
+ /* replace the name in the replacement */
+ if (!(replacement->type & cJSON_StringIsConst) && (replacement->string != NULL))
+ {
+ cJSON_free(replacement->string);
+ }
+ replacement->string = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks);
+ replacement->type &= ~cJSON_StringIsConst;
+
+ cJSON_ReplaceItemViaPointer(object, get_object_item(object, string, case_sensitive), replacement);
+
+ return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem)
+{
+ replace_item_in_object(object, string, newitem, false);
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object, const char *string, cJSON *newitem)
+{
+ replace_item_in_object(object, string, newitem, true);
+}
+
+/* Create basic types: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_NULL;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_True;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_False;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = b ? cJSON_True : cJSON_False;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_Number;
+ item->valuedouble = num;
+
+ /* use saturation in case of overflow */
+ if (num >= INT_MAX)
+ {
+ item->valueint = INT_MAX;
+ }
+ else if (num <= INT_MIN)
+ {
+ item->valueint = INT_MIN;
+ }
+ else
+ {
+ item->valueint = (int)num;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateInt64(long long num)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_Number;
+ item->valuedouble = static_cast<double>(num);
+
+ // For integer which is out of the range of [INT_MIN, INT_MAX], it may lose precision if we cast it to double.
+ // Instead, we keep the integer literal as a string.
+ if (num > INT_MAX || num < INT_MIN)
+ {
+ char buf[21];
+ sprintf(buf, "%lld", num);
+ item->valuestring = (char*)cJSON_strdup((const unsigned char*)buf, &global_hooks);
+ }
+
+ /* use saturation in case of overflow */
+ if (num >= INT_MAX)
+ {
+ item->valueint = INT_MAX;
+ }
+ else if (num <= INT_MIN)
+ {
+ item->valueint = INT_MIN;
+ }
+ else
+ {
+ item->valueint = (int)num;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_String;
+ item->valuestring = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks);
+ if(!item->valuestring)
+ {
+ cJSON_Delete(item);
+ return NULL;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL)
+ {
+ item->type = cJSON_String | cJSON_IsReference;
+ item->valuestring = (char*)cast_away_const(string);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL) {
+ item->type = cJSON_Object | cJSON_IsReference;
+ item->child = (cJSON*)cast_away_const(child);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child) {
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL) {
+ item->type = cJSON_Array | cJSON_IsReference;
+ item->child = (cJSON*)cast_away_const(child);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_Raw;
+ item->valuestring = (char*)cJSON_strdup((const unsigned char*)raw, &global_hooks);
+ if(!item->valuestring)
+ {
+ cJSON_Delete(item);
+ return NULL;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type=cJSON_Array;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item)
+ {
+ item->type = cJSON_Object;
+ }
+
+ return item;
+}
+
+/* Create Arrays: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+ for(i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber(numbers[i]);
+ if (!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for(i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber((double)numbers[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for(i = 0;a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber(numbers[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (strings == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for (i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateString(strings[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p,n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+/* Duplication */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse)
+{
+ cJSON *newitem = NULL;
+ cJSON *child = NULL;
+ cJSON *next = NULL;
+ cJSON *newchild = NULL;
+
+ /* Bail on bad ptr */
+ if (!item)
+ {
+ goto fail;
+ }
+ /* Create new item */
+ newitem = cJSON_New_Item(&global_hooks);
+ if (!newitem)
+ {
+ goto fail;
+ }
+ /* Copy over all vars */
+ newitem->type = item->type & (~cJSON_IsReference);
+ newitem->valueint = item->valueint;
+ newitem->valuedouble = item->valuedouble;
+ if (item->valuestring)
+ {
+ newitem->valuestring = (char*)cJSON_strdup((unsigned char*)item->valuestring, &global_hooks);
+ if (!newitem->valuestring)
+ {
+ goto fail;
+ }
+ }
+ if (item->string)
+ {
+ newitem->string = (item->type&cJSON_StringIsConst) ? item->string : (char*)cJSON_strdup((unsigned char*)item->string, &global_hooks);
+ if (!newitem->string)
+ {
+ goto fail;
+ }
+ }
+ /* If non-recursive, then we're done! */
+ if (!recurse)
+ {
+ return newitem;
+ }
+ /* Walk the ->next chain for the child. */
+ child = item->child;
+ while (child != NULL)
+ {
+ newchild = cJSON_Duplicate(child, true); /* Duplicate (with recurse) each item in the ->next chain */
+ if (!newchild)
+ {
+ goto fail;
+ }
+ if (next != NULL)
+ {
+ /* If newitem->child already set, then crosswire ->prev and ->next and move on */
+ next->next = newchild;
+ newchild->prev = next;
+ next = newchild;
+ }
+ else
+ {
+ /* Set newitem->child and move to it */
+ newitem->child = newchild;
+ next = newchild;
+ }
+ child = child->next;
+ }
+
+ return newitem;
+
+fail:
+ if (newitem != NULL)
+ {
+ cJSON_Delete(newitem);
+ }
+
+ return NULL;
+}
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json)
+{
+ unsigned char *into = (unsigned char*)json;
+
+ if (json == NULL)
+ {
+ return;
+ }
+
+ while (*json)
+ {
+ if (*json == ' ')
+ {
+ json++;
+ }
+ else if (*json == '\t')
+ {
+ /* Whitespace characters. */
+ json++;
+ }
+ else if (*json == '\r')
+ {
+ json++;
+ }
+ else if (*json=='\n')
+ {
+ json++;
+ }
+ else if ((*json == '/') && (json[1] == '/'))
+ {
+ /* double-slash comments, to end of line. */
+ while (*json && (*json != '\n'))
+ {
+ json++;
+ }
+ }
+ else if ((*json == '/') && (json[1] == '*'))
+ {
+ /* multiline comments. */
+ while (*json && !((*json == '*') && (json[1] == '/')))
+ {
+ json++;
+ }
+ json += 2;
+ }
+ else if (*json == '\"')
+ {
+ /* string literals, which are \" sensitive. */
+ *into++ = (unsigned char)*json++;
+ while (*json && (*json != '\"'))
+ {
+ if (*json == '\\')
+ {
+ *into++ = (unsigned char)*json++;
+ }
+ *into++ = (unsigned char)*json++;
+ }
+ *into++ = (unsigned char)*json++;
+ }
+ else
+ {
+ /* All other characters. */
+ *into++ = (unsigned char)*json++;
+ }
+ }
+
+ /* and null-terminate. */
+ *into = '\0';
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Invalid;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_False;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xff) == cJSON_True;
+}
+
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & (cJSON_True | cJSON_False)) != 0;
+}
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_NULL;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Number;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_String;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Array;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Object;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Raw;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive)
+{
+ if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF)) || cJSON_IsInvalid(a))
+ {
+ return false;
+ }
+
+ /* check if type is valid */
+ switch (a->type & 0xFF)
+ {
+ case cJSON_False:
+ case cJSON_True:
+ case cJSON_NULL:
+ case cJSON_Number:
+ case cJSON_String:
+ case cJSON_Raw:
+ case cJSON_Array:
+ case cJSON_Object:
+ break;
+
+ default:
+ return false;
+ }
+
+ /* identical objects are equal */
+ if (a == b)
+ {
+ return true;
+ }
+
+ switch (a->type & 0xFF)
+ {
+ /* in these cases and equal type is enough */
+ case cJSON_False:
+ case cJSON_True:
+ case cJSON_NULL:
+ return true;
+
+ case cJSON_Number:
+ if (a->valuedouble == b->valuedouble)
+ {
+ return true;
+ }
+ return false;
+
+ case cJSON_String:
+ case cJSON_Raw:
+ if ((a->valuestring == NULL) || (b->valuestring == NULL))
+ {
+ return false;
+ }
+ if (strcmp(a->valuestring, b->valuestring) == 0)
+ {
+ return true;
+ }
+
+ return false;
+
+ case cJSON_Array:
+ {
+ cJSON *a_element = a->child;
+ cJSON *b_element = b->child;
+
+ for (; (a_element != NULL) && (b_element != NULL);)
+ {
+ if (!cJSON_Compare(a_element, b_element, case_sensitive))
+ {
+ return false;
+ }
+
+ a_element = a_element->next;
+ b_element = b_element->next;
+ }
+
+ /* one of the arrays is longer than the other */
+ if (a_element != b_element) {
+ return false;
+ }
+
+ return true;
+ }
+
+ case cJSON_Object:
+ {
+ cJSON *a_element = NULL;
+ cJSON *b_element = NULL;
+ cJSON_ArrayForEach(a_element, a)
+ {
+ /* TODO This has O(n^2) runtime, which is horrible! */
+ b_element = get_object_item(b, a_element->string, case_sensitive);
+ if (b_element == NULL)
+ {
+ return false;
+ }
+
+ if (!cJSON_Compare(a_element, b_element, case_sensitive))
+ {
+ return false;
+ }
+ }
+
+ /* doing this twice, once on a and b to prevent true comparison if a subset of b
+ * TODO: Do this the proper way, this is just a fix for now */
+ cJSON_ArrayForEach(b_element, b)
+ {
+ a_element = get_object_item(a, b_element->string, case_sensitive);
+ if (a_element == NULL)
+ {
+ return false;
+ }
+
+ if (!cJSON_Compare(b_element, a_element, case_sensitive))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ default:
+ return false;
+ }
+}
+
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size)
+{
+ return global_hooks.allocate(size);
+}
+
+CJSON_PUBLIC(void) cJSON_free(void *object)
+{
+ global_hooks.deallocate(object);
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/tinyxml2/tinyxml2.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/tinyxml2/tinyxml2.cpp
new file mode 100644
index 00000000000..ebe0fd9eec0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/external/tinyxml2/tinyxml2.cpp
@@ -0,0 +1,2802 @@
+/*
+Original code by Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+/*
+This file has been modified from its original version by Amazon:
+ (1) Memory management operations use aws memory management api
+ (2) #includes all use <>
+*/
+
+#include <aws/core/external/tinyxml2/tinyxml2.h>
+
+#include <new> // yes, this one new style header, is in the Android SDK.
+#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
+# include <stddef.h>
+# include <stdarg.h>
+#else
+# include <cstddef>
+# include <cstdarg>
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
+ // Microsoft Visual Studio, version 2005 and higher. Not WinCE.
+ /*int _snprintf_s(
+ char *buffer,
+ size_t sizeOfBuffer,
+ size_t count,
+ const char *format [,
+ argument] ...
+ );*/
+ static inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... )
+ {
+ va_list va;
+ va_start( va, format );
+ int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
+ va_end( va );
+ return result;
+ }
+
+ static inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char* format, va_list va )
+ {
+ int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
+ return result;
+ }
+
+ #define TIXML_VSCPRINTF _vscprintf
+ #define TIXML_SSCANF sscanf_s
+#elif defined _MSC_VER
+ // Microsoft Visual Studio 2003 and earlier or WinCE
+ #define TIXML_SNPRINTF _snprintf
+ #define TIXML_VSNPRINTF _vsnprintf
+ #define TIXML_SSCANF sscanf
+ #if (_MSC_VER < 1400 ) && (!defined WINCE)
+ // Microsoft Visual Studio 2003 and not WinCE.
+ #define TIXML_VSCPRINTF _vscprintf // VS2003's C runtime has this, but VC6 C runtime or WinCE SDK doesn't have.
+ #else
+ // Microsoft Visual Studio 2003 and earlier or WinCE.
+ static inline int TIXML_VSCPRINTF( const char* format, va_list va )
+ {
+ int len = 512;
+ for (;;) {
+ len = len*2;
+ char* str = Aws::NewArray<char>(len, ALLOCATION_TAG);
+ const int required = _vsnprintf(str, len, format, va);
+ Aws::DeleteArray(str);
+ if ( required != -1 ) {
+ TIXMLASSERT( required >= 0 );
+ len = required;
+ break;
+ }
+ }
+ TIXMLASSERT( len >= 0 );
+ return len;
+ }
+ #endif
+#else
+ // GCC version 3 and higher
+ //#warning( "Using sn* functions." )
+ #define TIXML_SNPRINTF snprintf
+ #define TIXML_VSNPRINTF vsnprintf
+ static inline int TIXML_VSCPRINTF( const char* format, va_list va )
+ {
+ int len = vsnprintf( 0, 0, format, va );
+ TIXMLASSERT( len >= 0 );
+ return len;
+ }
+ #define TIXML_SSCANF sscanf
+#endif
+
+
+static const char LINE_FEED = (char)0x0a; // all line endings are normalized to LF
+static const char LF = LINE_FEED;
+static const char CARRIAGE_RETURN = (char)0x0d; // CR gets filtered out
+static const char CR = CARRIAGE_RETURN;
+static const char SINGLE_QUOTE = '\'';
+static const char DOUBLE_QUOTE = '\"';
+
+// Bunch of unicode info at:
+// http://www.unicode.org/faq/utf_bom.html
+// ef bb bf (Microsoft "lead bytes") - designates UTF-8
+
+static const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
+static const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
+static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
+
+namespace Aws
+{
+namespace External
+{
+namespace tinyxml2
+{
+
+struct Entity {
+ const char* pattern;
+ int length;
+ char value;
+};
+
+static const int NUM_ENTITIES = 5;
+static const Entity entities[NUM_ENTITIES] = {
+ { "quot", 4, DOUBLE_QUOTE },
+ { "amp", 3, '&' },
+ { "apos", 4, SINGLE_QUOTE },
+ { "lt", 2, '<' },
+ { "gt", 2, '>' }
+};
+
+
+StrPair::~StrPair()
+{
+ Reset();
+}
+
+
+void StrPair::TransferTo( StrPair* other )
+{
+ if ( this == other ) {
+ return;
+ }
+ // This in effect implements the assignment operator by "moving"
+ // ownership (as in auto_ptr).
+
+ TIXMLASSERT( other != 0 );
+ TIXMLASSERT( other->_flags == 0 );
+ TIXMLASSERT( other->_start == 0 );
+ TIXMLASSERT( other->_end == 0 );
+
+ other->Reset();
+
+ other->_flags = _flags;
+ other->_start = _start;
+ other->_end = _end;
+
+ _flags = 0;
+ _start = 0;
+ _end = 0;
+}
+
+
+void StrPair::Reset()
+{
+ if ( _flags & NEEDS_DELETE ) {
+ Aws::DeleteArray(_start);
+ }
+ _flags = 0;
+ _start = 0;
+ _end = 0;
+}
+
+
+void StrPair::SetStr( const char* str, int flags )
+{
+ TIXMLASSERT( str );
+ Reset();
+ size_t len = strlen( str );
+ TIXMLASSERT( _start == 0 );
+ _start = Aws::NewArray<char>(len+1, ALLOCATION_TAG);
+ memcpy( _start, str, len+1 );
+ _end = _start + len;
+ _flags = flags | NEEDS_DELETE;
+}
+
+
+char* StrPair::ParseText( char* p, const char* endTag, int strFlags, int* curLineNumPtr )
+{
+ TIXMLASSERT( p );
+ TIXMLASSERT( endTag && *endTag );
+ TIXMLASSERT(curLineNumPtr);
+
+ char* start = p;
+ char endChar = *endTag;
+ size_t length = strlen( endTag );
+
+ // Inner loop of text parsing.
+ while ( *p ) {
+ if ( *p == endChar && strncmp( p, endTag, length ) == 0 ) {
+ Set( start, p, strFlags );
+ return p + length;
+ } else if (*p == '\n') {
+ ++(*curLineNumPtr);
+ }
+ ++p;
+ TIXMLASSERT( p );
+ }
+ return 0;
+}
+
+
+char* StrPair::ParseName( char* p )
+{
+ if ( !p || !(*p) ) {
+ return 0;
+ }
+ if ( !XMLUtil::IsNameStartChar( *p ) ) {
+ return 0;
+ }
+
+ char* const start = p;
+ ++p;
+ while ( *p && XMLUtil::IsNameChar( *p ) ) {
+ ++p;
+ }
+
+ Set( start, p, 0 );
+ return p;
+}
+
+
+void StrPair::CollapseWhitespace()
+{
+ // Adjusting _start would cause undefined behavior on delete[]
+ TIXMLASSERT( ( _flags & NEEDS_DELETE ) == 0 );
+ // Trim leading space.
+ _start = XMLUtil::SkipWhiteSpace( _start, 0 );
+
+ if ( *_start ) {
+ const char* p = _start; // the read pointer
+ char* q = _start; // the write pointer
+
+ while( *p ) {
+ if ( XMLUtil::IsWhiteSpace( *p )) {
+ p = XMLUtil::SkipWhiteSpace( p, 0 );
+ if ( *p == 0 ) {
+ break; // don't write to q; this trims the trailing space.
+ }
+ *q = ' ';
+ ++q;
+ }
+ *q = *p;
+ ++q;
+ ++p;
+ }
+ *q = 0;
+ }
+}
+
+
+const char* StrPair::GetStr()
+{
+ TIXMLASSERT( _start );
+ TIXMLASSERT( _end );
+ if ( _flags & NEEDS_FLUSH ) {
+ *_end = 0;
+ _flags ^= NEEDS_FLUSH;
+
+ if ( _flags ) {
+ const char* p = _start; // the read pointer
+ char* q = _start; // the write pointer
+
+ while( p < _end ) {
+ if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == CR ) {
+ // CR-LF pair becomes LF
+ // CR alone becomes LF
+ // LF-CR becomes LF
+ if ( *(p+1) == LF ) {
+ p += 2;
+ }
+ else {
+ ++p;
+ }
+ *q = LF;
+ ++q;
+ }
+ else if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == LF ) {
+ if ( *(p+1) == CR ) {
+ p += 2;
+ }
+ else {
+ ++p;
+ }
+ *q = LF;
+ ++q;
+ }
+ else if ( (_flags & NEEDS_ENTITY_PROCESSING) && *p == '&' ) {
+ // Entities handled by tinyXML2:
+ // - special entities in the entity table [in/out]
+ // - numeric character reference [in]
+ // &#20013; or &#x4e2d;
+
+ if ( *(p+1) == '#' ) {
+ const int buflen = 10;
+ char buf[buflen] = { 0 };
+ int len = 0;
+ char* adjusted = const_cast<char*>( XMLUtil::GetCharacterRef( p, buf, &len ) );
+ if ( adjusted == 0 ) {
+ *q = *p;
+ ++p;
+ ++q;
+ }
+ else {
+ TIXMLASSERT( 0 <= len && len <= buflen );
+ TIXMLASSERT( q + len <= adjusted );
+ p = adjusted;
+ memcpy( q, buf, len );
+ q += len;
+ }
+ }
+ else {
+ bool entityFound = false;
+ for( int i = 0; i < NUM_ENTITIES; ++i ) {
+ const Entity& entity = entities[i];
+ if ( strncmp( p + 1, entity.pattern, entity.length ) == 0
+ && *( p + entity.length + 1 ) == ';' ) {
+ // Found an entity - convert.
+ *q = entity.value;
+ ++q;
+ p += entity.length + 2;
+ entityFound = true;
+ break;
+ }
+ }
+ if ( !entityFound ) {
+ // fixme: treat as error?
+ ++p;
+ ++q;
+ }
+ }
+ }
+ else {
+ *q = *p;
+ ++p;
+ ++q;
+ }
+ }
+ *q = 0;
+ }
+ // The loop below has plenty going on, and this
+ // is a less useful mode. Break it out.
+ if ( _flags & NEEDS_WHITESPACE_COLLAPSING ) {
+ CollapseWhitespace();
+ }
+ _flags = (_flags & NEEDS_DELETE);
+ }
+ TIXMLASSERT( _start );
+ return _start;
+}
+
+
+
+
+// --------- XMLUtil ----------- //
+
+const char* XMLUtil::writeBoolTrue = "true";
+const char* XMLUtil::writeBoolFalse = "false";
+
+void XMLUtil::SetBoolSerialization(const char* writeTrue, const char* writeFalse)
+{
+ static const char* defTrue = "true";
+ static const char* defFalse = "false";
+
+ writeBoolTrue = (writeTrue) ? writeTrue : defTrue;
+ writeBoolFalse = (writeFalse) ? writeFalse : defFalse;
+}
+
+
+const char* XMLUtil::ReadBOM( const char* p, bool* bom )
+{
+ TIXMLASSERT( p );
+ TIXMLASSERT( bom );
+ *bom = false;
+ const unsigned char* pu = reinterpret_cast<const unsigned char*>(p);
+ // Check for BOM:
+ if ( *(pu+0) == TIXML_UTF_LEAD_0
+ && *(pu+1) == TIXML_UTF_LEAD_1
+ && *(pu+2) == TIXML_UTF_LEAD_2 ) {
+ *bom = true;
+ p += 3;
+ }
+ TIXMLASSERT( p );
+ return p;
+}
+
+
+void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length )
+{
+ const unsigned long BYTE_MASK = 0xBF;
+ const unsigned long BYTE_MARK = 0x80;
+ const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
+
+ if (input < 0x80) {
+ *length = 1;
+ }
+ else if ( input < 0x800 ) {
+ *length = 2;
+ }
+ else if ( input < 0x10000 ) {
+ *length = 3;
+ }
+ else if ( input < 0x200000 ) {
+ *length = 4;
+ }
+ else {
+ *length = 0; // This code won't convert this correctly anyway.
+ return;
+ }
+
+ output += *length;
+
+ // Scary scary fall throughs are annotated with carefully designed comments
+ // to suppress compiler warnings such as -Wimplicit-fallthrough in gcc
+ switch (*length) {
+ case 4:
+ --output;
+ *output = (char)((input | BYTE_MARK) & BYTE_MASK);
+ input >>= 6;
+ //fall through
+ case 3:
+ --output;
+ *output = (char)((input | BYTE_MARK) & BYTE_MASK);
+ input >>= 6;
+ //fall through
+ case 2:
+ --output;
+ *output = (char)((input | BYTE_MARK) & BYTE_MASK);
+ input >>= 6;
+ //fall through
+ case 1:
+ --output;
+ *output = (char)(input | FIRST_BYTE_MARK[*length]);
+ break;
+ default:
+ TIXMLASSERT( false );
+ }
+}
+
+
+const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length )
+{
+ // Presume an entity, and pull it out.
+ *length = 0;
+
+ if ( *(p+1) == '#' && *(p+2) ) {
+ unsigned long ucs = 0;
+ TIXMLASSERT( sizeof( ucs ) >= 4 );
+ ptrdiff_t delta = 0;
+ unsigned mult = 1;
+ static const char SEMICOLON = ';';
+
+ if ( *(p+2) == 'x' ) {
+ // Hexadecimal.
+ const char* q = p+3;
+ if ( !(*q) ) {
+ return 0;
+ }
+
+ q = strchr( q, SEMICOLON );
+
+ if ( !q ) {
+ return 0;
+ }
+ TIXMLASSERT( *q == SEMICOLON );
+
+ delta = q-p;
+ --q;
+
+ while ( *q != 'x' ) {
+ unsigned int digit = 0;
+
+ if ( *q >= '0' && *q <= '9' ) {
+ digit = *q - '0';
+ }
+ else if ( *q >= 'a' && *q <= 'f' ) {
+ digit = *q - 'a' + 10;
+ }
+ else if ( *q >= 'A' && *q <= 'F' ) {
+ digit = *q - 'A' + 10;
+ }
+ else {
+ return 0;
+ }
+ TIXMLASSERT( digit < 16 );
+ TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit );
+ const unsigned int digitScaled = mult * digit;
+ TIXMLASSERT( ucs <= ULONG_MAX - digitScaled );
+ ucs += digitScaled;
+ TIXMLASSERT( mult <= UINT_MAX / 16 );
+ mult *= 16;
+ --q;
+ }
+ }
+ else {
+ // Decimal.
+ const char* q = p+2;
+ if ( !(*q) ) {
+ return 0;
+ }
+
+ q = strchr( q, SEMICOLON );
+
+ if ( !q ) {
+ return 0;
+ }
+ TIXMLASSERT( *q == SEMICOLON );
+
+ delta = q-p;
+ --q;
+
+ while ( *q != '#' ) {
+ if ( *q >= '0' && *q <= '9' ) {
+ const unsigned int digit = *q - '0';
+ TIXMLASSERT( digit < 10 );
+ TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit );
+ const unsigned int digitScaled = mult * digit;
+ TIXMLASSERT( ucs <= ULONG_MAX - digitScaled );
+ ucs += digitScaled;
+ }
+ else {
+ return 0;
+ }
+ TIXMLASSERT( mult <= UINT_MAX / 10 );
+ mult *= 10;
+ --q;
+ }
+ }
+ // convert the UCS to UTF-8
+ ConvertUTF32ToUTF8( ucs, value, length );
+ return p + delta + 1;
+ }
+ return p+1;
+}
+
+
+void XMLUtil::ToStr( int v, char* buffer, int bufferSize )
+{
+ TIXML_SNPRINTF( buffer, bufferSize, "%d", v );
+}
+
+
+void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize )
+{
+ TIXML_SNPRINTF( buffer, bufferSize, "%u", v );
+}
+
+
+void XMLUtil::ToStr( bool v, char* buffer, int bufferSize )
+{
+ TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? writeBoolTrue : writeBoolFalse);
+}
+
+/*
+ ToStr() of a number is a very tricky topic.
+ https://github.com/leethomason/tinyxml2/issues/106
+*/
+void XMLUtil::ToStr( float v, char* buffer, int bufferSize )
+{
+ TIXML_SNPRINTF( buffer, bufferSize, "%.8g", v );
+}
+
+
+void XMLUtil::ToStr( double v, char* buffer, int bufferSize )
+{
+ TIXML_SNPRINTF( buffer, bufferSize, "%.17g", v );
+}
+
+
+void XMLUtil::ToStr(int64_t v, char* buffer, int bufferSize)
+{
+ // horrible syntax trick to make the compiler happy about %lld
+ TIXML_SNPRINTF(buffer, bufferSize, "%lld", (long long)v);
+}
+
+
+bool XMLUtil::ToInt( const char* str, int* value )
+{
+ if ( TIXML_SSCANF( str, "%d", value ) == 1 ) {
+ return true;
+ }
+ return false;
+}
+
+bool XMLUtil::ToUnsigned( const char* str, unsigned *value )
+{
+ if ( TIXML_SSCANF( str, "%u", value ) == 1 ) {
+ return true;
+ }
+ return false;
+}
+
+bool XMLUtil::ToBool( const char* str, bool* value )
+{
+ int ival = 0;
+ if ( ToInt( str, &ival )) {
+ *value = (ival==0) ? false : true;
+ return true;
+ }
+ if ( StringEqual( str, "true" ) ) {
+ *value = true;
+ return true;
+ }
+ else if ( StringEqual( str, "false" ) ) {
+ *value = false;
+ return true;
+ }
+ return false;
+}
+
+
+bool XMLUtil::ToFloat( const char* str, float* value )
+{
+ if ( TIXML_SSCANF( str, "%f", value ) == 1 ) {
+ return true;
+ }
+ return false;
+}
+
+
+bool XMLUtil::ToDouble( const char* str, double* value )
+{
+ if ( TIXML_SSCANF( str, "%lf", value ) == 1 ) {
+ return true;
+ }
+ return false;
+}
+
+
+bool XMLUtil::ToInt64(const char* str, int64_t* value)
+{
+ long long v = 0; // horrible syntax trick to make the compiler happy about %lld
+ if (TIXML_SSCANF(str, "%lld", &v) == 1) {
+ *value = (int64_t)v;
+ return true;
+ }
+ return false;
+}
+
+
+char* XMLDocument::Identify( char* p, XMLNode** node )
+{
+ TIXMLASSERT( node );
+ TIXMLASSERT( p );
+ char* const start = p;
+ int const startLine = _parseCurLineNum;
+ p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum );
+ if( !*p ) {
+ *node = 0;
+ TIXMLASSERT( p );
+ return p;
+ }
+
+ // These strings define the matching patterns:
+ static const char* xmlHeader = { "<?" };
+ static const char* commentHeader = { "<!--" };
+ static const char* cdataHeader = { "<![CDATA[" };
+ static const char* dtdHeader = { "<!" };
+ static const char* elementHeader = { "<" }; // and a header for everything else; check last.
+
+ static const int xmlHeaderLen = 2;
+ static const int commentHeaderLen = 4;
+ static const int cdataHeaderLen = 9;
+ static const int dtdHeaderLen = 2;
+ static const int elementHeaderLen = 1;
+
+ TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLUnknown ) ); // use same memory pool
+ TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) ); // use same memory pool
+ XMLNode* returnNode = 0;
+ if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {
+ returnNode = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
+ returnNode->_parseLineNum = _parseCurLineNum;
+ p += xmlHeaderLen;
+ }
+ else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) {
+ returnNode = CreateUnlinkedNode<XMLComment>( _commentPool );
+ returnNode->_parseLineNum = _parseCurLineNum;
+ p += commentHeaderLen;
+ }
+ else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) {
+ XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
+ returnNode = text;
+ returnNode->_parseLineNum = _parseCurLineNum;
+ p += cdataHeaderLen;
+ text->SetCData( true );
+ }
+ else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) {
+ returnNode = CreateUnlinkedNode<XMLUnknown>( _commentPool );
+ returnNode->_parseLineNum = _parseCurLineNum;
+ p += dtdHeaderLen;
+ }
+ else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) {
+ returnNode = CreateUnlinkedNode<XMLElement>( _elementPool );
+ returnNode->_parseLineNum = _parseCurLineNum;
+ p += elementHeaderLen;
+ }
+ else {
+ returnNode = CreateUnlinkedNode<XMLText>( _textPool );
+ returnNode->_parseLineNum = _parseCurLineNum; // Report line of first non-whitespace character
+ p = start; // Back it up, all the text counts.
+ _parseCurLineNum = startLine;
+ }
+
+ TIXMLASSERT( returnNode );
+ TIXMLASSERT( p );
+ *node = returnNode;
+ return p;
+}
+
+
+bool XMLDocument::Accept( XMLVisitor* visitor ) const
+{
+ TIXMLASSERT( visitor );
+ if ( visitor->VisitEnter( *this ) ) {
+ for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) {
+ if ( !node->Accept( visitor ) ) {
+ break;
+ }
+ }
+ }
+ return visitor->VisitExit( *this );
+}
+
+
+// --------- XMLNode ----------- //
+
+XMLNode::XMLNode( XMLDocument* doc ) :
+ _document( doc ),
+ _parent( 0 ),
+ _value(),
+ _parseLineNum( 0 ),
+ _firstChild( 0 ), _lastChild( 0 ),
+ _prev( 0 ), _next( 0 ),
+ _userData( 0 ),
+ _memPool( 0 )
+{
+}
+
+
+XMLNode::~XMLNode()
+{
+ DeleteChildren();
+ if ( _parent ) {
+ _parent->Unlink( this );
+ }
+}
+
+const char* XMLNode::Value() const
+{
+ // Edge case: XMLDocuments don't have a Value. Return null.
+ if ( this->ToDocument() )
+ return 0;
+ return _value.GetStr();
+}
+
+void XMLNode::SetValue( const char* str, bool staticMem )
+{
+ if ( staticMem ) {
+ _value.SetInternedStr( str );
+ }
+ else {
+ _value.SetStr( str );
+ }
+}
+
+XMLNode* XMLNode::DeepClone(XMLDocument* target) const
+{
+ XMLNode* clone = this->ShallowClone(target);
+ if (!clone) return 0;
+
+ for (const XMLNode* child = this->FirstChild(); child; child = child->NextSibling()) {
+ XMLNode* childClone = child->DeepClone(target);
+ TIXMLASSERT(childClone);
+ clone->InsertEndChild(childClone);
+ }
+ return clone;
+}
+
+void XMLNode::DeleteChildren()
+{
+ while( _firstChild ) {
+ TIXMLASSERT( _lastChild );
+ DeleteChild( _firstChild );
+ }
+ _firstChild = _lastChild = 0;
+}
+
+
+void XMLNode::Unlink( XMLNode* child )
+{
+ TIXMLASSERT( child );
+ TIXMLASSERT( child->_document == _document );
+ TIXMLASSERT( child->_parent == this );
+ if ( child == _firstChild ) {
+ _firstChild = _firstChild->_next;
+ }
+ if ( child == _lastChild ) {
+ _lastChild = _lastChild->_prev;
+ }
+
+ if ( child->_prev ) {
+ child->_prev->_next = child->_next;
+ }
+ if ( child->_next ) {
+ child->_next->_prev = child->_prev;
+ }
+ child->_next = 0;
+ child->_prev = 0;
+ child->_parent = 0;
+}
+
+
+void XMLNode::DeleteChild( XMLNode* node )
+{
+ TIXMLASSERT( node );
+ TIXMLASSERT( node->_document == _document );
+ TIXMLASSERT( node->_parent == this );
+ Unlink( node );
+ TIXMLASSERT(node->_prev == 0);
+ TIXMLASSERT(node->_next == 0);
+ TIXMLASSERT(node->_parent == 0);
+ DeleteNode( node );
+}
+
+
+XMLNode* XMLNode::InsertEndChild( XMLNode* addThis )
+{
+ TIXMLASSERT( addThis );
+ if ( addThis->_document != _document ) {
+ TIXMLASSERT( false );
+ return 0;
+ }
+ InsertChildPreamble( addThis );
+
+ if ( _lastChild ) {
+ TIXMLASSERT( _firstChild );
+ TIXMLASSERT( _lastChild->_next == 0 );
+ _lastChild->_next = addThis;
+ addThis->_prev = _lastChild;
+ _lastChild = addThis;
+
+ addThis->_next = 0;
+ }
+ else {
+ TIXMLASSERT( _firstChild == 0 );
+ _firstChild = _lastChild = addThis;
+
+ addThis->_prev = 0;
+ addThis->_next = 0;
+ }
+ addThis->_parent = this;
+ return addThis;
+}
+
+
+XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis )
+{
+ TIXMLASSERT( addThis );
+ if ( addThis->_document != _document ) {
+ TIXMLASSERT( false );
+ return 0;
+ }
+ InsertChildPreamble( addThis );
+
+ if ( _firstChild ) {
+ TIXMLASSERT( _lastChild );
+ TIXMLASSERT( _firstChild->_prev == 0 );
+
+ _firstChild->_prev = addThis;
+ addThis->_next = _firstChild;
+ _firstChild = addThis;
+
+ addThis->_prev = 0;
+ }
+ else {
+ TIXMLASSERT( _lastChild == 0 );
+ _firstChild = _lastChild = addThis;
+
+ addThis->_prev = 0;
+ addThis->_next = 0;
+ }
+ addThis->_parent = this;
+ return addThis;
+}
+
+
+XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis )
+{
+ TIXMLASSERT( addThis );
+ if ( addThis->_document != _document ) {
+ TIXMLASSERT( false );
+ return 0;
+ }
+
+ TIXMLASSERT( afterThis );
+
+ if ( afterThis->_parent != this ) {
+ TIXMLASSERT( false );
+ return 0;
+ }
+ if ( afterThis == addThis ) {
+ // Current state: BeforeThis -> AddThis -> OneAfterAddThis
+ // Now AddThis must disappear from it's location and then
+ // reappear between BeforeThis and OneAfterAddThis.
+ // So just leave it where it is.
+ return addThis;
+ }
+
+ if ( afterThis->_next == 0 ) {
+ // The last node or the only node.
+ return InsertEndChild( addThis );
+ }
+ InsertChildPreamble( addThis );
+ addThis->_prev = afterThis;
+ addThis->_next = afterThis->_next;
+ afterThis->_next->_prev = addThis;
+ afterThis->_next = addThis;
+ addThis->_parent = this;
+ return addThis;
+}
+
+
+
+
+const XMLElement* XMLNode::FirstChildElement( const char* name ) const
+{
+ for( const XMLNode* node = _firstChild; node; node = node->_next ) {
+ const XMLElement* element = node->ToElementWithName( name );
+ if ( element ) {
+ return element;
+ }
+ }
+ return 0;
+}
+
+
+const XMLElement* XMLNode::LastChildElement( const char* name ) const
+{
+ for( const XMLNode* node = _lastChild; node; node = node->_prev ) {
+ const XMLElement* element = node->ToElementWithName( name );
+ if ( element ) {
+ return element;
+ }
+ }
+ return 0;
+}
+
+
+const XMLElement* XMLNode::NextSiblingElement( const char* name ) const
+{
+ for( const XMLNode* node = _next; node; node = node->_next ) {
+ const XMLElement* element = node->ToElementWithName( name );
+ if ( element ) {
+ return element;
+ }
+ }
+ return 0;
+}
+
+
+const XMLElement* XMLNode::PreviousSiblingElement( const char* name ) const
+{
+ for( const XMLNode* node = _prev; node; node = node->_prev ) {
+ const XMLElement* element = node->ToElementWithName( name );
+ if ( element ) {
+ return element;
+ }
+ }
+ return 0;
+}
+
+
+char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr )
+{
+ // This is a recursive method, but thinking about it "at the current level"
+ // it is a pretty simple flat list:
+ // <foo/>
+ // <!-- comment -->
+ //
+ // With a special case:
+ // <foo>
+ // </foo>
+ // <!-- comment -->
+ //
+ // Where the closing element (/foo) *must* be the next thing after the opening
+ // element, and the names must match. BUT the tricky bit is that the closing
+ // element will be read by the child.
+ //
+ // 'endTag' is the end tag for this node, it is returned by a call to a child.
+ // 'parentEnd' is the end tag for the parent, which is filled in and returned.
+
+ while( p && *p ) {
+ XMLNode* node = 0;
+
+ p = _document->Identify( p, &node );
+ TIXMLASSERT( p );
+ if ( node == 0 ) {
+ break;
+ }
+
+ int initialLineNum = node->_parseLineNum;
+
+ StrPair endTag;
+ p = node->ParseDeep( p, &endTag, curLineNumPtr );
+ if ( !p ) {
+ DeleteNode( node );
+ if ( !_document->Error() ) {
+ _document->SetError( XML_ERROR_PARSING, initialLineNum, 0);
+ }
+ break;
+ }
+
+ XMLDeclaration* decl = node->ToDeclaration();
+ if ( decl ) {
+ // Declarations are only allowed at document level
+ bool wellLocated = ( ToDocument() != 0 );
+ if ( wellLocated ) {
+ // Multiple declarations are allowed but all declarations
+ // must occur before anything else
+ for ( const XMLNode* existingNode = _document->FirstChild(); existingNode; existingNode = existingNode->NextSibling() ) {
+ if ( !existingNode->ToDeclaration() ) {
+ wellLocated = false;
+ break;
+ }
+ }
+ }
+ if ( !wellLocated ) {
+ _document->SetError( XML_ERROR_PARSING_DECLARATION, initialLineNum, "XMLDeclaration value=%s", decl->Value());
+ DeleteNode( node );
+ break;
+ }
+ }
+
+ XMLElement* ele = node->ToElement();
+ if ( ele ) {
+ // We read the end tag. Return it to the parent.
+ if ( ele->ClosingType() == XMLElement::CLOSING ) {
+ if ( parentEndTag ) {
+ ele->_value.TransferTo( parentEndTag );
+ }
+ node->_memPool->SetTracked(); // created and then immediately deleted.
+ DeleteNode( node );
+ return p;
+ }
+
+ // Handle an end tag returned to this level.
+ // And handle a bunch of annoying errors.
+ bool mismatch = false;
+ if ( endTag.Empty() ) {
+ if ( ele->ClosingType() == XMLElement::OPEN ) {
+ mismatch = true;
+ }
+ }
+ else {
+ if ( ele->ClosingType() != XMLElement::OPEN ) {
+ mismatch = true;
+ }
+ else if ( !XMLUtil::StringEqual( endTag.GetStr(), ele->Name() ) ) {
+ mismatch = true;
+ }
+ }
+ if ( mismatch ) {
+ _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, initialLineNum, "XMLElement name=%s", ele->Name());
+ DeleteNode( node );
+ break;
+ }
+ }
+ InsertEndChild( node );
+ }
+ return 0;
+}
+
+/*static*/ void XMLNode::DeleteNode( XMLNode* node )
+{
+ if ( node == 0 ) {
+ return;
+ }
+ TIXMLASSERT(node->_document);
+ if (!node->ToDocument()) {
+ node->_document->MarkInUse(node);
+ }
+
+ MemPool* pool = node->_memPool;
+ node->~XMLNode();
+ pool->Free( node );
+}
+
+void XMLNode::InsertChildPreamble( XMLNode* insertThis ) const
+{
+ TIXMLASSERT( insertThis );
+ TIXMLASSERT( insertThis->_document == _document );
+
+ if (insertThis->_parent) {
+ insertThis->_parent->Unlink( insertThis );
+ }
+ else {
+ insertThis->_document->MarkInUse(insertThis);
+ insertThis->_memPool->SetTracked();
+ }
+}
+
+const XMLElement* XMLNode::ToElementWithName( const char* name ) const
+{
+ const XMLElement* element = this->ToElement();
+ if ( element == 0 ) {
+ return 0;
+ }
+ if ( name == 0 ) {
+ return element;
+ }
+ if ( XMLUtil::StringEqual( element->Name(), name ) ) {
+ return element;
+ }
+ return 0;
+}
+
+// --------- XMLText ---------- //
+char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
+{
+ if ( this->CData() ) {
+ p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr );
+ if ( !p ) {
+ _document->SetError( XML_ERROR_PARSING_CDATA, _parseLineNum, 0 );
+ }
+ return p;
+ }
+ else {
+ int flags = _document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES;
+ if ( _document->WhitespaceMode() == COLLAPSE_WHITESPACE ) {
+ flags |= StrPair::NEEDS_WHITESPACE_COLLAPSING;
+ }
+
+ p = _value.ParseText( p, "<", flags, curLineNumPtr );
+ if ( p && *p ) {
+ return p-1;
+ }
+ if ( !p ) {
+ _document->SetError( XML_ERROR_PARSING_TEXT, _parseLineNum, 0 );
+ }
+ }
+ return 0;
+}
+
+
+XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const
+{
+ if ( !doc ) {
+ doc = _document;
+ }
+ XMLText* text = doc->NewText( Value() ); // fixme: this will always allocate memory. Intern?
+ text->SetCData( this->CData() );
+ return text;
+}
+
+
+bool XMLText::ShallowEqual( const XMLNode* compare ) const
+{
+ TIXMLASSERT( compare );
+ const XMLText* text = compare->ToText();
+ return ( text && XMLUtil::StringEqual( text->Value(), Value() ) );
+}
+
+
+bool XMLText::Accept( XMLVisitor* visitor ) const
+{
+ TIXMLASSERT( visitor );
+ return visitor->Visit( *this );
+}
+
+
+// --------- XMLComment ---------- //
+
+XMLComment::XMLComment( XMLDocument* doc ) : XMLNode( doc )
+{
+}
+
+
+XMLComment::~XMLComment()
+{
+}
+
+
+char* XMLComment::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
+{
+ // Comment parses as text.
+ p = _value.ParseText( p, "-->", StrPair::COMMENT, curLineNumPtr );
+ if ( p == 0 ) {
+ _document->SetError( XML_ERROR_PARSING_COMMENT, _parseLineNum, 0 );
+ }
+ return p;
+}
+
+
+XMLNode* XMLComment::ShallowClone( XMLDocument* doc ) const
+{
+ if ( !doc ) {
+ doc = _document;
+ }
+ XMLComment* comment = doc->NewComment( Value() ); // fixme: this will always allocate memory. Intern?
+ return comment;
+}
+
+
+bool XMLComment::ShallowEqual( const XMLNode* compare ) const
+{
+ TIXMLASSERT( compare );
+ const XMLComment* comment = compare->ToComment();
+ return ( comment && XMLUtil::StringEqual( comment->Value(), Value() ));
+}
+
+
+bool XMLComment::Accept( XMLVisitor* visitor ) const
+{
+ TIXMLASSERT( visitor );
+ return visitor->Visit( *this );
+}
+
+
+// --------- XMLDeclaration ---------- //
+
+XMLDeclaration::XMLDeclaration( XMLDocument* doc ) : XMLNode( doc )
+{
+}
+
+
+XMLDeclaration::~XMLDeclaration()
+{
+ //printf( "~XMLDeclaration\n" );
+}
+
+
+char* XMLDeclaration::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
+{
+ // Declaration parses as text.
+ p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr );
+ if ( p == 0 ) {
+ _document->SetError( XML_ERROR_PARSING_DECLARATION, _parseLineNum, 0 );
+ }
+ return p;
+}
+
+
+XMLNode* XMLDeclaration::ShallowClone( XMLDocument* doc ) const
+{
+ if ( !doc ) {
+ doc = _document;
+ }
+ XMLDeclaration* dec = doc->NewDeclaration( Value() ); // fixme: this will always allocate memory. Intern?
+ return dec;
+}
+
+
+bool XMLDeclaration::ShallowEqual( const XMLNode* compare ) const
+{
+ TIXMLASSERT( compare );
+ const XMLDeclaration* declaration = compare->ToDeclaration();
+ return ( declaration && XMLUtil::StringEqual( declaration->Value(), Value() ));
+}
+
+
+
+bool XMLDeclaration::Accept( XMLVisitor* visitor ) const
+{
+ TIXMLASSERT( visitor );
+ return visitor->Visit( *this );
+}
+
+// --------- XMLUnknown ---------- //
+
+XMLUnknown::XMLUnknown( XMLDocument* doc ) : XMLNode( doc )
+{
+}
+
+
+XMLUnknown::~XMLUnknown()
+{
+}
+
+
+char* XMLUnknown::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
+{
+ // Unknown parses as text.
+ p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr );
+ if ( !p ) {
+ _document->SetError( XML_ERROR_PARSING_UNKNOWN, _parseLineNum, 0 );
+ }
+ return p;
+}
+
+
+XMLNode* XMLUnknown::ShallowClone( XMLDocument* doc ) const
+{
+ if ( !doc ) {
+ doc = _document;
+ }
+ XMLUnknown* text = doc->NewUnknown( Value() ); // fixme: this will always allocate memory. Intern?
+ return text;
+}
+
+
+bool XMLUnknown::ShallowEqual( const XMLNode* compare ) const
+{
+ TIXMLASSERT( compare );
+ const XMLUnknown* unknown = compare->ToUnknown();
+ return ( unknown && XMLUtil::StringEqual( unknown->Value(), Value() ));
+}
+
+
+bool XMLUnknown::Accept( XMLVisitor* visitor ) const
+{
+ TIXMLASSERT( visitor );
+ return visitor->Visit( *this );
+}
+
+// --------- XMLAttribute ---------- //
+
+const char* XMLAttribute::Name() const
+{
+ return _name.GetStr();
+}
+
+const char* XMLAttribute::Value() const
+{
+ return _value.GetStr();
+}
+
+char* XMLAttribute::ParseDeep( char* p, bool processEntities, int* curLineNumPtr )
+{
+ // Parse using the name rules: bug fix, was using ParseText before
+ p = _name.ParseName( p );
+ if ( !p || !*p ) {
+ return 0;
+ }
+
+ // Skip white space before =
+ p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
+ if ( *p != '=' ) {
+ return 0;
+ }
+
+ ++p; // move up to opening quote
+ p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
+ if ( *p != '\"' && *p != '\'' ) {
+ return 0;
+ }
+
+ char endTag[2] = { *p, 0 };
+ ++p; // move past opening quote
+
+ p = _value.ParseText( p, endTag, processEntities ? StrPair::ATTRIBUTE_VALUE : StrPair::ATTRIBUTE_VALUE_LEAVE_ENTITIES, curLineNumPtr );
+ return p;
+}
+
+
+void XMLAttribute::SetName( const char* n )
+{
+ _name.SetStr( n );
+}
+
+
+XMLError XMLAttribute::QueryIntValue( int* value ) const
+{
+ if ( XMLUtil::ToInt( Value(), value )) {
+ return XML_SUCCESS;
+ }
+ return XML_WRONG_ATTRIBUTE_TYPE;
+}
+
+
+XMLError XMLAttribute::QueryUnsignedValue( unsigned int* value ) const
+{
+ if ( XMLUtil::ToUnsigned( Value(), value )) {
+ return XML_SUCCESS;
+ }
+ return XML_WRONG_ATTRIBUTE_TYPE;
+}
+
+
+XMLError XMLAttribute::QueryInt64Value(int64_t* value) const
+{
+ if (XMLUtil::ToInt64(Value(), value)) {
+ return XML_SUCCESS;
+ }
+ return XML_WRONG_ATTRIBUTE_TYPE;
+}
+
+
+XMLError XMLAttribute::QueryBoolValue( bool* value ) const
+{
+ if ( XMLUtil::ToBool( Value(), value )) {
+ return XML_SUCCESS;
+ }
+ return XML_WRONG_ATTRIBUTE_TYPE;
+}
+
+
+XMLError XMLAttribute::QueryFloatValue( float* value ) const
+{
+ if ( XMLUtil::ToFloat( Value(), value )) {
+ return XML_SUCCESS;
+ }
+ return XML_WRONG_ATTRIBUTE_TYPE;
+}
+
+
+XMLError XMLAttribute::QueryDoubleValue( double* value ) const
+{
+ if ( XMLUtil::ToDouble( Value(), value )) {
+ return XML_SUCCESS;
+ }
+ return XML_WRONG_ATTRIBUTE_TYPE;
+}
+
+
+void XMLAttribute::SetAttribute( const char* v )
+{
+ _value.SetStr( v );
+}
+
+
+void XMLAttribute::SetAttribute( int v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ _value.SetStr( buf );
+}
+
+
+void XMLAttribute::SetAttribute( unsigned v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ _value.SetStr( buf );
+}
+
+
+void XMLAttribute::SetAttribute(int64_t v)
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr(v, buf, BUF_SIZE);
+ _value.SetStr(buf);
+}
+
+
+
+void XMLAttribute::SetAttribute( bool v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ _value.SetStr( buf );
+}
+
+void XMLAttribute::SetAttribute( double v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ _value.SetStr( buf );
+}
+
+void XMLAttribute::SetAttribute( float v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ _value.SetStr( buf );
+}
+
+
+// --------- XMLElement ---------- //
+XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ),
+ _closingType( OPEN ),
+ _rootAttribute( 0 )
+{
+}
+
+
+XMLElement::~XMLElement()
+{
+ while( _rootAttribute ) {
+ XMLAttribute* next = _rootAttribute->_next;
+ DeleteAttribute( _rootAttribute );
+ _rootAttribute = next;
+ }
+}
+
+
+const XMLAttribute* XMLElement::FindAttribute( const char* name ) const
+{
+ for( XMLAttribute* a = _rootAttribute; a; a = a->_next ) {
+ if ( XMLUtil::StringEqual( a->Name(), name ) ) {
+ return a;
+ }
+ }
+ return 0;
+}
+
+
+const char* XMLElement::Attribute( const char* name, const char* value ) const
+{
+ const XMLAttribute* a = FindAttribute( name );
+ if ( !a ) {
+ return 0;
+ }
+ if ( !value || XMLUtil::StringEqual( a->Value(), value )) {
+ return a->Value();
+ }
+ return 0;
+}
+
+int XMLElement::IntAttribute(const char* name, int defaultValue) const
+{
+ int i = defaultValue;
+ QueryIntAttribute(name, &i);
+ return i;
+}
+
+unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const
+{
+ unsigned i = defaultValue;
+ QueryUnsignedAttribute(name, &i);
+ return i;
+}
+
+int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const
+{
+ int64_t i = defaultValue;
+ QueryInt64Attribute(name, &i);
+ return i;
+}
+
+bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const
+{
+ bool b = defaultValue;
+ QueryBoolAttribute(name, &b);
+ return b;
+}
+
+double XMLElement::DoubleAttribute(const char* name, double defaultValue) const
+{
+ double d = defaultValue;
+ QueryDoubleAttribute(name, &d);
+ return d;
+}
+
+float XMLElement::FloatAttribute(const char* name, float defaultValue) const
+{
+ float f = defaultValue;
+ QueryFloatAttribute(name, &f);
+ return f;
+}
+
+const char* XMLElement::GetText() const
+{
+ if ( FirstChild() && FirstChild()->ToText() ) {
+ return FirstChild()->Value();
+ }
+ return 0;
+}
+
+
+void XMLElement::SetText( const char* inText )
+{
+ if ( FirstChild() && FirstChild()->ToText() )
+ FirstChild()->SetValue( inText );
+ else {
+ XMLText* theText = GetDocument()->NewText( inText );
+ InsertFirstChild( theText );
+ }
+}
+
+
+void XMLElement::SetText( int v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ SetText( buf );
+}
+
+
+void XMLElement::SetText( unsigned v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ SetText( buf );
+}
+
+
+void XMLElement::SetText(int64_t v)
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr(v, buf, BUF_SIZE);
+ SetText(buf);
+}
+
+
+void XMLElement::SetText( bool v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ SetText( buf );
+}
+
+
+void XMLElement::SetText( float v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ SetText( buf );
+}
+
+
+void XMLElement::SetText( double v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ SetText( buf );
+}
+
+
+XMLError XMLElement::QueryIntText( int* ival ) const
+{
+ if ( FirstChild() && FirstChild()->ToText() ) {
+ const char* t = FirstChild()->Value();
+ if ( XMLUtil::ToInt( t, ival ) ) {
+ return XML_SUCCESS;
+ }
+ return XML_CAN_NOT_CONVERT_TEXT;
+ }
+ return XML_NO_TEXT_NODE;
+}
+
+
+XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const
+{
+ if ( FirstChild() && FirstChild()->ToText() ) {
+ const char* t = FirstChild()->Value();
+ if ( XMLUtil::ToUnsigned( t, uval ) ) {
+ return XML_SUCCESS;
+ }
+ return XML_CAN_NOT_CONVERT_TEXT;
+ }
+ return XML_NO_TEXT_NODE;
+}
+
+
+XMLError XMLElement::QueryInt64Text(int64_t* ival) const
+{
+ if (FirstChild() && FirstChild()->ToText()) {
+ const char* t = FirstChild()->Value();
+ if (XMLUtil::ToInt64(t, ival)) {
+ return XML_SUCCESS;
+ }
+ return XML_CAN_NOT_CONVERT_TEXT;
+ }
+ return XML_NO_TEXT_NODE;
+}
+
+
+XMLError XMLElement::QueryBoolText( bool* bval ) const
+{
+ if ( FirstChild() && FirstChild()->ToText() ) {
+ const char* t = FirstChild()->Value();
+ if ( XMLUtil::ToBool( t, bval ) ) {
+ return XML_SUCCESS;
+ }
+ return XML_CAN_NOT_CONVERT_TEXT;
+ }
+ return XML_NO_TEXT_NODE;
+}
+
+
+XMLError XMLElement::QueryDoubleText( double* dval ) const
+{
+ if ( FirstChild() && FirstChild()->ToText() ) {
+ const char* t = FirstChild()->Value();
+ if ( XMLUtil::ToDouble( t, dval ) ) {
+ return XML_SUCCESS;
+ }
+ return XML_CAN_NOT_CONVERT_TEXT;
+ }
+ return XML_NO_TEXT_NODE;
+}
+
+
+XMLError XMLElement::QueryFloatText( float* fval ) const
+{
+ if ( FirstChild() && FirstChild()->ToText() ) {
+ const char* t = FirstChild()->Value();
+ if ( XMLUtil::ToFloat( t, fval ) ) {
+ return XML_SUCCESS;
+ }
+ return XML_CAN_NOT_CONVERT_TEXT;
+ }
+ return XML_NO_TEXT_NODE;
+}
+
+int XMLElement::IntText(int defaultValue) const
+{
+ int i = defaultValue;
+ QueryIntText(&i);
+ return i;
+}
+
+unsigned XMLElement::UnsignedText(unsigned defaultValue) const
+{
+ unsigned i = defaultValue;
+ QueryUnsignedText(&i);
+ return i;
+}
+
+int64_t XMLElement::Int64Text(int64_t defaultValue) const
+{
+ int64_t i = defaultValue;
+ QueryInt64Text(&i);
+ return i;
+}
+
+bool XMLElement::BoolText(bool defaultValue) const
+{
+ bool b = defaultValue;
+ QueryBoolText(&b);
+ return b;
+}
+
+double XMLElement::DoubleText(double defaultValue) const
+{
+ double d = defaultValue;
+ QueryDoubleText(&d);
+ return d;
+}
+
+float XMLElement::FloatText(float defaultValue) const
+{
+ float f = defaultValue;
+ QueryFloatText(&f);
+ return f;
+}
+
+
+XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name )
+{
+ XMLAttribute* last = 0;
+ XMLAttribute* attrib = 0;
+ for( attrib = _rootAttribute;
+ attrib;
+ last = attrib, attrib = attrib->_next ) {
+ if ( XMLUtil::StringEqual( attrib->Name(), name ) ) {
+ break;
+ }
+ }
+ if ( !attrib ) {
+ attrib = CreateAttribute();
+ TIXMLASSERT( attrib );
+ if ( last ) {
+ TIXMLASSERT( last->_next == 0 );
+ last->_next = attrib;
+ }
+ else {
+ TIXMLASSERT( _rootAttribute == 0 );
+ _rootAttribute = attrib;
+ }
+ attrib->SetName( name );
+ }
+ return attrib;
+}
+
+
+void XMLElement::DeleteAttribute( const char* name )
+{
+ XMLAttribute* prev = 0;
+ for( XMLAttribute* a=_rootAttribute; a; a=a->_next ) {
+ if ( XMLUtil::StringEqual( name, a->Name() ) ) {
+ if ( prev ) {
+ prev->_next = a->_next;
+ }
+ else {
+ _rootAttribute = a->_next;
+ }
+ DeleteAttribute( a );
+ break;
+ }
+ prev = a;
+ }
+}
+
+
+char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr )
+{
+ XMLAttribute* prevAttribute = 0;
+
+ // Read the attributes.
+ while( p ) {
+ p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
+ if ( !(*p) ) {
+ _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, "XMLElement name=%s", Name() );
+ return 0;
+ }
+
+ // attribute.
+ if (XMLUtil::IsNameStartChar( *p ) ) {
+ XMLAttribute* attrib = CreateAttribute();
+ TIXMLASSERT( attrib );
+ attrib->_parseLineNum = _document->_parseCurLineNum;
+
+ int attrLineNum = attrib->_parseLineNum;
+
+ p = attrib->ParseDeep( p, _document->ProcessEntities(), curLineNumPtr );
+ if ( !p || Attribute( attrib->Name() ) ) {
+ DeleteAttribute( attrib );
+ _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, attrLineNum, "XMLElement name=%s", Name() );
+ return 0;
+ }
+ // There is a minor bug here: if the attribute in the source xml
+ // document is duplicated, it will not be detected and the
+ // attribute will be doubly added. However, tracking the 'prevAttribute'
+ // avoids re-scanning the attribute list. Preferring performance for
+ // now, may reconsider in the future.
+ if ( prevAttribute ) {
+ TIXMLASSERT( prevAttribute->_next == 0 );
+ prevAttribute->_next = attrib;
+ }
+ else {
+ TIXMLASSERT( _rootAttribute == 0 );
+ _rootAttribute = attrib;
+ }
+ prevAttribute = attrib;
+ }
+ // end of the tag
+ else if ( *p == '>' ) {
+ ++p;
+ break;
+ }
+ // end of the tag
+ else if ( *p == '/' && *(p+1) == '>' ) {
+ _closingType = CLOSED;
+ return p+2; // done; sealed element.
+ }
+ else {
+ _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, 0 );
+ return 0;
+ }
+ }
+ return p;
+}
+
+void XMLElement::DeleteAttribute( XMLAttribute* attribute )
+{
+ if ( attribute == 0 ) {
+ return;
+ }
+ MemPool* pool = attribute->_memPool;
+ attribute->~XMLAttribute();
+ pool->Free( attribute );
+}
+
+XMLAttribute* XMLElement::CreateAttribute()
+{
+ TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );
+ XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
+ TIXMLASSERT( attrib );
+ attrib->_memPool = &_document->_attributePool;
+ attrib->_memPool->SetTracked();
+ return attrib;
+}
+
+//
+// <ele></ele>
+// <ele>foo<b>bar</b></ele>
+//
+char* XMLElement::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr )
+{
+ // Read the element name.
+ p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
+
+ // The closing element is the </element> form. It is
+ // parsed just like a regular element then deleted from
+ // the DOM.
+ if ( *p == '/' ) {
+ _closingType = CLOSING;
+ ++p;
+ }
+
+ p = _value.ParseName( p );
+ if ( _value.Empty() ) {
+ return 0;
+ }
+
+ p = ParseAttributes( p, curLineNumPtr );
+ if ( !p || !*p || _closingType != OPEN ) {
+ return p;
+ }
+
+ p = XMLNode::ParseDeep( p, parentEndTag, curLineNumPtr );
+ return p;
+}
+
+
+
+XMLNode* XMLElement::ShallowClone( XMLDocument* doc ) const
+{
+ if ( !doc ) {
+ doc = _document;
+ }
+ XMLElement* element = doc->NewElement( Value() ); // fixme: this will always allocate memory. Intern?
+ for( const XMLAttribute* a=FirstAttribute(); a; a=a->Next() ) {
+ element->SetAttribute( a->Name(), a->Value() ); // fixme: this will always allocate memory. Intern?
+ }
+ return element;
+}
+
+
+bool XMLElement::ShallowEqual( const XMLNode* compare ) const
+{
+ TIXMLASSERT( compare );
+ const XMLElement* other = compare->ToElement();
+ if ( other && XMLUtil::StringEqual( other->Name(), Name() )) {
+
+ const XMLAttribute* a=FirstAttribute();
+ const XMLAttribute* b=other->FirstAttribute();
+
+ while ( a && b ) {
+ if ( !XMLUtil::StringEqual( a->Value(), b->Value() ) ) {
+ return false;
+ }
+ a = a->Next();
+ b = b->Next();
+ }
+ if ( a || b ) {
+ // different count
+ return false;
+ }
+ return true;
+ }
+ return false;
+}
+
+
+bool XMLElement::Accept( XMLVisitor* visitor ) const
+{
+ TIXMLASSERT( visitor );
+ if ( visitor->VisitEnter( *this, _rootAttribute ) ) {
+ for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) {
+ if ( !node->Accept( visitor ) ) {
+ break;
+ }
+ }
+ }
+ return visitor->VisitExit( *this );
+}
+
+
+// --------- XMLDocument ----------- //
+
+// Warning: List must match 'enum XMLError'
+const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = {
+ "XML_SUCCESS",
+ "XML_NO_ATTRIBUTE",
+ "XML_WRONG_ATTRIBUTE_TYPE",
+ "XML_ERROR_FILE_NOT_FOUND",
+ "XML_ERROR_FILE_COULD_NOT_BE_OPENED",
+ "XML_ERROR_FILE_READ_ERROR",
+ "UNUSED_XML_ERROR_ELEMENT_MISMATCH",
+ "XML_ERROR_PARSING_ELEMENT",
+ "XML_ERROR_PARSING_ATTRIBUTE",
+ "UNUSED_XML_ERROR_IDENTIFYING_TAG",
+ "XML_ERROR_PARSING_TEXT",
+ "XML_ERROR_PARSING_CDATA",
+ "XML_ERROR_PARSING_COMMENT",
+ "XML_ERROR_PARSING_DECLARATION",
+ "XML_ERROR_PARSING_UNKNOWN",
+ "XML_ERROR_EMPTY_DOCUMENT",
+ "XML_ERROR_MISMATCHED_ELEMENT",
+ "XML_ERROR_PARSING",
+ "XML_CAN_NOT_CONVERT_TEXT",
+ "XML_NO_TEXT_NODE"
+};
+
+
+XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) :
+ XMLNode( 0 ),
+ _writeBOM( false ),
+ _processEntities( processEntities ),
+ _errorID(XML_SUCCESS),
+ _whitespaceMode( whitespaceMode ),
+ _errorStr(),
+ _errorLineNum( 0 ),
+ _charBuffer( 0 ),
+ _parseCurLineNum( 0 ),
+ _unlinked(),
+ _elementPool(),
+ _attributePool(),
+ _textPool(),
+ _commentPool()
+{
+ // avoid VC++ C4355 warning about 'this' in initializer list (C4355 is off by default in VS2012+)
+ _document = this;
+}
+
+
+XMLDocument::~XMLDocument()
+{
+ Clear();
+}
+
+
+void XMLDocument::MarkInUse(XMLNode* node)
+{
+ TIXMLASSERT(node);
+ TIXMLASSERT(node->_parent == 0);
+
+ for (int i = 0; i < _unlinked.Size(); ++i) {
+ if (node == _unlinked[i]) {
+ _unlinked.SwapRemove(i);
+ break;
+ }
+ }
+}
+
+void XMLDocument::Clear()
+{
+ DeleteChildren();
+ while( _unlinked.Size()) {
+ DeleteNode(_unlinked[0]); // Will remove from _unlinked as part of delete.
+ }
+
+#ifdef DEBUG
+ const bool hadError = Error();
+#endif
+ ClearError();
+
+ Aws::DeleteArray(_charBuffer);
+ _charBuffer = 0;
+
+#if 0
+ _textPool.Trace( "text" );
+ _elementPool.Trace( "element" );
+ _commentPool.Trace( "comment" );
+ _attributePool.Trace( "attribute" );
+#endif
+
+#ifdef DEBUG
+ if ( !hadError ) {
+ TIXMLASSERT( _elementPool.CurrentAllocs() == _elementPool.Untracked() );
+ TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() );
+ TIXMLASSERT( _textPool.CurrentAllocs() == _textPool.Untracked() );
+ TIXMLASSERT( _commentPool.CurrentAllocs() == _commentPool.Untracked() );
+ }
+#endif
+}
+
+
+void XMLDocument::DeepCopy(XMLDocument* target) const
+{
+ TIXMLASSERT(target);
+ if (target == this) {
+ return; // technically success - a no-op.
+ }
+
+ target->Clear();
+ for (const XMLNode* node = this->FirstChild(); node; node = node->NextSibling()) {
+ target->InsertEndChild(node->DeepClone(target));
+ }
+}
+
+XMLElement* XMLDocument::NewElement( const char* name )
+{
+ XMLElement* ele = CreateUnlinkedNode<XMLElement>( _elementPool );
+ ele->SetName( name );
+ return ele;
+}
+
+
+XMLComment* XMLDocument::NewComment( const char* str )
+{
+ XMLComment* comment = CreateUnlinkedNode<XMLComment>( _commentPool );
+ comment->SetValue( str );
+ return comment;
+}
+
+
+XMLText* XMLDocument::NewText( const char* str )
+{
+ XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
+ text->SetValue( str );
+ return text;
+}
+
+
+XMLDeclaration* XMLDocument::NewDeclaration( const char* str )
+{
+ XMLDeclaration* dec = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
+ dec->SetValue( str ? str : "xml version=\"1.0\" encoding=\"UTF-8\"" );
+ return dec;
+}
+
+
+XMLUnknown* XMLDocument::NewUnknown( const char* str )
+{
+ XMLUnknown* unk = CreateUnlinkedNode<XMLUnknown>( _commentPool );
+ unk->SetValue( str );
+ return unk;
+}
+
+static FILE* callfopen( const char* filepath, const char* mode )
+{
+ TIXMLASSERT( filepath );
+ TIXMLASSERT( mode );
+#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
+ FILE* fp = 0;
+ errno_t err = fopen_s( &fp, filepath, mode );
+ if ( err ) {
+ return 0;
+ }
+#else
+ FILE* fp = fopen( filepath, mode );
+#endif
+ return fp;
+}
+
+void XMLDocument::DeleteNode( XMLNode* node ) {
+ TIXMLASSERT( node );
+ TIXMLASSERT(node->_document == this );
+ if (node->_parent) {
+ node->_parent->DeleteChild( node );
+ }
+ else {
+ // Isn't in the tree.
+ // Use the parent delete.
+ // Also, we need to mark it tracked: we 'know'
+ // it was never used.
+ node->_memPool->SetTracked();
+ // Call the static XMLNode version:
+ XMLNode::DeleteNode(node);
+ }
+}
+
+
+XMLError XMLDocument::LoadFile( const char* filename )
+{
+ Clear();
+ FILE* fp = callfopen( filename, "rb" );
+ if ( !fp ) {
+ SetError( XML_ERROR_FILE_NOT_FOUND, 0, "filename=%s", filename ? filename : "<null>");
+ return _errorID;
+ }
+ LoadFile( fp );
+ fclose( fp );
+ return _errorID;
+}
+
+// This is likely overengineered template art to have a check that unsigned long value incremented
+// by one still fits into size_t. If size_t type is larger than unsigned long type
+// (x86_64-w64-mingw32 target) then the check is redundant and gcc and clang emit
+// -Wtype-limits warning. This piece makes the compiler select code with a check when a check
+// is useful and code with no check when a check is redundant depending on how size_t and unsigned long
+// types sizes relate to each other.
+template
+<bool = (sizeof(unsigned long) >= sizeof(size_t))>
+struct LongFitsIntoSizeTMinusOne {
+ static bool Fits( unsigned long value )
+ {
+ return value < (size_t)-1;
+ }
+};
+
+template <>
+struct LongFitsIntoSizeTMinusOne<false> {
+ static bool Fits( unsigned long )
+ {
+ return true;
+ }
+};
+
+XMLError XMLDocument::LoadFile( FILE* fp )
+{
+ Clear();
+
+ fseek( fp, 0, SEEK_SET );
+ if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) {
+ SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
+ return _errorID;
+ }
+
+ fseek( fp, 0, SEEK_END );
+ const long filelength = ftell( fp );
+ fseek( fp, 0, SEEK_SET );
+ if ( filelength == -1L ) {
+ SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
+ return _errorID;
+ }
+ TIXMLASSERT( filelength >= 0 );
+
+ if ( !LongFitsIntoSizeTMinusOne<>::Fits( filelength ) ) {
+ // Cannot handle files which won't fit in buffer together with null terminator
+ SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
+ return _errorID;
+ }
+
+ if ( filelength == 0 ) {
+ SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
+ return _errorID;
+ }
+
+ const size_t size = filelength;
+ TIXMLASSERT( _charBuffer == 0 );
+ _charBuffer = Aws::NewArray <char>(size+1, ALLOCATION_TAG);
+ size_t read = fread( _charBuffer, 1, size, fp );
+ if ( read != size ) {
+ SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
+ return _errorID;
+ }
+
+ _charBuffer[size] = 0;
+
+ Parse();
+ return _errorID;
+}
+
+
+XMLError XMLDocument::SaveFile( const char* filename, bool compact )
+{
+ FILE* fp = callfopen( filename, "w" );
+ if ( !fp ) {
+ SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=%s", filename ? filename : "<null>");
+ return _errorID;
+ }
+ SaveFile(fp, compact);
+ fclose( fp );
+ return _errorID;
+}
+
+
+XMLError XMLDocument::SaveFile( FILE* fp, bool compact )
+{
+ // Clear any error from the last save, otherwise it will get reported
+ // for *this* call.
+ ClearError();
+ XMLPrinter stream( fp, compact );
+ Print( &stream );
+ return _errorID;
+}
+
+
+XMLError XMLDocument::Parse( const char* p, size_t len )
+{
+ Clear();
+
+ if ( len == 0 || !p || !*p ) {
+ SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
+ return _errorID;
+ }
+ if ( len == (size_t)(-1) ) {
+ len = strlen( p );
+ }
+ TIXMLASSERT( _charBuffer == 0 );
+ _charBuffer = Aws::NewArray<char>(len+1, ALLOCATION_TAG);
+ memcpy( _charBuffer, p, len );
+ _charBuffer[len] = 0;
+
+ Parse();
+ if ( Error() ) {
+ // clean up now essentially dangling memory.
+ // and the parse fail can put objects in the
+ // pools that are dead and inaccessible.
+ DeleteChildren();
+ _elementPool.Clear();
+ _attributePool.Clear();
+ _textPool.Clear();
+ _commentPool.Clear();
+ }
+ return _errorID;
+}
+
+
+void XMLDocument::Print( XMLPrinter* streamer ) const
+{
+ if ( streamer ) {
+ Accept( streamer );
+ }
+ else {
+ XMLPrinter stdoutStreamer( stdout );
+ Accept( &stdoutStreamer );
+ }
+}
+
+
+void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... )
+{
+ TIXMLASSERT( error >= 0 && error < XML_ERROR_COUNT );
+ _errorID = error;
+ _errorLineNum = lineNum;
+ _errorStr.Reset();
+
+ if (format) {
+ size_t BUFFER_SIZE = 1000;
+ char* buffer = Aws::NewArray<char>(BUFFER_SIZE, ALLOCATION_TAG);
+ TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d: ", ErrorIDToName(error), int(error), int(error), lineNum);
+ size_t len = strlen(buffer);
+
+ va_list va;
+ va_start( va, format );
+ TIXML_VSNPRINTF( buffer + len, BUFFER_SIZE - len, format, va );
+ va_end( va );
+
+ _errorStr.SetStr(buffer);
+ Aws::DeleteArray(buffer);
+ }
+}
+
+
+/*static*/ const char* XMLDocument::ErrorIDToName(XMLError errorID)
+{
+ TIXMLASSERT( errorID >= 0 && errorID < XML_ERROR_COUNT );
+ const char* errorName = _errorNames[errorID];
+ TIXMLASSERT( errorName && errorName[0] );
+ return errorName;
+}
+
+const char* XMLDocument::ErrorStr() const
+{
+ return _errorStr.Empty() ? "" : _errorStr.GetStr();
+}
+
+
+void XMLDocument::PrintError() const
+{
+ printf("%s\n", ErrorStr());
+}
+
+const char* XMLDocument::ErrorName() const
+{
+ return ErrorIDToName(_errorID);
+}
+
+void XMLDocument::Parse()
+{
+ TIXMLASSERT( NoChildren() ); // Clear() must have been called previously
+ TIXMLASSERT( _charBuffer );
+ _parseCurLineNum = 1;
+ _parseLineNum = 1;
+ char* p = _charBuffer;
+ p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum );
+ p = const_cast<char*>( XMLUtil::ReadBOM( p, &_writeBOM ) );
+ if ( !*p ) {
+ SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
+ return;
+ }
+ ParseDeep(p, 0, &_parseCurLineNum );
+}
+
+XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) :
+ _elementJustOpened( false ),
+ _stack(),
+ _firstElement( true ),
+ _fp( file ),
+ _depth( depth ),
+ _textDepth( -1 ),
+ _processEntities( true ),
+ _compactMode( compact ),
+ _buffer()
+{
+ for( int i=0; i<ENTITY_RANGE; ++i ) {
+ _entityFlag[i] = false;
+ _restrictedEntityFlag[i] = false;
+ }
+ for( int i=0; i<NUM_ENTITIES; ++i ) {
+ const char entityValue = entities[i].value;
+ const unsigned char flagIndex = (unsigned char)entityValue;
+ TIXMLASSERT( flagIndex < ENTITY_RANGE );
+ _entityFlag[flagIndex] = true;
+ }
+ _restrictedEntityFlag[(unsigned char)'&'] = true;
+ _restrictedEntityFlag[(unsigned char)'<'] = true;
+ _restrictedEntityFlag[(unsigned char)'>'] = true; // not required, but consistency is nice
+ _buffer.Push( 0 );
+}
+
+
+void XMLPrinter::Print( const char* format, ... )
+{
+ va_list va;
+ va_start( va, format );
+
+ if ( _fp ) {
+ vfprintf( _fp, format, va );
+ }
+ else {
+ const int len = TIXML_VSCPRINTF( format, va );
+ // Close out and re-start the va-args
+ va_end( va );
+ TIXMLASSERT( len >= 0 );
+ va_start( va, format );
+ TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 );
+ char* p = _buffer.PushArr( len ) - 1; // back up over the null terminator.
+ TIXML_VSNPRINTF( p, len+1, format, va );
+ }
+ va_end( va );
+}
+
+
+void XMLPrinter::Write( const char* data, size_t size )
+{
+ if ( _fp ) {
+ fwrite ( data , sizeof(char), size, _fp);
+ }
+ else {
+ char* p = _buffer.PushArr( static_cast<int>(size) ) - 1; // back up over the null terminator.
+ memcpy( p, data, size );
+ p[size] = 0;
+ }
+}
+
+
+void XMLPrinter::Putc( char ch )
+{
+ if ( _fp ) {
+ fputc ( ch, _fp);
+ }
+ else {
+ char* p = _buffer.PushArr( sizeof(char) ) - 1; // back up over the null terminator.
+ p[0] = ch;
+ p[1] = 0;
+ }
+}
+
+
+void XMLPrinter::PrintSpace( int depth )
+{
+ for( int i=0; i<depth; ++i ) {
+ Write( " " );
+ }
+}
+
+
+void XMLPrinter::PrintString( const char* p, bool restricted )
+{
+ // Look for runs of bytes between entities to print.
+ const char* q = p;
+
+ if ( _processEntities ) {
+ const bool* flag = restricted ? _restrictedEntityFlag : _entityFlag;
+ while ( *q ) {
+ TIXMLASSERT( p <= q );
+ // Remember, char is sometimes signed. (How many times has that bitten me?)
+ if ( *q > 0 && *q < ENTITY_RANGE ) {
+ // Check for entities. If one is found, flush
+ // the stream up until the entity, write the
+ // entity, and keep looking.
+ if ( flag[(unsigned char)(*q)] ) {
+ while ( p < q ) {
+ const size_t delta = q - p;
+ const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
+ Write( p, toPrint );
+ p += toPrint;
+ }
+ bool entityPatternPrinted = false;
+ for( int i=0; i<NUM_ENTITIES; ++i ) {
+ if ( entities[i].value == *q ) {
+ Putc( '&' );
+ Write( entities[i].pattern, entities[i].length );
+ Putc( ';' );
+ entityPatternPrinted = true;
+ break;
+ }
+ }
+ if ( !entityPatternPrinted ) {
+ // TIXMLASSERT( entityPatternPrinted ) causes gcc -Wunused-but-set-variable in release
+ TIXMLASSERT( false );
+ }
+ ++p;
+ }
+ }
+ ++q;
+ TIXMLASSERT( p <= q );
+ }
+ }
+ // Flush the remaining string. This will be the entire
+ // string if an entity wasn't found.
+ TIXMLASSERT( p <= q );
+ if ( !_processEntities || ( p < q ) ) {
+ const size_t delta = q - p;
+ const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
+ Write( p, toPrint );
+ }
+}
+
+
+void XMLPrinter::PushHeader( bool writeBOM, bool writeDec )
+{
+ if ( writeBOM ) {
+ static const unsigned char bom[] = { TIXML_UTF_LEAD_0, TIXML_UTF_LEAD_1, TIXML_UTF_LEAD_2, 0 };
+ Write( reinterpret_cast< const char* >( bom ) );
+ }
+ if ( writeDec ) {
+ PushDeclaration( "xml version=\"1.0\"" );
+ }
+}
+
+
+void XMLPrinter::OpenElement( const char* name, bool compactMode )
+{
+ SealElementIfJustOpened();
+ _stack.Push( name );
+
+ if ( _textDepth < 0 && !_firstElement && !compactMode ) {
+ Putc( '\n' );
+ }
+ if ( !compactMode ) {
+ PrintSpace( _depth );
+ }
+
+ Write ( "<" );
+ Write ( name );
+
+ _elementJustOpened = true;
+ _firstElement = false;
+ ++_depth;
+}
+
+
+void XMLPrinter::PushAttribute( const char* name, const char* value )
+{
+ TIXMLASSERT( _elementJustOpened );
+ Putc ( ' ' );
+ Write( name );
+ Write( "=\"" );
+ PrintString( value, false );
+ Putc ( '\"' );
+}
+
+
+void XMLPrinter::PushAttribute( const char* name, int v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ PushAttribute( name, buf );
+}
+
+
+void XMLPrinter::PushAttribute( const char* name, unsigned v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ PushAttribute( name, buf );
+}
+
+
+void XMLPrinter::PushAttribute(const char* name, int64_t v)
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr(v, buf, BUF_SIZE);
+ PushAttribute(name, buf);
+}
+
+
+void XMLPrinter::PushAttribute( const char* name, bool v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ PushAttribute( name, buf );
+}
+
+
+void XMLPrinter::PushAttribute( const char* name, double v )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( v, buf, BUF_SIZE );
+ PushAttribute( name, buf );
+}
+
+
+void XMLPrinter::CloseElement( bool compactMode )
+{
+ --_depth;
+ const char* name = _stack.Pop();
+
+ if ( _elementJustOpened ) {
+ Write( "/>" );
+ }
+ else {
+ if ( _textDepth < 0 && !compactMode) {
+ Putc( '\n' );
+ PrintSpace( _depth );
+ }
+ Write ( "</" );
+ Write ( name );
+ Write ( ">" );
+ }
+
+ if ( _textDepth == _depth ) {
+ _textDepth = -1;
+ }
+ if ( _depth == 0 && !compactMode) {
+ Putc( '\n' );
+ }
+ _elementJustOpened = false;
+}
+
+
+void XMLPrinter::SealElementIfJustOpened()
+{
+ if ( !_elementJustOpened ) {
+ return;
+ }
+ _elementJustOpened = false;
+ Putc( '>' );
+}
+
+
+void XMLPrinter::PushText( const char* text, bool cdata )
+{
+ _textDepth = _depth-1;
+
+ SealElementIfJustOpened();
+ if ( cdata ) {
+ Write( "<![CDATA[" );
+ Write( text );
+ Write( "]]>" );
+ }
+ else {
+ PrintString( text, true );
+ }
+}
+
+void XMLPrinter::PushText( int64_t value )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( value, buf, BUF_SIZE );
+ PushText( buf, false );
+}
+
+void XMLPrinter::PushText( int value )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( value, buf, BUF_SIZE );
+ PushText( buf, false );
+}
+
+
+void XMLPrinter::PushText( unsigned value )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( value, buf, BUF_SIZE );
+ PushText( buf, false );
+}
+
+
+void XMLPrinter::PushText( bool value )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( value, buf, BUF_SIZE );
+ PushText( buf, false );
+}
+
+
+void XMLPrinter::PushText( float value )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( value, buf, BUF_SIZE );
+ PushText( buf, false );
+}
+
+
+void XMLPrinter::PushText( double value )
+{
+ char buf[BUF_SIZE];
+ XMLUtil::ToStr( value, buf, BUF_SIZE );
+ PushText( buf, false );
+}
+
+
+void XMLPrinter::PushComment( const char* comment )
+{
+ SealElementIfJustOpened();
+ if ( _textDepth < 0 && !_firstElement && !_compactMode) {
+ Putc( '\n' );
+ PrintSpace( _depth );
+ }
+ _firstElement = false;
+
+ Write( "<!--" );
+ Write( comment );
+ Write( "-->" );
+}
+
+
+void XMLPrinter::PushDeclaration( const char* value )
+{
+ SealElementIfJustOpened();
+ if ( _textDepth < 0 && !_firstElement && !_compactMode) {
+ Putc( '\n' );
+ PrintSpace( _depth );
+ }
+ _firstElement = false;
+
+ Write( "<?" );
+ Write( value );
+ Write( "?>" );
+}
+
+
+void XMLPrinter::PushUnknown( const char* value )
+{
+ SealElementIfJustOpened();
+ if ( _textDepth < 0 && !_firstElement && !_compactMode) {
+ Putc( '\n' );
+ PrintSpace( _depth );
+ }
+ _firstElement = false;
+
+ Write( "<!" );
+ Write( value );
+ Putc( '>' );
+}
+
+
+bool XMLPrinter::VisitEnter( const XMLDocument& doc )
+{
+ _processEntities = doc.ProcessEntities();
+ if ( doc.HasBOM() ) {
+ PushHeader( true, false );
+ }
+ return true;
+}
+
+
+bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute )
+{
+ const XMLElement* parentElem = 0;
+ if ( element.Parent() ) {
+ parentElem = element.Parent()->ToElement();
+ }
+ const bool compactMode = parentElem ? CompactMode( *parentElem ) : _compactMode;
+ OpenElement( element.Name(), compactMode );
+ while ( attribute ) {
+ PushAttribute( attribute->Name(), attribute->Value() );
+ attribute = attribute->Next();
+ }
+ return true;
+}
+
+
+bool XMLPrinter::VisitExit( const XMLElement& element )
+{
+ CloseElement( CompactMode(element) );
+ return true;
+}
+
+
+bool XMLPrinter::Visit( const XMLText& text )
+{
+ PushText( text.Value(), text.CData() );
+ return true;
+}
+
+
+bool XMLPrinter::Visit( const XMLComment& comment )
+{
+ PushComment( comment.Value() );
+ return true;
+}
+
+bool XMLPrinter::Visit( const XMLDeclaration& declaration )
+{
+ PushDeclaration( declaration.Value() );
+ return true;
+}
+
+
+bool XMLPrinter::Visit( const XMLUnknown& unknown )
+{
+ PushUnknown( unknown.Value() );
+ return true;
+}
+
+} // namespace tinyxml2
+} // namespace External
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClient.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClient.cpp
new file mode 100644
index 00000000000..85420233936
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClient.cpp
@@ -0,0 +1,49 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/HttpClient.h>
+#include <aws/core/http/HttpRequest.h>
+
+using namespace Aws;
+using namespace Aws::Http;
+
+HttpClient::HttpClient() :
+ m_disableRequestProcessing( false ),
+ m_requestProcessingSignalLock(),
+ m_requestProcessingSignal()
+{
+}
+
+void HttpClient::DisableRequestProcessing()
+{
+ m_disableRequestProcessing = true;
+ m_requestProcessingSignal.notify_all();
+}
+
+void HttpClient::EnableRequestProcessing()
+{
+ m_disableRequestProcessing = false;
+}
+
+bool HttpClient::IsRequestProcessingEnabled() const
+{
+ return m_disableRequestProcessing.load() == false;
+}
+
+void HttpClient::RetryRequestSleep(std::chrono::milliseconds sleepTime)
+{
+ std::unique_lock< std::mutex > signalLocker(m_requestProcessingSignalLock);
+ m_requestProcessingSignal.wait_for(signalLocker, sleepTime, [this](){ return m_disableRequestProcessing.load() == true; });
+}
+
+bool HttpClient::ContinueRequest(const Aws::Http::HttpRequest& request) const
+{
+ if (request.GetContinueRequestHandler())
+ {
+ return request.GetContinueRequestHandler()(&request);
+ }
+
+ return true;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClientFactory.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClientFactory.cpp
new file mode 100644
index 00000000000..a556e39a5d8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpClientFactory.cpp
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/HttpClientFactory.h>
+
+#if ENABLE_CURL_CLIENT
+#include <aws/core/http/curl/CurlHttpClient.h>
+#include <signal.h>
+
+#elif ENABLE_WINDOWS_CLIENT
+#include <aws/core/client/ClientConfiguration.h>
+#if ENABLE_WINDOWS_IXML_HTTP_REQUEST_2_CLIENT
+#error #include <aws/core/http/windows/IXmlHttpRequest2HttpClient.h>
+#if BYPASS_DEFAULT_PROXY
+#error #include <aws/core/http/windows/WinHttpSyncHttpClient.h>
+#endif
+#else
+#error #include <aws/core/http/windows/WinINetSyncHttpClient.h>
+#error #include <aws/core/http/windows/WinHttpSyncHttpClient.h>
+#endif
+#endif
+
+#include <aws/core/http/standard/StandardHttpRequest.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <cassert>
+
+using namespace Aws::Client;
+using namespace Aws::Http;
+using namespace Aws::Utils::Logging;
+
+namespace Aws
+{
+ namespace Http
+ {
+ static std::shared_ptr<HttpClientFactory>& GetHttpClientFactory()
+ {
+ static std::shared_ptr<HttpClientFactory> s_HttpClientFactory(nullptr);
+ return s_HttpClientFactory;
+ }
+ static bool s_InitCleanupCurlFlag(false);
+ static bool s_InstallSigPipeHandler(false);
+
+ static const char* HTTP_CLIENT_FACTORY_ALLOCATION_TAG = "HttpClientFactory";
+
+#if ENABLE_CURL_CLIENT && !defined(_WIN32)
+ static void LogAndSwallowHandler(int signal)
+ {
+ switch(signal)
+ {
+ case SIGPIPE:
+ AWS_LOGSTREAM_ERROR(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, "Received a SIGPIPE error");
+ break;
+ default:
+ AWS_LOGSTREAM_ERROR(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, "Unhandled system SIGNAL error" << signal);
+ }
+ }
+#endif
+
+ class DefaultHttpClientFactory : public HttpClientFactory
+ {
+ std::shared_ptr<HttpClient> CreateHttpClient(const ClientConfiguration& clientConfiguration) const override
+ {
+ // Figure out whether the selected option is available but fail gracefully and return a default of some type if not
+ // Windows clients: Http and Inet are always options, Curl MIGHT be an option if USE_CURL_CLIENT is on, and http is "default"
+ // Other clients: Curl is your default
+#if ENABLE_WINDOWS_CLIENT
+#if ENABLE_WINDOWS_IXML_HTTP_REQUEST_2_CLIENT
+#if BYPASS_DEFAULT_PROXY
+ switch (clientConfiguration.httpLibOverride)
+ {
+ case TransferLibType::WIN_HTTP_CLIENT:
+ AWS_LOGSTREAM_INFO(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, "Creating WinHTTP http client.");
+ return Aws::MakeShared<WinHttpSyncHttpClient>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, clientConfiguration);
+ case TransferLibType::WIN_INET_CLIENT:
+ AWS_LOGSTREAM_WARN(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, "WinINet http client is not supported with the current build configuration.");
+ // fall-through
+ default:
+ AWS_LOGSTREAM_INFO(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, "Creating IXMLHttpRequest http client.");
+ return Aws::MakeShared<IXmlHttpRequest2HttpClient>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, clientConfiguration);
+ }
+#else
+ return Aws::MakeShared<IXmlHttpRequest2HttpClient>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, clientConfiguration);
+#endif // BYPASS_DEFAULT_PROXY
+#else
+ switch (clientConfiguration.httpLibOverride)
+ {
+ case TransferLibType::WIN_INET_CLIENT:
+ return Aws::MakeShared<WinINetSyncHttpClient>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, clientConfiguration);
+
+ default:
+ return Aws::MakeShared<WinHttpSyncHttpClient>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, clientConfiguration);
+ }
+#endif // ENABLE_WINDOWS_IXML_HTTP_REQUEST_2_CLIENT
+#elif ENABLE_CURL_CLIENT
+ return Aws::MakeShared<CurlHttpClient>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, clientConfiguration);
+#else
+ // When neither of these clients is enabled, gcc gives a warning (converted
+ // to error by -Werror) about the unused clientConfiguration parameter. We
+ // prevent that warning with AWS_UNREFERENCED_PARAM.
+ AWS_UNREFERENCED_PARAM(clientConfiguration);
+ AWS_LOGSTREAM_WARN(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, "SDK was built without an Http implementation, default http client factory can't create an Http client instance.");
+ return nullptr;
+#endif
+ }
+
+ std::shared_ptr<HttpRequest> CreateHttpRequest(const Aws::String &uri, HttpMethod method,
+ const Aws::IOStreamFactory &streamFactory) const override
+ {
+ return CreateHttpRequest(URI(uri), method, streamFactory);
+ }
+
+ std::shared_ptr<HttpRequest> CreateHttpRequest(const URI& uri, HttpMethod method, const Aws::IOStreamFactory& streamFactory) const override
+ {
+ auto request = Aws::MakeShared<Standard::StandardHttpRequest>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG, uri, method);
+ request->SetResponseStreamFactory(streamFactory);
+
+ return request;
+ }
+
+ void InitStaticState() override
+ {
+#if ENABLE_CURL_CLIENT
+ if(s_InitCleanupCurlFlag)
+ {
+ CurlHttpClient::InitGlobalState();
+ }
+#if !defined (_WIN32)
+ if(s_InstallSigPipeHandler)
+ {
+ ::signal(SIGPIPE, LogAndSwallowHandler);
+ }
+#endif
+#elif ENABLE_WINDOWS_IXML_HTTP_REQUEST_2_CLIENT
+ IXmlHttpRequest2HttpClient::InitCOM();
+#endif
+ }
+
+ virtual void CleanupStaticState() override
+ {
+#if ENABLE_CURL_CLIENT
+ if(s_InitCleanupCurlFlag)
+ {
+ CurlHttpClient::CleanupGlobalState();
+ }
+#endif
+ }
+ };
+
+ void SetInitCleanupCurlFlag(bool initCleanupFlag)
+ {
+ s_InitCleanupCurlFlag = initCleanupFlag;
+ }
+
+ void SetInstallSigPipeHandlerFlag(bool install)
+ {
+ s_InstallSigPipeHandler = install;
+ }
+
+ void InitHttp()
+ {
+ if(!GetHttpClientFactory())
+ {
+ GetHttpClientFactory() = Aws::MakeShared<DefaultHttpClientFactory>(HTTP_CLIENT_FACTORY_ALLOCATION_TAG);
+ }
+ GetHttpClientFactory()->InitStaticState();
+ }
+
+ void CleanupHttp()
+ {
+ if(GetHttpClientFactory())
+ {
+ GetHttpClientFactory()->CleanupStaticState();
+ GetHttpClientFactory() = nullptr;
+ }
+ }
+
+ void SetHttpClientFactory(const std::shared_ptr<HttpClientFactory>& factory)
+ {
+ CleanupHttp();
+ GetHttpClientFactory() = factory;
+ }
+
+ std::shared_ptr<HttpClient> CreateHttpClient(const Aws::Client::ClientConfiguration& clientConfiguration)
+ {
+ assert(GetHttpClientFactory());
+ return GetHttpClientFactory()->CreateHttpClient(clientConfiguration);
+ }
+
+ std::shared_ptr<HttpRequest> CreateHttpRequest(const Aws::String& uri, HttpMethod method, const Aws::IOStreamFactory& streamFactory)
+ {
+ assert(GetHttpClientFactory());
+ return GetHttpClientFactory()->CreateHttpRequest(uri, method, streamFactory);
+ }
+
+ std::shared_ptr<HttpRequest> CreateHttpRequest(const URI& uri, HttpMethod method, const Aws::IOStreamFactory& streamFactory)
+ {
+ assert(GetHttpClientFactory());
+ return GetHttpClientFactory()->CreateHttpRequest(uri, method, streamFactory);
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpRequest.cpp
new file mode 100644
index 00000000000..95cb626c22e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpRequest.cpp
@@ -0,0 +1,40 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/HttpRequest.h>
+
+namespace Aws
+{
+namespace Http
+{
+
+const char DATE_HEADER[] = "date";
+const char AWS_DATE_HEADER[] = "X-Amz-Date";
+const char AWS_SECURITY_TOKEN[] = "X-Amz-Security-Token";
+const char ACCEPT_HEADER[] = "accept";
+const char ACCEPT_CHAR_SET_HEADER[] = "accept-charset";
+const char ACCEPT_ENCODING_HEADER[] = "accept-encoding";
+const char AUTHORIZATION_HEADER[] = "authorization";
+const char AWS_AUTHORIZATION_HEADER[] = "authorization";
+const char COOKIE_HEADER[] = "cookie";
+const char CONTENT_LENGTH_HEADER[] = "content-length";
+const char CONTENT_TYPE_HEADER[] = "content-type";
+const char TRANSFER_ENCODING_HEADER[] = "transfer-encoding";
+const char USER_AGENT_HEADER[] = "user-agent";
+const char VIA_HEADER[] = "via";
+const char HOST_HEADER[] = "host";
+const char AMZ_TARGET_HEADER[] = "x-amz-target";
+const char X_AMZ_EXPIRES_HEADER[] = "X-Amz-Expires";
+const char CONTENT_MD5_HEADER[] = "content-md5";
+const char API_VERSION_HEADER[] = "x-amz-api-version";
+const char SDK_INVOCATION_ID_HEADER[] = "amz-sdk-invocation-id";
+const char SDK_REQUEST_HEADER[] = "amz-sdk-request";
+const char CHUNKED_VALUE[] = "chunked";
+
+} // Http
+} // Aws
+
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpTypes.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpTypes.cpp
new file mode 100644
index 00000000000..4d313e52f39
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/HttpTypes.cpp
@@ -0,0 +1,42 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/HttpTypes.h>
+#include <cassert>
+
+using namespace Aws::Http;
+
+namespace Aws
+{
+namespace Http
+{
+
+namespace HttpMethodMapper
+{
+const char* GetNameForHttpMethod(HttpMethod httpMethod)
+{
+ switch (httpMethod)
+ {
+ case HttpMethod::HTTP_GET:
+ return "GET";
+ case HttpMethod::HTTP_POST:
+ return "POST";
+ case HttpMethod::HTTP_DELETE:
+ return "DELETE";
+ case HttpMethod::HTTP_PUT:
+ return "PUT";
+ case HttpMethod::HTTP_HEAD:
+ return "HEAD";
+ case HttpMethod::HTTP_PATCH:
+ return "PATCH";
+ default:
+ assert(0);
+ return "GET";
+ }
+}
+
+} // namespace HttpMethodMapper
+} // namespace Http
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/Scheme.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/Scheme.cpp
new file mode 100644
index 00000000000..5dcea06aab8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/Scheme.cpp
@@ -0,0 +1,54 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/Scheme.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/StringUtils.h>
+
+using namespace Aws::Http;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace Http
+{
+namespace SchemeMapper
+{
+
+ const char* ToString(Scheme scheme)
+ {
+ switch (scheme)
+ {
+ case Scheme::HTTP:
+ return "http";
+ case Scheme::HTTPS:
+ return "https";
+ default:
+ return "http";
+ }
+ }
+
+ Scheme FromString(const char* name)
+ {
+ Aws::String trimmedString = StringUtils::Trim(name);
+ Aws::String loweredTrimmedString = StringUtils::ToLower(trimmedString.c_str());
+
+ if (loweredTrimmedString == "http")
+ {
+ return Scheme::HTTP;
+ }
+ //this branch is technically unneeded, but it is here so we don't have a subtle bug
+ //creep in as we extend this enum.
+ else if (loweredTrimmedString == "https")
+ {
+ return Scheme::HTTPS;
+ }
+
+ return Scheme::HTTPS;
+ }
+
+} // namespace SchemeMapper
+} // namespace Http
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/URI.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/URI.cpp
new file mode 100644
index 00000000000..a2239df54b1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/URI.cpp
@@ -0,0 +1,510 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/URI.h>
+
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/memory/stl/AWSSet.h>
+
+#include <cstdlib>
+#include <cctype>
+#include <cassert>
+#include <algorithm>
+#include <iomanip>
+
+using namespace Aws::Http;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace Http
+{
+
+const char* SEPARATOR = "://";
+
+} // namespace Http
+} // namespace Aws
+
+URI::URI() : m_scheme(Scheme::HTTP), m_port(HTTP_DEFAULT_PORT)
+{
+}
+
+URI::URI(const Aws::String& uri) : m_scheme(Scheme::HTTP), m_port(HTTP_DEFAULT_PORT)
+{
+ ParseURIParts(uri);
+}
+
+URI::URI(const char* uri) : m_scheme(Scheme::HTTP), m_port(HTTP_DEFAULT_PORT)
+{
+ ParseURIParts(uri);
+}
+
+URI& URI::operator =(const Aws::String& uri)
+{
+ this->ParseURIParts(uri);
+ return *this;
+}
+
+URI& URI::operator =(const char* uri)
+{
+ this->ParseURIParts(uri);
+ return *this;
+}
+
+bool URI::operator ==(const URI& other) const
+{
+ return CompareURIParts(other);
+}
+
+bool URI::operator ==(const Aws::String& other) const
+{
+ return CompareURIParts(other);
+}
+
+bool URI::operator ==(const char* other) const
+{
+ return CompareURIParts(other);
+}
+
+bool URI::operator !=(const URI& other) const
+{
+ return !(*this == other);
+}
+
+bool URI::operator !=(const Aws::String& other) const
+{
+ return !(*this == other);
+}
+
+bool URI::operator !=(const char* other) const
+{
+ return !(*this == other);
+}
+
+void URI::SetScheme(Scheme value)
+{
+ assert(value == Scheme::HTTP || value == Scheme::HTTPS);
+
+ if (value == Scheme::HTTP)
+ {
+ m_port = m_port == HTTPS_DEFAULT_PORT || m_port == 0 ? HTTP_DEFAULT_PORT : m_port;
+ m_scheme = value;
+ }
+ else if (value == Scheme::HTTPS)
+ {
+ m_port = m_port == HTTP_DEFAULT_PORT || m_port == 0 ? HTTPS_DEFAULT_PORT : m_port;
+ m_scheme = value;
+ }
+}
+
+Aws::String URI::URLEncodePathRFC3986(const Aws::String& path)
+{
+ if(path.empty())
+ {
+ return path;
+ }
+
+ const Aws::Vector<Aws::String> pathParts = StringUtils::Split(path, '/');
+ Aws::StringStream ss;
+ ss << std::hex << std::uppercase;
+
+ // escape characters appearing in a URL path according to RFC 3986
+ for (const auto& segment : pathParts)
+ {
+ ss << '/';
+ for(unsigned char c : segment) // alnum results in UB if the value of c is not unsigned char & is not EOF
+ {
+ // §2.3 unreserved characters
+ if (StringUtils::IsAlnum(c))
+ {
+ ss << c;
+ continue;
+ }
+ switch(c)
+ {
+ // §2.3 unreserved characters
+ case '-': case '_': case '.': case '~':
+ // The path section of the URL allow reserved characters to appear unescaped
+ // RFC 3986 §2.2 Reserved characters
+ // NOTE: this implementation does not accurately implement the RFC on purpose to accommodate for
+ // discrepancies in the implementations of URL encoding between AWS services for legacy reasons.
+ case '$': case '&': case ',':
+ case ':': case '=': case '@':
+ ss << c;
+ break;
+ default:
+ ss << '%' << std::setfill('0') << std::setw(2) << (int)((unsigned char)c) << std::setw(0);
+ }
+ }
+ }
+
+ //if the last character was also a slash, then add that back here.
+ if (path.back() == '/')
+ {
+ ss << '/';
+ }
+
+ return ss.str();
+}
+
+Aws::String URI::URLEncodePath(const Aws::String& path)
+{
+ Aws::Vector<Aws::String> pathParts = StringUtils::Split(path, '/');
+ Aws::StringStream ss;
+
+ for (Aws::Vector<Aws::String>::iterator iter = pathParts.begin(); iter != pathParts.end(); ++iter)
+ {
+ ss << '/' << StringUtils::URLEncode(iter->c_str());
+ }
+
+ //if the last character was also a slash, then add that back here.
+ if (path.length() > 0 && path[path.length() - 1] == '/')
+ {
+ ss << '/';
+ }
+
+ if (path.length() > 0 && path[0] != '/')
+ {
+ return ss.str().substr(1);
+ }
+ else
+ {
+ return ss.str();
+ }
+}
+
+void URI::SetPath(const Aws::String& value)
+{
+ const Aws::Vector<Aws::String> pathParts = StringUtils::Split(value, '/');
+ Aws::String path;
+ path.reserve(value.length() + 1/* in case we have to append slash before the path. */);
+
+ for (const auto& segment : pathParts)
+ {
+ path.push_back('/');
+ path.append(segment);
+ }
+
+ if (value.back() == '/')
+ {
+ path.push_back('/');
+ }
+ m_path = std::move(path);
+}
+
+//ugh, this isn't even part of the canonicalization spec. It is part of how our services have implemented their signers though....
+//it doesn't really hurt anything to reorder it though, so go ahead and sort the values for parameters with the same key
+void InsertValueOrderedParameter(QueryStringParameterCollection& queryParams, const Aws::String& key, const Aws::String& value)
+{
+ auto entriesAtKey = queryParams.equal_range(key);
+ for (auto& entry = entriesAtKey.first; entry != entriesAtKey.second; ++entry)
+ {
+ if (entry->second > value)
+ {
+ queryParams.emplace_hint(entry, key, value);
+ return;
+ }
+ }
+
+ queryParams.emplace(key, value);
+}
+
+QueryStringParameterCollection URI::GetQueryStringParameters(bool decode) const
+{
+ Aws::String queryString = GetQueryString();
+
+ QueryStringParameterCollection parameterCollection;
+
+ //if we actually have a query string
+ if (queryString.size() > 0)
+ {
+ size_t currentPos = 1, locationOfNextDelimiter = 1;
+
+ //while we have params left to parse
+ while (currentPos < queryString.size())
+ {
+ //find next key/value pair
+ locationOfNextDelimiter = queryString.find('&', currentPos);
+
+ Aws::String keyValuePair;
+
+ //if this isn't the last parameter
+ if (locationOfNextDelimiter != Aws::String::npos)
+ {
+ keyValuePair = queryString.substr(currentPos, locationOfNextDelimiter - currentPos);
+ }
+ //if it is the last parameter
+ else
+ {
+ keyValuePair = queryString.substr(currentPos);
+ }
+
+ //split on =
+ size_t locationOfEquals = keyValuePair.find('=');
+ Aws::String key = keyValuePair.substr(0, locationOfEquals);
+ Aws::String value = keyValuePair.substr(locationOfEquals + 1);
+
+ if(decode)
+ {
+ InsertValueOrderedParameter(parameterCollection, StringUtils::URLDecode(key.c_str()), StringUtils::URLDecode(value.c_str()));
+ }
+ else
+ {
+ InsertValueOrderedParameter(parameterCollection, key, value);
+ }
+
+ currentPos += keyValuePair.size() + 1;
+ }
+ }
+
+ return parameterCollection;
+}
+
+void URI::CanonicalizeQueryString()
+{
+ QueryStringParameterCollection sortedParameters = GetQueryStringParameters(false);
+ Aws::StringStream queryStringStream;
+
+ bool first = true;
+
+ if(sortedParameters.size() > 0)
+ {
+ queryStringStream << "?";
+ }
+
+ if(m_queryString.find('=') != std::string::npos)
+ {
+ for (QueryStringParameterCollection::iterator iter = sortedParameters.begin();
+ iter != sortedParameters.end(); ++iter)
+ {
+ if (!first)
+ {
+ queryStringStream << "&";
+ }
+
+ first = false;
+ queryStringStream << iter->first.c_str() << "=" << iter->second.c_str();
+ }
+
+ m_queryString = queryStringStream.str();
+ }
+}
+
+void URI::AddQueryStringParameter(const char* key, const Aws::String& value)
+{
+ if (m_queryString.size() <= 0)
+ {
+ m_queryString.append("?");
+ }
+ else
+ {
+ m_queryString.append("&");
+ }
+
+ m_queryString.append(StringUtils::URLEncode(key) + "=" + StringUtils::URLEncode(value.c_str()));
+}
+
+void URI::AddQueryStringParameter(const Aws::Map<Aws::String, Aws::String>& queryStringPairs)
+{
+ for(const auto& entry: queryStringPairs)
+ {
+ AddQueryStringParameter(entry.first.c_str(), entry.second);
+ }
+}
+
+void URI::SetQueryString(const Aws::String& str)
+{
+ m_queryString = "";
+
+ if (str.empty()) return;
+
+ if (str.front() != '?')
+ {
+ m_queryString.append("?").append(str);
+ }
+ else
+ {
+ m_queryString = str;
+ }
+}
+
+Aws::String URI::GetURIString(bool includeQueryString) const
+{
+ assert(m_authority.size() > 0);
+
+ Aws::StringStream ss;
+ ss << SchemeMapper::ToString(m_scheme) << SEPARATOR << m_authority;
+
+ if (m_scheme == Scheme::HTTP && m_port != HTTP_DEFAULT_PORT)
+ {
+ ss << ":" << m_port;
+ }
+ else if (m_scheme == Scheme::HTTPS && m_port != HTTPS_DEFAULT_PORT)
+ {
+ ss << ":" << m_port;
+ }
+
+ if(m_path != "/")
+ {
+ ss << URLEncodePathRFC3986(m_path);
+ }
+
+ if(includeQueryString)
+ {
+ ss << m_queryString;
+ }
+
+ return ss.str();
+}
+
+void URI::ParseURIParts(const Aws::String& uri)
+{
+ ExtractAndSetScheme(uri);
+ ExtractAndSetAuthority(uri);
+ ExtractAndSetPort(uri);
+ ExtractAndSetPath(uri);
+ ExtractAndSetQueryString(uri);
+}
+
+void URI::ExtractAndSetScheme(const Aws::String& uri)
+{
+ size_t posOfSeparator = uri.find(SEPARATOR);
+
+ if (posOfSeparator != Aws::String::npos)
+ {
+ Aws::String schemePortion = uri.substr(0, posOfSeparator);
+ SetScheme(SchemeMapper::FromString(schemePortion.c_str()));
+ }
+ else
+ {
+ SetScheme(Scheme::HTTP);
+ }
+}
+
+void URI::ExtractAndSetAuthority(const Aws::String& uri)
+{
+ size_t authorityStart = uri.find(SEPARATOR);
+
+ if (authorityStart == Aws::String::npos)
+ {
+ authorityStart = 0;
+ }
+ else
+ {
+ authorityStart += 3;
+ }
+
+ size_t posOfEndOfAuthorityPort = uri.find(':', authorityStart);
+ size_t posOfEndOfAuthoritySlash = uri.find('/', authorityStart);
+ size_t posOfEndOfAuthorityQuery = uri.find('?', authorityStart);
+ size_t posEndOfAuthority = (std::min)({posOfEndOfAuthorityPort, posOfEndOfAuthoritySlash, posOfEndOfAuthorityQuery});
+ if (posEndOfAuthority == Aws::String::npos)
+ {
+ posEndOfAuthority = uri.length();
+ }
+
+ SetAuthority(uri.substr(authorityStart, posEndOfAuthority - authorityStart));
+}
+
+void URI::ExtractAndSetPort(const Aws::String& uri)
+{
+ size_t authorityStart = uri.find(SEPARATOR);
+
+ if(authorityStart == Aws::String::npos)
+ {
+ authorityStart = 0;
+ }
+ else
+ {
+ authorityStart += 3;
+ }
+
+ size_t positionOfPortDelimiter = uri.find(':', authorityStart);
+
+ bool hasPort = positionOfPortDelimiter != Aws::String::npos;
+
+ if ((uri.find('/', authorityStart) < positionOfPortDelimiter) || (uri.find('?', authorityStart) < positionOfPortDelimiter))
+ {
+ hasPort = false;
+ }
+
+ if (hasPort)
+ {
+ Aws::String strPort;
+
+ size_t i = positionOfPortDelimiter + 1;
+ char currentDigit = uri[i];
+
+ while (std::isdigit(currentDigit))
+ {
+ strPort += currentDigit;
+ currentDigit = uri[++i];
+ }
+
+ SetPort(static_cast<uint16_t>(atoi(strPort.c_str())));
+ }
+}
+
+void URI::ExtractAndSetPath(const Aws::String& uri)
+{
+ size_t authorityStart = uri.find(SEPARATOR);
+
+ if (authorityStart == Aws::String::npos)
+ {
+ authorityStart = 0;
+ }
+ else
+ {
+ authorityStart += 3;
+ }
+
+ size_t pathEnd = uri.find('?');
+
+ if (pathEnd == Aws::String::npos)
+ {
+ pathEnd = uri.length();
+ }
+
+ Aws::String authorityAndPath = uri.substr(authorityStart, pathEnd - authorityStart);
+
+ size_t pathStart = authorityAndPath.find('/');
+
+ if (pathStart != Aws::String::npos)
+ {
+ SetPath(authorityAndPath.substr(pathStart, pathEnd - pathStart));
+ }
+ else
+ {
+ SetPath("/");
+ }
+}
+
+void URI::ExtractAndSetQueryString(const Aws::String& uri)
+{
+ size_t queryStart = uri.find('?');
+
+ if (queryStart != Aws::String::npos)
+ {
+ m_queryString = uri.substr(queryStart);
+ }
+}
+
+Aws::String URI::GetFormParameters() const
+{
+ if(m_queryString.length() == 0)
+ {
+ return "";
+ }
+ else
+ {
+ return m_queryString.substr(1);
+ }
+}
+
+bool URI::CompareURIParts(const URI& other) const
+{
+ return m_scheme == other.m_scheme && m_authority == other.m_authority && m_path == other.m_path && m_queryString == other.m_queryString;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHandleContainer.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHandleContainer.cpp
new file mode 100644
index 00000000000..1a965cd7950
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHandleContainer.cpp
@@ -0,0 +1,153 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/curl/CurlHandleContainer.h>
+#include <aws/core/utils/logging/LogMacros.h>
+
+#include <algorithm>
+
+using namespace Aws::Utils::Logging;
+using namespace Aws::Http;
+
+static const char* CURL_HANDLE_CONTAINER_TAG = "CurlHandleContainer";
+
+
+CurlHandleContainer::CurlHandleContainer(unsigned maxSize, long httpRequestTimeout, long connectTimeout, bool enableTcpKeepAlive,
+ unsigned long tcpKeepAliveIntervalMs, long lowSpeedTime, unsigned long lowSpeedLimit) :
+ m_maxPoolSize(maxSize), m_httpRequestTimeout(httpRequestTimeout), m_connectTimeout(connectTimeout), m_enableTcpKeepAlive(enableTcpKeepAlive),
+ m_tcpKeepAliveIntervalMs(tcpKeepAliveIntervalMs), m_lowSpeedTime(lowSpeedTime), m_lowSpeedLimit(lowSpeedLimit), m_poolSize(0)
+{
+ AWS_LOGSTREAM_INFO(CURL_HANDLE_CONTAINER_TAG, "Initializing CurlHandleContainer with size " << maxSize);
+}
+
+CurlHandleContainer::~CurlHandleContainer()
+{
+ AWS_LOGSTREAM_INFO(CURL_HANDLE_CONTAINER_TAG, "Cleaning up CurlHandleContainer.");
+ for (CURL* handle : m_handleContainer.ShutdownAndWait(m_poolSize))
+ {
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "Cleaning up " << handle);
+ curl_easy_cleanup(handle);
+ }
+}
+
+CURL* CurlHandleContainer::AcquireCurlHandle()
+{
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "Attempting to acquire curl connection.");
+
+ if(!m_handleContainer.HasResourcesAvailable())
+ {
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "No current connections available in pool. Attempting to create new connections.");
+ CheckAndGrowPool();
+ }
+
+ CURL* handle = m_handleContainer.Acquire();
+ AWS_LOGSTREAM_INFO(CURL_HANDLE_CONTAINER_TAG, "Connection has been released. Continuing.");
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "Returning connection handle " << handle);
+ return handle;
+}
+
+void CurlHandleContainer::ReleaseCurlHandle(CURL* handle)
+{
+ if (handle)
+ {
+ curl_easy_reset(handle);
+ SetDefaultOptionsOnHandle(handle);
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "Releasing curl handle " << handle);
+ m_handleContainer.Release(handle);
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "Notified waiting threads.");
+ }
+}
+
+void CurlHandleContainer::DestroyCurlHandle(CURL* handle)
+{
+ if (!handle)
+ {
+ return;
+ }
+
+ curl_easy_cleanup(handle);
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "Destroy curl handle: " << handle);
+ {
+ std::lock_guard<std::mutex> locker(m_containerLock);
+ // Other threads could be blocked and waiting on m_handleContainer.Acquire()
+ // If the handle is not released back to the pool, it could create a deadlock
+ // Create a new handle and release that into the pool
+ handle = CreateCurlHandleInPool();
+ }
+ if (handle)
+ {
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "Created replacement handle and released to pool: " << handle);
+ }
+}
+
+
+CURL* CurlHandleContainer::CreateCurlHandleInPool()
+{
+ CURL* curlHandle = curl_easy_init();
+
+ if (curlHandle)
+ {
+ SetDefaultOptionsOnHandle(curlHandle);
+ m_handleContainer.Release(curlHandle);
+ }
+ else
+ {
+ AWS_LOGSTREAM_ERROR(CURL_HANDLE_CONTAINER_TAG, "curl_easy_init failed to allocate.");
+ }
+ return curlHandle;
+}
+
+bool CurlHandleContainer::CheckAndGrowPool()
+{
+ std::lock_guard<std::mutex> locker(m_containerLock);
+ if (m_poolSize < m_maxPoolSize)
+ {
+ unsigned multiplier = m_poolSize > 0 ? m_poolSize : 1;
+ unsigned amountToAdd = (std::min)(multiplier * 2, m_maxPoolSize - m_poolSize);
+ AWS_LOGSTREAM_DEBUG(CURL_HANDLE_CONTAINER_TAG, "attempting to grow pool size by " << amountToAdd);
+
+ unsigned actuallyAdded = 0;
+ for (unsigned i = 0; i < amountToAdd; ++i)
+ {
+ CURL* curlHandle = CreateCurlHandleInPool();
+
+ if (curlHandle)
+ {
+ ++actuallyAdded;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ AWS_LOGSTREAM_INFO(CURL_HANDLE_CONTAINER_TAG, "Pool grown by " << actuallyAdded);
+ m_poolSize += actuallyAdded;
+
+ return actuallyAdded > 0;
+ }
+
+ AWS_LOGSTREAM_INFO(CURL_HANDLE_CONTAINER_TAG, "Pool cannot be grown any further, already at max size.");
+
+ return false;
+}
+
+void CurlHandleContainer::SetDefaultOptionsOnHandle(CURL* handle)
+{
+ //for timeouts to work in a multi-threaded context,
+ //always turn signals off. This also forces dns queries to
+ //not be included in the timeout calculations.
+ curl_easy_setopt(handle, CURLOPT_NOSIGNAL, 1L);
+ curl_easy_setopt(handle, CURLOPT_TIMEOUT_MS, m_httpRequestTimeout);
+ curl_easy_setopt(handle, CURLOPT_CONNECTTIMEOUT_MS, m_connectTimeout);
+ curl_easy_setopt(handle, CURLOPT_LOW_SPEED_LIMIT, m_lowSpeedLimit);
+ curl_easy_setopt(handle, CURLOPT_LOW_SPEED_TIME, m_lowSpeedTime < 1000 ? (m_lowSpeedTime == 0 ? 0 : 1) : m_lowSpeedTime / 1000);
+ curl_easy_setopt(handle, CURLOPT_TCP_KEEPALIVE, m_enableTcpKeepAlive ? 1L : 0L);
+ curl_easy_setopt(handle, CURLOPT_TCP_KEEPINTVL, m_tcpKeepAliveIntervalMs / 1000);
+ curl_easy_setopt(handle, CURLOPT_TCP_KEEPIDLE, m_tcpKeepAliveIntervalMs / 1000);
+#ifdef CURL_HAS_H2
+ curl_easy_setopt(handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+#endif
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp
new file mode 100644
index 00000000000..2fb9cc9643f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp
@@ -0,0 +1,730 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/curl/CurlHttpClient.h>
+#include <aws/core/http/HttpRequest.h>
+#include <aws/core/http/standard/StandardHttpResponse.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/ratelimiter/RateLimiterInterface.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/monitoring/HttpClientMetrics.h>
+#include <cassert>
+#include <algorithm>
+
+
+using namespace Aws::Client;
+using namespace Aws::Http;
+using namespace Aws::Http::Standard;
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+using namespace Aws::Monitoring;
+
+#ifdef AWS_CUSTOM_MEMORY_MANAGEMENT
+
+static const char* MemTag = "libcurl";
+static size_t offset = sizeof(size_t);
+
+static void* malloc_callback(size_t size)
+{
+ char* newMem = reinterpret_cast<char*>(Aws::Malloc(MemTag, size + offset));
+ std::size_t* pointerToSize = reinterpret_cast<std::size_t*>(newMem);
+ *pointerToSize = size;
+ return reinterpret_cast<void*>(newMem + offset);
+}
+
+static void free_callback(void* ptr)
+{
+ if(ptr)
+ {
+ char* shiftedMemory = reinterpret_cast<char*>(ptr);
+ Aws::Free(shiftedMemory - offset);
+ }
+}
+
+static void* realloc_callback(void* ptr, size_t size)
+{
+ if(!ptr)
+ {
+ return malloc_callback(size);
+ }
+
+
+ if(!size && ptr)
+ {
+ free_callback(ptr);
+ return nullptr;
+ }
+
+ char* originalLenCharPtr = reinterpret_cast<char*>(ptr) - offset;
+ size_t originalLen = *reinterpret_cast<size_t*>(originalLenCharPtr);
+
+ char* rawMemory = reinterpret_cast<char*>(Aws::Malloc(MemTag, size + offset));
+ if(rawMemory)
+ {
+ std::size_t* pointerToSize = reinterpret_cast<std::size_t*>(rawMemory);
+ *pointerToSize = size;
+
+ size_t copyLength = (std::min)(originalLen, size);
+#ifdef _MSC_VER
+ memcpy_s(rawMemory + offset, size, ptr, copyLength);
+#else
+ memcpy(rawMemory + offset, ptr, copyLength);
+#endif
+ free_callback(ptr);
+ return reinterpret_cast<void*>(rawMemory + offset);
+ }
+ else
+ {
+ return ptr;
+ }
+
+}
+
+static void* calloc_callback(size_t nmemb, size_t size)
+{
+ size_t dataSize = nmemb * size;
+ char* newMem = reinterpret_cast<char*>(Aws::Malloc(MemTag, dataSize + offset));
+ std::size_t* pointerToSize = reinterpret_cast<std::size_t*>(newMem);
+ *pointerToSize = dataSize;
+#ifdef _MSC_VER
+ memset_s(newMem + offset, dataSize, 0, dataSize);
+#else
+ memset(newMem + offset, 0, dataSize);
+#endif
+
+ return reinterpret_cast<void*>(newMem + offset);
+}
+
+static char* strdup_callback(const char* str)
+{
+ size_t len = strlen(str) + 1;
+ size_t newLen = len + offset;
+ char* newMem = reinterpret_cast<char*>(Aws::Malloc(MemTag, newLen));
+
+ if(newMem)
+ {
+ std::size_t* pointerToSize = reinterpret_cast<std::size_t*>(newMem);
+ *pointerToSize = len;
+#ifdef _MSC_VER
+ memcpy_s(newMem + offset, len, str, len);
+#else
+ memcpy(newMem + offset, str, len);
+#endif
+ return newMem + offset;
+ }
+ return nullptr;
+}
+
+#endif
+
+struct CurlWriteCallbackContext
+{
+ CurlWriteCallbackContext(const CurlHttpClient* client,
+ HttpRequest* request,
+ HttpResponse* response,
+ Aws::Utils::RateLimits::RateLimiterInterface* rateLimiter) :
+ m_client(client),
+ m_request(request),
+ m_response(response),
+ m_rateLimiter(rateLimiter),
+ m_numBytesResponseReceived(0)
+ {}
+
+ const CurlHttpClient* m_client;
+ HttpRequest* m_request;
+ HttpResponse* m_response;
+ Aws::Utils::RateLimits::RateLimiterInterface* m_rateLimiter;
+ int64_t m_numBytesResponseReceived;
+};
+
+struct CurlReadCallbackContext
+{
+ CurlReadCallbackContext(const CurlHttpClient* client, HttpRequest* request, Aws::Utils::RateLimits::RateLimiterInterface* limiter) :
+ m_client(client),
+ m_rateLimiter(limiter),
+ m_request(request)
+ {}
+
+ const CurlHttpClient* m_client;
+ CURL* m_curlHandle;
+ Aws::Utils::RateLimits::RateLimiterInterface* m_rateLimiter;
+ HttpRequest* m_request;
+};
+
+static const char* CURL_HTTP_CLIENT_TAG = "CurlHttpClient";
+
+static size_t WriteData(char* ptr, size_t size, size_t nmemb, void* userdata)
+{
+ if (ptr)
+ {
+ CurlWriteCallbackContext* context = reinterpret_cast<CurlWriteCallbackContext*>(userdata);
+
+ const CurlHttpClient* client = context->m_client;
+ if(!client->ContinueRequest(*context->m_request) || !client->IsRequestProcessingEnabled())
+ {
+ return 0;
+ }
+
+ HttpResponse* response = context->m_response;
+ size_t sizeToWrite = size * nmemb;
+ if (context->m_rateLimiter)
+ {
+ context->m_rateLimiter->ApplyAndPayForCost(static_cast<int64_t>(sizeToWrite));
+ }
+
+ response->GetResponseBody().write(ptr, static_cast<std::streamsize>(sizeToWrite));
+ if (context->m_request->IsEventStreamRequest())
+ {
+ response->GetResponseBody().flush();
+ }
+ auto& receivedHandler = context->m_request->GetDataReceivedEventHandler();
+ if (receivedHandler)
+ {
+ receivedHandler(context->m_request, context->m_response, static_cast<long long>(sizeToWrite));
+ }
+
+ AWS_LOGSTREAM_TRACE(CURL_HTTP_CLIENT_TAG, sizeToWrite << " bytes written to response.");
+ context->m_numBytesResponseReceived += sizeToWrite;
+ return sizeToWrite;
+ }
+ return 0;
+}
+
+static size_t WriteHeader(char* ptr, size_t size, size_t nmemb, void* userdata)
+{
+ if (ptr)
+ {
+ CurlWriteCallbackContext* context = reinterpret_cast<CurlWriteCallbackContext*>(userdata);
+ AWS_LOGSTREAM_TRACE(CURL_HTTP_CLIENT_TAG, ptr);
+ HttpResponse* response = context->m_response;
+ Aws::String headerLine(ptr);
+ Aws::Vector<Aws::String> keyValuePair = StringUtils::Split(headerLine, ':', 2);
+
+ if (keyValuePair.size() == 2)
+ {
+ response->AddHeader(StringUtils::Trim(keyValuePair[0].c_str()), StringUtils::Trim(keyValuePair[1].c_str()));
+ }
+
+ return size * nmemb;
+ }
+ return 0;
+}
+
+
+static size_t ReadBody(char* ptr, size_t size, size_t nmemb, void* userdata)
+{
+ CurlReadCallbackContext* context = reinterpret_cast<CurlReadCallbackContext*>(userdata);
+ if(context == nullptr)
+ {
+ return 0;
+ }
+
+ const CurlHttpClient* client = context->m_client;
+ if(!client->ContinueRequest(*context->m_request) || !client->IsRequestProcessingEnabled())
+ {
+ return CURL_READFUNC_ABORT;
+ }
+
+ HttpRequest* request = context->m_request;
+ const std::shared_ptr<Aws::IOStream>& ioStream = request->GetContentBody();
+
+ const size_t amountToRead = size * nmemb;
+ if (ioStream != nullptr && amountToRead > 0)
+ {
+ if (request->IsEventStreamRequest())
+ {
+ // Waiting for next available character to read.
+ // Without peek(), readsome() will keep reading 0 byte from the stream.
+ ioStream->peek();
+ ioStream->readsome(ptr, amountToRead);
+ }
+ else
+ {
+ ioStream->read(ptr, amountToRead);
+ }
+ size_t amountRead = static_cast<size_t>(ioStream->gcount());
+ auto& sentHandler = request->GetDataSentEventHandler();
+ if (sentHandler)
+ {
+ sentHandler(request, static_cast<long long>(amountRead));
+ }
+
+ if (context->m_rateLimiter)
+ {
+ context->m_rateLimiter->ApplyAndPayForCost(static_cast<int64_t>(amountRead));
+ }
+
+ return amountRead;
+ }
+
+ return 0;
+}
+
+static size_t SeekBody(void* userdata, curl_off_t offset, int origin)
+{
+ CurlReadCallbackContext* context = reinterpret_cast<CurlReadCallbackContext*>(userdata);
+ if(context == nullptr)
+ {
+ return CURL_SEEKFUNC_FAIL;
+ }
+
+ const CurlHttpClient* client = context->m_client;
+ if(!client->ContinueRequest(*context->m_request) || !client->IsRequestProcessingEnabled())
+ {
+ return CURL_SEEKFUNC_FAIL;
+ }
+
+ HttpRequest* request = context->m_request;
+ const std::shared_ptr<Aws::IOStream>& ioStream = request->GetContentBody();
+
+ std::ios_base::seekdir dir;
+ switch(origin)
+ {
+ case SEEK_SET:
+ dir = std::ios_base::beg;
+ break;
+ case SEEK_CUR:
+ dir = std::ios_base::cur;
+ break;
+ case SEEK_END:
+ dir = std::ios_base::end;
+ break;
+ default:
+ return CURL_SEEKFUNC_FAIL;
+ }
+
+ ioStream->clear();
+ ioStream->seekg(offset, dir);
+ if (ioStream->fail()) {
+ return CURL_SEEKFUNC_CANTSEEK;
+ }
+
+ return CURL_SEEKFUNC_OK;
+}
+
+void SetOptCodeForHttpMethod(CURL* requestHandle, const std::shared_ptr<HttpRequest>& request)
+{
+ switch (request->GetMethod())
+ {
+ case HttpMethod::HTTP_GET:
+ curl_easy_setopt(requestHandle, CURLOPT_HTTPGET, 1L);
+ break;
+ case HttpMethod::HTTP_POST:
+ if (request->HasHeader(Aws::Http::CONTENT_LENGTH_HEADER) && request->GetHeaderValue(Aws::Http::CONTENT_LENGTH_HEADER) == "0")
+ {
+ curl_easy_setopt(requestHandle, CURLOPT_CUSTOMREQUEST, "POST");
+ }
+ else
+ {
+ curl_easy_setopt(requestHandle, CURLOPT_POST, 1L);
+ }
+ break;
+ case HttpMethod::HTTP_PUT:
+ if ((!request->HasHeader(Aws::Http::CONTENT_LENGTH_HEADER) || request->GetHeaderValue(Aws::Http::CONTENT_LENGTH_HEADER) == "0") &&
+ !request->HasHeader(Aws::Http::TRANSFER_ENCODING_HEADER))
+ {
+ curl_easy_setopt(requestHandle, CURLOPT_CUSTOMREQUEST, "PUT");
+ }
+ else
+ {
+ curl_easy_setopt(requestHandle, CURLOPT_PUT, 1L);
+ }
+ break;
+ case HttpMethod::HTTP_HEAD:
+ curl_easy_setopt(requestHandle, CURLOPT_HTTPGET, 1L);
+ curl_easy_setopt(requestHandle, CURLOPT_NOBODY, 1L);
+ break;
+ case HttpMethod::HTTP_PATCH:
+ if ((!request->HasHeader(Aws::Http::CONTENT_LENGTH_HEADER)|| request->GetHeaderValue(Aws::Http::CONTENT_LENGTH_HEADER) == "0") &&
+ !request->HasHeader(Aws::Http::TRANSFER_ENCODING_HEADER))
+ {
+ curl_easy_setopt(requestHandle, CURLOPT_CUSTOMREQUEST, "PATCH");
+ }
+ else
+ {
+ curl_easy_setopt(requestHandle, CURLOPT_POST, 1L);
+ curl_easy_setopt(requestHandle, CURLOPT_CUSTOMREQUEST, "PATCH");
+ }
+
+ break;
+ case HttpMethod::HTTP_DELETE:
+ curl_easy_setopt(requestHandle, CURLOPT_CUSTOMREQUEST, "DELETE");
+ break;
+ default:
+ assert(0);
+ curl_easy_setopt(requestHandle, CURLOPT_CUSTOMREQUEST, "GET");
+ break;
+ }
+}
+
+
+std::atomic<bool> CurlHttpClient::isInit(false);
+
+void CurlHttpClient::InitGlobalState()
+{
+ if (!isInit)
+ {
+ auto curlVersionData = curl_version_info(CURLVERSION_NOW);
+ AWS_LOGSTREAM_INFO(CURL_HTTP_CLIENT_TAG, "Initializing Curl library with version: " << curlVersionData->version
+ << ", ssl version: " << curlVersionData->ssl_version);
+ isInit = true;
+#ifdef AWS_CUSTOM_MEMORY_MANAGEMENT
+ curl_global_init_mem(CURL_GLOBAL_ALL, &malloc_callback, &free_callback, &realloc_callback, &strdup_callback, &calloc_callback);
+#else
+ curl_global_init(CURL_GLOBAL_ALL);
+#endif
+ }
+}
+
+
+void CurlHttpClient::CleanupGlobalState()
+{
+ curl_global_cleanup();
+}
+
+Aws::String CurlInfoTypeToString(curl_infotype type)
+{
+ switch(type)
+ {
+ case CURLINFO_TEXT:
+ return "Text";
+
+ case CURLINFO_HEADER_IN:
+ return "HeaderIn";
+
+ case CURLINFO_HEADER_OUT:
+ return "HeaderOut";
+
+ case CURLINFO_DATA_IN:
+ return "DataIn";
+
+ case CURLINFO_DATA_OUT:
+ return "DataOut";
+
+ case CURLINFO_SSL_DATA_IN:
+ return "SSLDataIn";
+
+ case CURLINFO_SSL_DATA_OUT:
+ return "SSLDataOut";
+
+ default:
+ return "Unknown";
+ }
+}
+
+int CurlDebugCallback(CURL *handle, curl_infotype type, char *data, size_t size, void *userptr)
+{
+ AWS_UNREFERENCED_PARAM(handle);
+ AWS_UNREFERENCED_PARAM(userptr);
+
+ if(type == CURLINFO_SSL_DATA_IN || type == CURLINFO_SSL_DATA_OUT)
+ {
+ AWS_LOGSTREAM_DEBUG("CURL", "(" << CurlInfoTypeToString(type) << ") " << size << "bytes");
+ }
+ else
+ {
+ Aws::String debugString(data, size);
+ AWS_LOGSTREAM_DEBUG("CURL", "(" << CurlInfoTypeToString(type) << ") " << debugString);
+ }
+
+ return 0;
+}
+
+
+CurlHttpClient::CurlHttpClient(const ClientConfiguration& clientConfig) :
+ Base(),
+ m_curlHandleContainer(clientConfig.maxConnections, clientConfig.httpRequestTimeoutMs, clientConfig.connectTimeoutMs, clientConfig.enableTcpKeepAlive,
+ clientConfig.tcpKeepAliveIntervalMs, clientConfig.requestTimeoutMs, clientConfig.lowSpeedLimit),
+ m_isUsingProxy(!clientConfig.proxyHost.empty()), m_proxyUserName(clientConfig.proxyUserName),
+ m_proxyPassword(clientConfig.proxyPassword), m_proxyScheme(SchemeMapper::ToString(clientConfig.proxyScheme)), m_proxyHost(clientConfig.proxyHost),
+ m_proxySSLCertPath(clientConfig.proxySSLCertPath), m_proxySSLCertType(clientConfig.proxySSLCertType),
+ m_proxySSLKeyPath(clientConfig.proxySSLKeyPath), m_proxySSLKeyType(clientConfig.proxySSLKeyType),
+ m_proxyKeyPasswd(clientConfig.proxySSLKeyPassword),
+ m_proxyPort(clientConfig.proxyPort), m_verifySSL(clientConfig.verifySSL), m_caPath(clientConfig.caPath),
+ m_caFile(clientConfig.caFile), m_proxyCaPath(clientConfig.proxyCaPath), m_proxyCaFile(clientConfig.proxyCaFile),
+ m_disableExpectHeader(clientConfig.disableExpectHeader)
+{
+ if (clientConfig.followRedirects == FollowRedirectsPolicy::NEVER ||
+ (clientConfig.followRedirects == FollowRedirectsPolicy::DEFAULT && clientConfig.region == Aws::Region::AWS_GLOBAL))
+ {
+ m_allowRedirects = false;
+ }
+ else
+ {
+ m_allowRedirects = true;
+ }
+}
+
+
+std::shared_ptr<HttpResponse> CurlHttpClient::MakeRequest(const std::shared_ptr<HttpRequest>& request,
+ Aws::Utils::RateLimits::RateLimiterInterface* readLimiter,
+ Aws::Utils::RateLimits::RateLimiterInterface* writeLimiter) const
+{
+ URI uri = request->GetUri();
+ Aws::String url = uri.GetURIString();
+ std::shared_ptr<HttpResponse> response = Aws::MakeShared<StandardHttpResponse>(CURL_HTTP_CLIENT_TAG, request);
+
+ AWS_LOGSTREAM_TRACE(CURL_HTTP_CLIENT_TAG, "Making request to " << url);
+ struct curl_slist* headers = NULL;
+
+ if (writeLimiter != nullptr)
+ {
+ writeLimiter->ApplyAndPayForCost(request->GetSize());
+ }
+
+ Aws::StringStream headerStream;
+ HeaderValueCollection requestHeaders = request->GetHeaders();
+
+ AWS_LOGSTREAM_TRACE(CURL_HTTP_CLIENT_TAG, "Including headers:");
+ for (auto& requestHeader : requestHeaders)
+ {
+ headerStream.str("");
+ headerStream << requestHeader.first << ": " << requestHeader.second;
+ Aws::String headerString = headerStream.str();
+ AWS_LOGSTREAM_TRACE(CURL_HTTP_CLIENT_TAG, headerString);
+ headers = curl_slist_append(headers, headerString.c_str());
+ }
+
+ if (!request->HasHeader(Http::TRANSFER_ENCODING_HEADER))
+ {
+ headers = curl_slist_append(headers, "transfer-encoding:");
+ }
+
+ if (!request->HasHeader(Http::CONTENT_LENGTH_HEADER))
+ {
+ headers = curl_slist_append(headers, "content-length:");
+ }
+
+ if (!request->HasHeader(Http::CONTENT_TYPE_HEADER))
+ {
+ headers = curl_slist_append(headers, "content-type:");
+ }
+
+ // Discard Expect header so as to avoid using multiple payloads to send a http request (header + body)
+ if (m_disableExpectHeader)
+ {
+ headers = curl_slist_append(headers, "Expect:");
+ }
+
+ CURL* connectionHandle = m_curlHandleContainer.AcquireCurlHandle();
+
+ if (connectionHandle)
+ {
+ AWS_LOGSTREAM_DEBUG(CURL_HTTP_CLIENT_TAG, "Obtained connection handle " << connectionHandle);
+
+ if (headers)
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_HTTPHEADER, headers);
+ }
+
+ CurlWriteCallbackContext writeContext(this, request.get(), response.get(), readLimiter);
+ CurlReadCallbackContext readContext(this, request.get(), writeLimiter);
+
+ SetOptCodeForHttpMethod(connectionHandle, request);
+
+ curl_easy_setopt(connectionHandle, CURLOPT_URL, url.c_str());
+ curl_easy_setopt(connectionHandle, CURLOPT_WRITEFUNCTION, WriteData);
+ curl_easy_setopt(connectionHandle, CURLOPT_WRITEDATA, &writeContext);
+ curl_easy_setopt(connectionHandle, CURLOPT_HEADERFUNCTION, WriteHeader);
+ curl_easy_setopt(connectionHandle, CURLOPT_HEADERDATA, &writeContext);
+
+ //we only want to override the default path if someone has explicitly told us to.
+ if(!m_caPath.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_CAPATH, m_caPath.c_str());
+ }
+ if(!m_caFile.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_CAINFO, m_caFile.c_str());
+ }
+
+ // only set by android test builds because the emulator is missing a cert needed for aws services
+#ifdef TEST_CERT_PATH
+ curl_easy_setopt(connectionHandle, CURLOPT_CAPATH, TEST_CERT_PATH);
+#endif // TEST_CERT_PATH
+
+ if (m_verifySSL)
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_SSL_VERIFYPEER, 1L);
+ curl_easy_setopt(connectionHandle, CURLOPT_SSL_VERIFYHOST, 2L);
+
+#if LIBCURL_VERSION_MAJOR >= 7
+#if LIBCURL_VERSION_MINOR >= 34
+ curl_easy_setopt(connectionHandle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
+#endif //LIBCURL_VERSION_MINOR
+#endif //LIBCURL_VERSION_MAJOR
+ }
+ else
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(connectionHandle, CURLOPT_SSL_VERIFYHOST, 0L);
+ }
+
+ if (m_allowRedirects)
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_FOLLOWLOCATION, 1L);
+ }
+ else
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_FOLLOWLOCATION, 0L);
+ }
+
+#ifdef ENABLE_CURL_LOGGING
+ curl_easy_setopt(connectionHandle, CURLOPT_VERBOSE, 1);
+ curl_easy_setopt(connectionHandle, CURLOPT_DEBUGFUNCTION, CurlDebugCallback);
+#endif
+ if (m_isUsingProxy)
+ {
+ Aws::StringStream ss;
+ ss << m_proxyScheme << "://" << m_proxyHost;
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY, ss.str().c_str());
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXYPORT, (long) m_proxyPort);
+ if(!m_proxyCaPath.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY_CAPATH, m_proxyCaPath.c_str());
+ }
+ if(!m_proxyCaFile.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY_CAINFO, m_proxyCaFile.c_str());
+ }
+ if (!m_proxyUserName.empty() || !m_proxyPassword.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXYUSERNAME, m_proxyUserName.c_str());
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXYPASSWORD, m_proxyPassword.c_str());
+ }
+#ifdef CURL_HAS_TLS_PROXY
+ if (!m_proxySSLCertPath.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY_SSLCERT, m_proxySSLCertPath.c_str());
+ if (!m_proxySSLCertType.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY_SSLCERTTYPE, m_proxySSLCertType.c_str());
+ }
+ }
+ if (!m_proxySSLKeyPath.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY_SSLKEY, m_proxySSLKeyPath.c_str());
+ if (!m_proxySSLKeyType.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY_SSLKEYTYPE, m_proxySSLKeyType.c_str());
+ }
+ if (!m_proxyKeyPasswd.empty())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY_KEYPASSWD, m_proxyKeyPasswd.c_str());
+ }
+ }
+#endif //CURL_HAS_TLS_PROXY
+ }
+ else
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_PROXY, "");
+ }
+
+ if (request->GetContentBody())
+ {
+ curl_easy_setopt(connectionHandle, CURLOPT_READFUNCTION, ReadBody);
+ curl_easy_setopt(connectionHandle, CURLOPT_READDATA, &readContext);
+ curl_easy_setopt(connectionHandle, CURLOPT_SEEKFUNCTION, SeekBody);
+ curl_easy_setopt(connectionHandle, CURLOPT_SEEKDATA, &readContext);
+ }
+
+ OverrideOptionsOnConnectionHandle(connectionHandle);
+ Aws::Utils::DateTime startTransmissionTime = Aws::Utils::DateTime::Now();
+ CURLcode curlResponseCode = curl_easy_perform(connectionHandle);
+ bool shouldContinueRequest = ContinueRequest(*request);
+ if (curlResponseCode != CURLE_OK && shouldContinueRequest)
+ {
+ response->SetClientErrorType(CoreErrors::NETWORK_CONNECTION);
+ Aws::StringStream ss;
+ ss << "curlCode: " << curlResponseCode << ", " << curl_easy_strerror(curlResponseCode);
+ response->SetClientErrorMessage(ss.str());
+ AWS_LOGSTREAM_ERROR(CURL_HTTP_CLIENT_TAG, "Curl returned error code " << curlResponseCode
+ << " - " << curl_easy_strerror(curlResponseCode));
+ }
+ else if(!shouldContinueRequest)
+ {
+ response->SetClientErrorType(CoreErrors::USER_CANCELLED);
+ response->SetClientErrorMessage("Request cancelled by user's continuation handler");
+ }
+ else
+ {
+ long responseCode;
+ curl_easy_getinfo(connectionHandle, CURLINFO_RESPONSE_CODE, &responseCode);
+ response->SetResponseCode(static_cast<HttpResponseCode>(responseCode));
+ AWS_LOGSTREAM_DEBUG(CURL_HTTP_CLIENT_TAG, "Returned http response code " << responseCode);
+
+ char* contentType = nullptr;
+ curl_easy_getinfo(connectionHandle, CURLINFO_CONTENT_TYPE, &contentType);
+ if (contentType)
+ {
+ response->SetContentType(contentType);
+ AWS_LOGSTREAM_DEBUG(CURL_HTTP_CLIENT_TAG, "Returned content type " << contentType);
+ }
+
+ if (request->GetMethod() != HttpMethod::HTTP_HEAD &&
+ writeContext.m_client->IsRequestProcessingEnabled() &&
+ response->HasHeader(Aws::Http::CONTENT_LENGTH_HEADER))
+ {
+ const Aws::String& contentLength = response->GetHeader(Aws::Http::CONTENT_LENGTH_HEADER);
+ int64_t numBytesResponseReceived = writeContext.m_numBytesResponseReceived;
+ AWS_LOGSTREAM_TRACE(CURL_HTTP_CLIENT_TAG, "Response content-length header: " << contentLength);
+ AWS_LOGSTREAM_TRACE(CURL_HTTP_CLIENT_TAG, "Response body length: " << numBytesResponseReceived);
+ if (StringUtils::ConvertToInt64(contentLength.c_str()) != numBytesResponseReceived)
+ {
+ response->SetClientErrorType(CoreErrors::NETWORK_CONNECTION);
+ response->SetClientErrorMessage("Response body length doesn't match the content-length header.");
+ AWS_LOGSTREAM_ERROR(CURL_HTTP_CLIENT_TAG, "Response body length doesn't match the content-length header.");
+ }
+ }
+
+ AWS_LOGSTREAM_DEBUG(CURL_HTTP_CLIENT_TAG, "Releasing curl handle " << connectionHandle);
+ }
+
+ double timep;
+ CURLcode ret = curl_easy_getinfo(connectionHandle, CURLINFO_NAMELOOKUP_TIME, &timep); // DNS Resolve Latency, seconds.
+ if (ret == CURLE_OK)
+ {
+ request->AddRequestMetric(GetHttpClientMetricNameByType(HttpClientMetricsType::DnsLatency), static_cast<int64_t>(timep * 1000));// to milliseconds
+ }
+
+ ret = curl_easy_getinfo(connectionHandle, CURLINFO_STARTTRANSFER_TIME, &timep); // Connect Latency
+ if (ret == CURLE_OK)
+ {
+ request->AddRequestMetric(GetHttpClientMetricNameByType(HttpClientMetricsType::ConnectLatency), static_cast<int64_t>(timep * 1000));
+ }
+
+ ret = curl_easy_getinfo(connectionHandle, CURLINFO_APPCONNECT_TIME, &timep); // Ssl Latency
+ if (ret == CURLE_OK)
+ {
+ request->AddRequestMetric(GetHttpClientMetricNameByType(HttpClientMetricsType::SslLatency), static_cast<int64_t>(timep * 1000));
+ }
+
+ const char* ip = nullptr;
+ auto curlGetInfoResult = curl_easy_getinfo(connectionHandle, CURLINFO_PRIMARY_IP, &ip); // Get the IP address of the remote endpoint
+ if (curlGetInfoResult == CURLE_OK && ip)
+ {
+ request->SetResolvedRemoteHost(ip);
+ }
+ if (curlResponseCode != CURLE_OK)
+ {
+ m_curlHandleContainer.DestroyCurlHandle(connectionHandle);
+ }
+ else
+ {
+ m_curlHandleContainer.ReleaseCurlHandle(connectionHandle);
+ }
+ //go ahead and flush the response body stream
+ response->GetResponseBody().flush();
+ request->AddRequestMetric(GetHttpClientMetricNameByType(HttpClientMetricsType::RequestLatency), (DateTime::Now() - startTransmissionTime).count());
+ }
+
+ if (headers)
+ {
+ curl_slist_free_all(headers);
+ }
+
+ return response;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpRequest.cpp
new file mode 100644
index 00000000000..47a0ee4faca
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpRequest.cpp
@@ -0,0 +1,104 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/standard/StandardHttpRequest.h>
+
+#include <aws/core/utils/StringUtils.h>
+
+#include <iostream>
+#include <algorithm>
+#include <cassert>
+
+using namespace Aws::Http;
+using namespace Aws::Http::Standard;
+using namespace Aws::Utils;
+
+static bool IsDefaultPort(const URI& uri)
+{
+ switch(uri.GetPort())
+ {
+ case 80:
+ return uri.GetScheme() == Scheme::HTTP;
+ case 443:
+ return uri.GetScheme() == Scheme::HTTPS;
+ default:
+ return false;
+ }
+}
+
+StandardHttpRequest::StandardHttpRequest(const URI& uri, HttpMethod method) :
+ HttpRequest(uri, method),
+ bodyStream(nullptr),
+ m_responseStreamFactory()
+{
+ if(IsDefaultPort(uri))
+ {
+ StandardHttpRequest::SetHeaderValue(HOST_HEADER, uri.GetAuthority());
+ }
+ else
+ {
+ Aws::StringStream host;
+ host << uri.GetAuthority() << ":" << uri.GetPort();
+ StandardHttpRequest::SetHeaderValue(HOST_HEADER, host.str());
+ }
+}
+
+HeaderValueCollection StandardHttpRequest::GetHeaders() const
+{
+ HeaderValueCollection headers;
+
+ for (HeaderValueCollection::const_iterator iter = headerMap.begin(); iter != headerMap.end(); ++iter)
+ {
+ headers.emplace(HeaderValuePair(iter->first, iter->second));
+ }
+
+ return headers;
+}
+
+const Aws::String& StandardHttpRequest::GetHeaderValue(const char* headerName) const
+{
+ auto iter = headerMap.find(headerName);
+ assert (iter != headerMap.end());
+ return iter->second;
+}
+
+void StandardHttpRequest::SetHeaderValue(const char* headerName, const Aws::String& headerValue)
+{
+ headerMap[StringUtils::ToLower(headerName)] = StringUtils::Trim(headerValue.c_str());
+}
+
+void StandardHttpRequest::SetHeaderValue(const Aws::String& headerName, const Aws::String& headerValue)
+{
+ headerMap[StringUtils::ToLower(headerName.c_str())] = StringUtils::Trim(headerValue.c_str());
+}
+
+void StandardHttpRequest::DeleteHeader(const char* headerName)
+{
+ headerMap.erase(StringUtils::ToLower(headerName));
+}
+
+bool StandardHttpRequest::HasHeader(const char* headerName) const
+{
+ return headerMap.find(StringUtils::ToLower(headerName)) != headerMap.end();
+}
+
+int64_t StandardHttpRequest::GetSize() const
+{
+ int64_t size = 0;
+
+ std::for_each(headerMap.cbegin(), headerMap.cend(), [&](const HeaderValueCollection::value_type& kvPair){ size += kvPair.first.length(); size += kvPair.second.length(); });
+
+ return size;
+}
+
+const Aws::IOStreamFactory& StandardHttpRequest::GetResponseStreamFactory() const
+{
+ return m_responseStreamFactory;
+}
+
+void StandardHttpRequest::SetResponseStreamFactory(const Aws::IOStreamFactory& factory)
+{
+ m_responseStreamFactory = factory;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpResponse.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpResponse.cpp
new file mode 100644
index 00000000000..92d7a062b6c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/http/standard/StandardHttpResponse.cpp
@@ -0,0 +1,46 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/http/standard/StandardHttpResponse.h>
+
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+
+#include <istream>
+
+using namespace Aws::Http;
+using namespace Aws::Http::Standard;
+using namespace Aws::Utils;
+
+
+HeaderValueCollection StandardHttpResponse::GetHeaders() const
+{
+ HeaderValueCollection headerValueCollection;
+
+ for (Aws::Map<Aws::String, Aws::String>::const_iterator iter = headerMap.begin(); iter != headerMap.end(); ++iter)
+ {
+ headerValueCollection.emplace(HeaderValuePair(iter->first, iter->second));
+ }
+
+ return headerValueCollection;
+}
+
+bool StandardHttpResponse::HasHeader(const char* headerName) const
+{
+ return headerMap.find(StringUtils::ToLower(headerName)) != headerMap.end();
+}
+
+const Aws::String& StandardHttpResponse::GetHeader(const Aws::String& headerName) const
+{
+ Aws::Map<Aws::String, Aws::String>::const_iterator foundValue = headerMap.find(StringUtils::ToLower(headerName.c_str()));
+ return foundValue->second;
+}
+
+void StandardHttpResponse::AddHeader(const Aws::String& headerName, const Aws::String& headerValue)
+{
+ headerMap[StringUtils::ToLower(headerName.c_str())] = headerValue;
+}
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/internal/AWSHttpResourceClient.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/internal/AWSHttpResourceClient.cpp
new file mode 100644
index 00000000000..24145e4d92d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/internal/AWSHttpResourceClient.cpp
@@ -0,0 +1,506 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/internal/AWSHttpResourceClient.h>
+#include <aws/core/client/DefaultRetryStrategy.h>
+#include <aws/core/http/HttpClient.h>
+#include <aws/core/http/HttpClientFactory.h>
+#include <aws/core/http/HttpResponse.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/platform/Environment.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <mutex>
+#include <sstream>
+
+using namespace Aws;
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Http;
+using namespace Aws::Client;
+using namespace Aws::Internal;
+
+static const char EC2_SECURITY_CREDENTIALS_RESOURCE[] = "/latest/meta-data/iam/security-credentials";
+static const char EC2_REGION_RESOURCE[] = "/latest/meta-data/placement/availability-zone";
+static const char EC2_IMDS_TOKEN_RESOURCE[] = "/latest/api/token";
+static const char EC2_IMDS_TOKEN_TTL_DEFAULT_VALUE[] = "21600";
+static const char EC2_IMDS_TOKEN_TTL_HEADER[] = "x-aws-ec2-metadata-token-ttl-seconds";
+static const char EC2_IMDS_TOKEN_HEADER[] = "x-aws-ec2-metadata-token";
+static const char RESOURCE_CLIENT_CONFIGURATION_ALLOCATION_TAG[] = "AWSHttpResourceClient";
+static const char EC2_METADATA_CLIENT_LOG_TAG[] = "EC2MetadataClient";
+static const char ECS_CREDENTIALS_CLIENT_LOG_TAG[] = "ECSCredentialsClient";
+
+namespace Aws
+{
+ namespace Client
+ {
+ Aws::String ComputeUserAgentString();
+ }
+
+ namespace Internal
+ {
+ static ClientConfiguration MakeDefaultHttpResourceClientConfiguration(const char *logtag)
+ {
+ ClientConfiguration res;
+
+ res.maxConnections = 2;
+ res.scheme = Scheme::HTTP;
+
+ #if defined(WIN32) && defined(BYPASS_DEFAULT_PROXY)
+ // For security reasons, we must bypass any proxy settings when fetching sensitive information, for example
+ // user credentials. On Windows, IXMLHttpRequest2 does not support bypassing proxy settings, therefore,
+ // we force using WinHTTP client. On POSIX systems, CURL is set to bypass proxy settings by default.
+ res.httpLibOverride = TransferLibType::WIN_HTTP_CLIENT;
+ AWS_LOGSTREAM_INFO(logtag, "Overriding the current HTTP client to WinHTTP to bypass proxy settings.");
+ #else
+ (void) logtag; // To disable warning about unused variable
+ #endif
+ // Explicitly set the proxy settings to empty/zero to avoid relying on defaults that could potentially change
+ // in the future.
+ res.proxyHost = "";
+ res.proxyUserName = "";
+ res.proxyPassword = "";
+ res.proxyPort = 0;
+
+ // EC2MetadataService throttles by delaying the response so the service client should set a large read timeout.
+ // EC2MetadataService delay is in order of seconds so it only make sense to retry after a couple of seconds.
+ res.connectTimeoutMs = 1000;
+ res.requestTimeoutMs = 1000;
+ res.retryStrategy = Aws::MakeShared<DefaultRetryStrategy>(RESOURCE_CLIENT_CONFIGURATION_ALLOCATION_TAG, 1, 1000);
+
+ return res;
+ }
+
+ AWSHttpResourceClient::AWSHttpResourceClient(const Aws::Client::ClientConfiguration& clientConfiguration, const char* logtag)
+ : m_logtag(logtag), m_retryStrategy(clientConfiguration.retryStrategy), m_httpClient(nullptr)
+ {
+ AWS_LOGSTREAM_INFO(m_logtag.c_str(),
+ "Creating AWSHttpResourceClient with max connections "
+ << clientConfiguration.maxConnections
+ << " and scheme "
+ << SchemeMapper::ToString(clientConfiguration.scheme));
+
+ m_httpClient = CreateHttpClient(clientConfiguration);
+ }
+
+ AWSHttpResourceClient::AWSHttpResourceClient(const char* logtag)
+ : AWSHttpResourceClient(MakeDefaultHttpResourceClientConfiguration(logtag), logtag)
+ {
+ }
+
+ AWSHttpResourceClient::~AWSHttpResourceClient()
+ {
+ }
+
+ Aws::String AWSHttpResourceClient::GetResource(const char* endpoint, const char* resource, const char* authToken) const
+ {
+ return GetResourceWithAWSWebServiceResult(endpoint, resource, authToken).GetPayload();
+ }
+
+ AmazonWebServiceResult<Aws::String> AWSHttpResourceClient::GetResourceWithAWSWebServiceResult(const char *endpoint, const char *resource, const char *authToken) const
+ {
+ Aws::StringStream ss;
+ ss << endpoint;
+ if (resource)
+ {
+ ss << resource;
+ }
+ std::shared_ptr<HttpRequest> request(CreateHttpRequest(ss.str(), HttpMethod::HTTP_GET,
+ Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));
+
+ request->SetUserAgent(ComputeUserAgentString());
+
+ if (authToken)
+ {
+ request->SetHeaderValue(Aws::Http::AWS_AUTHORIZATION_HEADER, authToken);
+ }
+
+ return GetResourceWithAWSWebServiceResult(request);
+ }
+
+ AmazonWebServiceResult<Aws::String> AWSHttpResourceClient::GetResourceWithAWSWebServiceResult(const std::shared_ptr<HttpRequest> &httpRequest) const
+ {
+ AWS_LOGSTREAM_TRACE(m_logtag.c_str(), "Retrieving credentials from " << httpRequest->GetURIString());
+
+ for (long retries = 0;; retries++)
+ {
+ std::shared_ptr<HttpResponse> response(m_httpClient->MakeRequest(httpRequest));
+
+ if (response->GetResponseCode() == HttpResponseCode::OK)
+ {
+ Aws::IStreamBufIterator eos;
+ return {Aws::String(Aws::IStreamBufIterator(response->GetResponseBody()), eos), response->GetHeaders(), HttpResponseCode::OK};
+ }
+
+ const Aws::Client::AWSError<Aws::Client::CoreErrors> error = [this, &response]() {
+ if (response->HasClientError() || response->GetResponseBody().tellp() < 1)
+ {
+ AWS_LOGSTREAM_ERROR(m_logtag.c_str(), "Http request to retrieve credentials failed");
+ return AWSError<CoreErrors>(CoreErrors::NETWORK_CONNECTION, true); // Retryable
+ }
+ else if (m_errorMarshaller)
+ {
+ return m_errorMarshaller->Marshall(*response);
+ }
+ else
+ {
+ const auto responseCode = response->GetResponseCode();
+
+ AWS_LOGSTREAM_ERROR(m_logtag.c_str(), "Http request to retrieve credentials failed with error code "
+ << static_cast<int>(responseCode));
+ return CoreErrorsMapper::GetErrorForHttpResponseCode(responseCode);
+ }
+ }();
+
+ if (!m_retryStrategy->ShouldRetry(error, retries))
+ {
+ AWS_LOGSTREAM_ERROR(m_logtag.c_str(), "Can not retrive resource from " << httpRequest->GetURIString());
+ return {{}, response->GetHeaders(), error.GetResponseCode()};
+ }
+ auto sleepMillis = m_retryStrategy->CalculateDelayBeforeNextRetry(error, retries);
+ AWS_LOGSTREAM_WARN(m_logtag.c_str(), "Request failed, now waiting " << sleepMillis << " ms before attempting again.");
+ m_httpClient->RetryRequestSleep(std::chrono::milliseconds(sleepMillis));
+ }
+ }
+
+ EC2MetadataClient::EC2MetadataClient(const char* endpoint)
+ : AWSHttpResourceClient(EC2_METADATA_CLIENT_LOG_TAG), m_endpoint(endpoint), m_tokenRequired(true)
+ {
+ }
+
+ EC2MetadataClient::EC2MetadataClient(const Aws::Client::ClientConfiguration &clientConfiguration, const char *endpoint)
+ : AWSHttpResourceClient(clientConfiguration, EC2_METADATA_CLIENT_LOG_TAG), m_endpoint(endpoint), m_tokenRequired(true)
+ {
+ }
+
+ EC2MetadataClient::~EC2MetadataClient()
+ {
+
+ }
+
+ Aws::String EC2MetadataClient::GetResource(const char* resourcePath) const
+ {
+ return GetResource(m_endpoint.c_str(), resourcePath, nullptr/*authToken*/);
+ }
+
+ Aws::String EC2MetadataClient::GetDefaultCredentials() const
+ {
+ std::unique_lock<std::recursive_mutex> locker(m_tokenMutex);
+ if (m_tokenRequired)
+ {
+ return GetDefaultCredentialsSecurely();
+ }
+
+ AWS_LOGSTREAM_TRACE(m_logtag.c_str(), "Getting default credentials for ec2 instance");
+ auto result = GetResourceWithAWSWebServiceResult(m_endpoint.c_str(), EC2_SECURITY_CREDENTIALS_RESOURCE, nullptr);
+ Aws::String credentialsString = result.GetPayload();
+ auto httpResponseCode = result.GetResponseCode();
+
+ // Note, if service is insane, it might return 404 for our initial secure call,
+ // then when we fall back to insecure call, it might return 401 ask for secure call,
+ // Then, SDK might get into a recursive loop call situation between secure and insecure call.
+ if (httpResponseCode == Http::HttpResponseCode::UNAUTHORIZED)
+ {
+ m_tokenRequired = true;
+ return {};
+ }
+ locker.unlock();
+
+ Aws::String trimmedCredentialsString = StringUtils::Trim(credentialsString.c_str());
+ if (trimmedCredentialsString.empty()) return {};
+
+ Aws::Vector<Aws::String> securityCredentials = StringUtils::Split(trimmedCredentialsString, '\n');
+
+ AWS_LOGSTREAM_DEBUG(m_logtag.c_str(), "Calling EC2MetadataService resource, " << EC2_SECURITY_CREDENTIALS_RESOURCE
+ << " returned credential string " << trimmedCredentialsString);
+
+ if (securityCredentials.size() == 0)
+ {
+ AWS_LOGSTREAM_WARN(m_logtag.c_str(), "Initial call to ec2Metadataservice to get credentials failed");
+ return {};
+ }
+
+ Aws::StringStream ss;
+ ss << EC2_SECURITY_CREDENTIALS_RESOURCE << "/" << securityCredentials[0];
+ AWS_LOGSTREAM_DEBUG(m_logtag.c_str(), "Calling EC2MetadataService resource " << ss.str());
+ return GetResource(ss.str().c_str());
+ }
+
+ Aws::String EC2MetadataClient::GetDefaultCredentialsSecurely() const
+ {
+ std::unique_lock<std::recursive_mutex> locker(m_tokenMutex);
+ if (!m_tokenRequired)
+ {
+ return GetDefaultCredentials();
+ }
+
+ Aws::StringStream ss;
+ ss << m_endpoint << EC2_IMDS_TOKEN_RESOURCE;
+ std::shared_ptr<HttpRequest> tokenRequest(CreateHttpRequest(ss.str(), HttpMethod::HTTP_PUT,
+ Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));
+ tokenRequest->SetHeaderValue(EC2_IMDS_TOKEN_TTL_HEADER, EC2_IMDS_TOKEN_TTL_DEFAULT_VALUE);
+ auto userAgentString = ComputeUserAgentString();
+ tokenRequest->SetUserAgent(userAgentString);
+ AWS_LOGSTREAM_TRACE(m_logtag.c_str(), "Calling EC2MetadataService to get token");
+ auto result = GetResourceWithAWSWebServiceResult(tokenRequest);
+ Aws::String tokenString = result.GetPayload();
+ Aws::String trimmedTokenString = StringUtils::Trim(tokenString.c_str());
+
+ if (result.GetResponseCode() == HttpResponseCode::BAD_REQUEST)
+ {
+ return {};
+ }
+ else if (result.GetResponseCode() != HttpResponseCode::OK || trimmedTokenString.empty())
+ {
+ m_tokenRequired = false;
+ AWS_LOGSTREAM_TRACE(m_logtag.c_str(), "Calling EC2MetadataService to get token failed, falling back to less secure way.");
+ return GetDefaultCredentials();
+ }
+ m_token = trimmedTokenString;
+ locker.unlock();
+ ss.str("");
+ ss << m_endpoint << EC2_SECURITY_CREDENTIALS_RESOURCE;
+ std::shared_ptr<HttpRequest> profileRequest(CreateHttpRequest(ss.str(), HttpMethod::HTTP_GET,
+ Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));
+ profileRequest->SetHeaderValue(EC2_IMDS_TOKEN_HEADER, trimmedTokenString);
+ profileRequest->SetUserAgent(userAgentString);
+ Aws::String profileString = GetResourceWithAWSWebServiceResult(profileRequest).GetPayload();
+
+ Aws::String trimmedProfileString = StringUtils::Trim(profileString.c_str());
+ Aws::Vector<Aws::String> securityCredentials = StringUtils::Split(trimmedProfileString, '\n');
+
+ AWS_LOGSTREAM_DEBUG(m_logtag.c_str(), "Calling EC2MetadataService resource, " << EC2_SECURITY_CREDENTIALS_RESOURCE
+ << " with token returned profile string " << trimmedProfileString);
+ if (securityCredentials.size() == 0)
+ {
+ AWS_LOGSTREAM_WARN(m_logtag.c_str(), "Calling EC2Metadataservice to get profiles failed");
+ return {};
+ }
+
+ ss.str("");
+ ss << m_endpoint << EC2_SECURITY_CREDENTIALS_RESOURCE << "/" << securityCredentials[0];
+ std::shared_ptr<HttpRequest> credentialsRequest(CreateHttpRequest(ss.str(), HttpMethod::HTTP_GET,
+ Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));
+ credentialsRequest->SetHeaderValue(EC2_IMDS_TOKEN_HEADER, trimmedTokenString);
+ credentialsRequest->SetUserAgent(userAgentString);
+ AWS_LOGSTREAM_DEBUG(m_logtag.c_str(), "Calling EC2MetadataService resource " << ss.str() << " with token.");
+ return GetResourceWithAWSWebServiceResult(credentialsRequest).GetPayload();
+ }
+
+ Aws::String EC2MetadataClient::GetCurrentRegion() const
+ {
+ if (!m_region.empty())
+ {
+ return m_region;
+ }
+
+ AWS_LOGSTREAM_TRACE(m_logtag.c_str(), "Getting current region for ec2 instance");
+
+ Aws::StringStream ss;
+ ss << m_endpoint << EC2_REGION_RESOURCE;
+ std::shared_ptr<HttpRequest> regionRequest(CreateHttpRequest(ss.str(), HttpMethod::HTTP_GET,
+ Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));
+ {
+ std::lock_guard<std::recursive_mutex> locker(m_tokenMutex);
+ if (m_tokenRequired)
+ {
+ regionRequest->SetHeaderValue(EC2_IMDS_TOKEN_HEADER, m_token);
+ }
+ }
+ regionRequest->SetUserAgent(ComputeUserAgentString());
+ Aws::String azString = GetResourceWithAWSWebServiceResult(regionRequest).GetPayload();
+
+ if (azString.empty())
+ {
+ AWS_LOGSTREAM_INFO(m_logtag.c_str() ,
+ "Unable to pull region from instance metadata service ");
+ return {};
+ }
+
+ Aws::String trimmedAZString = StringUtils::Trim(azString.c_str());
+ AWS_LOGSTREAM_DEBUG(m_logtag.c_str(), "Calling EC2MetadataService resource "
+ << EC2_REGION_RESOURCE << " , returned credential string " << trimmedAZString);
+
+ Aws::String region;
+ region.reserve(trimmedAZString.length());
+
+ bool digitFound = false;
+ for (auto character : trimmedAZString)
+ {
+ if(digitFound && !isdigit(character))
+ {
+ break;
+ }
+ if (isdigit(character))
+ {
+ digitFound = true;
+ }
+
+ region.append(1, character);
+ }
+
+ AWS_LOGSTREAM_INFO(m_logtag.c_str(), "Detected current region as " << region);
+ m_region = region;
+ return region;
+ }
+
+ #ifdef _MSC_VER
+ // VS2015 compiler's bug, warning s_ec2metadataClient: symbol will be dynamically initialized (implementation limitation)
+ AWS_SUPPRESS_WARNING(4592,
+ static std::shared_ptr<EC2MetadataClient> s_ec2metadataClient(nullptr);
+ )
+ #else
+ static std::shared_ptr<EC2MetadataClient> s_ec2metadataClient(nullptr);
+ #endif
+
+ void InitEC2MetadataClient()
+ {
+ if (s_ec2metadataClient)
+ {
+ return;
+ }
+ s_ec2metadataClient = Aws::MakeShared<EC2MetadataClient>(EC2_METADATA_CLIENT_LOG_TAG);
+ }
+
+ void CleanupEC2MetadataClient()
+ {
+ if (!s_ec2metadataClient)
+ {
+ return;
+ }
+ s_ec2metadataClient = nullptr;
+ }
+
+ std::shared_ptr<EC2MetadataClient> GetEC2MetadataClient()
+ {
+ return s_ec2metadataClient;
+ }
+
+
+ ECSCredentialsClient::ECSCredentialsClient(const char* resourcePath, const char* endpoint, const char* token)
+ : AWSHttpResourceClient(ECS_CREDENTIALS_CLIENT_LOG_TAG),
+ m_resourcePath(resourcePath), m_endpoint(endpoint), m_token(token)
+ {
+ }
+
+ ECSCredentialsClient::ECSCredentialsClient(const Aws::Client::ClientConfiguration& clientConfiguration, const char* resourcePath, const char* endpoint, const char* token)
+ : AWSHttpResourceClient(clientConfiguration, ECS_CREDENTIALS_CLIENT_LOG_TAG),
+ m_resourcePath(resourcePath), m_endpoint(endpoint), m_token(token)
+ {
+ }
+
+ static const char STS_RESOURCE_CLIENT_LOG_TAG[] = "STSResourceClient";
+ STSCredentialsClient::STSCredentialsClient(const Aws::Client::ClientConfiguration& clientConfiguration)
+ : AWSHttpResourceClient(clientConfiguration, STS_RESOURCE_CLIENT_LOG_TAG)
+ {
+ SetErrorMarshaller(Aws::MakeUnique<Aws::Client::XmlErrorMarshaller>(STS_RESOURCE_CLIENT_LOG_TAG));
+
+ Aws::StringStream ss;
+ if (clientConfiguration.scheme == Aws::Http::Scheme::HTTP)
+ {
+ ss << "http://";
+ }
+ else
+ {
+ ss << "https://";
+ }
+
+ static const int CN_NORTH_1_HASH = Aws::Utils::HashingUtils::HashString(Aws::Region::CN_NORTH_1);
+ static const int CN_NORTHWEST_1_HASH = Aws::Utils::HashingUtils::HashString(Aws::Region::CN_NORTHWEST_1);
+ auto hash = Aws::Utils::HashingUtils::HashString(clientConfiguration.region.c_str());
+
+ ss << "sts." << clientConfiguration.region << ".amazonaws.com";
+ if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH)
+ {
+ ss << ".cn";
+ }
+ m_endpoint = ss.str();
+
+ AWS_LOGSTREAM_INFO(STS_RESOURCE_CLIENT_LOG_TAG, "Creating STS ResourceClient with endpoint: " << m_endpoint);
+ }
+
+ STSCredentialsClient::STSAssumeRoleWithWebIdentityResult STSCredentialsClient::GetAssumeRoleWithWebIdentityCredentials(const STSAssumeRoleWithWebIdentityRequest& request)
+ {
+ //Calculate query string
+ Aws::StringStream ss;
+ ss << "Action=AssumeRoleWithWebIdentity"
+ << "&Version=2011-06-15"
+ << "&RoleSessionName=" << Aws::Utils::StringUtils::URLEncode(request.roleSessionName.c_str())
+ << "&RoleArn=" << Aws::Utils::StringUtils::URLEncode(request.roleArn.c_str())
+ << "&WebIdentityToken=" << Aws::Utils::StringUtils::URLEncode(request.webIdentityToken.c_str());
+
+ std::shared_ptr<HttpRequest> httpRequest(CreateHttpRequest(m_endpoint, HttpMethod::HTTP_POST,
+ Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));
+
+ httpRequest->SetUserAgent(ComputeUserAgentString());
+
+ std::shared_ptr<Aws::IOStream> body = Aws::MakeShared<Aws::StringStream>("STS_RESOURCE_CLIENT_LOG_TAG");
+ *body << ss.str();
+
+ httpRequest->AddContentBody(body);
+ body->seekg(0, body->end);
+ auto streamSize = body->tellg();
+ body->seekg(0, body->beg);
+ Aws::StringStream contentLength;
+ contentLength << streamSize;
+ httpRequest->SetContentLength(contentLength.str());
+ httpRequest->SetContentType("application/x-www-form-urlencoded");
+
+ Aws::String credentialsStr = GetResourceWithAWSWebServiceResult(httpRequest).GetPayload();
+
+ //Parse credentials
+ STSAssumeRoleWithWebIdentityResult result;
+ if (credentialsStr.empty())
+ {
+ AWS_LOGSTREAM_WARN(STS_RESOURCE_CLIENT_LOG_TAG, "Get an empty credential from sts");
+ return result;
+ }
+
+ const Utils::Xml::XmlDocument xmlDocument = XmlDocument::CreateFromXmlString(credentialsStr);
+ XmlNode rootNode = xmlDocument.GetRootElement();
+ XmlNode resultNode = rootNode;
+ if (!rootNode.IsNull() && (rootNode.GetName() != "AssumeRoleWithWebIdentityResult"))
+ {
+ resultNode = rootNode.FirstChild("AssumeRoleWithWebIdentityResult");
+ }
+
+ if (!resultNode.IsNull())
+ {
+ XmlNode credentialsNode = resultNode.FirstChild("Credentials");
+ if (!credentialsNode.IsNull())
+ {
+ XmlNode accessKeyIdNode = credentialsNode.FirstChild("AccessKeyId");
+ if (!accessKeyIdNode.IsNull())
+ {
+ result.creds.SetAWSAccessKeyId(accessKeyIdNode.GetText());
+ }
+
+ XmlNode secretAccessKeyNode = credentialsNode.FirstChild("SecretAccessKey");
+ if (!secretAccessKeyNode.IsNull())
+ {
+ result.creds.SetAWSSecretKey(secretAccessKeyNode.GetText());
+ }
+
+ XmlNode sessionTokenNode = credentialsNode.FirstChild("SessionToken");
+ if (!sessionTokenNode.IsNull())
+ {
+ result.creds.SetSessionToken(sessionTokenNode.GetText());
+ }
+
+ XmlNode expirationNode = credentialsNode.FirstChild("Expiration");
+ if (!expirationNode.IsNull())
+ {
+ result.creds.SetExpiration(DateTime(StringUtils::Trim(expirationNode.GetText().c_str()).c_str(), DateFormat::ISO_8601));
+ }
+ }
+ }
+ return result;
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/DefaultMonitoring.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/DefaultMonitoring.cpp
new file mode 100644
index 00000000000..9953004bc3c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/DefaultMonitoring.cpp
@@ -0,0 +1,340 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/monitoring/DefaultMonitoring.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/json/JsonSerializer.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/client/AWSClient.h>
+#include <aws/core/auth/AWSCredentialsProvider.h>
+#include <aws/core/platform/Environment.h>
+#include <aws/core/config/AWSProfileConfigLoader.h>
+#include <aws/core/utils/logging/LogMacros.h>
+using namespace Aws::Utils;
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ static const char DEFAULT_MONITORING_ALLOC_TAG[] = "DefaultMonitoringAllocTag";
+ static const int CLIENT_ID_LENGTH_LIMIT = 256;
+ static const int USER_AGENT_LENGTH_LIMIT = 256;
+ static const int ERROR_MESSAGE_LENGTH_LIMIT = 512;
+
+ const char DEFAULT_MONITORING_CLIENT_ID[] = ""; // default to empty;
+ const char DEFAULT_MONITORING_HOST[] = "127.0.0.1"; // default to loopback ip address instead of "localhost" based on design specification.
+ unsigned short DEFAULT_MONITORING_PORT = 31000; //default to 31000;
+ bool DEFAULT_MONITORING_ENABLE = false; //default to false;
+
+ const int DefaultMonitoring::DEFAULT_MONITORING_VERSION = 1;
+ const char DefaultMonitoring::DEFAULT_CSM_CONFIG_ENABLED[] = "csm_enabled";
+ const char DefaultMonitoring::DEFAULT_CSM_CONFIG_CLIENT_ID[] = "csm_client_id";
+ const char DefaultMonitoring::DEFAULT_CSM_CONFIG_HOST[] = "csm_host";
+ const char DefaultMonitoring::DEFAULT_CSM_CONFIG_PORT[] = "csm_port";
+ const char DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_ENABLED[] = "AWS_CSM_ENABLED";
+ const char DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_CLIENT_ID[] = "AWS_CSM_CLIENT_ID";
+ const char DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_HOST[] = "AWS_CSM_HOST";
+ const char DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_PORT[] = "AWS_CSM_PORT";
+
+
+ struct DefaultContext
+ {
+ Aws::Utils::DateTime apiCallStartTime;
+ Aws::Utils::DateTime attemptStartTime;
+ int retryCount = 0;
+ bool lastAttemptSucceeded = false;
+ bool lastErrorRetryable = false; //doesn't apply if last attempt succeeded.
+ const Aws::Client::HttpResponseOutcome* outcome = nullptr;
+ };
+
+ static inline void FillRequiredFieldsToJson(Json::JsonValue& json,
+ const Aws::String& type,
+ const Aws::String& service,
+ const Aws::String& api,
+ const Aws::String& clientId,
+ const DateTime& timestamp,
+ int version,
+ const Aws::String& userAgent)
+ {
+ json.WithString("Type", type)
+ .WithString("Service", service)
+ .WithString("Api", api)
+ .WithString("ClientId", clientId.substr(0, CLIENT_ID_LENGTH_LIMIT))
+ .WithInt64("Timestamp", timestamp.Millis())
+ .WithInteger("Version", version)
+ .WithString("UserAgent", userAgent.substr(0, USER_AGENT_LENGTH_LIMIT));
+ }
+
+ static inline void FillRequiredApiCallFieldsToJson(Json::JsonValue& json,
+ int attemptCount,
+ int64_t apiCallLatency,
+ bool maxRetriesExceeded)
+ {
+ json.WithInteger("AttemptCount", attemptCount)
+ .WithInt64("Latency", apiCallLatency)
+ .WithInteger("MaxRetriesExceeded", maxRetriesExceeded ? 1 : 0);
+ }
+
+ static inline void FillRequiredApiAttemptFieldsToJson(Json::JsonValue& json,
+ const Aws::String& domainName,
+ int64_t attemptLatency)
+ {
+ json.WithString("Fqdn", domainName)
+ .WithInt64("AttemptLatency", attemptLatency);
+ }
+
+ static inline void ExportResponseHeaderToJson(Json::JsonValue& json, const Aws::Http::HeaderValueCollection& headers,
+ const Aws::String& headerName, const Aws::String& targetName)
+ {
+ auto iter = headers.find(headerName);
+ if (iter != headers.end())
+ {
+ json.WithString(targetName, iter->second);
+ }
+ }
+
+ static inline void ExportHttpMetricsToJson(Json::JsonValue& json, const Aws::Monitoring::HttpClientMetricsCollection& httpMetrics, Aws::Monitoring::HttpClientMetricsType type)
+ {
+ auto iter = httpMetrics.find(GetHttpClientMetricNameByType(type));
+ if (iter != httpMetrics.end())
+ {
+ json.WithInt64(GetHttpClientMetricNameByType(type), iter->second);
+ }
+ }
+
+ static inline void FillOptionalApiCallFieldsToJson(Json::JsonValue& json,
+ const Aws::Http::HttpRequest* request,
+ const Aws::Client::HttpResponseOutcome& outcome)
+ {
+ if (!request->GetSigningRegion().empty())
+ {
+ json.WithString("Region", request->GetSigningRegion());
+ }
+ if (!outcome.IsSuccess())
+ {
+ if (outcome.GetError().GetExceptionName().empty()) // Not Aws Exception
+ {
+ json.WithString("FinalSdkExceptionMessage", outcome.GetError().GetMessage().substr(0, ERROR_MESSAGE_LENGTH_LIMIT));
+ }
+ else // Aws Exception
+ {
+ json.WithString("FinalAwsException", outcome.GetError().GetExceptionName())
+ .WithString("FinalAwsExceptionMessage", outcome.GetError().GetMessage().substr(0, ERROR_MESSAGE_LENGTH_LIMIT));
+ }
+ json.WithInteger("FinalHttpStatusCode", static_cast<int>(outcome.GetError().GetResponseCode()));
+ }
+ else
+ {
+ json.WithInteger("FinalHttpStatusCode", static_cast<int>(outcome.GetResult()->GetResponseCode()));
+ }
+ }
+
+ static inline void FillOptionalApiAttemptFieldsToJson(Json::JsonValue& json,
+ const Aws::Http::HttpRequest* request,
+ const Aws::Client::HttpResponseOutcome& outcome,
+ const CoreMetricsCollection& metricsFromCore)
+ {
+ /**
+ *No matter request succeeded or not, these fields should be included as long as their requirements
+ *are met. We should be able to access response (so as to access original request) if the response has error.
+ */
+ if (request->HasAwsSessionToken() && !request->GetAwsSessionToken().empty())
+ {
+ json.WithString("SessionToken", request->GetAwsSessionToken());
+ }
+ if (!request->GetSigningRegion().empty())
+ {
+ json.WithString("Region", request->GetSigningRegion());
+ }
+ if (!request->GetSigningAccessKey().empty())
+ {
+ json.WithString("AccessKey", request->GetSigningAccessKey());
+ }
+
+ const auto& headers = outcome.IsSuccess() ? outcome.GetResult()->GetHeaders() : outcome.GetError().GetResponseHeaders();
+
+ ExportResponseHeaderToJson(json, headers, StringUtils::ToLower("x-amzn-RequestId"), "XAmznRequestId");
+ ExportResponseHeaderToJson(json, headers, StringUtils::ToLower("x-amz-request-id"), "XAmzRequestId");
+ ExportResponseHeaderToJson(json, headers, StringUtils::ToLower("x-amz-id-2"), "XAmzId2");
+
+ if (!outcome.IsSuccess())
+ {
+ if (outcome.GetError().GetExceptionName().empty()) // Not Aws Exception
+ {
+ json.WithString("SdkExceptionMessage", outcome.GetError().GetMessage().substr(0, ERROR_MESSAGE_LENGTH_LIMIT));
+ }
+ else // Aws Exception
+ {
+ json.WithString("AwsException", outcome.GetError().GetExceptionName())
+ .WithString("AwsExceptionMessage", outcome.GetError().GetMessage().substr(0, ERROR_MESSAGE_LENGTH_LIMIT));
+ }
+ json.WithInteger("HttpStatusCode", static_cast<int>(outcome.GetError().GetResponseCode()));
+ }
+ else
+ {
+ json.WithInteger("HttpStatusCode", static_cast<int>(outcome.GetResult()->GetResponseCode()));
+ }
+
+ // Optional MetricsCollectedFromCore
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::AcquireConnectionLatency);
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::ConnectionReused);
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::ConnectLatency);
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::DestinationIp);
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::DnsLatency);
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::RequestLatency);
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::SslLatency);
+ ExportHttpMetricsToJson(json, metricsFromCore.httpClientMetrics, HttpClientMetricsType::TcpLatency);
+ }
+
+ DefaultMonitoring::DefaultMonitoring(const Aws::String& clientId, const Aws::String& host, unsigned short port):
+ m_udp(host.c_str(), port), m_clientId(clientId)
+ {
+ }
+
+ void* DefaultMonitoring::OnRequestStarted(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request) const
+ {
+ AWS_UNREFERENCED_PARAM(request);
+
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "OnRequestStart Service: " << serviceName << "Request: " << requestName);
+ auto context = Aws::New<DefaultContext>(DEFAULT_MONITORING_ALLOC_TAG);
+ context->apiCallStartTime = Aws::Utils::DateTime::Now();
+ context->attemptStartTime = context->apiCallStartTime;
+ context->retryCount = 0;
+ return context;
+ }
+
+
+ void DefaultMonitoring::OnRequestSucceeded(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, void* context) const
+ {
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "OnRequestSucceeded Service: " << serviceName << "Request: " << requestName);
+ CollectAndSendAttemptData(serviceName, requestName, request, outcome, metricsFromCore, context);
+ }
+
+ void DefaultMonitoring::OnRequestFailed(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, void* context) const
+ {
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "OnRequestFailed Service: " << serviceName << "Request: " << requestName);
+ CollectAndSendAttemptData(serviceName, requestName, request, outcome, metricsFromCore, context);
+ }
+
+ void DefaultMonitoring::OnRequestRetry(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, void* context) const
+ {
+ AWS_UNREFERENCED_PARAM(request);
+
+ DefaultContext* defaultContext = static_cast<DefaultContext*>(context);
+ defaultContext->retryCount++;
+ defaultContext->attemptStartTime = Aws::Utils::DateTime::Now();
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "OnRequestRetry Service: " << serviceName << "Request: " << requestName << " RetryCnt:" << defaultContext->retryCount);
+ }
+
+ void DefaultMonitoring::OnFinish(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, void* context) const
+ {
+ AWS_UNREFERENCED_PARAM(request);
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "OnRequestFinish Service: " << serviceName << "Request: " << requestName);
+
+ DefaultContext* defaultContext = static_cast<DefaultContext*>(context);
+ Aws::Utils::Json::JsonValue json;
+ FillRequiredFieldsToJson(json, "ApiCall", serviceName, requestName, m_clientId, defaultContext->apiCallStartTime, DEFAULT_MONITORING_VERSION, request->GetUserAgent());
+ FillRequiredApiCallFieldsToJson(json, defaultContext->retryCount + 1, (DateTime::Now() - defaultContext->apiCallStartTime).count(), (!defaultContext->lastAttemptSucceeded && defaultContext->lastErrorRetryable));
+ FillOptionalApiCallFieldsToJson(json, request.get(), *(defaultContext->outcome));
+ Aws::String compactData = json.View().WriteCompact();
+ m_udp.SendData(reinterpret_cast<const uint8_t*>(compactData.c_str()), static_cast<int>(compactData.size()));
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Send API Metrics: \n" << json.View().WriteReadable());
+ Aws::Delete(defaultContext);
+ }
+
+ void DefaultMonitoring::CollectAndSendAttemptData(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, const Aws::Client::HttpResponseOutcome& outcome,
+ const CoreMetricsCollection& metricsFromCore, void* context) const
+ {
+ DefaultContext* defaultContext = static_cast<DefaultContext*>(context);
+ defaultContext->outcome = &outcome;
+ defaultContext->lastAttemptSucceeded = outcome.IsSuccess() ? true : false;
+ defaultContext->lastErrorRetryable = (!outcome.IsSuccess() && outcome.GetError().ShouldRetry()) ? true : false;
+ Aws::Utils::Json::JsonValue json;
+ FillRequiredFieldsToJson(json, "ApiCallAttempt", serviceName, requestName, m_clientId, defaultContext->attemptStartTime, DEFAULT_MONITORING_VERSION, request->GetUserAgent());
+ FillRequiredApiAttemptFieldsToJson(json, request->GetUri().GetAuthority(), (DateTime::Now() - defaultContext->attemptStartTime).count());
+ FillOptionalApiAttemptFieldsToJson(json, request.get(), outcome, metricsFromCore);
+ Aws::String compactData = json.View().WriteCompact();
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Send Attempt Metrics: \n" << json.View().WriteReadable());
+ m_udp.SendData(reinterpret_cast<const uint8_t*>(compactData.c_str()), static_cast<int>(compactData.size()));
+ }
+
+ Aws::UniquePtr<MonitoringInterface> DefaultMonitoringFactory::CreateMonitoringInstance() const
+ {
+ Aws::String clientId(DEFAULT_MONITORING_CLIENT_ID); // default to empty
+ Aws::String host(DEFAULT_MONITORING_HOST); // default to 127.0.0.1
+ unsigned short port = DEFAULT_MONITORING_PORT; // default to 31000
+ bool enable = DEFAULT_MONITORING_ENABLE; //default to false;
+
+ //check profile_config
+ Aws::String tmpEnable = Aws::Config::GetCachedConfigValue(DefaultMonitoring::DEFAULT_CSM_CONFIG_ENABLED);
+ Aws::String tmpClientId = Aws::Config::GetCachedConfigValue(DefaultMonitoring::DEFAULT_CSM_CONFIG_CLIENT_ID);
+ Aws::String tmpHost = Aws::Config::GetCachedConfigValue(DefaultMonitoring::DEFAULT_CSM_CONFIG_HOST);
+ Aws::String tmpPort = Aws::Config::GetCachedConfigValue(DefaultMonitoring::DEFAULT_CSM_CONFIG_PORT);
+
+ if (!tmpEnable.empty())
+ {
+ enable = StringUtils::CaselessCompare(tmpEnable.c_str(), "true") ? true : false;
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved csm_enabled from profile_config to be " << enable);
+ }
+ if (!tmpClientId.empty())
+ {
+ clientId = tmpClientId;
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved csm_client_id from profile_config to be " << clientId);
+ }
+
+ if (!tmpHost.empty())
+ {
+ host = tmpHost;
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved csm_host from profile_config to be " << host);
+ }
+
+ if (!tmpPort.empty())
+ {
+ port = static_cast<short>(StringUtils::ConvertToInt32(tmpPort.c_str()));
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved csm_port from profile_config to be " << port);
+ }
+
+ // check environment variables
+ tmpEnable = Aws::Environment::GetEnv(DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_ENABLED);
+ tmpClientId = Aws::Environment::GetEnv(DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_CLIENT_ID);
+ tmpHost = Aws::Environment::GetEnv(DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_HOST);
+ tmpPort = Aws::Environment::GetEnv(DefaultMonitoring::DEFAULT_CSM_ENVIRONMENT_VAR_PORT);
+ if (!tmpEnable.empty())
+ {
+ enable = StringUtils::CaselessCompare(tmpEnable.c_str(), "true") ? true : false;
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved AWS_CSM_ENABLED from Environment variable to be " << enable);
+ }
+ if (!tmpClientId.empty())
+ {
+ clientId = tmpClientId;
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved AWS_CSM_CLIENT_ID from Environment variable to be " << clientId);
+
+ }
+ if (!tmpHost.empty())
+ {
+ host = tmpHost;
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved AWS_CSM_HOST from Environment variable to be " << host);
+ }
+ if (!tmpPort.empty())
+ {
+ port = static_cast<unsigned short>(StringUtils::ConvertToInt32(tmpPort.c_str()));
+ AWS_LOGSTREAM_DEBUG(DEFAULT_MONITORING_ALLOC_TAG, "Resolved AWS_CSM_PORT from Environment variable to be " << port);
+ }
+
+ if (!enable)
+ {
+ return nullptr;
+ }
+ return Aws::MakeUnique<DefaultMonitoring>(DEFAULT_MONITORING_ALLOC_TAG, clientId, host, port);
+ }
+
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/HttpClientMetrics.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/HttpClientMetrics.cpp
new file mode 100644
index 00000000000..f3ef5828671
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/HttpClientMetrics.cpp
@@ -0,0 +1,71 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/monitoring/HttpClientMetrics.h>
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ static const char HTTP_CLIENT_METRICS_DESTINATION_IP[] = "DestinationIp";
+ static const char HTTP_CLIENT_METRICS_ACQUIRE_CONNECTION_LATENCY[] = "AcquireConnectionLatency";
+ static const char HTTP_CLIENT_METRICS_CONNECTION_REUSED[] = "ConnectionReused";
+ static const char HTTP_CLIENT_METRICS_CONNECTION_LATENCY[] = "ConnectLatency";
+ static const char HTTP_CLIENT_METRICS_REQUEST_LATENCY[] = "RequestLatency";
+ static const char HTTP_CLIENT_METRICS_DNS_LATENCY[] = "DnsLatency";
+ static const char HTTP_CLIENT_METRICS_TCP_LATENCY[] = "TcpLatency";
+ static const char HTTP_CLIENT_METRICS_SSL_LATENCY[] = "SslLatency";
+ static const char HTTP_CLIENT_METRICS_UNKNOWN[] = "Unknown";
+
+ using namespace Aws::Utils;
+ HttpClientMetricsType GetHttpClientMetricTypeByName(const Aws::String& name)
+ {
+ static std::map<int, HttpClientMetricsType> metricsNameHashToType =
+ {
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_DESTINATION_IP), HttpClientMetricsType::DestinationIp),
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_ACQUIRE_CONNECTION_LATENCY), HttpClientMetricsType::AcquireConnectionLatency),
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_CONNECTION_REUSED), HttpClientMetricsType::ConnectionReused),
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_CONNECTION_LATENCY), HttpClientMetricsType::ConnectLatency),
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_REQUEST_LATENCY), HttpClientMetricsType::RequestLatency),
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_DNS_LATENCY), HttpClientMetricsType::DnsLatency),
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_TCP_LATENCY), HttpClientMetricsType::TcpLatency),
+ std::pair<int, HttpClientMetricsType>(HashingUtils::HashString(HTTP_CLIENT_METRICS_SSL_LATENCY), HttpClientMetricsType::SslLatency)
+ };
+
+ int nameHash = HashingUtils::HashString(name.c_str());
+ auto it = metricsNameHashToType.find(nameHash);
+ if (it == metricsNameHashToType.end())
+ {
+ return HttpClientMetricsType::Unknown;
+ }
+ return it->second;
+ }
+
+ Aws::String GetHttpClientMetricNameByType(HttpClientMetricsType type)
+ {
+ static std::map<int, std::string> metricsTypeToName =
+ {
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::DestinationIp), HTTP_CLIENT_METRICS_DESTINATION_IP),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::AcquireConnectionLatency), HTTP_CLIENT_METRICS_ACQUIRE_CONNECTION_LATENCY),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::ConnectionReused), HTTP_CLIENT_METRICS_CONNECTION_REUSED),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::ConnectLatency), HTTP_CLIENT_METRICS_CONNECTION_LATENCY),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::RequestLatency), HTTP_CLIENT_METRICS_REQUEST_LATENCY),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::DnsLatency), HTTP_CLIENT_METRICS_DNS_LATENCY),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::TcpLatency), HTTP_CLIENT_METRICS_TCP_LATENCY),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::SslLatency), HTTP_CLIENT_METRICS_SSL_LATENCY),
+ std::pair<int, std::string>(static_cast<int>(HttpClientMetricsType::Unknown), HTTP_CLIENT_METRICS_UNKNOWN)
+ };
+
+ auto it = metricsTypeToName.find(static_cast<int>(type));
+ if (it == metricsTypeToName.end())
+ {
+ return HTTP_CLIENT_METRICS_UNKNOWN;
+ }
+ return Aws::String(it->second.c_str());
+ }
+
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/MonitoringManager.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/MonitoringManager.cpp
new file mode 100644
index 00000000000..7a8d3adb41c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/monitoring/MonitoringManager.cpp
@@ -0,0 +1,129 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/monitoring/MonitoringInterface.h>
+#include <aws/core/monitoring/MonitoringFactory.h>
+#include <aws/core/monitoring/MonitoringManager.h>
+#include <aws/core/monitoring/DefaultMonitoring.h>
+#include <aws/core/Core_EXPORTS.h>
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4592)
+#endif
+
+namespace Aws
+{
+ namespace Monitoring
+ {
+ typedef Aws::Vector<Aws::UniquePtr<MonitoringInterface>> Monitors;
+
+ const char MonitoringTag[] = "MonitoringAllocTag";
+
+ /**
+ * Global factory to create global metrics instance.
+ */
+ static Aws::UniquePtr<Monitors> s_monitors;
+
+ Aws::Vector<void*> OnRequestStarted(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request)
+ {
+ assert(s_monitors);
+ Aws::Vector<void*> contexts;
+ contexts.reserve(s_monitors->size());
+ for (const auto& interface: *s_monitors)
+ {
+ contexts.emplace_back(interface->OnRequestStarted(serviceName, requestName, request));
+ }
+ return contexts;
+ }
+
+ void OnRequestSucceeded(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, const Aws::Vector<void*>& contexts)
+ {
+ assert(s_monitors);
+ assert(contexts.size() == s_monitors->size());
+ size_t index = 0;
+ for (const auto& interface: *s_monitors)
+ {
+ interface->OnRequestSucceeded(serviceName, requestName, request, outcome, metricsFromCore, contexts[index++]);
+ }
+ }
+
+ void OnRequestFailed(const Aws::String& serviceName, const Aws::String& requestName, const std::shared_ptr<const Aws::Http::HttpRequest>& request,
+ const Aws::Client::HttpResponseOutcome& outcome, const CoreMetricsCollection& metricsFromCore, const Aws::Vector<void*>& contexts)
+ {
+ assert(s_monitors);
+ assert(contexts.size() == s_monitors->size());
+ size_t index = 0;
+ for (const auto& interface: *s_monitors)
+ {
+ interface->OnRequestFailed(serviceName, requestName, request, outcome, metricsFromCore, contexts[index++]);
+ }
+ }
+
+ void OnRequestRetry(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, const Aws::Vector<void*>& contexts)
+ {
+ assert(s_monitors);
+ assert(contexts.size() == s_monitors->size());
+ size_t index = 0;
+ for (const auto& interface: *s_monitors)
+ {
+ interface->OnRequestRetry(serviceName, requestName, request, contexts[index++]);
+ }
+ }
+
+ void OnFinish(const Aws::String& serviceName, const Aws::String& requestName,
+ const std::shared_ptr<const Aws::Http::HttpRequest>& request, const Aws::Vector<void*>& contexts)
+ {
+ assert(s_monitors);
+ assert(contexts.size() == s_monitors->size());
+ size_t index = 0;
+ for (const auto& interface: *s_monitors)
+ {
+ interface->OnFinish(serviceName, requestName, request, contexts[index++]);
+ }
+ }
+
+ void InitMonitoring(const std::vector<MonitoringFactoryCreateFunction>& monitoringFactoryCreateFunctions)
+ {
+ if (s_monitors)
+ {
+ return;
+ }
+ s_monitors = Aws::MakeUnique<Monitors>(MonitoringTag);
+ for (const auto& function: monitoringFactoryCreateFunctions)
+ {
+ auto factory = function();
+ if (factory)
+ {
+ auto instance = factory->CreateMonitoringInstance();
+ if (instance)
+ {
+ s_monitors->emplace_back(std::move(instance));
+ }
+ }
+ }
+
+ auto defaultMonitoringFactory = Aws::MakeShared<DefaultMonitoringFactory>(MonitoringTag);
+ auto instance = defaultMonitoringFactory->CreateMonitoringInstance();
+ if (instance)
+ {
+ s_monitors->emplace_back(std::move(instance));
+ }
+ }
+
+ void CleanupMonitoring()
+ {
+ if (!s_monitors)
+ {
+ return;
+ }
+
+ s_monitors = nullptr;
+ }
+ } // namespace Monitoring
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/Net.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/Net.cpp
new file mode 100644
index 00000000000..244df21945b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/Net.cpp
@@ -0,0 +1,28 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/net/Net.h>
+
+namespace Aws
+{
+ namespace Net
+ {
+ // For Posix system, currently we don't need to do anything for network stack initialization.
+ // But we need to do initialization for WinSock on Windows and call them in Aws.cpp. So these functions
+ // also exist for Posix systems.
+ bool IsNetworkInitiated()
+ {
+ return true;
+ }
+
+ void InitNetwork()
+ {
+ }
+
+ void CleanupNetwork()
+ {
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/SimpleUDP.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/SimpleUDP.cpp
new file mode 100644
index 00000000000..d9e0c385fda
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/net/linux-shared/SimpleUDP.cpp
@@ -0,0 +1,285 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <cassert>
+#include <string.h>
+#include <aws/core/net/SimpleUDP.h>
+#include <aws/core/utils/logging/LogMacros.h>
+
+namespace Aws
+{
+ namespace Net
+ {
+ static const char ALLOC_TAG[] = "SimpleUDP";
+ static const char IPV4_LOOP_BACK_ADDRESS[] = "127.0.0.1";
+ static const char IPV6_LOOP_BACK_ADDRESS[] = "::1";
+
+ static inline bool IsValidIPAddress(const char* ip, int addressFamily/*AF_INET or AF_INET6*/)
+ {
+ char buffer[128];
+ return inet_pton(addressFamily, ip, (void*)buffer) == 1 ?true :false;
+ }
+
+ static bool GetASockAddrFromHostName(const char* hostName, void* sockAddrBuffer, size_t& addrLength, int& addressFamily)
+ {
+ struct addrinfo hints, *res;
+
+ memset(&hints, 0, sizeof(hints));
+
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_DGRAM;
+ if (getaddrinfo(hostName, nullptr, &hints, &res))
+ {
+ return false;
+ }
+
+ memcpy(sockAddrBuffer, res->ai_addr, res->ai_addrlen);
+ addrLength = res->ai_addrlen;
+ addressFamily = res->ai_family;
+ freeaddrinfo(res);
+ return true;
+ }
+
+ static sockaddr_in BuildAddrInfoIPV4(const char* hostIP, short port)
+ {
+#if (__GNUC__ == 4) && !defined(__clang__)
+ AWS_SUPPRESS_WARNING("-Wmissing-field-initializers",
+ sockaddr_in addrinfo {};
+ );
+#else
+ sockaddr_in addrinfo {};
+#endif
+ addrinfo.sin_family = AF_INET;
+ addrinfo.sin_port = htons(port);
+ inet_pton(AF_INET, hostIP, &addrinfo.sin_addr);
+ return addrinfo;
+ }
+
+ static sockaddr_in6 BuildAddrInfoIPV6(const char* hostIP, short port)
+ {
+#if (__GNUC__ == 4) && !defined(__clang__)
+ AWS_SUPPRESS_WARNING("-Wmissing-field-initializers",
+ sockaddr_in6 addrinfo {};
+ );
+#else
+ sockaddr_in6 addrinfo {};
+#endif
+ addrinfo.sin6_family = AF_INET6;
+ addrinfo.sin6_port = htons(port);
+ inet_pton(AF_INET6, hostIP, &addrinfo.sin6_addr);
+ return addrinfo;
+ }
+
+ SimpleUDP::SimpleUDP(int addressFamily, size_t sendBufSize, size_t receiveBufSize, bool nonBlocking):
+ m_addressFamily(addressFamily), m_connected(false), m_socket(-1), m_port(0)
+ {
+ CreateSocket(addressFamily, sendBufSize, receiveBufSize, nonBlocking);
+ }
+
+ SimpleUDP::SimpleUDP(bool IPV4, size_t sendBufSize, size_t receiveBufSize, bool nonBlocking) :
+ m_addressFamily(IPV4 ? AF_INET : AF_INET6), m_connected(false), m_socket(-1), m_port(0)
+ {
+ CreateSocket(m_addressFamily, sendBufSize, receiveBufSize, nonBlocking);
+ }
+
+ SimpleUDP::SimpleUDP(const char* host, unsigned short port, size_t sendBufSize, size_t receiveBufSize, bool nonBlocking) :
+ m_addressFamily(AF_INET), m_connected(false), m_socket(-1), m_port(port)
+ {
+ if (IsValidIPAddress(host, AF_INET))
+ {
+ m_addressFamily = AF_INET;
+ m_hostIP = Aws::String(host);
+ }
+ else if (IsValidIPAddress(host, AF_INET6))
+ {
+ m_addressFamily = AF_INET6;
+ m_hostIP = Aws::String(host);
+ }
+ else
+ {
+ char sockAddrBuffer[100];
+ char hostBuffer[100];
+ size_t addrLength = 0;
+ if (GetASockAddrFromHostName(host, (void*)sockAddrBuffer, addrLength, m_addressFamily))
+ {
+ if (m_addressFamily == AF_INET)
+ {
+ struct sockaddr_in* sockaddr = reinterpret_cast<struct sockaddr_in*>(sockAddrBuffer);
+ inet_ntop(m_addressFamily, &(sockaddr->sin_addr), hostBuffer, sizeof(hostBuffer));
+ }
+ else
+ {
+ struct sockaddr_in6* sockaddr = reinterpret_cast<struct sockaddr_in6*>(sockAddrBuffer);
+ inet_ntop(m_addressFamily, &(sockaddr->sin6_addr), hostBuffer, sizeof(hostBuffer));
+ }
+ m_hostIP = Aws::String(hostBuffer);
+ }
+ else
+ {
+ AWS_LOGSTREAM_ERROR(ALLOC_TAG, "Can't retrieve a valid ip address based on provided host: " << host);
+ }
+ }
+ CreateSocket(m_addressFamily, sendBufSize, receiveBufSize, nonBlocking);
+ }
+
+ SimpleUDP::~SimpleUDP()
+ {
+ close(GetUnderlyingSocket());
+ }
+
+ void SimpleUDP::CreateSocket(int addressFamily, size_t sendBufSize, size_t receiveBufSize, bool nonBlocking)
+ {
+ int sock = socket(addressFamily, SOCK_DGRAM, IPPROTO_UDP);
+ assert(sock != -1);
+
+ // Try to set sock to nonblocking mode.
+ if (nonBlocking)
+ {
+ int flags = fcntl(sock, F_GETFL, 0);
+ if (flags != -1)
+ {
+ flags |= O_NONBLOCK;
+ fcntl(sock, F_SETFL, flags);
+ }
+ }
+
+ // if sendBufSize is not zero, try to set send buffer size
+ if (sendBufSize)
+ {
+ int ret = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &sendBufSize, sizeof(sendBufSize));
+ if (ret)
+ {
+ AWS_LOGSTREAM_WARN(ALLOC_TAG, "Failed to set UDP send buffer size to " << sendBufSize << " for socket " << sock << " error message: " << strerror(errno));
+ }
+ assert(ret == 0);
+ }
+
+ // if receiveBufSize is not zero, try to set receive buffer size
+ if (receiveBufSize)
+ {
+ int ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &receiveBufSize, sizeof(receiveBufSize));
+ if (ret)
+ {
+ AWS_LOGSTREAM_WARN(ALLOC_TAG, "Failed to set UDP receive buffer size to " << receiveBufSize << " for socket " << sock << " error message: " << strerror(errno));
+ }
+ assert(ret == 0);
+ }
+
+ SetUnderlyingSocket(sock);
+ }
+
+ int SimpleUDP::Connect(const sockaddr* address, size_t addressLength)
+ {
+ int ret = connect(GetUnderlyingSocket(), address, static_cast<socklen_t>(addressLength));
+ m_connected = ret ? false : true;
+ return ret;
+ }
+
+ int SimpleUDP::ConnectToHost(const char* hostIP, unsigned short port) const
+ {
+ int ret;
+ if (m_addressFamily == AF_INET6)
+ {
+ sockaddr_in6 addrinfo = BuildAddrInfoIPV6(hostIP, port);
+ ret = connect(GetUnderlyingSocket(), reinterpret_cast<sockaddr*>(&addrinfo), sizeof(sockaddr_in6));
+ }
+ else
+ {
+ sockaddr_in addrinfo = BuildAddrInfoIPV4(hostIP, port);
+ ret = connect(GetUnderlyingSocket(), reinterpret_cast<sockaddr*>(&addrinfo), sizeof(sockaddr_in));
+ }
+ m_connected = ret ? false : true;
+ return ret;
+ }
+
+ int SimpleUDP::ConnectToLocalHost(unsigned short port) const
+ {
+ if (m_addressFamily == AF_INET6)
+ {
+ return ConnectToHost(IPV6_LOOP_BACK_ADDRESS, port);
+ }
+ else
+ {
+ return ConnectToHost(IPV4_LOOP_BACK_ADDRESS, port);
+ }
+ }
+
+ int SimpleUDP::Bind(const sockaddr* address, size_t addressLength) const
+ {
+ return bind(GetUnderlyingSocket(), address, static_cast<socklen_t>(addressLength));
+ }
+
+ int SimpleUDP::BindToLocalHost(unsigned short port) const
+ {
+ if (m_addressFamily == AF_INET6)
+ {
+ sockaddr_in6 addrinfo = BuildAddrInfoIPV6(IPV6_LOOP_BACK_ADDRESS, port);
+ return bind(GetUnderlyingSocket(), reinterpret_cast<sockaddr*>(&addrinfo), sizeof(sockaddr_in6));
+ }
+ else
+ {
+ sockaddr_in addrinfo = BuildAddrInfoIPV4(IPV4_LOOP_BACK_ADDRESS, port);
+ return bind(GetUnderlyingSocket(), reinterpret_cast<sockaddr*>(&addrinfo), sizeof(sockaddr_in));
+ }
+ }
+
+ int SimpleUDP::SendData(const uint8_t* data, size_t dataLen) const
+ {
+ if (!m_connected)
+ {
+ ConnectToHost(m_hostIP.c_str(), m_port);
+ }
+ return send(GetUnderlyingSocket(), data, dataLen, 0);
+ }
+
+ int SimpleUDP::SendDataTo(const sockaddr* address, size_t addressLength, const uint8_t* data, size_t dataLen) const
+ {
+ if (m_connected)
+ {
+ return send(GetUnderlyingSocket(), data, dataLen, 0);
+ }
+ else
+ {
+ return sendto(GetUnderlyingSocket(), data, dataLen, 0, address, static_cast<socklen_t>(addressLength));
+ }
+ }
+
+ int SimpleUDP::SendDataToLocalHost(const uint8_t* data, size_t dataLen, unsigned short port) const
+ {
+ if (m_connected)
+ {
+ return send(GetUnderlyingSocket(), data, dataLen, 0);
+ }
+ else if (m_addressFamily == AF_INET6)
+ {
+ sockaddr_in6 addrinfo = BuildAddrInfoIPV6(IPV6_LOOP_BACK_ADDRESS, port);
+ return sendto(GetUnderlyingSocket(), data, dataLen, 0, reinterpret_cast<sockaddr*>(&addrinfo), sizeof(sockaddr_in6));
+ }
+ else
+ {
+ sockaddr_in addrinfo = BuildAddrInfoIPV4(IPV4_LOOP_BACK_ADDRESS, port);
+ return sendto(GetUnderlyingSocket(), data, dataLen, 0, reinterpret_cast<sockaddr*>(&addrinfo), sizeof(sockaddr_in));
+ }
+ }
+
+ int SimpleUDP::ReceiveData(uint8_t* buffer, size_t bufferLen) const
+ {
+ return recv(GetUnderlyingSocket(), buffer, static_cast<int>(bufferLen), 0);
+ }
+
+
+ int SimpleUDP::ReceiveDataFrom(sockaddr* address, size_t* addressLength, uint8_t* buffer, size_t bufferLen) const
+ {
+ return recvfrom(GetUnderlyingSocket(), buffer, static_cast<int>(bufferLen), 0, address, reinterpret_cast<socklen_t*>(addressLength));
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Environment.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Environment.cpp
new file mode 100644
index 00000000000..ee627340bb5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Environment.cpp
@@ -0,0 +1,23 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/platform/Environment.h>
+
+//#include <aws/core/utils/memory/stl/AWSStringStream.h>
+//#include <sys/utsname.h>
+
+namespace Aws
+{
+namespace Environment
+{
+
+Aws::String GetEnv(const char* variableName)
+{
+ auto variableValue = std::getenv(variableName);
+ return Aws::String( variableValue ? variableValue : "" );
+}
+
+} // namespace Environment
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/FileSystem.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/FileSystem.cpp
new file mode 100644
index 00000000000..c1ad818911d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/FileSystem.cpp
@@ -0,0 +1,292 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/platform/FileSystem.h>
+
+#include <aws/core/platform/Environment.h>
+#include <aws/core/platform/Platform.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/UUID.h>
+
+#include <unistd.h>
+#include <pwd.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <errno.h>
+#include <climits>
+
+#include <cassert>
+#ifdef __APPLE__
+#include <mach-o/dyld.h>
+#endif
+namespace Aws
+{
+namespace FileSystem
+{
+
+static const char* FILE_SYSTEM_UTILS_LOG_TAG = "FileSystemUtils";
+
+ class PosixDirectory : public Directory
+ {
+ public:
+ PosixDirectory(const Aws::String& path, const Aws::String& relativePath) : Directory(path, relativePath), m_dir(nullptr)
+ {
+ m_dir = opendir(m_directoryEntry.path.c_str());
+ AWS_LOGSTREAM_TRACE(FILE_SYSTEM_UTILS_LOG_TAG, "Entering directory " << m_directoryEntry.path);
+
+ if(m_dir)
+ {
+ AWS_LOGSTREAM_TRACE(FILE_SYSTEM_UTILS_LOG_TAG, "Successfully opened directory " << m_directoryEntry.path);
+ m_directoryEntry.fileType = FileType::Directory;
+ }
+ else
+ {
+ AWS_LOGSTREAM_ERROR(FILE_SYSTEM_UTILS_LOG_TAG, "Could not load directory " << m_directoryEntry.path << " with error code " << errno);
+ }
+ }
+
+ ~PosixDirectory()
+ {
+ if (m_dir)
+ {
+ closedir(m_dir);
+ }
+ }
+
+ operator bool() const override { return m_directoryEntry.operator bool() && m_dir != nullptr; }
+
+ DirectoryEntry Next() override
+ {
+ assert(m_dir);
+ DirectoryEntry entry;
+
+ dirent* dirEntry;
+ bool invalidEntry(true);
+
+ while(invalidEntry)
+ {
+ if ((dirEntry = readdir(m_dir)))
+ {
+ Aws::String entryName = dirEntry->d_name;
+ if(entryName != ".." && entryName != ".")
+ {
+ entry = ParseFileInfo(dirEntry, true);
+ invalidEntry = false;
+ }
+ else
+ {
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "skipping . or ..");
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ return entry;
+ }
+
+ private:
+ DirectoryEntry ParseFileInfo(dirent* dirEnt, bool computePath)
+ {
+ DirectoryEntry entry;
+
+ if(computePath)
+ {
+ Aws::StringStream ss;
+ ss << m_directoryEntry.path << PATH_DELIM << dirEnt->d_name;
+ entry.path = ss.str();
+
+ ss.str("");
+ if(m_directoryEntry.relativePath.empty())
+ {
+ ss << dirEnt->d_name;
+ }
+ else
+ {
+ ss << m_directoryEntry.relativePath << PATH_DELIM << dirEnt->d_name;
+ }
+ entry.relativePath = ss.str();
+ }
+ else
+ {
+ entry.path = m_directoryEntry.path;
+ entry.relativePath = m_directoryEntry.relativePath;
+ }
+
+ AWS_LOGSTREAM_TRACE(FILE_SYSTEM_UTILS_LOG_TAG, "Calling stat on path " << entry.path);
+
+ struct stat dirInfo;
+ if(!lstat(entry.path.c_str(), &dirInfo))
+ {
+ if(S_ISDIR(dirInfo.st_mode))
+ {
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "type directory detected");
+ entry.fileType = FileType::Directory;
+ }
+ else if(S_ISLNK(dirInfo.st_mode))
+ {
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "type symlink detected");
+ entry.fileType = FileType::Symlink;
+ }
+ else if(S_ISREG(dirInfo.st_mode))
+ {
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "type file detected");
+ entry.fileType = FileType::File;
+ }
+
+ entry.fileSize = static_cast<int64_t>(dirInfo.st_size);
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "file size detected as " << entry.fileSize);
+ }
+ else
+ {
+ AWS_LOGSTREAM_ERROR(FILE_SYSTEM_UTILS_LOG_TAG, "Failed to stat file path " << entry.path << " with error code " << errno);
+ }
+
+ return entry;
+ }
+
+ DIR* m_dir;
+ };
+
+Aws::String GetHomeDirectory()
+{
+ static const char* HOME_DIR_ENV_VAR = "HOME";
+
+ AWS_LOGSTREAM_TRACE(FILE_SYSTEM_UTILS_LOG_TAG, "Checking " << HOME_DIR_ENV_VAR << " for the home directory.");
+
+ Aws::String homeDir = Aws::Environment::GetEnv(HOME_DIR_ENV_VAR);
+
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "Environment value for variable " << HOME_DIR_ENV_VAR << " is " << homeDir);
+
+ if(homeDir.empty())
+ {
+ AWS_LOGSTREAM_WARN(FILE_SYSTEM_UTILS_LOG_TAG, "Home dir not stored in environment, trying to fetch manually from the OS.");
+
+ passwd pw;
+ passwd *p_pw = nullptr;
+ char pw_buffer[4096];
+ getpwuid_r(getuid(), &pw, pw_buffer, sizeof(pw_buffer), &p_pw);
+ if(p_pw && p_pw->pw_dir)
+ {
+ homeDir = p_pw->pw_dir;
+ }
+
+ AWS_LOGSTREAM_INFO(FILE_SYSTEM_UTILS_LOG_TAG, "Pulled " << homeDir << " as home directory from the OS.");
+ }
+
+ Aws::String retVal = homeDir.size() > 0 ? Aws::Utils::StringUtils::Trim(homeDir.c_str()) : "";
+ if(!retVal.empty())
+ {
+ if(retVal.at(retVal.length() - 1) != PATH_DELIM)
+ {
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "Home directory is missing the final " << PATH_DELIM << " appending one to normalize");
+ retVal += PATH_DELIM;
+ }
+ }
+
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "Final Home Directory is " << retVal);
+
+ return retVal;
+}
+
+bool CreateDirectoryIfNotExists(const char* path, bool createParentDirs)
+{
+ Aws::String directoryName = path;
+ AWS_LOGSTREAM_INFO(FILE_SYSTEM_UTILS_LOG_TAG, "Creating directory " << directoryName);
+
+ for (size_t i = (createParentDirs ? 0 : directoryName.size() - 1); i < directoryName.size(); i++)
+ {
+ // Create the parent directory if we find a delimiter and the delimiter is not the first char, or if this is the target directory.
+ if (i != 0 && (directoryName[i] == FileSystem::PATH_DELIM || i == directoryName.size() - 1))
+ {
+ if (directoryName[i] == FileSystem::PATH_DELIM)
+ {
+ directoryName[i] = '\0';
+ }
+ int errorCode = mkdir(directoryName.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+ if (errorCode != 0 && errno != EEXIST)
+ {
+ AWS_LOGSTREAM_ERROR(FILE_SYSTEM_UTILS_LOG_TAG, "Creation of directory " << directoryName.c_str() << " returned code: " << errno);
+ return false;
+ }
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "Creation of directory " << directoryName.c_str() << " returned code: " << errno);
+ directoryName[i] = FileSystem::PATH_DELIM;
+ }
+ }
+ return true;
+}
+
+bool RemoveFileIfExists(const char* path)
+{
+ AWS_LOGSTREAM_INFO(FILE_SYSTEM_UTILS_LOG_TAG, "Deleting file: " << path);
+
+ int errorCode = unlink(path);
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "Deletion of file: " << path << " Returned error code: " << errno);
+ return errorCode == 0 || errno == ENOENT;
+}
+
+bool RemoveDirectoryIfExists(const char* path)
+{
+ AWS_LOGSTREAM_INFO(FILE_SYSTEM_UTILS_LOG_TAG, "Deleting directory: " << path);
+ int errorCode = rmdir(path);
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "Deletion of directory: " << path << " Returned error code: " << errno);
+ return errorCode == 0 || errno == ENOTDIR || errno == ENOENT;
+}
+
+bool RelocateFileOrDirectory(const char* from, const char* to)
+{
+ AWS_LOGSTREAM_INFO(FILE_SYSTEM_UTILS_LOG_TAG, "Moving file at " << from << " to " << to);
+
+ int errorCode = std::rename(from, to);
+
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "The moving operation of file at " << from << " to " << to << " Returned error code of " << errno);
+ return errorCode == 0;
+}
+
+Aws::String CreateTempFilePath()
+{
+ Aws::StringStream ss;
+ auto dt = Aws::Utils::DateTime::Now();
+
+ ss << dt.ToGmtString("%Y%m%dT%H%M%S") << dt.Millis() << Aws::String(Aws::Utils::UUID::RandomUUID());
+ Aws::String tempFile(ss.str());
+
+ AWS_LOGSTREAM_DEBUG(FILE_SYSTEM_UTILS_LOG_TAG, "CreateTempFilePath generated: " << tempFile);
+
+ return tempFile;
+}
+
+Aws::String GetExecutableDirectory()
+{
+ char dest[PATH_MAX];
+ memset(dest, 0, PATH_MAX);
+#ifdef __APPLE__
+ uint32_t destSize = PATH_MAX;
+ if (_NSGetExecutablePath(dest, &destSize) == 0)
+#else
+ size_t destSize = PATH_MAX;
+ if (readlink("/proc/self/exe", dest, destSize))
+#endif
+ {
+ Aws::String executablePath(dest);
+ auto lastSlash = executablePath.find_last_of('/');
+ if(lastSlash != std::string::npos)
+ {
+ return executablePath.substr(0, lastSlash);
+ }
+ }
+ return "./";
+}
+
+Aws::UniquePtr<Directory> OpenDirectory(const Aws::String& path, const Aws::String& relativePath)
+{
+ return Aws::MakeUnique<PosixDirectory>(FILE_SYSTEM_UTILS_LOG_TAG, path, relativePath);
+}
+
+} // namespace FileSystem
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/OSVersionInfo.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/OSVersionInfo.cpp
new file mode 100644
index 00000000000..040173a2e58
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/OSVersionInfo.cpp
@@ -0,0 +1,59 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/platform/OSVersionInfo.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/StringUtils.h>
+#include <sys/utsname.h>
+
+namespace Aws
+{
+namespace OSVersionInfo
+{
+
+Aws::String GetSysCommandOutput(const char* command)
+{
+ Aws::String outputStr;
+ FILE* outputStream;
+ const int maxBufferSize = 256;
+ char outputBuffer[maxBufferSize];
+
+ outputStream = popen(command, "r");
+
+ if (outputStream)
+ {
+ while (!feof(outputStream))
+ {
+ if (fgets(outputBuffer, maxBufferSize, outputStream) != nullptr)
+ {
+ outputStr.append(outputBuffer);
+ }
+ }
+
+ pclose(outputStream);
+
+ return Aws::Utils::StringUtils::Trim(outputStr.c_str());
+ }
+
+ return {};
+}
+
+
+Aws::String ComputeOSVersionString()
+{
+ utsname name;
+ int32_t success = uname(&name);
+ if(success >= 0)
+ {
+ Aws::StringStream ss;
+ ss << name.sysname << "/" << name.release << " " << name.machine;
+ return ss.str();
+ }
+
+ return "non-windows/unknown";
+}
+
+} // namespace OSVersionInfo
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Security.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Security.cpp
new file mode 100644
index 00000000000..286de1a9485
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Security.cpp
@@ -0,0 +1,26 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/platform/Security.h>
+
+#include <string.h>
+
+namespace Aws
+{
+namespace Security
+{
+
+void SecureMemClear(unsigned char *data, size_t length)
+{
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
+ memset_s(data, length, 0, length);
+#else
+ memset(data, 0, length);
+ asm volatile("" : "+m" (data));
+#endif
+}
+
+} // namespace Security
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Time.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Time.cpp
new file mode 100644
index 00000000000..7a0d3d1c0ae
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/platform/linux-shared/Time.cpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/platform/Time.h>
+
+#include <time.h>
+
+namespace Aws
+{
+namespace Time
+{
+
+time_t TimeGM(struct tm* const t)
+{
+ return timegm(t);
+}
+
+void LocalTime(tm* t, std::time_t time)
+{
+ localtime_r(&time, t);
+}
+
+void GMTime(tm* t, std::time_t time)
+{
+ gmtime_r(&time, t);
+}
+
+} // namespace Time
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/ARN.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/ARN.cpp
new file mode 100644
index 00000000000..dac358c09de
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/ARN.cpp
@@ -0,0 +1,46 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/ARN.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/logging/LogMacros.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ ARN::ARN(const Aws::String& arnString)
+ {
+ m_valid = false;
+
+ // An ARN can be identified as any string starting with arn: with 6 defined segments each separated by a :
+ const auto result = StringUtils::Split(arnString, ':', StringUtils::SplitOptions::INCLUDE_EMPTY_ENTRIES);
+
+ if (result.size() < 6)
+ {
+ return;
+ }
+
+ if (result[0] != "arn")
+ {
+ return;
+ }
+
+ m_arnString = arnString;
+ m_partition = result[1];
+ m_service = result[2];
+ m_region = result[3];
+ m_accountId = result[4];
+ m_resource = result[5];
+
+ for (size_t i = 6; i < result.size(); i++)
+ {
+ m_resource += ":" + result[i];
+ }
+
+ m_valid = true;
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Array.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Array.cpp
new file mode 100644
index 00000000000..43e78634218
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Array.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/Array.h>
+
+#include <aws/core/platform/Security.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ Array<CryptoBuffer> CryptoBuffer::Slice(size_t sizeOfSlice) const
+ {
+ assert(sizeOfSlice <= GetLength());
+
+ size_t numberOfSlices = (GetLength() + sizeOfSlice - 1) / sizeOfSlice;
+ size_t currentSliceIndex = 0;
+ Array<CryptoBuffer> slices(numberOfSlices);
+
+ for (size_t i = 0; i < numberOfSlices - 1; ++i)
+ {
+ CryptoBuffer newArray(sizeOfSlice);
+ for (size_t cpyIdx = 0; cpyIdx < newArray.GetLength(); ++cpyIdx)
+ {
+ newArray[cpyIdx] = GetItem(cpyIdx + currentSliceIndex);
+ }
+ currentSliceIndex += sizeOfSlice;
+ slices[i] = std::move(newArray);
+ }
+
+ CryptoBuffer lastArray(GetLength() % sizeOfSlice == 0 ? sizeOfSlice : GetLength() % sizeOfSlice );
+ for (size_t cpyIdx = 0; cpyIdx < lastArray.GetLength(); ++cpyIdx)
+ {
+ lastArray[cpyIdx] = GetItem(cpyIdx + currentSliceIndex);
+ }
+ slices[slices.GetLength() - 1] = std::move(lastArray);
+
+ return slices;
+ }
+
+ CryptoBuffer& CryptoBuffer::operator^(const CryptoBuffer& operand)
+ {
+ size_t smallestSize = std::min<size_t>(GetLength(), operand.GetLength());
+ for (size_t i = 0; i < smallestSize; ++i)
+ {
+ (*this)[i] ^= operand[i];
+ }
+
+ return *this;
+ }
+
+ /**
+ * Zero out the array securely
+ */
+ void CryptoBuffer::Zero()
+ {
+ if (GetUnderlyingData())
+ {
+ Aws::Security::SecureMemClear(GetUnderlyingData(), GetLength());
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DNS.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DNS.cpp
new file mode 100644
index 00000000000..ce588150e2f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DNS.cpp
@@ -0,0 +1,55 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/DNS.h>
+#include <aws/core/utils/StringUtils.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ bool IsValidDnsLabel(const Aws::String& label)
+ {
+ // Valid DNS hostnames are composed of valid DNS labels separated by a period.
+ // Valid DNS labels are characterized by the following:
+ // 1- Only contains alphanumeric characters and/or dashes
+ // 2- Cannot start or end with a dash
+ // 3- Have a maximum length of 63 characters (the entirety of the domain name should be less than 255 bytes)
+
+ if (label.empty())
+ return false;
+
+ if (label.size() > 63)
+ return false;
+
+ if (!StringUtils::IsAlnum(label.front()))
+ return false; // '-' is not acceptable as the first character
+
+ if (!StringUtils::IsAlnum(label.back()))
+ return false; // '-' is not acceptable as the last character
+
+ for (size_t i = 1, e = label.size() - 1; i < e; ++i)
+ {
+ auto c = label[i];
+ if (c != '-' && !StringUtils::IsAlnum(c))
+ return false;
+ }
+
+ return true;
+ }
+
+ bool IsValidHost(const Aws::String& host)
+ {
+ // Valid DNS hostnames are composed of valid DNS labels separated by a period.
+ auto labels = StringUtils::Split(host, '.');
+ if (labels.empty())
+ {
+ return false;
+ }
+
+ return !std::any_of(labels.begin(), labels.end(), [](const Aws::String& label){ return !IsValidDnsLabel(label); });
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DateTimeCommon.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DateTimeCommon.cpp
new file mode 100644
index 00000000000..b690c90c2dd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/DateTimeCommon.cpp
@@ -0,0 +1,1502 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/DateTime.h>
+
+#include <aws/core/platform/Time.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <time.h>
+#include <cassert>
+#include <iostream>
+#include <cstring>
+
+static const char* CLASS_TAG = "DateTime";
+static const char* RFC822_DATE_FORMAT_STR_MINUS_Z = "%a, %d %b %Y %H:%M:%S";
+static const char* RFC822_DATE_FORMAT_STR_WITH_Z = "%a, %d %b %Y %H:%M:%S %Z";
+static const char* ISO_8601_LONG_DATE_FORMAT_STR = "%Y-%m-%dT%H:%M:%SZ";
+static const char* ISO_8601_LONG_BASIC_DATE_FORMAT_STR = "%Y%m%dT%H%M%SZ";
+
+using namespace Aws::Utils;
+
+
+std::tm CreateZeroedTm()
+{
+ std::tm timeStruct;
+ timeStruct.tm_hour = 0;
+ timeStruct.tm_isdst = -1;
+ timeStruct.tm_mday = 0;
+ timeStruct.tm_min = 0;
+ timeStruct.tm_mon = 0;
+ timeStruct.tm_sec = 0;
+ timeStruct.tm_wday = 0;
+ timeStruct.tm_yday = 0;
+ timeStruct.tm_year = 0;
+
+ return timeStruct;
+}
+
+//Get the 0-6 week day number from a string representing WeekDay. Case insensitive and will stop on abbreviation
+static int GetWeekDayNumberFromStr(const char* timeString, size_t startIndex, size_t stopIndex)
+{
+ if(stopIndex - startIndex < 3)
+ {
+ return -1;
+ }
+
+ size_t index = startIndex;
+
+ char c = timeString[index];
+ char next = 0;
+
+ //it's ugly but this should compile down to EXACTLY 3 comparisons and no memory allocations
+ switch(c)
+ {
+ case 'S':
+ case 's':
+ next = timeString[++index];
+ switch(next)
+ {
+ case 'A':
+ case 'a':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'T':
+ case 't':
+ return 6;
+ default:
+ return -1;
+ }
+ case 'U':
+ case 'u':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'N':
+ case 'n':
+ return 0;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'T':
+ case 't':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'H':
+ case 'h':
+ next = timeString[++index];
+ switch(next)
+ {
+ case 'U':
+ case 'u':
+ return 4;
+ default:
+ return -1;
+ }
+ case 'U':
+ case 'u':
+ next = timeString[++index];
+ switch(next)
+ {
+ case 'E':
+ case 'e':
+ return 2;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'M':
+ case 'm':
+ next = timeString[++index];
+ switch(next)
+ {
+ case 'O':
+ case 'o':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'N':
+ case 'n':
+ return 1;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'W':
+ case 'w':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'E':
+ case 'e':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'D':
+ case 'd':
+ return 3;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'F':
+ case 'f':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'R':
+ case 'r':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'I':
+ case 'i':
+ return 5;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+}
+
+//Get the 0-11 monthy number from a string representing Month. Case insensitive and will stop on abbreviation
+static int GetMonthNumberFromStr(const char* timeString, size_t startIndex, size_t stopIndex)
+{
+ if (stopIndex - startIndex < 3)
+ {
+ return -1;
+ }
+
+ size_t index = startIndex;
+
+ char c = timeString[index];
+ char next = 0;
+
+ //it's ugly but this should compile down to EXACTLY 3 comparisons and no memory allocations
+ switch (c)
+ {
+ case 'M':
+ case 'm':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'A':
+ case 'a':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'Y':
+ case 'y':
+ return 4;
+ case 'R':
+ case 'r':
+ return 2;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'A':
+ case 'a':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'P':
+ case 'p':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'R':
+ case 'r':
+ return 3;
+ default:
+ return -1;
+ }
+ case 'U':
+ case 'u':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'G':
+ case 'g':
+ return 7;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'J':
+ case 'j':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'A':
+ case 'a':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'N':
+ case 'n':
+ return 0;
+ default:
+ return -1;
+ }
+ case 'U':
+ case 'u':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'N':
+ case 'n':
+ return 5;
+ case 'L':
+ case 'l':
+ return 6;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'F':
+ case 'f':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'E':
+ case 'e':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'B':
+ case 'b':
+ return 1;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'S':
+ case 's':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'E':
+ case 'e':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'P':
+ case 'p':
+ return 8;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'O':
+ case 'o':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'C':
+ case 'c':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'T':
+ case 't':
+ return 9;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'N':
+ case 'n':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'O':
+ case 'o':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'V':
+ case 'v':
+ return 10;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ case 'D':
+ case 'd':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'E':
+ case 'e':
+ next = timeString[++index];
+ switch (next)
+ {
+ case 'C':
+ case 'c':
+ return 11;
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+ default:
+ return -1;
+ }
+}
+// Ensure local classes with generic names have internal linkage
+namespace {
+
+class DateParser
+{
+public:
+ DateParser(const char* toParse) : m_error(false), m_toParse(toParse), m_utcAssumed(true)
+ {
+ m_parsedTimestamp = CreateZeroedTm();
+ memset(m_tz, 0, 7);
+ }
+
+ virtual ~DateParser() = default;
+
+ virtual void Parse() = 0;
+ bool WasParseSuccessful() const { return !m_error; }
+ std::tm& GetParsedTimestamp() { return m_parsedTimestamp; }
+ bool ShouldIAssumeThisIsUTC() const { return m_utcAssumed; }
+ const char* GetParsedTimezone() const { return m_tz; }
+
+protected:
+ bool m_error;
+ const char* m_toParse;
+ std::tm m_parsedTimestamp;
+ bool m_utcAssumed;
+ // The size should be at least one byte greater than the maximum possible size so that we could use the last char to indicate the end of the string.
+ char m_tz[7];
+};
+
+static const int MAX_LEN = 100;
+
+//Before you send me hate mail because I'm doing this manually, I encourage you to try using std::get_time on all platforms and getting
+//uniform results. Timezone information doesn't parse on Windows and it hardly even works on GCC 4.9.x. This is the only way to make sure
+//the standard is parsed correctly. strptime isn't available one Windows. This code gets hit pretty hard during http serialization/deserialization
+//as a result I'm going for no dynamic allocations and linear complexity
+class RFC822DateParser : public DateParser
+{
+public:
+ RFC822DateParser(const char* toParse) : DateParser(toParse), m_state(0)
+ {
+ }
+
+ /**
+ * Really simple state machine for the format %a, %d %b %Y %H:%M:%S %Z
+ */
+ void Parse() override
+ {
+ size_t len = strlen(m_toParse);
+
+ //DOS check
+ if (len > MAX_LEN)
+ {
+ AWS_LOGSTREAM_WARN(CLASS_TAG, "Incoming String to parse too long with length: " << len)
+ m_error = true;
+ return;
+ }
+
+ size_t index = 0;
+ size_t stateStartIndex = 0;
+ int finalState = 8;
+
+ while(m_state <= finalState && !m_error && index < len)
+ {
+ char c = m_toParse[index];
+
+ switch (m_state)
+ {
+ case 0:
+ if(c == ',')
+ {
+ int weekNumber = GetWeekDayNumberFromStr(m_toParse, stateStartIndex, index + 1);
+
+ if (weekNumber > -1)
+ {
+ m_state = 1;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_wday = weekNumber;
+ }
+ else
+ {
+ m_error = true;
+ }
+ }
+ else if(!isalpha(c))
+ {
+ m_error = true;
+ }
+ break;
+ case 1:
+ if (isspace(c))
+ {
+ m_state = 2;
+ stateStartIndex = index + 1;
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ case 2:
+ if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_mday = m_parsedTimestamp.tm_mday * 10 + (c - '0');
+ }
+ else if(isspace(c))
+ {
+ m_state = 3;
+ stateStartIndex = index + 1;
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ case 3:
+ if (isspace(c))
+ {
+ int monthNumber = GetMonthNumberFromStr(m_toParse, stateStartIndex, index + 1);
+
+ if (monthNumber > -1)
+ {
+ m_state = 4;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_mon = monthNumber;
+ }
+ else
+ {
+ m_error = true;
+ }
+ }
+ else if (!isalpha(c))
+ {
+ m_error = true;
+ }
+ break;
+ case 4:
+ if (isspace(c) && index - stateStartIndex == 4)
+ {
+ m_state = 5;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_year -= 1900;
+ }
+ else if (isspace(c) && index - stateStartIndex == 2)
+ {
+ m_state = 5;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_year += 2000 - 1900;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_year = m_parsedTimestamp.tm_year * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ case 5:
+ if(c == ':' && index - stateStartIndex == 2)
+ {
+ m_state = 6;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_hour = m_parsedTimestamp.tm_hour * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ case 6:
+ if (c == ':' && index - stateStartIndex == 2)
+ {
+ m_state = 7;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_min = m_parsedTimestamp.tm_min * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ case 7:
+ if (isspace(c) && index - stateStartIndex == 2)
+ {
+ m_state = 8;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_sec = m_parsedTimestamp.tm_sec * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ case 8:
+ if ((isalnum(c) || c == '+' || c == '-') && (index - stateStartIndex < 5))
+ {
+ m_tz[index - stateStartIndex] = c;
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ default:
+ m_error = true;
+ break;
+ }
+
+ index++;
+ }
+
+ if (m_tz[0] != 0)
+ {
+ m_utcAssumed = IsUTCTimeZoneDesignator(m_tz);
+ }
+
+ m_error = (m_error || m_state != finalState);
+ }
+
+ int GetState() const { return m_state; }
+
+private:
+ //Detects whether or not the passed in timezone string is a UTC zone.
+ static bool IsUTCTimeZoneDesignator(const char* str)
+ {
+ size_t len = strlen(str);
+ if (len < 3)
+ {
+ return false;
+ }
+
+ int index = 0;
+ char c = str[index];
+ switch (c)
+ {
+ case 'U':
+ case 'u':
+ c = str[++index];
+ switch(c)
+ {
+ case 'T':
+ case 't':
+ c = str[++index];
+ switch(c)
+ {
+ case 'C':
+ case 'c':
+ return true;
+ default:
+ return false;
+ }
+
+ case 'C':
+ case 'c':
+ c = str[++index];
+ switch (c)
+ {
+ case 'T':
+ case 't':
+ return true;
+ default:
+ return false;
+ }
+ default:
+ return false;
+ }
+ case 'G':
+ case 'g':
+ c = str[++index];
+ switch (c)
+ {
+ case 'M':
+ case 'm':
+ c = str[++index];
+ switch (c)
+ {
+ case 'T':
+ case 't':
+ return true;
+ default:
+ return false;
+ }
+ default:
+ return false;
+ }
+ case '+':
+ case '-':
+ c = str[++index];
+ switch (c)
+ {
+ case '0':
+ c = str[++index];
+ switch (c)
+ {
+ case '0':
+ c = str[++index];
+ switch (c)
+ {
+ case '0':
+ return true;
+ default:
+ return false;
+ }
+ default:
+ return false;
+ }
+ default:
+ return false;
+ }
+ case 'Z':
+ return true;
+ default:
+ return false;
+ }
+
+ }
+
+ int m_state;
+};
+
+//Before you send me hate mail because I'm doing this manually, I encourage you to try using std::get_time on all platforms and getting
+//uniform results. Timezone information doesn't parse on Windows and it hardly even works on GCC 4.9.x. This is the only way to make sure
+//the standard is parsed correctly. strptime isn't available one Windows. This code gets hit pretty hard during http serialization/deserialization
+//as a result I'm going for no dynamic allocations and linear complexity
+class ISO_8601DateParser : public DateParser
+{
+public:
+ ISO_8601DateParser(const char* stringToParse) : DateParser(stringToParse), m_state(0)
+ {
+ }
+
+ //parses "%Y-%m-%dT%H:%M:%SZ or "%Y-%m-%dT%H:%M:%S.000Z"
+ void Parse() override
+ {
+ size_t len = strlen(m_toParse);
+
+ //DOS check
+ if (len > MAX_LEN)
+ {
+ AWS_LOGSTREAM_WARN(CLASS_TAG, "Incoming String to parse too long with length: " << len)
+ m_error = true;
+ return;
+ }
+
+ size_t index = 0;
+ size_t stateStartIndex = 0;
+ const int finalState = 7;
+
+ while (m_state <= finalState && !m_error && index < len)
+ {
+ char c = m_toParse[index];
+ switch (m_state)
+ {
+ case 0:
+ if (c == '-' && index - stateStartIndex == 4)
+ {
+ m_state = 1;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_year -= 1900;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_year = m_parsedTimestamp.tm_year * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ case 1:
+ if (c == '-' && index - stateStartIndex == 2)
+ {
+ m_state = 2;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_mon -= 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_mon = m_parsedTimestamp.tm_mon * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+
+ break;
+ case 2:
+ if (c == 'T' && index - stateStartIndex == 2)
+ {
+ m_state = 3;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_mday = m_parsedTimestamp.tm_mday * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+
+ break;
+ case 3:
+ if (c == ':' && index - stateStartIndex == 2)
+ {
+ m_state = 4;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_hour = m_parsedTimestamp.tm_hour * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+
+ break;
+ case 4:
+ if (c == ':' && index - stateStartIndex == 2)
+ {
+ m_state = 5;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_min = m_parsedTimestamp.tm_min * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+
+ break;
+ case 5:
+ if ((c == 'Z' || c == '+' || c == '-' ) && (index - stateStartIndex == 2))
+ {
+ m_tz[0] = c;
+ m_state = 7;
+ stateStartIndex = index + 1;
+ }
+ else if (c == '.' && index - stateStartIndex == 2)
+ {
+ m_state = 6;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_sec = m_parsedTimestamp.tm_sec * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+
+ break;
+ case 6:
+ if ((c == 'Z' || c == '+' || c == '-' ) && (index - stateStartIndex == 3))
+ {
+ m_tz[0] = c;
+ m_state = 7;
+ stateStartIndex = index + 1;
+ }
+ else if(!isdigit(c))
+ {
+ m_error = true;
+ }
+ break;
+ case 7:
+ if ((isdigit(c) || c == ':') && (index - stateStartIndex < 5))
+ {
+ m_tz[1 + index - stateStartIndex] = c;
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ default:
+ m_error = true;
+ break;
+ }
+ index++;
+ }
+
+ if (m_tz[0] != 0)
+ {
+ m_utcAssumed = IsUTCTimeZoneDesignator(m_tz);
+ }
+
+ m_error = (m_error || m_state != finalState);
+ }
+
+private:
+ //Detects whether or not the passed in timezone string is a UTC zone.
+ static bool IsUTCTimeZoneDesignator(const char* str)
+ {
+ size_t len = strlen(str);
+
+ if (len > 0)
+ {
+ if (len == 1 && str[0] == 'Z')
+ {
+ return true;
+ }
+
+ if (len == 6 && str[0] == '+'
+ && str[1] == '0'
+ && str[2] == '0'
+ && str[3] == ':'
+ && str[4] == '0'
+ && str[5] == '0')
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ return false;
+ }
+
+ int m_state;
+};
+
+class ISO_8601BasicDateParser : public DateParser
+{
+public:
+ ISO_8601BasicDateParser(const char* stringToParse) : DateParser(stringToParse), m_state(0)
+ {
+ }
+
+ //parses "%Y%m%dT%H%M%SZ or "%Y%m%dT%H%M%S000Z"
+ void Parse() override
+ {
+ size_t len = strlen(m_toParse);
+
+ //DOS check
+ if (len > MAX_LEN)
+ {
+ AWS_LOGSTREAM_WARN(CLASS_TAG, "Incoming String to parse too long with length: " << len)
+ m_error = true;
+ return;
+ }
+
+ size_t index = 0;
+ size_t stateStartIndex = 0;
+ const int finalState = 7;
+
+ while (m_state <= finalState && !m_error && index < len)
+ {
+ char c = m_toParse[index];
+ switch (m_state)
+ {
+ // On year: %Y
+ case 0:
+ if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_year = m_parsedTimestamp.tm_year * 10 + (c - '0');
+ if (index - stateStartIndex == 3)
+ {
+ m_state = 1;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_year -= 1900;
+ }
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ // On month: %m
+ case 1:
+ if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_mon = m_parsedTimestamp.tm_mon * 10 + (c - '0');
+ if (index - stateStartIndex == 1)
+ {
+ m_state = 2;
+ stateStartIndex = index + 1;
+ m_parsedTimestamp.tm_mon -= 1;
+ }
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ // On month day: %d
+ case 2:
+ if (c == 'T' && index - stateStartIndex == 2)
+ {
+ m_state = 3;
+ stateStartIndex = index + 1;
+ }
+ else if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_mday = m_parsedTimestamp.tm_mday * 10 + (c - '0');
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ // On hour: %H
+ case 3:
+ if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_hour = m_parsedTimestamp.tm_hour * 10 + (c - '0');
+ if (index - stateStartIndex == 1)
+ {
+ m_state = 4;
+ stateStartIndex = index + 1;
+ }
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ // On minute: %M
+ case 4:
+ if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_min = m_parsedTimestamp.tm_min * 10 + (c - '0');
+ if (index - stateStartIndex == 1)
+ {
+ m_state = 5;
+ stateStartIndex = index + 1;
+ }
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ // On second: %S
+ case 5:
+ if (isdigit(c))
+ {
+ m_parsedTimestamp.tm_sec = m_parsedTimestamp.tm_sec * 10 + (c - '0');
+ if (index - stateStartIndex == 1)
+ {
+ m_state = 6;
+ stateStartIndex = index + 1;
+ }
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ // On TZ: Z or 000Z
+ case 6:
+ if ((c == 'Z' || c == '+' || c == '-' ) && (index - stateStartIndex == 0 || index - stateStartIndex == 3))
+ {
+ m_tz[0] = c;
+ m_state = 7;
+ stateStartIndex = index + 1;
+ }
+ else if (!isdigit(c) || index - stateStartIndex > 3)
+ {
+ m_error = true;
+ }
+ break;
+ case 7:
+ if ((isdigit(c) || c == ':') && (index - stateStartIndex < 5))
+ {
+ m_tz[1 + index - stateStartIndex] = c;
+ }
+ else
+ {
+ m_error = true;
+ }
+ break;
+ default:
+ m_error = true;
+ break;
+ }
+ index++;
+ }
+
+ if (m_tz[0] != 0)
+ {
+ m_utcAssumed = IsUTCTimeZoneDesignator(m_tz);
+ }
+
+ m_error = (m_error || m_state != finalState);
+ }
+
+private:
+ //Detects whether or not the passed in timezone string is a UTC zone.
+ static bool IsUTCTimeZoneDesignator(const char* str)
+ {
+ size_t len = strlen(str);
+
+ if (len > 0)
+ {
+ if (len == 1 && str[0] == 'Z')
+ {
+ return true;
+ }
+
+ if (len == 5 && str[0] == '+'
+ && str[1] == '0'
+ && str[2] == '0'
+ && str[3] == '0'
+ && str[4] == '0')
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ return false;
+ }
+
+ int m_state;
+};
+
+} // namespace
+
+DateTime::DateTime(const std::chrono::system_clock::time_point& timepointToAssign) : m_time(timepointToAssign), m_valid(true)
+{
+}
+
+DateTime::DateTime(int64_t millisSinceEpoch) : m_valid(true)
+{
+ std::chrono::duration<int64_t, std::chrono::milliseconds::period> timestamp(millisSinceEpoch);
+ m_time = std::chrono::system_clock::time_point(timestamp);
+}
+
+DateTime::DateTime(double epoch_millis) : m_valid(true)
+{
+ std::chrono::duration<double, std::chrono::seconds::period> timestamp(epoch_millis);
+ m_time = std::chrono::system_clock::time_point(std::chrono::duration_cast<std::chrono::milliseconds>(timestamp));
+}
+
+DateTime::DateTime(const Aws::String& timestamp, DateFormat format) : m_valid(true)
+{
+ ConvertTimestampStringToTimePoint(timestamp.c_str(), format);
+}
+
+DateTime::DateTime(const char* timestamp, DateFormat format) : m_valid(true)
+{
+ ConvertTimestampStringToTimePoint(timestamp, format);
+}
+
+DateTime::DateTime() : m_valid(true)
+{
+ //init time_point to default by doing nothing.
+}
+
+DateTime& DateTime::operator=(const Aws::String& timestamp)
+{
+ *this = DateTime(timestamp, DateFormat::AutoDetect);
+ return *this;
+}
+
+DateTime& DateTime::operator=(double secondsMillis)
+{
+ *this = DateTime(secondsMillis);
+ return *this;
+}
+
+DateTime& DateTime::operator=(int64_t millisSinceEpoch)
+{
+ *this = DateTime(millisSinceEpoch);
+ return *this;
+}
+
+DateTime& DateTime::operator=(const std::chrono::system_clock::time_point& timepointToAssign)
+{
+ *this = DateTime(timepointToAssign);
+ return *this;
+}
+
+bool DateTime::operator == (const DateTime& other) const
+{
+ return m_time == other.m_time;
+}
+
+bool DateTime::operator < (const DateTime& other) const
+{
+ return m_time < other.m_time;
+}
+
+bool DateTime::operator > (const DateTime& other) const
+{
+ return m_time > other.m_time;
+}
+
+bool DateTime::operator != (const DateTime& other) const
+{
+ return m_time != other.m_time;
+}
+
+bool DateTime::operator <= (const DateTime& other) const
+{
+ return m_time <= other.m_time;
+}
+
+bool DateTime::operator >= (const DateTime& other) const
+{
+ return m_time >= other.m_time;
+}
+
+DateTime DateTime::operator +(const std::chrono::milliseconds& a) const
+{
+ auto timepointCpy = m_time;
+ timepointCpy += a;
+ return DateTime(timepointCpy);
+}
+
+DateTime DateTime::operator -(const std::chrono::milliseconds& a) const
+{
+ auto timepointCpy = m_time;
+ timepointCpy -= a;
+ return DateTime(timepointCpy);
+}
+
+Aws::String DateTime::ToLocalTimeString(DateFormat format) const
+{
+ switch (format)
+ {
+ case DateFormat::ISO_8601:
+ return ToLocalTimeString(ISO_8601_LONG_DATE_FORMAT_STR);
+ case DateFormat::ISO_8601_BASIC:
+ return ToLocalTimeString(ISO_8601_LONG_BASIC_DATE_FORMAT_STR);
+ case DateFormat::RFC822:
+ return ToLocalTimeString(RFC822_DATE_FORMAT_STR_WITH_Z);
+ default:
+ assert(0);
+ return "";
+ }
+}
+
+Aws::String DateTime::ToLocalTimeString(const char* formatStr) const
+{
+ struct tm localTimeStamp = ConvertTimestampToLocalTimeStruct();
+
+ char formattedString[100];
+ std::strftime(formattedString, sizeof(formattedString), formatStr, &localTimeStamp);
+ return formattedString;
+}
+
+Aws::String DateTime::ToGmtString(DateFormat format) const
+{
+ switch (format)
+ {
+ case DateFormat::ISO_8601:
+ return ToGmtString(ISO_8601_LONG_DATE_FORMAT_STR);
+ case DateFormat::ISO_8601_BASIC:
+ return ToGmtString(ISO_8601_LONG_BASIC_DATE_FORMAT_STR);
+ case DateFormat::RFC822:
+ {
+ //Windows erroneously drops the local timezone in for %Z
+ Aws::String rfc822GmtString = ToGmtString(RFC822_DATE_FORMAT_STR_MINUS_Z);
+ rfc822GmtString += " GMT";
+ return rfc822GmtString;
+ }
+ default:
+ assert(0);
+ return "";
+ }
+}
+
+Aws::String DateTime::ToGmtString(const char* formatStr) const
+{
+ struct tm gmtTimeStamp = ConvertTimestampToGmtStruct();
+
+ char formattedString[100];
+ std::strftime(formattedString, sizeof(formattedString), formatStr, &gmtTimeStamp);
+ return formattedString;
+}
+
+double DateTime::SecondsWithMSPrecision() const
+{
+ std::chrono::duration<double, std::chrono::seconds::period> timestamp(m_time.time_since_epoch());
+ return timestamp.count();
+}
+
+int64_t DateTime::Millis() const
+{
+ auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(m_time.time_since_epoch());
+ return timestamp.count();
+}
+
+std::chrono::system_clock::time_point DateTime::UnderlyingTimestamp() const
+{
+ return m_time;
+}
+
+int DateTime::GetYear(bool localTime) const
+{
+ return GetTimeStruct(localTime).tm_year + 1900;
+}
+
+Month DateTime::GetMonth(bool localTime) const
+{
+ return static_cast<Aws::Utils::Month>(GetTimeStruct(localTime).tm_mon);
+}
+
+int DateTime::GetDay(bool localTime) const
+{
+ return GetTimeStruct(localTime).tm_mday;
+}
+
+DayOfWeek DateTime::GetDayOfWeek(bool localTime) const
+{
+ return static_cast<Aws::Utils::DayOfWeek>(GetTimeStruct(localTime).tm_wday);
+}
+
+int DateTime::GetHour(bool localTime) const
+{
+ return GetTimeStruct(localTime).tm_hour;
+}
+
+int DateTime::GetMinute(bool localTime) const
+{
+ return GetTimeStruct(localTime).tm_min;
+}
+
+int DateTime::GetSecond(bool localTime) const
+{
+ return GetTimeStruct(localTime).tm_sec;
+}
+
+bool DateTime::IsDST(bool localTime) const
+{
+ return GetTimeStruct(localTime).tm_isdst == 0 ? false : true;
+}
+
+DateTime DateTime::Now()
+{
+ DateTime dateTime;
+ dateTime.m_time = std::chrono::system_clock::now();
+ return dateTime;
+}
+
+int64_t DateTime::CurrentTimeMillis()
+{
+ return Now().Millis();
+}
+
+Aws::String DateTime::CalculateLocalTimestampAsString(const char* formatStr)
+{
+ DateTime now = Now();
+ return now.ToLocalTimeString(formatStr);
+}
+
+Aws::String DateTime::CalculateGmtTimestampAsString(const char* formatStr)
+{
+ DateTime now = Now();
+ return now.ToGmtString(formatStr);
+}
+
+Aws::String DateTime::CalculateGmtTimeWithMsPrecision()
+{
+ auto now = DateTime::Now();
+ struct tm gmtTimeStamp = now.ConvertTimestampToGmtStruct();
+
+ char formattedString[100];
+ auto len = std::strftime(formattedString, sizeof(formattedString), "%Y-%m-%d %H:%M:%S", &gmtTimeStamp);
+ if (len)
+ {
+ auto ms = now.Millis();
+ ms = ms - ms / 1000 * 1000; // calculate the milliseconds as fraction.
+ formattedString[len++] = '.';
+ int divisor = 100;
+ while(divisor)
+ {
+ auto digit = ms / divisor;
+ formattedString[len++] = char('0' + digit);
+ ms = ms - divisor * digit;
+ divisor /= 10;
+ }
+ formattedString[len] = '\0';
+ }
+ return formattedString;
+}
+
+int DateTime::CalculateCurrentHour()
+{
+ return Now().GetHour(true);
+}
+
+double DateTime::ComputeCurrentTimestampInAmazonFormat()
+{
+ return Now().SecondsWithMSPrecision();
+}
+
+std::chrono::milliseconds DateTime::Diff(const DateTime& a, const DateTime& b)
+{
+ auto diff = a.m_time - b.m_time;
+ return std::chrono::duration_cast<std::chrono::milliseconds>(diff);
+}
+
+std::chrono::milliseconds DateTime::operator-(const DateTime& other) const
+{
+ auto diff = this->m_time - other.m_time;
+ return std::chrono::duration_cast<std::chrono::milliseconds>(diff);
+}
+
+void DateTime::ConvertTimestampStringToTimePoint(const char* timestamp, DateFormat format)
+{
+ std::tm timeStruct;
+ bool isUtc = true;
+
+ switch (format)
+ {
+ case DateFormat::RFC822:
+ {
+ RFC822DateParser parser(timestamp);
+ parser.Parse();
+ m_valid = parser.WasParseSuccessful();
+ isUtc = parser.ShouldIAssumeThisIsUTC();
+ timeStruct = parser.GetParsedTimestamp();
+ break;
+ }
+ case DateFormat::ISO_8601:
+ {
+ ISO_8601DateParser parser(timestamp);
+ parser.Parse();
+ m_valid = parser.WasParseSuccessful();
+ isUtc = parser.ShouldIAssumeThisIsUTC();
+ timeStruct = parser.GetParsedTimestamp();
+ break;
+ }
+ case DateFormat::ISO_8601_BASIC:
+ {
+ ISO_8601BasicDateParser parser(timestamp);
+ parser.Parse();
+ m_valid = parser.WasParseSuccessful();
+ isUtc = parser.ShouldIAssumeThisIsUTC();
+ timeStruct = parser.GetParsedTimestamp();
+ break;
+ }
+ case DateFormat::AutoDetect:
+ {
+ RFC822DateParser rfcParser(timestamp);
+ rfcParser.Parse();
+ if(rfcParser.WasParseSuccessful())
+ {
+ m_valid = true;
+ isUtc = rfcParser.ShouldIAssumeThisIsUTC();
+ timeStruct = rfcParser.GetParsedTimestamp();
+ break;
+ }
+ ISO_8601DateParser isoParser(timestamp);
+ isoParser.Parse();
+ if (isoParser.WasParseSuccessful())
+ {
+ m_valid = true;
+ isUtc = isoParser.ShouldIAssumeThisIsUTC();
+ timeStruct = isoParser.GetParsedTimestamp();
+ break;
+ }
+ ISO_8601BasicDateParser isoBasicParser(timestamp);
+ isoBasicParser.Parse();
+ if (isoBasicParser.WasParseSuccessful())
+ {
+ m_valid = true;
+ isUtc = isoBasicParser.ShouldIAssumeThisIsUTC();
+ timeStruct = isoBasicParser.GetParsedTimestamp();
+ break;
+ }
+ m_valid = false;
+ break;
+ }
+ default:
+ assert(0);
+ }
+
+ if (m_valid)
+ {
+ std::time_t tt;
+ if(isUtc)
+ {
+ tt = Aws::Time::TimeGM(&timeStruct);
+ }
+ else
+ {
+ assert(0);
+ AWS_LOGSTREAM_WARN(CLASS_TAG, "Non-UTC timestamp detected. This is always a bug. Make the world a better place and fix whatever sent you this timestamp: " << timestamp)
+ tt = std::mktime(&timeStruct);
+ }
+ m_time = std::chrono::system_clock::from_time_t(tt);
+ }
+}
+
+tm DateTime::GetTimeStruct(bool localTime) const
+{
+ return localTime ? ConvertTimestampToLocalTimeStruct() : ConvertTimestampToGmtStruct();
+}
+
+tm DateTime::ConvertTimestampToLocalTimeStruct() const
+{
+ std::time_t time = std::chrono::system_clock::to_time_t(m_time);
+ struct tm localTimeStamp;
+
+ Aws::Time::LocalTime(&localTimeStamp, time);
+
+ return localTimeStamp;
+}
+
+tm DateTime::ConvertTimestampToGmtStruct() const
+{
+ std::time_t time = std::chrono::system_clock::to_time_t(m_time);
+ struct tm gmtTimeStamp;
+ Aws::Time::GMTime(&gmtTimeStamp, time);
+
+ return gmtTimeStamp;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Directory.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Directory.cpp
new file mode 100644
index 00000000000..49ca56b280a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/Directory.cpp
@@ -0,0 +1,323 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/platform/FileSystem.h>
+#include <aws/core/utils/memory/stl/AWSQueue.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/memory/stl/AWSStreamFwd.h>
+#include <aws/core/utils/StringUtils.h>
+#include <fstream>
+#include <cassert>
+
+namespace Aws
+{
+ namespace FileSystem
+ {
+ Aws::String Join(const Aws::String& leftSegment, const Aws::String& rightSegment)
+ {
+ return Join(PATH_DELIM, leftSegment, rightSegment);
+ }
+
+ Aws::String Join(char delimiter, const Aws::String& leftSegment, const Aws::String& rightSegment)
+ {
+ Aws::StringStream ss;
+
+ if (!leftSegment.empty())
+ {
+ if (leftSegment.back() == delimiter)
+ {
+ ss << leftSegment.substr(0, leftSegment.length() - 1);
+ }
+ else
+ {
+ ss << leftSegment;
+ }
+ }
+
+ ss << delimiter;
+
+ if (!rightSegment.empty())
+ {
+ if (rightSegment.front() == delimiter)
+ {
+ ss << rightSegment.substr(1);
+ }
+ else
+ {
+ ss << rightSegment;
+ }
+ }
+
+ return ss.str();
+ }
+
+ bool DeepCopyDirectory(const char* from, const char* to)
+ {
+ if (!from || !to) return false;
+
+ DirectoryTree fromDir(from);
+
+ if (!fromDir) return false;
+
+ CreateDirectoryIfNotExists(to);
+ DirectoryTree toDir(to);
+
+ if (!toDir) return false;
+
+ bool success(true);
+
+ auto visitor = [to,&success](const DirectoryTree*, const DirectoryEntry& entry)
+ {
+ auto newPath = Aws::FileSystem::Join(to, entry.relativePath);
+
+ if (entry.fileType == Aws::FileSystem::FileType::File)
+ {
+ Aws::OFStream copyOutStream(newPath.c_str());
+ Aws::IFStream originalStream(entry.path.c_str());
+
+ if(!copyOutStream.good() || !originalStream.good())
+ {
+ success = false;
+ return false;
+ }
+
+ std::copy(std::istreambuf_iterator<char>(originalStream),
+ std::istreambuf_iterator<char>(), std::ostreambuf_iterator<char>(copyOutStream));
+ }
+ else if (entry.fileType == Aws::FileSystem::FileType::Directory)
+ {
+ success = CreateDirectoryIfNotExists(newPath.c_str());
+ return success;
+ }
+
+ return success;
+ };
+
+ fromDir.TraverseDepthFirst(visitor);
+ return success;
+ }
+
+ bool DeepDeleteDirectory(const char* toDelete)
+ {
+ bool success(true);
+
+ //scope this to a new stack frame, because we won't be able to delete the root directory
+ //unless the directory handle has closed.
+ {
+ DirectoryTree delDir(toDelete);
+
+ if (!delDir) return false;
+
+ auto visitor = [&success](const DirectoryTree*, const DirectoryEntry& entry)
+ {
+ if (entry.fileType == FileType::File)
+ {
+ success = RemoveFileIfExists(entry.path.c_str());
+ }
+ else
+ {
+ success = RemoveDirectoryIfExists(entry.path.c_str());
+ }
+
+ return success;
+ };
+
+ delDir.TraverseDepthFirst(visitor, true);
+ }
+
+ if (success)
+ {
+ success = RemoveDirectoryIfExists(toDelete);
+ }
+
+ return success;
+ }
+
+ Directory::Directory(const Aws::String& path, const Aws::String& relativePath)
+ {
+ auto trimmedPath = Utils::StringUtils::Trim(path.c_str());
+ auto trimmedRelativePath = Utils::StringUtils::Trim(relativePath.c_str());
+
+ if (!trimmedPath.empty() && trimmedPath[trimmedPath.length() - 1] == PATH_DELIM)
+ {
+ m_directoryEntry.path = trimmedPath.substr(0, trimmedPath.length() - 1);
+ }
+ else
+ {
+ m_directoryEntry.path = trimmedPath;
+ }
+
+ if (!trimmedRelativePath.empty() && trimmedRelativePath[trimmedRelativePath.length() - 1] == PATH_DELIM)
+ {
+ m_directoryEntry.relativePath = trimmedRelativePath.substr(0, trimmedRelativePath.length() - 1);
+ }
+ else
+ {
+ m_directoryEntry.relativePath = trimmedRelativePath;
+ }
+ }
+
+ Aws::UniquePtr<Directory> Directory::Descend(const DirectoryEntry& directoryEntry)
+ {
+ assert(directoryEntry.fileType != FileType::File);
+ return OpenDirectory(directoryEntry.path, directoryEntry.relativePath);
+ }
+
+ Aws::Vector<Aws::String> Directory::GetAllFilePathsInDirectory(const Aws::String& path)
+ {
+ Aws::FileSystem::DirectoryTree tree(path);
+ Aws::Vector<Aws::String> filesVector;
+ auto visitor = [&](const Aws::FileSystem::DirectoryTree*, const Aws::FileSystem::DirectoryEntry& entry)
+ {
+ if (entry.fileType == Aws::FileSystem::FileType::File)
+ {
+ filesVector.push_back(entry.path);
+ }
+ return true;
+ };
+ tree.TraverseBreadthFirst(visitor);
+ return filesVector;
+ }
+
+ DirectoryTree::DirectoryTree(const Aws::String& path)
+ {
+ m_dir = OpenDirectory(path);
+ }
+
+ DirectoryTree::operator bool() const
+ {
+ return m_dir->operator bool();
+ }
+
+ bool DirectoryTree::operator==(DirectoryTree& other)
+ {
+ return Diff(other).size() == 0;
+ }
+
+ bool DirectoryTree::operator==(const Aws::String& path)
+ {
+ return *this == DirectoryTree(path);
+ }
+
+ Aws::Map<Aws::String, DirectoryEntry> DirectoryTree::Diff(DirectoryTree& other)
+ {
+ Aws::Map<Aws::String, DirectoryEntry> thisEntries;
+ auto thisTraversal = [&thisEntries](const DirectoryTree*, const DirectoryEntry& entry)
+ {
+ thisEntries[entry.relativePath] = entry;
+ return true;
+ };
+
+ Aws::Map<Aws::String, DirectoryEntry> otherEntries;
+ auto otherTraversal = [&thisEntries, &otherEntries](const DirectoryTree*, const DirectoryEntry& entry)
+ {
+ auto thisEntry = thisEntries.find(entry.relativePath);
+ if (thisEntry != thisEntries.end())
+ {
+ thisEntries.erase(entry.relativePath);
+ }
+ else
+ {
+ otherEntries[entry.relativePath] = entry;
+ }
+
+ return true;
+ };
+
+ TraverseDepthFirst(thisTraversal);
+ other.TraverseDepthFirst(otherTraversal);
+
+ thisEntries.insert(otherEntries.begin(), otherEntries.end());
+ return thisEntries;
+ }
+
+ void DirectoryTree::TraverseDepthFirst(const DirectoryEntryVisitor& visitor, bool postOrderTraversal)
+ {
+ TraverseDepthFirst(*m_dir, visitor, postOrderTraversal);
+ m_dir = OpenDirectory(m_dir->GetPath());
+ }
+
+ void DirectoryTree::TraverseBreadthFirst(const DirectoryEntryVisitor& visitor)
+ {
+ TraverseBreadthFirst(*m_dir, visitor);
+ m_dir = OpenDirectory(m_dir->GetPath());
+ }
+
+ void DirectoryTree::TraverseBreadthFirst(Directory& dir, const DirectoryEntryVisitor& visitor)
+ {
+ if (!dir)
+ {
+ return;
+ }
+
+ Aws::Queue<DirectoryEntry> queue;
+ while (DirectoryEntry&& entry = dir.Next())
+ {
+ queue.push(std::move(entry));
+ }
+
+ while (queue.size() > 0)
+ {
+ auto entry = queue.front();
+ queue.pop();
+ if(visitor(this, entry))
+ {
+ if(entry.fileType == FileType::Directory)
+ {
+ auto currentDir = dir.Descend(entry);
+
+ while (DirectoryEntry&& dirEntry = currentDir->Next())
+ {
+ queue.push(std::move(dirEntry));
+ }
+ }
+ }
+ else
+ {
+ return;
+ }
+ }
+ }
+
+ bool DirectoryTree::TraverseDepthFirst(Directory& dir, const DirectoryEntryVisitor& visitor, bool postOrder)
+ {
+ if (!dir)
+ {
+ return true;
+ }
+
+ bool exitTraversal(false);
+ DirectoryEntry entry;
+
+ while ((entry = dir.Next()) && !exitTraversal)
+ {
+ if(!postOrder)
+ {
+ if(!visitor(this, entry))
+ {
+ return false;
+ }
+ }
+
+ if (entry.fileType == FileType::Directory)
+ {
+ auto subDir = dir.Descend(entry);
+ exitTraversal = !TraverseDepthFirst(*subDir, visitor, postOrder);
+ }
+
+ if (postOrder)
+ {
+ if (!visitor(this, entry))
+ {
+ return false;
+ }
+ }
+ }
+
+ return !exitTraversal;
+ }
+
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/EnumParseOverflowContainer.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/EnumParseOverflowContainer.cpp
new file mode 100644
index 00000000000..eaeba1d9105
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/EnumParseOverflowContainer.cpp
@@ -0,0 +1,33 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+#include <aws/core/utils/logging/LogMacros.h>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Threading;
+
+static const char LOG_TAG[] = "EnumParseOverflowContainer";
+
+const Aws::String& EnumParseOverflowContainer::RetrieveOverflow(int hashCode) const
+{
+ ReaderLockGuard guard(m_overflowLock);
+ auto foundIter = m_overflowMap.find(hashCode);
+ if (foundIter != m_overflowMap.end())
+ {
+ AWS_LOGSTREAM_DEBUG(LOG_TAG, "Found value " << foundIter->second << " for hash " << hashCode << " from enum overflow container.");
+ return foundIter->second;
+ }
+
+ AWS_LOGSTREAM_ERROR(LOG_TAG, "Could not find a previously stored overflow value for hash " << hashCode << ". This will likely break some requests.");
+ return m_emptyString;
+}
+
+void EnumParseOverflowContainer::StoreOverflow(int hashCode, const Aws::String& value)
+{
+ WriterLockGuard guard(m_overflowLock);
+ AWS_LOGSTREAM_WARN(LOG_TAG, "Encountered enum member " << value << " which is not modeled in your clients. You should update your clients when you get a chance.");
+ m_overflowMap[hashCode] = value;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/FileSystemUtils.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/FileSystemUtils.cpp
new file mode 100644
index 00000000000..c47f7509605
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/FileSystemUtils.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/FileSystemUtils.h>
+
+using namespace Aws::Utils;
+
+Aws::String PathUtils::GetFileNameFromPathWithoutExt(const Aws::String& path)
+{
+ Aws::String fileName = Aws::Utils::PathUtils::GetFileNameFromPathWithExt(path);
+ size_t endPos = fileName.find_last_of('.');
+ if (endPos == std::string::npos)
+ {
+ return fileName;
+ }
+ if (endPos == 0) // fileName is "."
+ {
+ return {};
+ }
+
+ return fileName.substr(0, endPos);
+}
+
+Aws::String PathUtils::GetFileNameFromPathWithExt(const Aws::String& path)
+{
+ if (path.size() == 0)
+ {
+ return path;
+ }
+
+ size_t startPos = path.find_last_of(Aws::FileSystem::PATH_DELIM);
+ if (startPos == path.size() - 1)
+ {
+ return {};
+ }
+
+ if (startPos == std::string::npos)
+ {
+ startPos = 0;
+ }
+ else
+ {
+ startPos += 1;
+ }
+
+ size_t endPos = path.size() - 1;
+
+ return path.substr(startPos, endPos - startPos + 1);
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/GetTheLights.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/GetTheLights.cpp
new file mode 100644
index 00000000000..6e78b546ab5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/GetTheLights.cpp
@@ -0,0 +1,36 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/GetTheLights.h>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ GetTheLights::GetTheLights() : m_value(0)
+ {
+ }
+
+ void GetTheLights::EnterRoom(std::function<void()> &&callable)
+ {
+ int cpy = ++m_value;
+ assert(cpy > 0);
+ if(cpy == 1)
+ {
+ callable();
+ }
+ }
+
+ void GetTheLights::LeaveRoom(std::function<void()> &&callable)
+ {
+ int cpy = --m_value;
+ assert(cpy >= 0);
+ if(cpy == 0)
+ {
+ callable();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/HashingUtils.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/HashingUtils.cpp
new file mode 100644
index 00000000000..147bddf33e0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/HashingUtils.cpp
@@ -0,0 +1,236 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/base64/Base64.h>
+#include <aws/core/utils/crypto/Sha256.h>
+#include <aws/core/utils/crypto/Sha256HMAC.h>
+#include <aws/core/utils/crypto/MD5.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/memory/stl/AWSList.h>
+
+#include <iomanip>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Base64;
+using namespace Aws::Utils::Crypto;
+
+// internal buffers are fixed-size arrays, so this is harmless memory-management wise
+static Aws::Utils::Base64::Base64 s_base64;
+
+// Aws Glacier Tree Hash calculates hash value for each 1MB data
+const static size_t TREE_HASH_ONE_MB = 1024 * 1024;
+
+Aws::String HashingUtils::Base64Encode(const ByteBuffer& message)
+{
+ return s_base64.Encode(message);
+}
+
+ByteBuffer HashingUtils::Base64Decode(const Aws::String& encodedMessage)
+{
+ return s_base64.Decode(encodedMessage);
+}
+
+ByteBuffer HashingUtils::CalculateSHA256HMAC(const ByteBuffer& toSign, const ByteBuffer& secret)
+{
+ Sha256HMAC hash;
+ return hash.Calculate(toSign, secret).GetResult();
+}
+
+ByteBuffer HashingUtils::CalculateSHA256(const Aws::String& str)
+{
+ Sha256 hash;
+ return hash.Calculate(str).GetResult();
+}
+
+ByteBuffer HashingUtils::CalculateSHA256(Aws::IOStream& stream)
+{
+ Sha256 hash;
+ return hash.Calculate(stream).GetResult();
+}
+
+/**
+ * This function is only used by HashingUtils::CalculateSHA256TreeHash() in this cpp file
+ * It's a helper function be used to compute the TreeHash defined at:
+ * http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html
+ */
+static ByteBuffer TreeHashFinalCompute(Aws::List<ByteBuffer>& input)
+{
+ Sha256 hash;
+ assert(input.size() != 0);
+
+ // O(n) time complexity of merging (n + n/2 + n/4 + n/8 +...+ 1)
+ while (input.size() > 1)
+ {
+ auto iter = input.begin();
+ // if only one element left, just left it there
+ while (std::next(iter) != input.end())
+ {
+ // if >= two elements
+ Aws::String str(reinterpret_cast<char*>(iter->GetUnderlyingData()), iter->GetLength());
+ // list erase returns iterator of next element next to the erased element or end() if erased the last one
+ // list insert inserts element before pos, here we erase two elements, and insert a new element
+ iter = input.erase(iter);
+ str.append(reinterpret_cast<char*>(iter->GetUnderlyingData()), iter->GetLength());
+ iter = input.erase(iter);
+ input.insert(iter, hash.Calculate(str).GetResult());
+
+ if (iter == input.end()) break;
+ } // while process to the last element
+ } // while the list has only one element left
+
+ return *(input.begin());
+}
+
+ByteBuffer HashingUtils::CalculateSHA256TreeHash(const Aws::String& str)
+{
+ Sha256 hash;
+ if (str.size() == 0)
+ {
+ return hash.Calculate(str).GetResult();
+ }
+
+ Aws::List<ByteBuffer> input;
+ size_t pos = 0;
+ while (pos < str.size())
+ {
+ input.push_back(hash.Calculate(Aws::String(str, pos, TREE_HASH_ONE_MB)).GetResult());
+ pos += TREE_HASH_ONE_MB;
+ }
+
+ return TreeHashFinalCompute(input);
+}
+
+ByteBuffer HashingUtils::CalculateSHA256TreeHash(Aws::IOStream& stream)
+{
+ Sha256 hash;
+ Aws::List<ByteBuffer> input;
+ auto currentPos = stream.tellg();
+ if (currentPos == std::ios::pos_type(-1))
+ {
+ currentPos = 0;
+ stream.clear();
+ }
+ stream.seekg(0, stream.beg);
+ Array<char> streamBuffer(TREE_HASH_ONE_MB);
+ while (stream.good())
+ {
+ stream.read(streamBuffer.GetUnderlyingData(), TREE_HASH_ONE_MB);
+ auto bytesRead = stream.gcount();
+ if (bytesRead > 0)
+ {
+ input.push_back(hash.Calculate(Aws::String(reinterpret_cast<char*>(streamBuffer.GetUnderlyingData()), static_cast<size_t>(bytesRead))).GetResult());
+ }
+ }
+ stream.clear();
+ stream.seekg(currentPos, stream.beg);
+
+ if (input.size() == 0)
+ {
+ return hash.Calculate("").GetResult();
+ }
+ return TreeHashFinalCompute(input);
+}
+
+Aws::String HashingUtils::HexEncode(const ByteBuffer& message)
+{
+ Aws::String encoded;
+ encoded.reserve(2 * message.GetLength());
+
+ for (unsigned i = 0; i < message.GetLength(); ++i)
+ {
+ encoded.push_back("0123456789abcdef"[message[i] >> 4]);
+ encoded.push_back("0123456789abcdef"[message[i] & 0x0f]);
+ }
+
+ return encoded;
+}
+
+ByteBuffer HashingUtils::HexDecode(const Aws::String& str)
+{
+ //number of characters should be even
+ assert(str.length() % 2 == 0);
+ assert(str.length() >= 2);
+
+ if(str.length() < 2 || str.length() % 2 != 0)
+ {
+ return ByteBuffer();
+ }
+
+ size_t strLength = str.length();
+ size_t readIndex = 0;
+
+ if(str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
+ {
+ strLength -= 2;
+ readIndex = 2;
+ }
+
+ ByteBuffer hexBuffer(strLength / 2);
+ size_t bufferIndex = 0;
+
+ for (size_t i = readIndex; i < str.length(); i += 2)
+ {
+ if(!StringUtils::IsAlnum(str[i]) || !StringUtils::IsAlnum(str[i + 1]))
+ {
+ //contains non-hex characters
+ assert(0);
+ }
+
+ char firstChar = str[i];
+ uint8_t distance = firstChar - '0';
+
+ if(isalpha(firstChar))
+ {
+ firstChar = static_cast<char>(toupper(firstChar));
+ distance = firstChar - 'A' + 10;
+ }
+
+ unsigned char val = distance * 16;
+
+ char secondChar = str[i + 1];
+ distance = secondChar - '0';
+
+ if(isalpha(secondChar))
+ {
+ secondChar = static_cast<char>(toupper(secondChar));
+ distance = secondChar - 'A' + 10;
+ }
+
+ val += distance;
+ hexBuffer[bufferIndex++] = val;
+ }
+
+ return hexBuffer;
+}
+
+ByteBuffer HashingUtils::CalculateMD5(const Aws::String& str)
+{
+ MD5 hash;
+ return hash.Calculate(str).GetResult();
+}
+
+ByteBuffer HashingUtils::CalculateMD5(Aws::IOStream& stream)
+{
+ MD5 hash;
+ return hash.Calculate(stream).GetResult();
+}
+
+int HashingUtils::HashString(const char* strToHash)
+{
+ if (!strToHash)
+ return 0;
+
+ unsigned hash = 0;
+ while (char charValue = *strToHash++)
+ {
+ hash = charValue + 31 * hash;
+ }
+
+ return hash;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/StringUtils.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/StringUtils.cpp
new file mode 100644
index 00000000000..e1deb3f0462
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/StringUtils.cpp
@@ -0,0 +1,421 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <algorithm>
+#include <iomanip>
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+#include <functional>
+
+#ifdef _WIN32
+#include <Windows.h>
+#endif
+
+using namespace Aws::Utils;
+
+void StringUtils::Replace(Aws::String& s, const char* search, const char* replace)
+{
+ if(!search || !replace)
+ {
+ return;
+ }
+
+ size_t replaceLength = strlen(replace);
+ size_t searchLength = strlen(search);
+
+ for (std::size_t pos = 0;; pos += replaceLength)
+ {
+ pos = s.find(search, pos);
+ if (pos == Aws::String::npos)
+ break;
+
+ s.erase(pos, searchLength);
+ s.insert(pos, replace);
+ }
+}
+
+
+Aws::String StringUtils::ToLower(const char* source)
+{
+ Aws::String copy;
+ size_t sourceLength = strlen(source);
+ copy.resize(sourceLength);
+ //appease the latest whims of the VC++ 2017 gods
+ std::transform(source, source + sourceLength, copy.begin(), [](unsigned char c) { return (char)::tolower(c); });
+
+ return copy;
+}
+
+
+Aws::String StringUtils::ToUpper(const char* source)
+{
+ Aws::String copy;
+ size_t sourceLength = strlen(source);
+ copy.resize(sourceLength);
+ //appease the latest whims of the VC++ 2017 gods
+ std::transform(source, source + sourceLength, copy.begin(), [](unsigned char c) { return (char)::toupper(c); });
+
+ return copy;
+}
+
+
+bool StringUtils::CaselessCompare(const char* value1, const char* value2)
+{
+ Aws::String value1Lower = ToLower(value1);
+ Aws::String value2Lower = ToLower(value2);
+
+ return value1Lower == value2Lower;
+}
+
+Aws::Vector<Aws::String> StringUtils::Split(const Aws::String& toSplit, char splitOn)
+{
+ return Split(toSplit, splitOn, SIZE_MAX, SplitOptions::NOT_SET);
+}
+
+Aws::Vector<Aws::String> StringUtils::Split(const Aws::String& toSplit, char splitOn, SplitOptions option)
+{
+ return Split(toSplit, splitOn, SIZE_MAX, option);
+}
+
+Aws::Vector<Aws::String> StringUtils::Split(const Aws::String& toSplit, char splitOn, size_t numOfTargetParts)
+{
+ return Split(toSplit, splitOn, numOfTargetParts, SplitOptions::NOT_SET);
+}
+
+Aws::Vector<Aws::String> StringUtils::Split(const Aws::String& toSplit, char splitOn, size_t numOfTargetParts, SplitOptions option)
+{
+ Aws::Vector<Aws::String> returnValues;
+ Aws::StringStream input(toSplit);
+ Aws::String item;
+
+ while(returnValues.size() < numOfTargetParts - 1 && std::getline(input, item, splitOn))
+ {
+ if (!item.empty() || option == SplitOptions::INCLUDE_EMPTY_ENTRIES)
+ {
+ returnValues.emplace_back(std::move(item));
+ }
+ }
+
+ if (std::getline(input, item, static_cast<char>(EOF)))
+ {
+ if (option != SplitOptions::INCLUDE_EMPTY_ENTRIES)
+ {
+ // Trim all leading delimiters.
+ item.erase(item.begin(), std::find_if(item.begin(), item.end(), [splitOn](int ch) { return ch != splitOn; }));
+ if (!item.empty())
+ {
+ returnValues.emplace_back(std::move(item));
+ }
+ }
+ else
+ {
+ returnValues.emplace_back(std::move(item));
+ }
+
+ }
+ // To handle the case when there are trailing delimiters.
+ else if (!toSplit.empty() && toSplit.back() == splitOn && option == SplitOptions::INCLUDE_EMPTY_ENTRIES)
+ {
+ returnValues.emplace_back();
+ }
+
+ return returnValues;
+}
+
+Aws::Vector<Aws::String> StringUtils::SplitOnLine(const Aws::String& toSplit)
+{
+ Aws::StringStream input(toSplit);
+ Aws::Vector<Aws::String> returnValues;
+ Aws::String item;
+
+ while (std::getline(input, item))
+ {
+ if (item.size() > 0)
+ {
+ returnValues.push_back(item);
+ }
+ }
+
+ return returnValues;
+}
+
+
+Aws::String StringUtils::URLEncode(const char* unsafe)
+{
+ Aws::StringStream escaped;
+ escaped.fill('0');
+ escaped << std::hex << std::uppercase;
+
+ size_t unsafeLength = strlen(unsafe);
+ for (auto i = unsafe, n = unsafe + unsafeLength; i != n; ++i)
+ {
+ char c = *i;
+ if (IsAlnum(c) || c == '-' || c == '_' || c == '.' || c == '~')
+ {
+ escaped << (char)c;
+ }
+ else
+ {
+ //this unsigned char cast allows us to handle unicode characters.
+ escaped << '%' << std::setw(2) << int((unsigned char)c) << std::setw(0);
+ }
+ }
+
+ return escaped.str();
+}
+
+Aws::String StringUtils::UTF8Escape(const char* unicodeString, const char* delimiter)
+{
+ Aws::StringStream escaped;
+ escaped.fill('0');
+ escaped << std::hex << std::uppercase;
+
+ size_t unsafeLength = strlen(unicodeString);
+ for (auto i = unicodeString, n = unicodeString + unsafeLength; i != n; ++i)
+ {
+ int c = *i;
+ if (c >= ' ' && c < 127 )
+ {
+ escaped << (char)c;
+ }
+ else
+ {
+ //this unsigned char cast allows us to handle unicode characters.
+ escaped << delimiter << std::setw(2) << int((unsigned char)c) << std::setw(0);
+ }
+ }
+
+ return escaped.str();
+}
+
+Aws::String StringUtils::URLEncode(double unsafe)
+{
+ char buffer[32];
+#if defined(_MSC_VER) && _MSC_VER < 1900
+ _snprintf_s(buffer, sizeof(buffer), _TRUNCATE, "%g", unsafe);
+#else
+ snprintf(buffer, sizeof(buffer), "%g", unsafe);
+#endif
+
+ return StringUtils::URLEncode(buffer);
+}
+
+
+Aws::String StringUtils::URLDecode(const char* safe)
+{
+ Aws::String unescaped;
+
+ for (; *safe; safe++)
+ {
+ switch(*safe)
+ {
+ case '%':
+ {
+ int hex = 0;
+ auto ch = *++safe;
+ if (ch >= '0' && ch <= '9')
+ {
+ hex = (ch - '0') * 16;
+ }
+ else if (ch >= 'A' && ch <= 'F')
+ {
+ hex = (ch - 'A' + 10) * 16;
+ }
+ else if (ch >= 'a' && ch <= 'f')
+ {
+ hex = (ch - 'a' + 10) * 16;
+ }
+ else
+ {
+ unescaped.push_back('%');
+ if (ch == 0)
+ {
+ return unescaped;
+ }
+ unescaped.push_back(ch);
+ break;
+ }
+
+ ch = *++safe;
+ if (ch >= '0' && ch <= '9')
+ {
+ hex += (ch - '0');
+ }
+ else if (ch >= 'A' && ch <= 'F')
+ {
+ hex += (ch - 'A' + 10);
+ }
+ else if (ch >= 'a' && ch <= 'f')
+ {
+ hex += (ch - 'a' + 10);
+ }
+ else
+ {
+ unescaped.push_back('%');
+ unescaped.push_back(*(safe - 1));
+ if (ch == 0)
+ {
+ return unescaped;
+ }
+ unescaped.push_back(ch);
+ break;
+ }
+
+ unescaped.push_back(char(hex));
+ break;
+ }
+ case '+':
+ unescaped.push_back(' ');
+ break;
+ default:
+ unescaped.push_back(*safe);
+ break;
+ }
+ }
+
+ return unescaped;
+}
+
+static bool IsSpace(int ch)
+{
+ if (ch < -1 || ch > 255)
+ {
+ return false;
+ }
+
+ return ::isspace(ch) != 0;
+}
+
+Aws::String StringUtils::LTrim(const char* source)
+{
+ Aws::String copy(source);
+ copy.erase(copy.begin(), std::find_if(copy.begin(), copy.end(), [](int ch) { return !IsSpace(ch); }));
+ return copy;
+}
+
+// trim from end
+Aws::String StringUtils::RTrim(const char* source)
+{
+ Aws::String copy(source);
+ copy.erase(std::find_if(copy.rbegin(), copy.rend(), [](int ch) { return !IsSpace(ch); }).base(), copy.end());
+ return copy;
+}
+
+// trim from both ends
+Aws::String StringUtils::Trim(const char* source)
+{
+ return LTrim(RTrim(source).c_str());
+}
+
+long long StringUtils::ConvertToInt64(const char* source)
+{
+ if(!source)
+ {
+ return 0;
+ }
+
+#ifdef __ANDROID__
+ return atoll(source);
+#else
+ return std::atoll(source);
+#endif // __ANDROID__
+}
+
+
+long StringUtils::ConvertToInt32(const char* source)
+{
+ if (!source)
+ {
+ return 0;
+ }
+
+ return std::atol(source);
+}
+
+
+bool StringUtils::ConvertToBool(const char* source)
+{
+ if(!source)
+ {
+ return false;
+ }
+
+ Aws::String strValue = ToLower(source);
+ if(strValue == "true" || strValue == "1")
+ {
+ return true;
+ }
+
+ return false;
+}
+
+
+double StringUtils::ConvertToDouble(const char* source)
+{
+ if(!source)
+ {
+ return 0.0;
+ }
+
+ return std::strtod(source, NULL);
+}
+
+#ifdef _WIN32
+
+Aws::WString StringUtils::ToWString(const char* source)
+{
+ const auto len = static_cast<int>(std::strlen(source));
+ Aws::WString outString;
+ outString.resize(len); // there is no way UTF-16 would require _more_ code-points than UTF-8 for the _same_ string
+ const auto result = MultiByteToWideChar(CP_UTF8 /*CodePage*/,
+ 0 /*dwFlags*/,
+ source /*lpMultiByteStr*/,
+ len /*cbMultiByte*/,
+ &outString[0] /*lpWideCharStr*/,
+ static_cast<int>(outString.length())/*cchWideChar*/);
+ if (!result)
+ {
+ return L"";
+ }
+ outString.resize(result);
+ return outString;
+}
+
+Aws::String StringUtils::FromWString(const wchar_t* source)
+{
+ const auto len = static_cast<int>(std::wcslen(source));
+ Aws::String output;
+ if (int requiredSizeInBytes = WideCharToMultiByte(CP_UTF8 /*CodePage*/,
+ 0 /*dwFlags*/,
+ source /*lpWideCharStr*/,
+ len /*cchWideChar*/,
+ nullptr /*lpMultiByteStr*/,
+ 0 /*cbMultiByte*/,
+ nullptr /*lpDefaultChar*/,
+ nullptr /*lpUsedDefaultChar*/))
+ {
+ output.resize(requiredSizeInBytes);
+ }
+ const auto result = WideCharToMultiByte(CP_UTF8 /*CodePage*/,
+ 0 /*dwFlags*/,
+ source /*lpWideCharStr*/,
+ len /*cchWideChar*/,
+ &output[0] /*lpMultiByteStr*/,
+ static_cast<int>(output.length()) /*cbMultiByte*/,
+ nullptr /*lpDefaultChar*/,
+ nullptr /*lpUsedDefaultChar*/);
+ if (!result)
+ {
+ return "";
+ }
+ output.resize(result);
+ return output;
+}
+
+#endif
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/TempFile.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/TempFile.cpp
new file mode 100644
index 00000000000..7bc07266c98
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/TempFile.cpp
@@ -0,0 +1,54 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/FileSystemUtils.h>
+
+#include <aws/core/platform/FileSystem.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ static Aws::String ComputeTempFileName(const char* prefix, const char* suffix)
+ {
+ Aws::String prefixStr;
+
+ if (prefix)
+ {
+ prefixStr = prefix;
+ }
+
+ Aws::String suffixStr;
+
+ if (suffix)
+ {
+ suffixStr = suffix;
+ }
+
+ return prefixStr + Aws::FileSystem::CreateTempFilePath() + suffixStr;
+ }
+
+ TempFile::TempFile(const char* prefix, const char* suffix, std::ios_base::openmode openFlags) :
+ FStreamWithFileName(ComputeTempFileName(prefix, suffix).c_str(), openFlags)
+ {
+ }
+
+ TempFile::TempFile(const char* prefix, std::ios_base::openmode openFlags) :
+ FStreamWithFileName(ComputeTempFileName(prefix, nullptr).c_str(), openFlags)
+ {
+ }
+
+ TempFile::TempFile(std::ios_base::openmode openFlags) :
+ FStreamWithFileName(ComputeTempFileName(nullptr, nullptr).c_str(), openFlags)
+ {
+ }
+
+
+ TempFile::~TempFile()
+ {
+ Aws::FileSystem::RemoveFileIfExists(m_fileName.c_str());
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/UUID.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/UUID.cpp
new file mode 100644
index 00000000000..862f3eacdd2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/UUID.cpp
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/UUID.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/crypto/Factories.h>
+#include <aws/core/utils/crypto/SecureRandom.h>
+#include <iomanip>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ static const size_t UUID_STR_SIZE = 0x24u; // 36 characters
+ static const size_t VERSION_LOCATION = 0x06u;
+ static const size_t VARIANT_LOCATION = 0x08u;
+ static const unsigned char VERSION = 0x40u;
+ static const unsigned char VERSION_MASK = 0x0Fu;
+ static const unsigned char VARIANT = 0x80u;
+ static const unsigned char VARIANT_MASK = 0x3Fu;
+
+ static void hexify(Aws::String& ss, const unsigned char* toWrite, size_t min, size_t max)
+ {
+ for (size_t i = min; i < max; ++i)
+ {
+ ss.push_back("0123456789ABCDEF"[toWrite[i] >> 4]);
+ ss.push_back("0123456789ABCDEF"[toWrite[i] & 0x0F]);
+ }
+ }
+
+ UUID::UUID(const Aws::String& uuidToConvert)
+ {
+ //GUID has 2 characters per byte + 4 dashes = 36 bytes
+ assert(uuidToConvert.length() == UUID_STR_SIZE);
+ memset(m_uuid, 0, sizeof(m_uuid));
+ Aws::String escapedHexStr(uuidToConvert);
+ StringUtils::Replace(escapedHexStr, "-", "");
+ assert(escapedHexStr.length() == UUID_BINARY_SIZE * 2);
+ ByteBuffer&& rawUuid = HashingUtils::HexDecode(escapedHexStr);
+ memcpy(m_uuid, rawUuid.GetUnderlyingData(), rawUuid.GetLength());
+ }
+
+ UUID::UUID(const unsigned char toCopy[UUID_BINARY_SIZE])
+ {
+ memcpy(m_uuid, toCopy, sizeof(m_uuid));
+ }
+
+ UUID::operator Aws::String() const
+ {
+ Aws::String ss;
+ ss.reserve(UUID_STR_SIZE);
+ hexify(ss, m_uuid, 0, 4);
+ ss.push_back('-');
+
+ hexify(ss, m_uuid, 4, 6);
+ ss.push_back('-');
+
+ hexify(ss, m_uuid, 6, 8);
+ ss.push_back('-');
+
+ hexify(ss, m_uuid, 8, 10);
+ ss.push_back('-');
+
+ hexify(ss, m_uuid, 10, 16);
+
+ return ss;
+ }
+
+ UUID UUID::RandomUUID()
+ {
+ auto secureRandom = Crypto::CreateSecureRandomBytesImplementation();
+ assert(secureRandom);
+
+ unsigned char randomBytes[UUID_BINARY_SIZE];
+ memset(randomBytes, 0, UUID_BINARY_SIZE);
+ secureRandom->GetBytes(randomBytes, UUID_BINARY_SIZE);
+ //Set version bits to 0100
+ //https://tools.ietf.org/html/rfc4122#section-4.1.3
+ randomBytes[VERSION_LOCATION] = (randomBytes[VERSION_LOCATION] & VERSION_MASK) | VERSION;
+ //set variant bits to 10
+ //https://tools.ietf.org/html/rfc4122#section-4.1.1
+ randomBytes[VARIANT_LOCATION] = (randomBytes[VARIANT_LOCATION] & VARIANT_MASK) | VARIANT;
+
+ return UUID(randomBytes);
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/base64/Base64.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/base64/Base64.cpp
new file mode 100644
index 00000000000..2103d6d5a68
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/base64/Base64.cpp
@@ -0,0 +1,148 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/base64/Base64.h>
+#include <cstring>
+
+using namespace Aws::Utils::Base64;
+
+static const uint8_t SENTINEL_VALUE = 255;
+static const char BASE64_ENCODING_TABLE_MIME[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Base64
+{
+
+Base64::Base64(const char *encodingTable)
+{
+ if(encodingTable == nullptr)
+ {
+ encodingTable = BASE64_ENCODING_TABLE_MIME;
+ }
+
+ size_t encodingTableLength = strlen(encodingTable);
+ if(encodingTableLength != 64)
+ {
+ encodingTable = BASE64_ENCODING_TABLE_MIME;
+ encodingTableLength = 64;
+ }
+
+ memcpy(m_mimeBase64EncodingTable, encodingTable, encodingTableLength);
+
+ memset((void *)m_mimeBase64DecodingTable, 0, 256);
+
+ for(uint32_t i = 0; i < encodingTableLength; ++i)
+ {
+ uint32_t index = static_cast<uint32_t>(m_mimeBase64EncodingTable[i]);
+ m_mimeBase64DecodingTable[index] = static_cast<uint8_t>(i);
+ }
+
+ m_mimeBase64DecodingTable[(uint32_t)'='] = SENTINEL_VALUE;
+}
+
+Aws::String Base64::Encode(const Aws::Utils::ByteBuffer& buffer) const
+{
+ size_t bufferLength = buffer.GetLength();
+ size_t blockCount = (bufferLength + 2) / 3;
+ size_t remainderCount = (bufferLength % 3);
+
+ Aws::String outputString;
+ outputString.reserve(CalculateBase64EncodedLength(buffer));
+
+ for(size_t i = 0; i < bufferLength; i += 3 )
+ {
+ uint32_t block = buffer[ i ];
+
+ block <<= 8;
+ if (i + 1 < bufferLength)
+ {
+ block = block | buffer[ i + 1 ];
+ }
+
+ block <<= 8;
+ if (i + 2 < bufferLength)
+ {
+ block = block | buffer[ i + 2 ];
+ }
+
+ outputString.push_back(m_mimeBase64EncodingTable[(block >> 18) & 0x3F]);
+ outputString.push_back(m_mimeBase64EncodingTable[(block >> 12) & 0x3F]);
+ outputString.push_back(m_mimeBase64EncodingTable[(block >> 6) & 0x3F]);
+ outputString.push_back(m_mimeBase64EncodingTable[block & 0x3F]);
+ }
+
+ if(remainderCount > 0)
+ {
+ outputString[blockCount * 4 - 1] = '=';
+ if(remainderCount == 1)
+ {
+ outputString[blockCount * 4 - 2] = '=';
+ }
+ }
+
+ return outputString;
+}
+
+Aws::Utils::ByteBuffer Base64::Decode(const Aws::String& str) const
+{
+ size_t decodedLength = CalculateBase64DecodedLength(str);
+
+ Aws::Utils::ByteBuffer buffer(decodedLength);
+
+ const char* rawString = str.c_str();
+ size_t blockCount = str.length() / 4;
+ for(size_t i = 0; i < blockCount; ++i)
+ {
+ size_t stringIndex = i * 4;
+
+ uint32_t value1 = m_mimeBase64DecodingTable[uint32_t(rawString[stringIndex])];
+ uint32_t value2 = m_mimeBase64DecodingTable[uint32_t(rawString[++stringIndex])];
+ uint32_t value3 = m_mimeBase64DecodingTable[uint32_t(rawString[++stringIndex])];
+ uint32_t value4 = m_mimeBase64DecodingTable[uint32_t(rawString[++stringIndex])];
+
+ size_t bufferIndex = i * 3;
+ buffer[bufferIndex] = static_cast<uint8_t>((value1 << 2) | ((value2 >> 4) & 0x03));
+ if(value3 != SENTINEL_VALUE)
+ {
+ buffer[++bufferIndex] = static_cast<uint8_t>(((value2 << 4) & 0xF0) | ((value3 >> 2) & 0x0F));
+ if(value4 != SENTINEL_VALUE)
+ {
+ buffer[++bufferIndex] = static_cast<uint8_t>((value3 & 0x03) << 6 | value4);
+ }
+ }
+ }
+
+ return buffer;
+}
+
+size_t Base64::CalculateBase64DecodedLength(const Aws::String& b64input)
+{
+ const size_t len = b64input.length();
+ if(len < 2)
+ {
+ return 0;
+ }
+
+ size_t padding = 0;
+
+ if (b64input[len - 1] == '=' && b64input[len - 2] == '=') //last two chars are =
+ padding = 2;
+ else if (b64input[len - 1] == '=') //last char is =
+ padding = 1;
+
+ return (len * 3 / 4 - padding);
+}
+
+size_t Base64::CalculateBase64EncodedLength(const Aws::Utils::ByteBuffer& buffer)
+{
+ return 4 * ((buffer.GetLength() + 2) / 3);
+}
+
+} // namespace Base64
+} // namespace Utils
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Cipher.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Cipher.cpp
new file mode 100644
index 00000000000..1c844273f4d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Cipher.cpp
@@ -0,0 +1,123 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/crypto/Cipher.h>
+#include <aws/core/utils/crypto/Factories.h>
+#include <aws/core/utils/crypto/SecureRandom.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <cstdlib>
+#include <climits>
+
+//if you are reading this, you are witnessing pure brilliance.
+#define IS_BIG_ENDIAN (*(uint16_t*)"\0\xff" < 0x100)
+
+using namespace Aws::Utils::Crypto;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ static const char* LOG_TAG = "Cipher";
+
+ //swap byte ordering
+ template<class T>
+ typename std::enable_if<std::is_unsigned<T>::value, T>::type
+ bswap(T i, T j = 0u, std::size_t n = 0u)
+ {
+ return n == sizeof(T) ? j :
+ bswap<T>(i >> CHAR_BIT, (j << CHAR_BIT) | (i & (T)(unsigned char)(-1)), n + 1);
+ }
+
+ CryptoBuffer IncrementCTRCounter(const CryptoBuffer& counter, uint32_t numberOfBlocks)
+ {
+ // minium counter size is 12 bytes. This isn't a variable because some compilers
+ // are stupid and thing that variable is unused.
+ assert(counter.GetLength() >= 12);
+
+ CryptoBuffer incrementedCounter(counter);
+
+ //get the last 4 bytes and manipulate them as an integer.
+ uint32_t* ctrPtr = (uint32_t*)(incrementedCounter.GetUnderlyingData() + incrementedCounter.GetLength() - sizeof(int32_t));
+ if(IS_BIG_ENDIAN)
+ {
+ //you likely are not Big Endian, but
+ //if it's big endian, just go ahead and increment it... done
+ *ctrPtr += numberOfBlocks;
+ }
+ else
+ {
+ //otherwise, swap the byte ordering of the integer we loaded from the buffer (because it is backwards). However, the number of blocks is already properly
+ //aligned. Once we compute the new value, swap it back so that the mirroring operation goes back to the actual buffer.
+ *ctrPtr = bswap<uint32_t>(bswap<uint32_t>(*ctrPtr) + numberOfBlocks);
+ }
+
+ return incrementedCounter;
+ }
+
+ CryptoBuffer GenerateXRandomBytes(size_t lengthBytes, bool ctrMode)
+ {
+ std::shared_ptr<SecureRandomBytes> rng = CreateSecureRandomBytesImplementation();
+
+ CryptoBuffer bytes(lengthBytes);
+ size_t lengthToGenerate = ctrMode ? (3 * bytes.GetLength()) / 4 : bytes.GetLength();
+
+ rng->GetBytes(bytes.GetUnderlyingData(), lengthToGenerate);
+
+ if(!*rng)
+ {
+ AWS_LOGSTREAM_FATAL(LOG_TAG, "Random Number generation failed. Abort all crypto operations.");
+ assert(false);
+ abort();
+ }
+
+ return bytes;
+ }
+
+ /**
+ * Generate random number per 4 bytes and use each byte for the byte in the iv
+ */
+ CryptoBuffer SymmetricCipher::GenerateIV(size_t ivLengthBytes, bool ctrMode)
+ {
+ CryptoBuffer iv(GenerateXRandomBytes(ivLengthBytes, ctrMode));
+
+ if(iv.GetLength() == 0)
+ {
+ AWS_LOGSTREAM_ERROR(LOG_TAG, "Unable to generate iv of length " << ivLengthBytes);
+ return iv;
+ }
+
+ if(ctrMode)
+ {
+ //init the counter
+ size_t length = iv.GetLength();
+ //[ nonce 1/4] [ iv 1/2 ] [ ctr 1/4 ]
+ size_t ctrStart = (length / 2) + (length / 4);
+ for(; ctrStart < iv.GetLength() - 1; ++ ctrStart)
+ {
+ iv[ctrStart] = 0;
+ }
+ iv[length - 1] = 1;
+ }
+
+ return iv;
+ }
+
+ CryptoBuffer SymmetricCipher::GenerateKey(size_t keyLengthBytes)
+ {
+ CryptoBuffer const& key = GenerateXRandomBytes(keyLengthBytes, false);
+
+ if(key.GetLength() == 0)
+ {
+ AWS_LOGSTREAM_ERROR(LOG_TAG, "Unable to generate key of length " << keyLengthBytes);
+ }
+
+ return key;
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoMaterial.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoMaterial.cpp
new file mode 100644
index 00000000000..3036bd70eb0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoMaterial.cpp
@@ -0,0 +1,34 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/crypto/ContentCryptoMaterial.h>
+#include <aws/core/utils/crypto/Cipher.h>
+
+using namespace Aws::Utils::Crypto;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ ContentCryptoMaterial::ContentCryptoMaterial() :
+ m_cryptoTagLength(0), m_keyWrapAlgorithm(KeyWrapAlgorithm::NONE), m_contentCryptoScheme(ContentCryptoScheme::NONE)
+ {
+ }
+
+ ContentCryptoMaterial::ContentCryptoMaterial(ContentCryptoScheme contentCryptoScheme) :
+ m_contentEncryptionKey(SymmetricCipher::GenerateKey()), m_cryptoTagLength(0), m_keyWrapAlgorithm(KeyWrapAlgorithm::NONE), m_contentCryptoScheme(contentCryptoScheme)
+ {
+
+ }
+
+ ContentCryptoMaterial::ContentCryptoMaterial(const Aws::Utils::CryptoBuffer & cek, ContentCryptoScheme contentCryptoScheme) :
+ m_contentEncryptionKey(cek), m_cryptoTagLength(0), m_keyWrapAlgorithm(KeyWrapAlgorithm::NONE), m_contentCryptoScheme(contentCryptoScheme)
+ {
+
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoScheme.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoScheme.cpp
new file mode 100644
index 00000000000..f39a75df2c8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/ContentCryptoScheme.cpp
@@ -0,0 +1,61 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/crypto/ContentCryptoScheme.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+#include <aws/core/Globals.h>
+
+using namespace Aws::Utils;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ namespace ContentCryptoSchemeMapper
+ {
+ static const int cryptoScheme_CBC_HASH = HashingUtils::HashString("AES/CBC/PKCS5Padding");
+ static const int cryptoScheme_CTR_HASH = HashingUtils::HashString("AES/CTR/NoPadding");
+ static const int cryptoScheme_GCM_HASH = HashingUtils::HashString("AES/GCM/NoPadding");
+
+ ContentCryptoScheme GetContentCryptoSchemeForName(const Aws::String& name)
+ {
+ int hashcode = HashingUtils::HashString(name.c_str());
+ if (hashcode == cryptoScheme_CBC_HASH)
+ {
+ return ContentCryptoScheme::CBC;
+ }
+ else if (hashcode == cryptoScheme_CTR_HASH)
+ {
+ return ContentCryptoScheme::CTR;
+ }
+ else if (hashcode == cryptoScheme_GCM_HASH)
+ {
+ return ContentCryptoScheme::GCM;
+ }
+ assert(0);
+ return ContentCryptoScheme::NONE;
+ }
+
+ Aws::String GetNameForContentCryptoScheme(ContentCryptoScheme enumValue)
+ {
+ switch (enumValue)
+ {
+ case ContentCryptoScheme::CBC:
+ return "AES/CBC/PKCS5Padding";
+ case ContentCryptoScheme::CTR:
+ return "AES/CTR/NoPadding";
+ case ContentCryptoScheme::GCM:
+ return "AES/GCM/NoPadding";
+ default:
+ assert(0);
+ return "";
+ }
+ }
+ }//namespace ContentCryptoSchemeMapper
+ } //namespace Crypto
+ }//namespace Utils
+}//namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoBuf.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoBuf.cpp
new file mode 100644
index 00000000000..2b470976790
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoBuf.cpp
@@ -0,0 +1,348 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/crypto/CryptoBuf.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ SymmetricCryptoBufSrc::SymmetricCryptoBufSrc(Aws::IStream& stream, SymmetricCipher& cipher, CipherMode cipherMode, size_t bufferSize)
+ :
+ m_isBuf(PUT_BACK_SIZE), m_cipher(cipher), m_stream(stream), m_cipherMode(cipherMode), m_isFinalized(false),
+ m_bufferSize(bufferSize), m_putBack(PUT_BACK_SIZE)
+ {
+ char* end = reinterpret_cast<char*>(m_isBuf.GetUnderlyingData() + m_isBuf.GetLength());
+ setg(end, end, end);
+ }
+
+ SymmetricCryptoBufSrc::pos_type SymmetricCryptoBufSrc::seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which)
+ {
+ if(which == std::ios_base::in)
+ {
+ auto curPos = m_stream.tellg();
+ //error on seek we may have read past the end already. Try resetting and seeking to the end first
+ if (curPos == pos_type(-1))
+ {
+ m_stream.clear();
+ m_stream.seekg(0, std::ios_base::end);
+ curPos = m_stream.tellg();
+ }
+
+ auto absPosition = ComputeAbsSeekPosition(off, dir, curPos);
+ size_t seekTo = static_cast<size_t>(absPosition);
+ size_t index = static_cast<size_t>(curPos);
+
+ if(index == seekTo)
+ {
+ return curPos;
+ }
+ else if (seekTo < index)
+ {
+ m_cipher.Reset();
+ m_stream.clear();
+ m_stream.seekg(0);
+ m_isFinalized = false;
+ index = 0;
+ }
+
+ CryptoBuffer cryptoBuffer;
+ while (m_cipher && index < seekTo && !m_isFinalized)
+ {
+ size_t max_read = std::min<size_t>(static_cast<size_t>(seekTo - index), m_bufferSize);
+
+ Aws::Utils::Array<char> buf(max_read);
+ size_t readSize(0);
+ if(m_stream)
+ {
+ m_stream.read(buf.GetUnderlyingData(), max_read);
+ readSize = static_cast<size_t>(m_stream.gcount());
+ }
+
+ if (readSize > 0)
+ {
+ if (m_cipherMode == CipherMode::Encrypt)
+ {
+ cryptoBuffer = m_cipher.EncryptBuffer(CryptoBuffer(reinterpret_cast<unsigned char*>(buf.GetUnderlyingData()), readSize));
+ }
+ else
+ {
+ cryptoBuffer = m_cipher.DecryptBuffer(CryptoBuffer(reinterpret_cast<unsigned char*>(buf.GetUnderlyingData()), readSize));
+ }
+ }
+ else
+ {
+ if (m_cipherMode == CipherMode::Encrypt)
+ {
+ cryptoBuffer = m_cipher.FinalizeEncryption();
+ }
+ else
+ {
+ cryptoBuffer = m_cipher.FinalizeDecryption();
+ }
+
+ m_isFinalized = true;
+ }
+
+ index += cryptoBuffer.GetLength();
+ }
+
+ if (cryptoBuffer.GetLength() && m_cipher)
+ {
+ CryptoBuffer putBackArea(m_putBack);
+
+ m_isBuf = CryptoBuffer({&putBackArea, &cryptoBuffer});
+ //in the very unlikely case that the cipher had less output than the source stream.
+ assert(seekTo <= index);
+ size_t newBufferPos = index > seekTo ? cryptoBuffer.GetLength() - (index - seekTo) : cryptoBuffer.GetLength();
+ char* baseBufPtr = reinterpret_cast<char*>(m_isBuf.GetUnderlyingData());
+ setg(baseBufPtr, baseBufPtr + m_putBack + newBufferPos, baseBufPtr + m_isBuf.GetLength());
+
+ return pos_type(seekTo);
+ }
+ else if (seekTo == 0)
+ {
+ m_isBuf = CryptoBuffer(m_putBack);
+ char* end = reinterpret_cast<char*>(m_isBuf.GetUnderlyingData() + m_isBuf.GetLength());
+ setg(end, end, end);
+ return pos_type(seekTo);
+ }
+ }
+
+ return pos_type(off_type(-1));
+ }
+
+ SymmetricCryptoBufSrc::pos_type SymmetricCryptoBufSrc::seekpos(pos_type pos, std::ios_base::openmode which)
+ {
+ return seekoff(pos, std::ios_base::beg, which);
+ }
+
+ SymmetricCryptoBufSrc::int_type SymmetricCryptoBufSrc::underflow()
+ {
+ if (!m_cipher || (m_isFinalized && gptr() >= egptr()))
+ {
+ return traits_type::eof();
+ }
+
+ if (gptr() < egptr())
+ {
+ return traits_type::to_int_type(*gptr());
+ }
+
+ char* baseBufPtr = reinterpret_cast<char*>(m_isBuf.GetUnderlyingData());
+ CryptoBuffer putBackArea(m_putBack);
+
+ //eback is properly set after the first fill. So this guarantees we are on the second or later fill.
+ if (eback() == baseBufPtr)
+ {
+ //just fill in the last bit of the previous buffer into the put back area so that it has some data in it
+ memcpy(putBackArea.GetUnderlyingData(), egptr() - m_putBack, m_putBack);
+ }
+
+ CryptoBuffer newDataBuf;
+
+ while(!newDataBuf.GetLength() && !m_isFinalized)
+ {
+ Aws::Utils::Array<char> buf(m_bufferSize);
+ m_stream.read(buf.GetUnderlyingData(), m_bufferSize);
+ size_t readSize = static_cast<size_t>(m_stream.gcount());
+
+ if (readSize > 0)
+ {
+ if (m_cipherMode == CipherMode::Encrypt)
+ {
+ newDataBuf = m_cipher.EncryptBuffer(CryptoBuffer(reinterpret_cast<unsigned char*>(buf.GetUnderlyingData()), readSize));
+ }
+ else
+ {
+ newDataBuf = m_cipher.DecryptBuffer(CryptoBuffer(reinterpret_cast<unsigned char*>(buf.GetUnderlyingData()), readSize));
+ }
+ }
+ else
+ {
+ if (m_cipherMode == CipherMode::Encrypt)
+ {
+ newDataBuf = m_cipher.FinalizeEncryption();
+ }
+ else
+ {
+ newDataBuf = m_cipher.FinalizeDecryption();
+ }
+
+ m_isFinalized = true;
+ }
+ }
+
+
+ if(newDataBuf.GetLength() > 0)
+ {
+ m_isBuf = CryptoBuffer({&putBackArea, &newDataBuf});
+
+ baseBufPtr = reinterpret_cast<char*>(m_isBuf.GetUnderlyingData());
+ setg(baseBufPtr, baseBufPtr + m_putBack, baseBufPtr + m_isBuf.GetLength());
+
+ return traits_type::to_int_type(*gptr());
+ }
+
+ return traits_type::eof();
+ }
+
+ SymmetricCryptoBufSrc::off_type SymmetricCryptoBufSrc::ComputeAbsSeekPosition(off_type pos, std::ios_base::seekdir dir, std::fpos<FPOS_TYPE> curPos)
+ {
+ switch(dir)
+ {
+ case std::ios_base::beg:
+ return pos;
+ case std::ios_base::cur:
+ return m_stream.tellg() + pos;
+ case std::ios_base::end:
+ {
+ off_type absPos = m_stream.seekg(0, std::ios_base::end).tellg() - pos;
+ m_stream.seekg(curPos);
+ return absPos;
+ }
+ default:
+ assert(0);
+ return off_type(-1);
+ }
+ }
+
+ void SymmetricCryptoBufSrc::FinalizeCipher()
+ {
+ if(m_cipher && !m_isFinalized)
+ {
+ if(m_cipherMode == CipherMode::Encrypt)
+ {
+ m_cipher.FinalizeEncryption();
+ }
+ else
+ {
+ m_cipher.FinalizeDecryption();
+ }
+ }
+ }
+
+ SymmetricCryptoBufSink::SymmetricCryptoBufSink(Aws::OStream& stream, SymmetricCipher& cipher, CipherMode cipherMode, size_t bufferSize, int16_t blockOffset)
+ :
+ m_osBuf(bufferSize), m_cipher(cipher), m_stream(stream), m_cipherMode(cipherMode), m_isFinalized(false), m_blockOffset(blockOffset)
+ {
+ assert(m_blockOffset < 16 && m_blockOffset >= 0);
+ char* outputBase = reinterpret_cast<char*>(m_osBuf.GetUnderlyingData());
+ setp(outputBase, outputBase + bufferSize - 1);
+ }
+
+ SymmetricCryptoBufSink::~SymmetricCryptoBufSink()
+ {
+ FinalizeCiphersAndFlushSink();
+ }
+
+ void SymmetricCryptoBufSink::FinalizeCiphersAndFlushSink()
+ {
+ if(m_cipher && !m_isFinalized)
+ {
+ writeOutput(true);
+ }
+ }
+
+ bool SymmetricCryptoBufSink::writeOutput(bool finalize)
+ {
+ if(!m_isFinalized)
+ {
+ CryptoBuffer cryptoBuf;
+ if (pptr() > pbase())
+ {
+ if (m_cipherMode == CipherMode::Encrypt)
+ {
+ cryptoBuf = m_cipher.EncryptBuffer(CryptoBuffer(reinterpret_cast<unsigned char*>(pbase()), pptr() - pbase()));
+ }
+ else
+ {
+ cryptoBuf = m_cipher.DecryptBuffer(CryptoBuffer(reinterpret_cast<unsigned char*>(pbase()), pptr() - pbase()));
+ }
+
+ pbump(-(static_cast<int>(pptr() - pbase())));
+ }
+ if(finalize)
+ {
+ CryptoBuffer finalBuffer;
+ if (m_cipherMode == CipherMode::Encrypt)
+ {
+ finalBuffer = m_cipher.FinalizeEncryption();
+ }
+ else
+ {
+ finalBuffer = m_cipher.FinalizeDecryption();
+ }
+ if(cryptoBuf.GetLength())
+ {
+ cryptoBuf = CryptoBuffer({&cryptoBuf, &finalBuffer});
+ }
+ else
+ {
+ cryptoBuf = std::move(finalBuffer);
+ }
+
+ m_isFinalized = true;
+ }
+
+ if (m_cipher)
+ {
+ if(cryptoBuf.GetLength())
+ {
+ //allow mid block decryption. We have to decrypt it, but we don't have to write it to the stream.
+ //the assumption here is that tellp() will always be 0 or >= 16 bytes. The block offset should only
+ //be the offset of the first block read.
+ size_t len = cryptoBuf.GetLength();
+ size_t blockOffset = m_stream.tellp() > m_blockOffset ? 0 : m_blockOffset;
+ if (len > blockOffset)
+ {
+ m_stream.write(reinterpret_cast<char*>(cryptoBuf.GetUnderlyingData() + blockOffset), len - blockOffset);
+ m_blockOffset = 0;
+ }
+ else
+ {
+ m_blockOffset -= static_cast<int16_t>(len);
+ }
+ }
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ SymmetricCryptoBufSink::int_type SymmetricCryptoBufSink::overflow(int_type ch)
+ {
+ if(m_cipher && m_stream)
+ {
+ if(ch != traits_type::eof())
+ {
+ *pptr() = (char)ch;
+ pbump(1);
+ }
+
+ if(writeOutput(ch == traits_type::eof()))
+ {
+ return ch;
+ }
+ }
+
+ return traits_type::eof();
+ }
+
+ int SymmetricCryptoBufSink::sync()
+ {
+ if(m_cipher && m_stream)
+ {
+ return writeOutput(false) ? 0 : -1;
+ }
+
+ return -1;
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoStream.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoStream.cpp
new file mode 100644
index 00000000000..2d645f74278
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/CryptoStream.cpp
@@ -0,0 +1,52 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/crypto/CryptoStream.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ static const char* CLASS_TAG = "Aws::Utils::Crypto::SymmetricCryptoStream";
+
+ SymmetricCryptoStream::SymmetricCryptoStream(Aws::IStream& src, CipherMode mode, SymmetricCipher& cipher, size_t bufSize) :
+ Aws::IOStream(m_cryptoBuf = Aws::New<SymmetricCryptoBufSrc>(CLASS_TAG, src, cipher, mode, bufSize)), m_hasOwnership(true)
+ {
+ }
+
+ SymmetricCryptoStream::SymmetricCryptoStream(Aws::OStream& sink, CipherMode mode, SymmetricCipher& cipher, size_t bufSize, int16_t blockOffset) :
+ Aws::IOStream(m_cryptoBuf = Aws::New<SymmetricCryptoBufSink>(CLASS_TAG, sink, cipher, mode, bufSize, blockOffset)), m_hasOwnership(true)
+ {
+ }
+
+ SymmetricCryptoStream::SymmetricCryptoStream(Aws::Utils::Crypto::SymmetricCryptoBufSrc& bufSrc) :
+ Aws::IOStream(&bufSrc), m_cryptoBuf(&bufSrc), m_hasOwnership(false)
+ {
+ }
+
+ SymmetricCryptoStream::SymmetricCryptoStream(Aws::Utils::Crypto::SymmetricCryptoBufSink& bufSink) :
+ Aws::IOStream(&bufSink), m_cryptoBuf(&bufSink), m_hasOwnership(false)
+ {
+ }
+
+ SymmetricCryptoStream::~SymmetricCryptoStream()
+ {
+ Finalize();
+
+ if(m_hasOwnership && m_cryptoBuf)
+ {
+ Aws::Delete(m_cryptoBuf);
+ }
+ }
+
+ void SymmetricCryptoStream::Finalize()
+ {
+ assert(m_cryptoBuf);
+ m_cryptoBuf->Finalize();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/EncryptionMaterials.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/EncryptionMaterials.cpp
new file mode 100644
index 00000000000..d000c86baa4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/EncryptionMaterials.cpp
@@ -0,0 +1,19 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/crypto/EncryptionMaterials.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ //this is here to force the linker to behave correctly since this is an interface that will need to cross the dll
+ //boundary.
+ EncryptionMaterials::~EncryptionMaterials()
+ {}
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/KeyWrapAlgorithm.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/KeyWrapAlgorithm.cpp
new file mode 100644
index 00000000000..b9e098775c9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/KeyWrapAlgorithm.cpp
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/crypto/KeyWrapAlgorithm.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+#include <aws/core/Globals.h>
+
+using namespace Aws::Utils;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ namespace KeyWrapAlgorithmMapper
+ {
+ static const int keyWrapAlgorithm_KMS_HASH = HashingUtils::HashString("kms");
+ static const int keyWrapAlgorithm_KMS_CONTEXT_HASH = HashingUtils::HashString("kms+context");
+ static const int keyWrapAlgorithm_KeyWrap_HASH = HashingUtils::HashString("AESWrap");
+ static const int keyWrapAlgorithm_AES_GCM_HASH = HashingUtils::HashString("AES/GCM");
+
+ KeyWrapAlgorithm GetKeyWrapAlgorithmForName(const Aws::String& name)
+ {
+ int hashcode = HashingUtils::HashString(name.c_str());
+ if (hashcode == keyWrapAlgorithm_KMS_HASH)
+ {
+ return KeyWrapAlgorithm::KMS;
+ }
+ else if (hashcode == keyWrapAlgorithm_KMS_CONTEXT_HASH)
+ {
+ return KeyWrapAlgorithm::KMS_CONTEXT;
+ }
+ else if (hashcode == keyWrapAlgorithm_KeyWrap_HASH)
+ {
+ return KeyWrapAlgorithm::AES_KEY_WRAP;
+ }
+ else if (hashcode == keyWrapAlgorithm_AES_GCM_HASH)
+ {
+ return KeyWrapAlgorithm::AES_GCM;
+ }
+ assert(0);
+ return KeyWrapAlgorithm::NONE;
+ }
+
+ Aws::String GetNameForKeyWrapAlgorithm(KeyWrapAlgorithm enumValue)
+ {
+ switch (enumValue)
+ {
+ case KeyWrapAlgorithm::KMS:
+ return "kms";
+ case KeyWrapAlgorithm::KMS_CONTEXT:
+ return "kms+context";
+ case KeyWrapAlgorithm::AES_KEY_WRAP:
+ return "AESWrap";
+ case KeyWrapAlgorithm::AES_GCM:
+ return "AES/GCM";
+ default:
+ assert(0);
+ }
+ return "";
+ }
+ }//namespace KeyWrapAlgorithmMapper
+ }//namespace Crypto
+ }//namespace Utils
+}//namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/MD5.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/MD5.cpp
new file mode 100644
index 00000000000..bf14ace1ad3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/MD5.cpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/crypto/MD5.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/utils/crypto/Factories.h>
+
+using namespace Aws::Utils::Crypto;
+
+
+MD5::MD5() :
+ m_hashImpl(CreateMD5Implementation())
+{
+}
+
+MD5::~MD5()
+{
+}
+
+HashResult MD5::Calculate(const Aws::String& str)
+{
+ return m_hashImpl->Calculate(str);
+}
+
+HashResult MD5::Calculate(Aws::IStream& stream)
+{
+ return m_hashImpl->Calculate(stream);
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256.cpp
new file mode 100644
index 00000000000..178df00d37a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256.cpp
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/crypto/Sha256.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/utils/crypto/Factories.h>
+
+using namespace Aws::Utils::Crypto;
+
+Sha256::Sha256() :
+ m_hashImpl(CreateSha256Implementation())
+{
+}
+
+Sha256::~Sha256()
+{
+}
+
+HashResult Sha256::Calculate(const Aws::String& str)
+{
+ return m_hashImpl->Calculate(str);
+}
+
+HashResult Sha256::Calculate(Aws::IStream& stream)
+{
+ return m_hashImpl->Calculate(stream);
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256HMAC.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256HMAC.cpp
new file mode 100644
index 00000000000..ecc1f065297
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/Sha256HMAC.cpp
@@ -0,0 +1,34 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/crypto/Sha256HMAC.h>
+#include <aws/core/utils/crypto/Factories.h>
+#include <aws/core/utils/Outcome.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Crypto
+{
+
+Sha256HMAC::Sha256HMAC() :
+ m_hmacImpl(CreateSha256HMACImplementation())
+{
+}
+
+Sha256HMAC::~Sha256HMAC()
+{
+}
+
+HashResult Sha256HMAC::Calculate(const Aws::Utils::ByteBuffer& toSign, const Aws::Utils::ByteBuffer& secret)
+{
+ return m_hmacImpl->Calculate(toSign, secret);
+}
+
+} // namespace Crypto
+} // namespace Utils
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp
new file mode 100644
index 00000000000..bff03822418
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp
@@ -0,0 +1,895 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/crypto/Factories.h>
+#include <aws/core/utils/crypto/Hash.h>
+#include <aws/core/utils/crypto/HMAC.h>
+
+#if ENABLE_BCRYPT_ENCRYPTION
+ #error #include <aws/core/utils/crypto/bcrypt/CryptoImpl.h>
+#elif ENABLE_OPENSSL_ENCRYPTION
+ #include <aws/core/utils/crypto/openssl/CryptoImpl.h>
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ #error #include <aws/core/utils/crypto/commoncrypto/CryptoImpl.h>
+ #include <aws/core/utils/logging/LogMacros.h>
+#else
+ // if you don't have any encryption you still need to pull in the interface definitions
+ #include <aws/core/utils/crypto/Hash.h>
+ #include <aws/core/utils/crypto/HMAC.h>
+ #include <aws/core/utils/crypto/Cipher.h>
+ #include <aws/core/utils/crypto/SecureRandom.h>
+ #define NO_ENCRYPTION
+#endif
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Crypto;
+
+static const char *s_allocationTag = "CryptoFactory";
+
+static std::shared_ptr<HashFactory>& GetMD5Factory()
+{
+ static std::shared_ptr<HashFactory> s_MD5Factory(nullptr);
+ return s_MD5Factory;
+}
+
+static std::shared_ptr<HashFactory>& GetSha256Factory()
+{
+ static std::shared_ptr<HashFactory> s_Sha256Factory(nullptr);
+ return s_Sha256Factory;
+}
+
+static std::shared_ptr<HMACFactory>& GetSha256HMACFactory()
+{
+ static std::shared_ptr<HMACFactory> s_Sha256HMACFactory(nullptr);
+ return s_Sha256HMACFactory;
+}
+
+static std::shared_ptr<SymmetricCipherFactory>& GetAES_CBCFactory()
+{
+ static std::shared_ptr<SymmetricCipherFactory> s_AES_CBCFactory(nullptr);
+ return s_AES_CBCFactory;
+}
+
+static std::shared_ptr<SymmetricCipherFactory>& GetAES_CTRFactory()
+{
+ static std::shared_ptr<SymmetricCipherFactory> s_AES_CTRFactory(nullptr);
+ return s_AES_CTRFactory;
+}
+
+static std::shared_ptr<SymmetricCipherFactory>& GetAES_GCMFactory()
+{
+ static std::shared_ptr<SymmetricCipherFactory> s_AES_GCMFactory(nullptr);
+ return s_AES_GCMFactory;
+}
+
+static std::shared_ptr<SymmetricCipherFactory>& GetAES_KeyWrapFactory()
+{
+ static std::shared_ptr<SymmetricCipherFactory> s_AES_KeyWrapFactory(nullptr);
+ return s_AES_KeyWrapFactory;
+}
+
+static std::shared_ptr<SecureRandomFactory>& GetSecureRandomFactory()
+{
+ static std::shared_ptr<SecureRandomFactory> s_SecureRandomFactory(nullptr);
+ return s_SecureRandomFactory;
+}
+
+static std::shared_ptr<SecureRandomBytes>& GetSecureRandom()
+{
+ static std::shared_ptr<SecureRandomBytes> s_SecureRandom(nullptr);
+ return s_SecureRandom;
+}
+
+static bool s_InitCleanupOpenSSLFlag(false);
+
+class DefaultMD5Factory : public HashFactory
+{
+public:
+ std::shared_ptr<Hash> CreateImplementation() const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<MD5BcryptImpl>(s_allocationTag);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<MD5OpenSSLImpl>(s_allocationTag);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<MD5CommonCryptoImpl>(s_allocationTag);
+#else
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+class DefaultSHA256Factory : public HashFactory
+{
+public:
+ std::shared_ptr<Hash> CreateImplementation() const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<Sha256BcryptImpl>(s_allocationTag);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<Sha256OpenSSLImpl>(s_allocationTag);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<Sha256CommonCryptoImpl>(s_allocationTag);
+#else
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+class DefaultSHA256HmacFactory : public HMACFactory
+{
+public:
+ std::shared_ptr<Aws::Utils::Crypto::HMAC> CreateImplementation() const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<Sha256HMACBcryptImpl>(s_allocationTag);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<Sha256HMACOpenSSLImpl>(s_allocationTag);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<Sha256HMACCommonCryptoImpl>(s_allocationTag);
+#else
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+
+class DefaultAES_CBCFactory : public SymmetricCipherFactory
+{
+public:
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_BCrypt>(s_allocationTag, key);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_OpenSSL>(s_allocationTag, key);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_CommonCrypto>(s_allocationTag, key);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ return nullptr;
+#endif
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key, const CryptoBuffer& iv, const CryptoBuffer&, const CryptoBuffer&) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_BCrypt>(s_allocationTag, key, iv);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_OpenSSL>(s_allocationTag, key, iv);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_CommonCrypto>(s_allocationTag, key, iv);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+
+ return nullptr;
+#endif
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(CryptoBuffer&& key, CryptoBuffer&& iv, CryptoBuffer&&, CryptoBuffer&&) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_BCrypt>(s_allocationTag, key, iv);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_OpenSSL>(s_allocationTag, key, iv);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_CBC_Cipher_CommonCrypto>(s_allocationTag, key, iv);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+class DefaultAES_CTRFactory : public SymmetricCipherFactory
+{
+public:
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_BCrypt>(s_allocationTag, key);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_OpenSSL>(s_allocationTag, key);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_CommonCrypto>(s_allocationTag, key);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ return nullptr;
+#endif
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key, const CryptoBuffer& iv, const CryptoBuffer&, const CryptoBuffer&) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_BCrypt>(s_allocationTag, key, iv);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_OpenSSL>(s_allocationTag, key, iv);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_CommonCrypto>(s_allocationTag, key, iv);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+
+ return nullptr;
+#endif
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(CryptoBuffer&& key, CryptoBuffer&& iv, CryptoBuffer&&, CryptoBuffer&&) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_BCrypt>(s_allocationTag, key, iv);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_OpenSSL>(s_allocationTag, key, iv);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_CTR_Cipher_CommonCrypto>(s_allocationTag, key, iv);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+class DefaultAES_GCMFactory : public SymmetricCipherFactory
+{
+public:
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_BCrypt>(s_allocationTag, key);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_OpenSSL>(s_allocationTag, key);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_CommonCrypto>(s_allocationTag, key);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+
+ return nullptr;
+#endif
+ }
+
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key, const CryptoBuffer* aad) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_BCrypt>(s_allocationTag, key, aad);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_OpenSSL>(s_allocationTag, key, aad);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_CommonCrypto>(s_allocationTag, key, aad);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(aad);
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key, const CryptoBuffer& iv, const CryptoBuffer& tag, const CryptoBuffer& aad) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_BCrypt>(s_allocationTag, key, iv, tag, aad);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_OpenSSL>(s_allocationTag, key, iv, tag, aad);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_CommonCrypto>(s_allocationTag, key, iv, tag, aad);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+ AWS_UNREFERENCED_PARAM(tag);
+ AWS_UNREFERENCED_PARAM(aad);
+ return nullptr;
+#endif
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(CryptoBuffer&& key, CryptoBuffer&& iv, CryptoBuffer&& tag, CryptoBuffer&& aad) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_BCrypt>(s_allocationTag, std::move(key), std::move(iv), std::move(tag), std::move(aad));
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_OpenSSL>(s_allocationTag, std::move(key), std::move(iv), std::move(tag), std::move(aad));
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_GCM_Cipher_CommonCrypto>(s_allocationTag, std::move(key), std::move(iv), std::move(tag), std::move(aad));
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+ AWS_UNREFERENCED_PARAM(tag);
+ AWS_UNREFERENCED_PARAM(aad);
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+class DefaultAES_KeyWrapFactory : public SymmetricCipherFactory
+{
+public:
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key) const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<AES_KeyWrap_Cipher_BCrypt>(s_allocationTag, key);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<AES_KeyWrap_Cipher_OpenSSL>(s_allocationTag, key);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<AES_KeyWrap_Cipher_CommonCrypto>(s_allocationTag, key);
+#else
+ AWS_UNREFERENCED_PARAM(key);
+ return nullptr;
+#endif
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(const CryptoBuffer& key, const CryptoBuffer& iv, const CryptoBuffer& tag, const CryptoBuffer&) const override
+ {
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+ AWS_UNREFERENCED_PARAM(tag);
+ return nullptr;
+ }
+ /**
+ * Factory method. Returns cipher implementation. See the SymmetricCipher class for more details.
+ */
+ std::shared_ptr<SymmetricCipher> CreateImplementation(CryptoBuffer&& key, CryptoBuffer&& iv, CryptoBuffer&& tag, CryptoBuffer&&) const override
+ {
+ AWS_UNREFERENCED_PARAM(key);
+ AWS_UNREFERENCED_PARAM(iv);
+ AWS_UNREFERENCED_PARAM(tag);
+ return nullptr;
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if (s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if (s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+class DefaultSecureRandFactory : public SecureRandomFactory
+{
+ /**
+ * Factory method. Returns SecureRandom implementation.
+ */
+ std::shared_ptr<SecureRandomBytes> CreateImplementation() const override
+ {
+#if ENABLE_BCRYPT_ENCRYPTION
+ return Aws::MakeShared<SecureRandomBytes_BCrypt>(s_allocationTag);
+#elif ENABLE_OPENSSL_ENCRYPTION
+ return Aws::MakeShared<SecureRandomBytes_OpenSSLImpl>(s_allocationTag);
+#elif ENABLE_COMMONCRYPTO_ENCRYPTION
+ return Aws::MakeShared<SecureRandomBytes_CommonCrypto>(s_allocationTag);
+#else
+ return nullptr;
+#endif
+ }
+
+ /**
+ * Opportunity to make any static initialization calls you need to make.
+ * Will only be called once.
+ */
+ void InitStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.EnterRoom(&OpenSSL::init_static_state);
+ }
+#endif
+ }
+
+ /**
+ * Opportunity to make any static cleanup calls you need to make.
+ * will only be called at the end of the application.
+ */
+ void CleanupStaticState() override
+ {
+#if ENABLE_OPENSSL_ENCRYPTION
+ if(s_InitCleanupOpenSSLFlag)
+ {
+ OpenSSL::getTheLights.LeaveRoom(&OpenSSL::cleanup_static_state);
+ }
+#endif
+ }
+};
+
+void Aws::Utils::Crypto::SetInitCleanupOpenSSLFlag(bool initCleanupFlag)
+{
+ s_InitCleanupOpenSSLFlag = initCleanupFlag;
+}
+
+void Aws::Utils::Crypto::InitCrypto()
+{
+ if(GetMD5Factory())
+ {
+ GetMD5Factory()->InitStaticState();
+ }
+ else
+ {
+ GetMD5Factory() = Aws::MakeShared<DefaultMD5Factory>(s_allocationTag);
+ GetMD5Factory()->InitStaticState();
+ }
+
+ if(GetSha256Factory())
+ {
+ GetSha256Factory()->InitStaticState();
+ }
+ else
+ {
+ GetSha256Factory() = Aws::MakeShared<DefaultSHA256Factory>(s_allocationTag);
+ GetSha256Factory()->InitStaticState();
+ }
+
+ if(GetSha256HMACFactory())
+ {
+ GetSha256HMACFactory()->InitStaticState();
+ }
+ else
+ {
+ GetSha256HMACFactory() = Aws::MakeShared<DefaultSHA256HmacFactory>(s_allocationTag);
+ GetSha256HMACFactory()->InitStaticState();
+ }
+
+ if(GetAES_CBCFactory())
+ {
+ GetAES_CBCFactory()->InitStaticState();
+ }
+ else
+ {
+ GetAES_CBCFactory() = Aws::MakeShared<DefaultAES_CBCFactory>(s_allocationTag);
+ GetAES_CBCFactory()->InitStaticState();
+ }
+
+ if(GetAES_CTRFactory())
+ {
+ GetAES_CTRFactory()->InitStaticState();
+ }
+ else
+ {
+ GetAES_CTRFactory() = Aws::MakeShared<DefaultAES_CTRFactory>(s_allocationTag);
+ GetAES_CTRFactory()->InitStaticState();
+ }
+
+ if(GetAES_GCMFactory())
+ {
+ GetAES_GCMFactory()->InitStaticState();
+ }
+ else
+ {
+ GetAES_GCMFactory() = Aws::MakeShared<DefaultAES_GCMFactory>(s_allocationTag);
+ GetAES_GCMFactory()->InitStaticState();
+ }
+
+ if (!GetAES_KeyWrapFactory())
+ {
+ GetAES_KeyWrapFactory() = Aws::MakeShared<DefaultAES_KeyWrapFactory>(s_allocationTag);
+ }
+ GetAES_KeyWrapFactory()->InitStaticState();
+
+ if(GetSecureRandomFactory())
+ {
+ GetSecureRandomFactory()->InitStaticState();
+ }
+ else
+ {
+ GetSecureRandomFactory() = Aws::MakeShared<DefaultSecureRandFactory>(s_allocationTag);
+ GetSecureRandomFactory()->InitStaticState();
+ }
+
+ GetSecureRandom() = GetSecureRandomFactory()->CreateImplementation();
+}
+
+void Aws::Utils::Crypto::CleanupCrypto()
+{
+ if(GetMD5Factory())
+ {
+ GetMD5Factory()->CleanupStaticState();
+ GetMD5Factory() = nullptr;
+ }
+
+ if(GetSha256Factory())
+ {
+ GetSha256Factory()->CleanupStaticState();
+ GetSha256Factory() = nullptr;
+ }
+
+ if(GetSha256HMACFactory())
+ {
+ GetSha256HMACFactory()->CleanupStaticState();
+ GetSha256HMACFactory() = nullptr;
+ }
+
+ if(GetAES_CBCFactory())
+ {
+ GetAES_CBCFactory()->CleanupStaticState();
+ GetAES_CBCFactory() = nullptr;
+ }
+
+ if(GetAES_CTRFactory())
+ {
+ GetAES_CTRFactory()->CleanupStaticState();
+ GetAES_CTRFactory() = nullptr;
+ }
+
+ if(GetAES_GCMFactory())
+ {
+ GetAES_GCMFactory()->CleanupStaticState();
+ GetAES_GCMFactory() = nullptr;
+ }
+
+ if(GetAES_KeyWrapFactory())
+ {
+ GetAES_KeyWrapFactory()->CleanupStaticState();
+ GetAES_KeyWrapFactory() = nullptr;
+ }
+
+ if(GetSecureRandomFactory())
+ {
+ GetSecureRandom() = nullptr;
+ GetSecureRandomFactory()->CleanupStaticState();
+ GetSecureRandomFactory() = nullptr;
+ }
+}
+
+void Aws::Utils::Crypto::SetMD5Factory(const std::shared_ptr<HashFactory>& factory)
+{
+ GetMD5Factory() = factory;
+}
+
+void Aws::Utils::Crypto::SetSha256Factory(const std::shared_ptr<HashFactory>& factory)
+{
+ GetSha256Factory() = factory;
+}
+
+void Aws::Utils::Crypto::SetSha256HMACFactory(const std::shared_ptr<HMACFactory>& factory)
+{
+ GetSha256HMACFactory() = factory;
+}
+
+void Aws::Utils::Crypto::SetAES_CBCFactory(const std::shared_ptr<SymmetricCipherFactory>& factory)
+{
+ GetAES_CBCFactory() = factory;
+}
+
+void Aws::Utils::Crypto::SetAES_CTRFactory(const std::shared_ptr<SymmetricCipherFactory>& factory)
+{
+ GetAES_CTRFactory() = factory;
+}
+
+void Aws::Utils::Crypto::SetAES_GCMFactory(const std::shared_ptr<SymmetricCipherFactory>& factory)
+{
+ GetAES_GCMFactory() = factory;
+}
+
+void Aws::Utils::Crypto::SetAES_KeyWrapFactory(const std::shared_ptr<SymmetricCipherFactory>& factory)
+{
+ GetAES_KeyWrapFactory() = factory;
+}
+
+void Aws::Utils::Crypto::SetSecureRandomFactory(const std::shared_ptr<SecureRandomFactory>& factory)
+{
+ GetSecureRandomFactory() = factory;
+}
+
+std::shared_ptr<Hash> Aws::Utils::Crypto::CreateMD5Implementation()
+{
+ return GetMD5Factory()->CreateImplementation();
+}
+
+std::shared_ptr<Hash> Aws::Utils::Crypto::CreateSha256Implementation()
+{
+ return GetSha256Factory()->CreateImplementation();
+}
+
+std::shared_ptr<Aws::Utils::Crypto::HMAC> Aws::Utils::Crypto::CreateSha256HMACImplementation()
+{
+ return GetSha256HMACFactory()->CreateImplementation();
+}
+
+#ifdef _WIN32
+#pragma warning( push )
+#pragma warning( disable : 4702 )
+#endif
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_CBCImplementation(const CryptoBuffer& key)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_CBCFactory()->CreateImplementation(key);
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_CBCImplementation(const CryptoBuffer& key, const CryptoBuffer& iv)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_CBCFactory()->CreateImplementation(key, iv);
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_CBCImplementation(CryptoBuffer&& key, CryptoBuffer&& iv)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_CBCFactory()->CreateImplementation(std::move(key), std::move(iv));
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_CTRImplementation(const CryptoBuffer& key)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_CTRFactory()->CreateImplementation(key);
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_CTRImplementation(const CryptoBuffer& key, const CryptoBuffer& iv)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_CTRFactory()->CreateImplementation(key, iv);
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_CTRImplementation(CryptoBuffer&& key, CryptoBuffer&& iv)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_CTRFactory()->CreateImplementation(std::move(key), std::move(iv));
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_GCMImplementation(const CryptoBuffer& key)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_GCMFactory()->CreateImplementation(key);
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_GCMImplementation(const CryptoBuffer& key, const CryptoBuffer* aad)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_GCMFactory()->CreateImplementation(key, aad);
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_GCMImplementation(const CryptoBuffer& key, const CryptoBuffer& iv, const CryptoBuffer& tag, const CryptoBuffer& aad)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_GCMFactory()->CreateImplementation(key, iv, tag, aad);
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_GCMImplementation(CryptoBuffer&& key, CryptoBuffer&& iv, CryptoBuffer&& tag, CryptoBuffer&& aad)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_GCMFactory()->CreateImplementation(std::move(key), std::move(iv), std::move(tag), std::move(aad));
+}
+
+std::shared_ptr<SymmetricCipher> Aws::Utils::Crypto::CreateAES_KeyWrapImplementation(const CryptoBuffer& key)
+{
+#ifdef NO_SYMMETRIC_ENCRYPTION
+ return nullptr;
+#endif
+ return GetAES_KeyWrapFactory()->CreateImplementation(key);
+}
+
+#ifdef _WIN32
+#pragma warning(pop)
+#endif
+
+std::shared_ptr<SecureRandomBytes> Aws::Utils::Crypto::CreateSecureRandomBytesImplementation()
+{
+ return GetSecureRandom();
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp
new file mode 100644
index 00000000000..911838864b3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/crypto/openssl/CryptoImpl.cpp
@@ -0,0 +1,987 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <cstring>
+
+#include <aws/core/utils/memory/AWSMemory.h>
+#include <aws/core/utils/crypto/openssl/CryptoImpl.h>
+#include <aws/core/utils/Outcome.h>
+#include <openssl/md5.h>
+
+#ifdef OPENSSL_IS_BORINGSSL
+#ifdef _MSC_VER
+AWS_SUPPRESS_WARNING_PUSH(4201)
+#else
+AWS_SUPPRESS_WARNING_PUSH("-Wpedantic")
+#endif
+#endif
+
+#include <openssl/sha.h>
+
+#ifdef OPENSSL_IS_BORINGSSL
+AWS_SUPPRESS_WARNING_POP
+#endif
+
+#include <openssl/err.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <thread>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Crypto;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Crypto
+ {
+ namespace OpenSSL
+ {
+/**
+ * openssl with OPENSSL_VERSION_NUMBER < 0x10100003L made data type details unavailable
+ * libressl use openssl with data type details available, but mandatorily set
+ * OPENSSL_VERSION_NUMBER = 0x20000000L, insane!
+ * https://github.com/aws/aws-sdk-cpp/pull/507/commits/2c99f1fe0c4b4683280caeb161538d4724d6a179
+ */
+#if defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER == 0x20000000L)
+#undef OPENSSL_VERSION_NUMBER
+#define OPENSSL_VERSION_NUMBER 0x1000107fL
+#endif
+#define OPENSSL_VERSION_LESS_1_1 (OPENSSL_VERSION_NUMBER < 0x10100003L)
+
+#if OPENSSL_VERSION_LESS_1_1
+ static const char* OPENSSL_INTERNALS_TAG = "OpenSSLCallbackState";
+ static std::mutex* locks(nullptr);
+#endif
+
+ GetTheLights getTheLights;
+
+ void init_static_state()
+ {
+#if OPENSSL_VERSION_LESS_1_1 || defined(OPENSSL_IS_BORINGSSL)
+ ERR_load_crypto_strings();
+#else
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS /*options*/ ,NULL /* OpenSSL init settings*/ );
+#endif
+#if !defined(OPENSSL_IS_BORINGSSL)
+ OPENSSL_add_all_algorithms_noconf();
+#endif
+#if OPENSSL_VERSION_LESS_1_1
+ if (!CRYPTO_get_locking_callback())
+ {
+ locks = Aws::NewArray<std::mutex>(static_cast<size_t>(CRYPTO_num_locks()),
+ OPENSSL_INTERNALS_TAG);
+ CRYPTO_set_locking_callback(&locking_fn);
+ }
+
+ if (!CRYPTO_get_id_callback())
+ {
+ CRYPTO_set_id_callback(&id_fn);
+ }
+#endif
+ RAND_poll();
+ }
+
+ void cleanup_static_state()
+ {
+#if OPENSSL_VERSION_LESS_1_1
+ if (CRYPTO_get_locking_callback() == &locking_fn)
+ {
+ CRYPTO_set_locking_callback(nullptr);
+ assert(locks);
+ Aws::DeleteArray(locks);
+ locks = nullptr;
+ }
+
+ if (CRYPTO_get_id_callback() == &id_fn)
+ {
+ CRYPTO_set_id_callback(nullptr);
+ }
+#endif
+ }
+
+#if OPENSSL_VERSION_LESS_1_1
+ void locking_fn(int mode, int n, const char*, int)
+ {
+ if (mode & CRYPTO_LOCK)
+ {
+ locks[n].lock();
+ }
+ else
+ {
+ locks[n].unlock();
+ }
+ }
+
+ unsigned long id_fn()
+ {
+ return static_cast<unsigned long>(std::hash<std::thread::id>()(std::this_thread::get_id()));
+ }
+#endif
+ }
+
+ static const char* OPENSSL_LOG_TAG = "OpenSSLCipher";
+
+ void SecureRandomBytes_OpenSSLImpl::GetBytes(unsigned char* buffer, size_t bufferSize)
+ {
+ if (!bufferSize)
+ {
+ return;
+ }
+
+ if (!buffer)
+ {
+ AWS_LOGSTREAM_FATAL(OPENSSL_LOG_TAG, "Secure Random Bytes generator can't generate: " << bufferSize << " bytes with nullptr buffer.");
+ assert(buffer);
+ return;
+ }
+
+ int success = RAND_bytes(buffer, static_cast<int>(bufferSize));
+ if (success != 1)
+ {
+ m_failure = true;
+ }
+ }
+
+ class OpensslCtxRAIIGuard
+ {
+ public:
+ OpensslCtxRAIIGuard()
+ {
+ m_ctx = EVP_MD_CTX_create();
+ assert(m_ctx != nullptr);
+ }
+
+ ~OpensslCtxRAIIGuard()
+ {
+ EVP_MD_CTX_destroy(m_ctx);
+ m_ctx = nullptr;
+ }
+
+ EVP_MD_CTX* getResource()
+ {
+ return m_ctx;
+ }
+ private:
+ EVP_MD_CTX *m_ctx;
+ };
+
+ HashResult MD5OpenSSLImpl::Calculate(const Aws::String& str)
+ {
+ OpensslCtxRAIIGuard guard;
+ auto ctx = guard.getResource();
+#if !defined(OPENSSL_IS_BORINGSSL)
+ EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
+#endif
+ EVP_DigestInit_ex(ctx, EVP_md5(), nullptr);
+ EVP_DigestUpdate(ctx, str.c_str(), str.size());
+
+ ByteBuffer hash(EVP_MD_size(EVP_md5()));
+ EVP_DigestFinal(ctx, hash.GetUnderlyingData(), nullptr);
+
+ return HashResult(std::move(hash));
+ }
+
+ HashResult MD5OpenSSLImpl::Calculate(Aws::IStream& stream)
+ {
+ OpensslCtxRAIIGuard guard;
+ auto ctx = guard.getResource();
+#if !defined(OPENSSL_IS_BORINGSSL)
+ EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
+#endif
+ EVP_DigestInit_ex(ctx, EVP_md5(), nullptr);
+
+ auto currentPos = stream.tellg();
+ if (currentPos == -1)
+ {
+ currentPos = 0;
+ stream.clear();
+ }
+ stream.seekg(0, stream.beg);
+
+ char streamBuffer[Aws::Utils::Crypto::Hash::INTERNAL_HASH_STREAM_BUFFER_SIZE];
+ while (stream.good())
+ {
+ stream.read(streamBuffer, Aws::Utils::Crypto::Hash::INTERNAL_HASH_STREAM_BUFFER_SIZE);
+ auto bytesRead = stream.gcount();
+
+ if (bytesRead > 0)
+ {
+ EVP_DigestUpdate(ctx, streamBuffer, static_cast<size_t>(bytesRead));
+ }
+ }
+
+ stream.clear();
+ stream.seekg(currentPos, stream.beg);
+
+ ByteBuffer hash(EVP_MD_size(EVP_md5()));
+ EVP_DigestFinal(ctx, hash.GetUnderlyingData(), nullptr);
+
+ return HashResult(std::move(hash));
+ }
+
+ HashResult Sha256OpenSSLImpl::Calculate(const Aws::String& str)
+ {
+ OpensslCtxRAIIGuard guard;
+ auto ctx = guard.getResource();
+ EVP_DigestInit_ex(ctx, EVP_sha256(), nullptr);
+ EVP_DigestUpdate(ctx, str.c_str(), str.size());
+
+ ByteBuffer hash(EVP_MD_size(EVP_sha256()));
+ EVP_DigestFinal(ctx, hash.GetUnderlyingData(), nullptr);
+
+ return HashResult(std::move(hash));
+ }
+
+ HashResult Sha256OpenSSLImpl::Calculate(Aws::IStream& stream)
+ {
+ OpensslCtxRAIIGuard guard;
+ auto ctx = guard.getResource();
+
+ EVP_DigestInit_ex(ctx, EVP_sha256(), nullptr);
+
+ auto currentPos = stream.tellg();
+ if (currentPos == -1)
+ {
+ currentPos = 0;
+ stream.clear();
+ }
+
+ stream.seekg(0, stream.beg);
+
+ char streamBuffer[Aws::Utils::Crypto::Hash::INTERNAL_HASH_STREAM_BUFFER_SIZE];
+ while (stream.good())
+ {
+ stream.read(streamBuffer, Aws::Utils::Crypto::Hash::INTERNAL_HASH_STREAM_BUFFER_SIZE);
+ auto bytesRead = stream.gcount();
+
+ if (bytesRead > 0)
+ {
+ EVP_DigestUpdate(ctx, streamBuffer, static_cast<size_t>(bytesRead));
+ }
+ }
+
+ stream.clear();
+ stream.seekg(currentPos, stream.beg);
+
+ ByteBuffer hash(EVP_MD_size(EVP_sha256()));
+ EVP_DigestFinal(ctx, hash.GetUnderlyingData(), nullptr);
+
+ return HashResult(std::move(hash));
+ }
+
+ class HMACRAIIGuard {
+ public:
+ HMACRAIIGuard() {
+#if OPENSSL_VERSION_LESS_1_1
+ m_ctx = Aws::New<HMAC_CTX>("AllocSha256HAMCOpenSSLContext");
+#else
+ m_ctx = HMAC_CTX_new();
+#endif
+ assert(m_ctx != nullptr);
+ }
+
+ ~HMACRAIIGuard() {
+#if OPENSSL_VERSION_LESS_1_1
+ Aws::Delete<HMAC_CTX>(m_ctx);
+#else
+ HMAC_CTX_free(m_ctx);
+#endif
+ m_ctx = nullptr;
+ }
+
+ HMAC_CTX* getResource() {
+ return m_ctx;
+ }
+ private:
+ HMAC_CTX *m_ctx;
+ };
+
+ HashResult Sha256HMACOpenSSLImpl::Calculate(const ByteBuffer& toSign, const ByteBuffer& secret)
+ {
+ unsigned int length = SHA256_DIGEST_LENGTH;
+ ByteBuffer digest(length);
+ memset(digest.GetUnderlyingData(), 0, length);
+
+ HMACRAIIGuard guard;
+ HMAC_CTX* m_ctx = guard.getResource();
+
+#if OPENSSL_VERSION_LESS_1_1
+ HMAC_CTX_init(m_ctx);
+#endif
+
+ HMAC_Init_ex(m_ctx, secret.GetUnderlyingData(), static_cast<int>(secret.GetLength()), EVP_sha256(),
+ NULL);
+ HMAC_Update(m_ctx, toSign.GetUnderlyingData(), toSign.GetLength());
+ HMAC_Final(m_ctx, digest.GetUnderlyingData(), &length);
+
+#if OPENSSL_VERSION_LESS_1_1
+ HMAC_CTX_cleanup(m_ctx);
+#else
+ HMAC_CTX_reset(m_ctx);
+#endif
+ return HashResult(std::move(digest));
+ }
+
+ void LogErrors(const char* logTag = OPENSSL_LOG_TAG)
+ {
+ unsigned long errorCode = ERR_get_error();
+ char errStr[256];
+ ERR_error_string_n(errorCode, errStr, 256);
+
+ AWS_LOGSTREAM_ERROR(logTag, errStr);
+ }
+
+ OpenSSLCipher::OpenSSLCipher(const CryptoBuffer& key, size_t blockSizeBytes, bool ctrMode) :
+ SymmetricCipher(key, blockSizeBytes, ctrMode), m_encryptor_ctx(nullptr), m_decryptor_ctx(nullptr)
+ {
+ Init();
+ }
+
+ OpenSSLCipher::OpenSSLCipher(OpenSSLCipher&& toMove) : SymmetricCipher(std::move(toMove)),
+ m_encryptor_ctx(nullptr), m_decryptor_ctx(nullptr)
+ {
+ Init();
+ EVP_CIPHER_CTX_copy(m_encryptor_ctx, toMove.m_encryptor_ctx);
+ EVP_CIPHER_CTX_copy(m_decryptor_ctx, toMove.m_decryptor_ctx);
+ EVP_CIPHER_CTX_cleanup(toMove.m_encryptor_ctx);
+ EVP_CIPHER_CTX_cleanup(toMove.m_decryptor_ctx);
+ }
+
+ OpenSSLCipher::OpenSSLCipher(CryptoBuffer&& key, CryptoBuffer&& initializationVector, CryptoBuffer&& tag) :
+ SymmetricCipher(std::move(key), std::move(initializationVector), std::move(tag)),
+ m_encryptor_ctx(nullptr), m_decryptor_ctx(nullptr)
+ {
+ Init();
+ }
+
+ OpenSSLCipher::OpenSSLCipher(const CryptoBuffer& key, const CryptoBuffer& initializationVector,
+ const CryptoBuffer& tag) :
+ SymmetricCipher(key, initializationVector, tag), m_encryptor_ctx(nullptr), m_decryptor_ctx(nullptr)
+ {
+ Init();
+ }
+
+ OpenSSLCipher::~OpenSSLCipher()
+ {
+ Cleanup();
+ if (m_encryptor_ctx)
+ {
+ EVP_CIPHER_CTX_free(m_encryptor_ctx);
+ m_encryptor_ctx = nullptr;
+ }
+ if (m_decryptor_ctx)
+ {
+ EVP_CIPHER_CTX_free(m_decryptor_ctx);
+ m_decryptor_ctx = nullptr;
+ }
+ }
+
+ void OpenSSLCipher::Init()
+ {
+ if (m_failure)
+ {
+ return;
+ }
+
+ if (!m_encryptor_ctx)
+ {
+ // EVP_CIPHER_CTX_init() will be called inside EVP_CIPHER_CTX_new().
+ m_encryptor_ctx = EVP_CIPHER_CTX_new();
+ assert(m_encryptor_ctx != nullptr);
+ }
+ else
+ { // _init is the same as _reset after openssl 1.1
+ EVP_CIPHER_CTX_init(m_encryptor_ctx);
+ }
+ if (!m_decryptor_ctx)
+ {
+ // EVP_CIPHER_CTX_init() will be called inside EVP_CIPHER_CTX_new().
+ m_decryptor_ctx = EVP_CIPHER_CTX_new();
+ assert(m_decryptor_ctx != nullptr);
+ }
+ else
+ { // _init is the same as _reset after openssl 1.1
+ EVP_CIPHER_CTX_init(m_decryptor_ctx);
+ }
+ m_emptyPlaintext = false;
+ }
+
+ CryptoBuffer OpenSSLCipher::EncryptBuffer(const CryptoBuffer& unEncryptedData)
+ {
+ if (m_failure)
+ {
+ AWS_LOGSTREAM_FATAL(OPENSSL_LOG_TAG, "Cipher not properly initialized for encryption. Aborting");
+ return CryptoBuffer();
+ }
+
+ int lengthWritten = static_cast<int>(unEncryptedData.GetLength() + (GetBlockSizeBytes() - 1));
+ CryptoBuffer encryptedText(static_cast<size_t>( lengthWritten + (GetBlockSizeBytes() - 1)));
+
+ if (!EVP_EncryptUpdate(m_encryptor_ctx, encryptedText.GetUnderlyingData(), &lengthWritten,
+ unEncryptedData.GetUnderlyingData(),
+ static_cast<int>(unEncryptedData.GetLength())))
+ {
+ m_failure = true;
+ LogErrors();
+ return CryptoBuffer();
+ }
+
+ if (static_cast<size_t>(lengthWritten) < encryptedText.GetLength())
+ {
+ return CryptoBuffer(encryptedText.GetUnderlyingData(), static_cast<size_t>(lengthWritten));
+ }
+ return encryptedText;
+ }
+
+ CryptoBuffer OpenSSLCipher::FinalizeEncryption()
+ {
+ if (m_failure)
+ {
+ AWS_LOGSTREAM_FATAL(OPENSSL_LOG_TAG, "Cipher not properly initialized for encryption finalization. Aborting");
+ return CryptoBuffer();
+ }
+
+ CryptoBuffer finalBlock(GetBlockSizeBytes());
+ int writtenSize = 0;
+ if (!EVP_EncryptFinal_ex(m_encryptor_ctx, finalBlock.GetUnderlyingData(), &writtenSize))
+ {
+ m_failure = true;
+ LogErrors();
+ return CryptoBuffer();
+ }
+ return CryptoBuffer(finalBlock.GetUnderlyingData(), static_cast<size_t>(writtenSize));
+ }
+
+ CryptoBuffer OpenSSLCipher::DecryptBuffer(const CryptoBuffer& encryptedData)
+ {
+ if (m_failure)
+ {
+ AWS_LOGSTREAM_FATAL(OPENSSL_LOG_TAG, "Cipher not properly initialized for decryption. Aborting");
+ return CryptoBuffer();
+ }
+
+ int lengthWritten = static_cast<int>(encryptedData.GetLength() + (GetBlockSizeBytes() - 1));
+ CryptoBuffer decryptedText(static_cast<size_t>(lengthWritten));
+
+ if (!EVP_DecryptUpdate(m_decryptor_ctx, decryptedText.GetUnderlyingData(), &lengthWritten,
+ encryptedData.GetUnderlyingData(),
+ static_cast<int>(encryptedData.GetLength())))
+ {
+ m_failure = true;
+ LogErrors();
+ return CryptoBuffer();
+ }
+
+ if (lengthWritten == 0)
+ {
+ m_emptyPlaintext = true;
+ }
+ if (static_cast<size_t>(lengthWritten) < decryptedText.GetLength())
+ {
+ return CryptoBuffer(decryptedText.GetUnderlyingData(), static_cast<size_t>(lengthWritten));
+ }
+ return decryptedText;
+ }
+
+ CryptoBuffer OpenSSLCipher::FinalizeDecryption()
+ {
+ if (m_failure)
+ {
+ AWS_LOGSTREAM_FATAL(OPENSSL_LOG_TAG, "Cipher not properly initialized for decryption finalization. Aborting");
+ return CryptoBuffer();
+ }
+
+ CryptoBuffer finalBlock(GetBlockSizeBytes());
+ int writtenSize = static_cast<int>(finalBlock.GetLength());
+ int ret = EVP_DecryptFinal_ex(m_decryptor_ctx, finalBlock.GetUnderlyingData(), &writtenSize);
+#if OPENSSL_VERSION_NUMBER > 0x1010104fL //1.1.1d
+ if (ret <= 0)
+#else
+ if (ret <= 0 && !m_emptyPlaintext) // see details why making exception for empty string at: https://github.com/aws/aws-sdk-cpp/issues/1413
+#endif
+ {
+ m_failure = true;
+ LogErrors();
+ return CryptoBuffer();
+ }
+ return CryptoBuffer(finalBlock.GetUnderlyingData(), static_cast<size_t>(writtenSize));
+ }
+
+ void OpenSSLCipher::Reset()
+ {
+ Cleanup();
+ Init();
+ }
+
+ void OpenSSLCipher::Cleanup()
+ {
+ m_failure = false;
+ if (m_encryptor_ctx) EVP_CIPHER_CTX_cleanup(m_encryptor_ctx);
+ if (m_decryptor_ctx) EVP_CIPHER_CTX_cleanup(m_decryptor_ctx);
+ }
+
+ bool OpenSSLCipher::CheckKeyAndIVLength(size_t expectedKeyLength, size_t expectedIVLength)
+ {
+ if (!m_failure && ((m_key.GetLength() != expectedKeyLength) || m_initializationVector.GetLength() != expectedIVLength))
+ {
+ AWS_LOGSTREAM_ERROR(OPENSSL_LOG_TAG, "Expected Key size is: " << expectedKeyLength << " and expected IV size is: " << expectedIVLength);
+ m_failure = true;
+ }
+ return !m_failure;
+ }
+
+ size_t AES_CBC_Cipher_OpenSSL::BlockSizeBytes = 16;
+ size_t AES_CBC_Cipher_OpenSSL::KeyLengthBits = 256;
+ static const char* CBC_LOG_TAG = "AES_CBC_Cipher_OpenSSL";
+
+ AES_CBC_Cipher_OpenSSL::AES_CBC_Cipher_OpenSSL(const CryptoBuffer& key) : OpenSSLCipher(key, BlockSizeBytes)
+ {
+ InitCipher();
+ }
+
+ AES_CBC_Cipher_OpenSSL::AES_CBC_Cipher_OpenSSL(CryptoBuffer&& key, CryptoBuffer&& initializationVector) :
+ OpenSSLCipher(std::move(key), std::move(initializationVector))
+ {
+ InitCipher();
+ }
+
+ AES_CBC_Cipher_OpenSSL::AES_CBC_Cipher_OpenSSL(const CryptoBuffer& key,
+ const CryptoBuffer& initializationVector) :
+ OpenSSLCipher(key, initializationVector)
+ {
+ InitCipher();
+ }
+
+ void AES_CBC_Cipher_OpenSSL::InitCipher()
+ {
+ if (m_failure || !CheckKeyAndIVLength(KeyLengthBits/8, BlockSizeBytes))
+ {
+ return;
+ }
+
+ if (!EVP_EncryptInit_ex(m_encryptor_ctx, EVP_aes_256_cbc(), nullptr, m_key.GetUnderlyingData(),
+ m_initializationVector.GetUnderlyingData()) ||
+ !EVP_DecryptInit_ex(m_decryptor_ctx, EVP_aes_256_cbc(), nullptr, m_key.GetUnderlyingData(),
+ m_initializationVector.GetUnderlyingData()))
+ {
+ m_failure = true;
+ LogErrors(CBC_LOG_TAG);
+ }
+ }
+
+ size_t AES_CBC_Cipher_OpenSSL::GetBlockSizeBytes() const
+ {
+ return BlockSizeBytes;
+ }
+
+ size_t AES_CBC_Cipher_OpenSSL::GetKeyLengthBits() const
+ {
+ return KeyLengthBits;
+ }
+
+ void AES_CBC_Cipher_OpenSSL::Reset()
+ {
+ OpenSSLCipher::Reset();
+ InitCipher();
+ }
+
+ size_t AES_CTR_Cipher_OpenSSL::BlockSizeBytes = 16;
+ size_t AES_CTR_Cipher_OpenSSL::KeyLengthBits = 256;
+ static const char* CTR_LOG_TAG = "AES_CTR_Cipher_OpenSSL";
+
+ AES_CTR_Cipher_OpenSSL::AES_CTR_Cipher_OpenSSL(const CryptoBuffer& key) : OpenSSLCipher(key, BlockSizeBytes,
+ true)
+ {
+ InitCipher();
+ }
+
+ AES_CTR_Cipher_OpenSSL::AES_CTR_Cipher_OpenSSL(CryptoBuffer&& key, CryptoBuffer&& initializationVector) :
+ OpenSSLCipher(std::move(key), std::move(initializationVector))
+ {
+ InitCipher();
+ }
+
+ AES_CTR_Cipher_OpenSSL::AES_CTR_Cipher_OpenSSL(const CryptoBuffer& key,
+ const CryptoBuffer& initializationVector) :
+ OpenSSLCipher(key, initializationVector)
+ {
+ InitCipher();
+ }
+
+ void AES_CTR_Cipher_OpenSSL::InitCipher()
+ {
+ if (m_failure || !CheckKeyAndIVLength(KeyLengthBits/8, BlockSizeBytes))
+ {
+ return;
+ }
+
+ if (!(EVP_EncryptInit_ex(m_encryptor_ctx, EVP_aes_256_ctr(), nullptr, m_key.GetUnderlyingData(),
+ m_initializationVector.GetUnderlyingData())
+ && EVP_CIPHER_CTX_set_padding(m_encryptor_ctx, 0)) ||
+ !(EVP_DecryptInit_ex(m_decryptor_ctx, EVP_aes_256_ctr(), nullptr, m_key.GetUnderlyingData(),
+ m_initializationVector.GetUnderlyingData())
+ && EVP_CIPHER_CTX_set_padding(m_decryptor_ctx, 0)))
+ {
+ m_failure = true;
+ LogErrors(CTR_LOG_TAG);
+ }
+ }
+
+ size_t AES_CTR_Cipher_OpenSSL::GetBlockSizeBytes() const
+ {
+ return BlockSizeBytes;
+ }
+
+ size_t AES_CTR_Cipher_OpenSSL::GetKeyLengthBits() const
+ {
+ return KeyLengthBits;
+ }
+
+ void AES_CTR_Cipher_OpenSSL::Reset()
+ {
+ OpenSSLCipher::Reset();
+ InitCipher();
+ }
+
+ size_t AES_GCM_Cipher_OpenSSL::BlockSizeBytes = 16;
+ size_t AES_GCM_Cipher_OpenSSL::KeyLengthBits = 256;
+ size_t AES_GCM_Cipher_OpenSSL::IVLengthBytes = 12;
+ size_t AES_GCM_Cipher_OpenSSL::TagLengthBytes = 16;
+
+ static const char* GCM_LOG_TAG = "AES_GCM_Cipher_OpenSSL";
+
+ AES_GCM_Cipher_OpenSSL::AES_GCM_Cipher_OpenSSL(const CryptoBuffer& key)
+ : OpenSSLCipher(key, IVLengthBytes)
+ {
+ InitCipher();
+ }
+
+ AES_GCM_Cipher_OpenSSL::AES_GCM_Cipher_OpenSSL(const CryptoBuffer& key, const CryptoBuffer* aad)
+ : OpenSSLCipher(key, IVLengthBytes), m_aad(*aad)
+ {
+ InitCipher();
+ }
+
+ AES_GCM_Cipher_OpenSSL::AES_GCM_Cipher_OpenSSL(CryptoBuffer&& key, CryptoBuffer&& initializationVector,
+ CryptoBuffer&& tag, CryptoBuffer&& aad) :
+ OpenSSLCipher(std::move(key), std::move(initializationVector), std::move(tag)), m_aad(std::move(aad))
+ {
+ InitCipher();
+ }
+
+ AES_GCM_Cipher_OpenSSL::AES_GCM_Cipher_OpenSSL(const CryptoBuffer& key, const CryptoBuffer& initializationVector,
+ const CryptoBuffer& tag, const CryptoBuffer& aad) :
+ OpenSSLCipher(key, initializationVector, tag), m_aad(std::move(aad))
+ {
+ InitCipher();
+ }
+
+ CryptoBuffer AES_GCM_Cipher_OpenSSL::FinalizeEncryption()
+ {
+ if (m_failure)
+ {
+ AWS_LOGSTREAM_FATAL(GCM_LOG_TAG, "Cipher not properly initialized for encryption finalization. Aborting");
+ return CryptoBuffer();
+ }
+
+ int writtenSize = 0;
+ CryptoBuffer finalBlock(GetBlockSizeBytes());
+ EVP_EncryptFinal_ex(m_encryptor_ctx, finalBlock.GetUnderlyingData(), &writtenSize);
+
+ m_tag = CryptoBuffer(TagLengthBytes);
+ if (!EVP_CIPHER_CTX_ctrl(m_encryptor_ctx, EVP_CTRL_GCM_GET_TAG, static_cast<int>(m_tag.GetLength()),
+ m_tag.GetUnderlyingData()))
+ {
+ m_failure = true;
+ LogErrors(GCM_LOG_TAG);
+ }
+
+ return CryptoBuffer();
+ }
+
+ void AES_GCM_Cipher_OpenSSL::InitCipher()
+ {
+ if (m_failure || !CheckKeyAndIVLength(KeyLengthBits/8, IVLengthBytes))
+ {
+ return;
+ }
+
+ if (!(EVP_EncryptInit_ex(m_encryptor_ctx, EVP_aes_256_gcm(), nullptr, nullptr, nullptr) &&
+ EVP_EncryptInit_ex(m_encryptor_ctx, nullptr, nullptr, m_key.GetUnderlyingData(),
+ m_initializationVector.GetUnderlyingData()) &&
+ EVP_CIPHER_CTX_set_padding(m_encryptor_ctx, 0)) ||
+ !(EVP_DecryptInit_ex(m_decryptor_ctx, EVP_aes_256_gcm(), nullptr, nullptr, nullptr) &&
+ EVP_DecryptInit_ex(m_decryptor_ctx, nullptr, nullptr, m_key.GetUnderlyingData(),
+ m_initializationVector.GetUnderlyingData()) &&
+ EVP_CIPHER_CTX_set_padding(m_decryptor_ctx, 0)))
+ {
+ m_failure = true;
+ LogErrors(GCM_LOG_TAG);
+ return;
+ }
+
+ if (m_aad.GetLength() > 0)
+ {
+ int outLen = 0;
+ if(!EVP_EncryptUpdate(m_encryptor_ctx, nullptr, &outLen, m_aad.GetUnderlyingData(), m_aad.GetLength())
+ || !EVP_DecryptUpdate(m_decryptor_ctx, nullptr, &outLen, m_aad.GetUnderlyingData(), m_aad.GetLength()))
+ {
+ m_failure = true;
+ LogErrors(GCM_LOG_TAG);
+ return;
+ }
+ }
+
+ //tag should always be set in GCM decrypt mode
+ if (m_tag.GetLength() > 0)
+ {
+ if (m_tag.GetLength() < TagLengthBytes)
+ {
+ AWS_LOGSTREAM_ERROR(GCM_LOG_TAG, "Illegal attempt to decrypt an AES GCM payload without a valid tag set: tag length=" << m_tag.GetLength());
+ m_failure = true;
+ return;
+ }
+
+ if (!EVP_CIPHER_CTX_ctrl(m_decryptor_ctx, EVP_CTRL_GCM_SET_TAG, static_cast<int>(m_tag.GetLength()), m_tag.GetUnderlyingData()))
+ {
+ m_failure = true;
+ LogErrors(GCM_LOG_TAG);
+ }
+ }
+ }
+
+ size_t AES_GCM_Cipher_OpenSSL::GetBlockSizeBytes() const
+ {
+ return BlockSizeBytes;
+ }
+
+ size_t AES_GCM_Cipher_OpenSSL::GetKeyLengthBits() const
+ {
+ return KeyLengthBits;
+ }
+
+ size_t AES_GCM_Cipher_OpenSSL::GetTagLengthBytes() const
+ {
+ return TagLengthBytes;
+ }
+
+ void AES_GCM_Cipher_OpenSSL::Reset()
+ {
+ OpenSSLCipher::Reset();
+ InitCipher();
+ }
+
+ size_t AES_KeyWrap_Cipher_OpenSSL::KeyLengthBits = 256;
+ size_t AES_KeyWrap_Cipher_OpenSSL::BlockSizeBytes = 8;
+ static const unsigned char INTEGRITY_VALUE = 0xA6;
+ static const size_t MIN_CEK_LENGTH_BYTES = 128 / 8;
+
+ static const char* KEY_WRAP_TAG = "AES_KeyWrap_Cipher_OpenSSL";
+
+ AES_KeyWrap_Cipher_OpenSSL::AES_KeyWrap_Cipher_OpenSSL(const CryptoBuffer& key) : OpenSSLCipher(key, 0)
+ {
+ InitCipher();
+ }
+
+ CryptoBuffer AES_KeyWrap_Cipher_OpenSSL::EncryptBuffer(const CryptoBuffer& plainText)
+ {
+ if (!m_failure)
+ {
+ m_workingKeyBuffer = CryptoBuffer({&m_workingKeyBuffer, (CryptoBuffer*) &plainText});
+ }
+ return CryptoBuffer();
+ }
+
+ CryptoBuffer AES_KeyWrap_Cipher_OpenSSL::FinalizeEncryption()
+ {
+ if (m_failure)
+ {
+ AWS_LOGSTREAM_FATAL(KEY_WRAP_TAG, "Cipher not properly initialized for encryption finalization. Aborting");
+ return CryptoBuffer();
+ }
+
+ if (m_workingKeyBuffer.GetLength() < MIN_CEK_LENGTH_BYTES)
+ {
+ AWS_LOGSTREAM_ERROR(KEY_WRAP_TAG, "Incorrect input length of " << m_workingKeyBuffer.GetLength());
+ m_failure = true;
+ return CryptoBuffer();
+ }
+
+ //the following is an in place implementation of
+ //RFC 3394 using the alternate in-place implementation.
+ //we use one in-place buffer instead of the copy at the end.
+ //the one letter variable names are meant to directly reflect the variables in the RFC
+ CryptoBuffer cipherText(m_workingKeyBuffer.GetLength() + BlockSizeBytes);
+
+ //put the integrity check register in the first 8 bytes of the final buffer.
+ memset(cipherText.GetUnderlyingData(), INTEGRITY_VALUE, BlockSizeBytes);
+ unsigned char* a = cipherText.GetUnderlyingData();
+
+ //put the register buffer after the integrity check register
+ memcpy(cipherText.GetUnderlyingData() + BlockSizeBytes, m_workingKeyBuffer.GetUnderlyingData(),
+ m_workingKeyBuffer.GetLength());
+ unsigned char* r = cipherText.GetUnderlyingData() + BlockSizeBytes;
+
+ int n = static_cast<int>(m_workingKeyBuffer.GetLength() / BlockSizeBytes);
+
+ //temporary encryption buffer
+ CryptoBuffer b(BlockSizeBytes * 2);
+ int outLen = static_cast<int>(b.GetLength());
+
+ //concatenation buffer
+ CryptoBuffer tempInput(BlockSizeBytes * 2);
+
+ for (int j = 0; j <= 5; ++j)
+ {
+ for (int i = 1; i <= n; ++i)
+ {
+ //concat A and R[i], A should be most significant and then R[i] should be least significant.
+ memcpy(tempInput.GetUnderlyingData(), a, BlockSizeBytes);
+ memcpy(tempInput.GetUnderlyingData() + BlockSizeBytes, r, BlockSizeBytes);
+
+ //encrypt the concatenated A and R[I] and store it in B
+ if (!EVP_EncryptUpdate(m_encryptor_ctx, b.GetUnderlyingData(), &outLen,
+ tempInput.GetUnderlyingData(), static_cast<int>(tempInput.GetLength())))
+ {
+ LogErrors(KEY_WRAP_TAG);
+ m_failure = true;
+ return CryptoBuffer();
+ }
+
+ unsigned char t = static_cast<unsigned char>((n * j) + i);
+ //put the 64 MSB ^ T into A
+ memcpy(a, b.GetUnderlyingData(), BlockSizeBytes);
+ a[7] ^= t;
+ //put the 64 LSB into R[i]
+ memcpy(r, b.GetUnderlyingData() + BlockSizeBytes, BlockSizeBytes);
+ //increment i -> R[i]
+ r += BlockSizeBytes;
+ }
+ //reset R
+ r = cipherText.GetUnderlyingData() + BlockSizeBytes;
+ }
+
+ return cipherText;
+ }
+
+ CryptoBuffer AES_KeyWrap_Cipher_OpenSSL::DecryptBuffer(const CryptoBuffer& cipherText)
+ {
+ if (!m_failure)
+ {
+ m_workingKeyBuffer = CryptoBuffer({&m_workingKeyBuffer, (CryptoBuffer*)&cipherText});
+ }
+ return CryptoBuffer();
+ }
+
+ CryptoBuffer AES_KeyWrap_Cipher_OpenSSL::FinalizeDecryption()
+ {
+ if (m_failure)
+ {
+ AWS_LOGSTREAM_FATAL(KEY_WRAP_TAG, "Cipher not properly initialized for decryption finalization. Aborting");
+ return CryptoBuffer();
+ }
+
+ if (m_workingKeyBuffer.GetLength() < MIN_CEK_LENGTH_BYTES + BlockSizeBytes)
+ {
+ AWS_LOGSTREAM_ERROR(KEY_WRAP_TAG, "Incorrect input length of " << m_workingKeyBuffer.GetLength());
+ m_failure = true;
+ return CryptoBuffer();
+ }
+
+ //the following is an in place implementation of
+ //RFC 3394 using the alternate in-place implementation.
+ //we use one in-place buffer instead of the copy at the end.
+ //the one letter variable names are meant to directly reflect the variables in the RFC
+ CryptoBuffer plainText(m_workingKeyBuffer.GetLength() - BlockSizeBytes);
+ memcpy(plainText.GetUnderlyingData(), m_workingKeyBuffer.GetUnderlyingData() + BlockSizeBytes, plainText.GetLength());
+
+ //integrity register should be the first 8 bytes of the cipher text
+ unsigned char* a = m_workingKeyBuffer.GetUnderlyingData();
+
+ //in-place register is the plaintext. For decryption, start at the last array position (8 bytes before the end);
+ unsigned char* r = plainText.GetUnderlyingData() + plainText.GetLength() - BlockSizeBytes;
+
+ int n = static_cast<int>(plainText.GetLength() / BlockSizeBytes);
+
+ //temporary encryption buffer
+ CryptoBuffer b(BlockSizeBytes * 10);
+ int outLen = static_cast<int>(b.GetLength());
+
+ //concatenation buffer
+ CryptoBuffer tempInput(BlockSizeBytes * 2);
+
+ for(int j = 5; j >= 0; --j)
+ {
+ for(int i = n; i >= 1; --i)
+ {
+ //concat
+ //A ^ t
+ memcpy(tempInput.GetUnderlyingData(), a, BlockSizeBytes);
+ unsigned char t = static_cast<unsigned char>((n * j) + i);
+ tempInput[7] ^= t;
+ //R[i]
+ memcpy(tempInput.GetUnderlyingData() + BlockSizeBytes, r, BlockSizeBytes);
+
+ //Decrypt the concatenated buffer
+ if(!EVP_DecryptUpdate(m_decryptor_ctx, b.GetUnderlyingData(), &outLen,
+ tempInput.GetUnderlyingData(), static_cast<int>(tempInput.GetLength())))
+ {
+ m_failure = true;
+ LogErrors(KEY_WRAP_TAG);
+ return CryptoBuffer();
+ }
+
+ //set A to MSB 64 bits of decrypted result
+ memcpy(a, b.GetUnderlyingData(), BlockSizeBytes);
+ //set R[i] to LSB 64 bits of decrypted result
+ memcpy(r, b.GetUnderlyingData() + BlockSizeBytes, BlockSizeBytes);
+ //decrement i -> R[i]
+ r -= BlockSizeBytes;
+ }
+
+ r = plainText.GetUnderlyingData() + plainText.GetLength() - BlockSizeBytes;
+ }
+
+ //here we perform the integrity check to make sure A == 0xA6A6A6A6A6A6A6A6
+ for(size_t i = 0; i < BlockSizeBytes; ++i)
+ {
+ if(a[i] != INTEGRITY_VALUE)
+ {
+ m_failure = true;
+ AWS_LOGSTREAM_ERROR(KEY_WRAP_TAG, "Integrity check failed for key wrap decryption.");
+ return CryptoBuffer();
+ }
+ }
+
+ return plainText;
+ }
+
+ void AES_KeyWrap_Cipher_OpenSSL::InitCipher()
+ {
+ if (m_failure || !CheckKeyAndIVLength(KeyLengthBits/8, 0))
+ {
+ return;
+ }
+
+ if (!(EVP_EncryptInit_ex(m_encryptor_ctx, EVP_aes_256_ecb(), nullptr, m_key.GetUnderlyingData(), nullptr) &&
+ EVP_CIPHER_CTX_set_padding(m_encryptor_ctx, 0)) ||
+ !(EVP_DecryptInit_ex(m_decryptor_ctx, EVP_aes_256_ecb(), nullptr, m_key.GetUnderlyingData(), nullptr) &&
+ EVP_CIPHER_CTX_set_padding(m_decryptor_ctx, 0)))
+ {
+ m_failure = true;
+ LogErrors(KEY_WRAP_TAG);
+ }
+ }
+
+ void AES_KeyWrap_Cipher_OpenSSL::Reset()
+ {
+ m_workingKeyBuffer = CryptoBuffer();
+ OpenSSLCipher::Reset();
+ InitCipher();
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventDecoderStream.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventDecoderStream.cpp
new file mode 100644
index 00000000000..5ecd2d0444e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventDecoderStream.cpp
@@ -0,0 +1,22 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/event/EventDecoderStream.h>
+#include <iostream>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ EventDecoderStream::EventDecoderStream(EventStreamDecoder& decoder, size_t bufferSize) :
+ Aws::IOStream(&m_eventStreamBuf),
+ m_eventStreamBuf(decoder, bufferSize)
+
+ {
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventEncoderStream.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventEncoderStream.cpp
new file mode 100644
index 00000000000..f8640f0e8c2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventEncoderStream.cpp
@@ -0,0 +1,28 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/event/EventEncoderStream.h>
+#include <iostream>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ EventEncoderStream::EventEncoderStream(size_t bufferSize) :
+ Aws::IOStream(&m_streambuf),
+ m_streambuf(bufferSize)
+ {
+ }
+
+ EventEncoderStream& EventEncoderStream::WriteEvent(const Aws::Utils::Event::Message& msg)
+ {
+ auto bits = m_encoder.EncodeAndSign(msg);
+ write(reinterpret_cast<char*>(bits.data()), bits.size());
+ return *this;
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventHeader.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventHeader.cpp
new file mode 100644
index 00000000000..c3c989bedbb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventHeader.cpp
@@ -0,0 +1,107 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/event/EventHeader.h>
+#include <aws/core/utils/HashingUtils.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ static const int HASH_BOOL_TRUE = HashingUtils::HashString("BOOL_TRUE");
+ static const int HASH_BOOL_FALSE = HashingUtils::HashString("BOOL_FALSE");
+ static const int HASH_BYTE = HashingUtils::HashString("BYTE");
+ static const int HASH_INT16 = HashingUtils::HashString("INT16");
+ static const int HASH_INT32 = HashingUtils::HashString("INT32");
+ static const int HASH_INT64 = HashingUtils::HashString("INT64");
+ static const int HASH_BYTE_BUF = HashingUtils::HashString("BYTE_BUFFER");
+ static const int HASH_STRING = HashingUtils::HashString("STRING");
+ static const int HASH_TIMESTAMP = HashingUtils::HashString("TIMESTAMP");
+ static const int HASH_UUID = HashingUtils::HashString("UUID");
+
+ EventHeaderValue::EventHeaderType EventHeaderValue::GetEventHeaderTypeForName(const Aws::String& name)
+ {
+ int hashCode = Aws::Utils::HashingUtils::HashString(name.c_str());
+ if (hashCode == HASH_BOOL_TRUE)
+ {
+ return EventHeaderType::BOOL_TRUE;
+ }
+ else if (hashCode == HASH_BOOL_FALSE)
+ {
+ return EventHeaderType::BOOL_FALSE;
+ }
+ else if (hashCode == HASH_BYTE)
+ {
+ return EventHeaderType::BYTE;
+ }
+ else if (hashCode == HASH_INT16)
+ {
+ return EventHeaderType::INT16;
+ }
+ else if (hashCode == HASH_INT32)
+ {
+ return EventHeaderType::INT32;
+ }
+ else if (hashCode == HASH_INT64)
+ {
+ return EventHeaderType::INT64;
+ }
+ else if (hashCode == HASH_BYTE_BUF)
+ {
+ return EventHeaderType::BYTE_BUF;
+ }
+ else if (hashCode == HASH_STRING)
+ {
+ return EventHeaderType::STRING;
+ }
+ else if (hashCode == HASH_TIMESTAMP)
+ {
+ return EventHeaderType::TIMESTAMP;
+ }
+ else if (hashCode == HASH_UUID)
+ {
+ return EventHeaderType::UUID;
+ }
+ else
+ {
+ return EventHeaderType::UNKNOWN;
+ }
+ }
+
+ Aws::String EventHeaderValue::GetNameForEventHeaderType(EventHeaderType value)
+ {
+ switch (value)
+ {
+ case EventHeaderType::BOOL_TRUE:
+ return "BOOL_TRUE";
+ case EventHeaderType::BOOL_FALSE:
+ return "BOOL_FALSE";
+ case EventHeaderType::BYTE:
+ return "BYTE";
+ case EventHeaderType::INT16:
+ return "INT16";
+ case EventHeaderType::INT32:
+ return "INT32";
+ case EventHeaderType::INT64:
+ return "INT64";
+ case EventHeaderType::BYTE_BUF:
+ return "BYTE_BUF";
+ case EventHeaderType::STRING:
+ return "STRING";
+ case EventHeaderType::TIMESTAMP:
+ return "TIMESTAMP";
+ case EventHeaderType::UUID:
+ return "UUID";
+ default:
+ return "UNKNOWN";
+ }
+ }
+
+ }
+ }
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventMessage.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventMessage.cpp
new file mode 100644
index 00000000000..de8b904775b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventMessage.cpp
@@ -0,0 +1,132 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/event/EventMessage.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <algorithm>
+#include <iterator>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ const char EVENT_TYPE_HEADER[] = ":event-type";
+ const char CONTENT_TYPE_HEADER[] = ":content-type";
+ const char MESSAGE_TYPE_HEADER[] = ":message-type";
+ const char ERROR_CODE_HEADER[] = ":error-code";
+ const char ERROR_MESSAGE_HEADER[] = ":error-message";
+ const char EXCEPTION_TYPE_HEADER[] = ":exception-type";
+
+ static const int EVENT_HASH = HashingUtils::HashString("event");
+ static const int ERROR_HASH = HashingUtils::HashString("error");
+ static const int EXCEPTION_HASH = HashingUtils::HashString("exception");
+
+ static const int CONTENT_TYPE_APPLICATION_OCTET_STREAM_HASH = HashingUtils::HashString("application/octet-stream");
+ static const int CONTENT_TYPE_APPLICATION_JSON_HASH = HashingUtils::HashString("application/json");
+ static const int CONTENT_TYPE_TEXT_PLAIN_HASH = HashingUtils::HashString("text/plain");
+
+ Message::MessageType Message::GetMessageTypeForName(const Aws::String& name)
+ {
+ int hashCode = Aws::Utils::HashingUtils::HashString(name.c_str());
+ if (hashCode == EVENT_HASH)
+ {
+ return MessageType::EVENT;
+ }
+ else if (hashCode == ERROR_HASH)
+ {
+ return MessageType::REQUEST_LEVEL_ERROR;
+ }
+ else if (hashCode == EXCEPTION_HASH)
+ {
+ return MessageType::REQUEST_LEVEL_EXCEPTION;
+ }
+ else
+ {
+ return MessageType::UNKNOWN;
+ }
+ }
+
+ Aws::String Message::GetNameForMessageType(MessageType value)
+ {
+ switch (value)
+ {
+ case MessageType::EVENT:
+ return "event";
+ case MessageType::REQUEST_LEVEL_ERROR:
+ return "error";
+ case MessageType::REQUEST_LEVEL_EXCEPTION:
+ return "exception";
+ default:
+ return "unknown";
+ }
+ }
+
+ Message::ContentType Message::GetContentTypeForName(const Aws::String& name)
+ {
+ int hashCode = Aws::Utils::HashingUtils::HashString(name.c_str());
+ if (hashCode == CONTENT_TYPE_APPLICATION_OCTET_STREAM_HASH)
+ {
+ return ContentType::APPLICATION_OCTET_STREAM;
+ }
+ else if (hashCode == CONTENT_TYPE_APPLICATION_JSON_HASH)
+ {
+ return ContentType::APPLICATION_JSON;
+ }
+ else if (hashCode == CONTENT_TYPE_TEXT_PLAIN_HASH)
+ {
+ return ContentType::TEXT_PLAIN;
+ }
+ else
+ {
+ return ContentType::UNKNOWN;
+ }
+ }
+
+ Aws::String Message::GetNameForContentType(ContentType value)
+ {
+ switch (value)
+ {
+ case ContentType::APPLICATION_OCTET_STREAM:
+ return "application/octet-stream";
+ case ContentType::APPLICATION_JSON:
+ return "application/json";
+ case ContentType::TEXT_PLAIN:
+ return "text/plain";
+ default:
+ return "unknown";
+ }
+ }
+
+ void Message::Reset()
+ {
+ m_totalLength = 0;
+ m_headersLength = 0;
+ m_payloadLength = 0;
+
+ m_eventHeaders.clear();
+ m_eventPayload.clear();
+ }
+
+ void Message::WriteEventPayload(const unsigned char* data, size_t length)
+ {
+ std::copy(data, data + length, std::back_inserter(m_eventPayload));
+ }
+
+ void Message::WriteEventPayload(const Aws::Vector<unsigned char>& bits)
+ {
+ std::copy(bits.cbegin(), bits.cend(), std::back_inserter(m_eventPayload));
+ }
+
+ void Message::WriteEventPayload(const Aws::String& bits)
+ {
+ std::copy(bits.cbegin(), bits.cend(), std::back_inserter(m_eventPayload));
+ }
+
+ } // namespace Event
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamBuf.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamBuf.cpp
new file mode 100644
index 00000000000..6a1766bb9f4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamBuf.cpp
@@ -0,0 +1,147 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/event/EventStreamBuf.h>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ const size_t DEFAULT_BUF_SIZE = 1024;
+
+ EventStreamBuf::EventStreamBuf(EventStreamDecoder& decoder, size_t bufferLength) :
+ m_byteBuffer(bufferLength),
+ m_bufferLength(bufferLength),
+ m_decoder(decoder)
+ {
+ assert(decoder);
+ char* begin = reinterpret_cast<char*>(m_byteBuffer.GetUnderlyingData());
+ char* end = begin + bufferLength - 1;
+
+ setp(begin, end);
+ setg(begin, begin, begin);
+ }
+
+ EventStreamBuf::~EventStreamBuf()
+ {
+ if (m_decoder)
+ {
+ writeToDecoder();
+ }
+ }
+
+ void EventStreamBuf::writeToDecoder()
+ {
+ if (pptr() > pbase())
+ {
+ size_t length = static_cast<size_t>(pptr() - pbase());
+ m_decoder.Pump(m_byteBuffer, length);
+
+ if (!m_decoder)
+ {
+ m_err.write(reinterpret_cast<char*>(m_byteBuffer.GetUnderlyingData()), length);
+ }
+ else
+ {
+ pbump(-static_cast<int>(length));
+ }
+ }
+ }
+
+ std::streampos EventStreamBuf::seekoff(std::streamoff off, std::ios_base::seekdir dir, std::ios_base::openmode which)
+ {
+ if (dir == std::ios_base::beg)
+ {
+ return seekpos(off, which);
+ }
+ else if (dir == std::ios_base::end)
+ {
+ return seekpos(m_bufferLength - 1 - off, which);
+ }
+ else if (dir == std::ios_base::cur)
+ {
+ if (which == std::ios_base::in)
+ {
+ return seekpos((gptr() - (char*)m_byteBuffer.GetUnderlyingData()) + off, which);
+ }
+ if (which == std::ios_base::out)
+ {
+ return seekpos((pptr() - (char*)m_byteBuffer.GetUnderlyingData()) + off, which);
+ }
+ }
+
+ return std::streamoff(-1);
+ }
+
+ std::streampos EventStreamBuf::seekpos(std::streampos pos, std::ios_base::openmode which)
+ {
+ assert(static_cast<size_t>(pos) <= m_bufferLength);
+ if (static_cast<size_t>(pos) > m_bufferLength)
+ {
+ return std::streampos(std::streamoff(-1));
+ }
+
+ if (which == std::ios_base::in)
+ {
+ m_err.seekg(pos);
+ return m_err.tellg();
+ }
+
+ if (which == std::ios_base::out)
+ {
+ return pos;
+ }
+
+ return std::streampos(std::streamoff(-1));
+ }
+
+ int EventStreamBuf::underflow()
+ {
+ if (!m_err || m_err.eof() || m_decoder)
+ {
+ return std::char_traits<char>::eof();
+ }
+
+ m_err.flush();
+ m_err.read(reinterpret_cast<char*>(m_byteBuffer.GetUnderlyingData()), m_byteBuffer.GetLength());
+
+ char* begin = reinterpret_cast<char*>(m_byteBuffer.GetUnderlyingData());
+ setg(begin, begin, begin + m_err.gcount());
+ return std::char_traits<char>::to_int_type(*gptr());
+ }
+
+ int EventStreamBuf::overflow(int ch)
+ {
+ auto eof = std::char_traits<char>::eof();
+
+ if (m_decoder)
+ {
+ if (ch != eof)
+ {
+ *pptr() = (char)ch;
+ pbump(1);
+ }
+
+ writeToDecoder();
+ return ch;
+ }
+
+ return eof;
+ }
+
+ int EventStreamBuf::sync()
+ {
+ if (m_decoder)
+ {
+ writeToDecoder();
+ }
+
+ return 0;
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamDecoder.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamDecoder.cpp
new file mode 100644
index 00000000000..f70a6c88f61
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamDecoder.cpp
@@ -0,0 +1,170 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/common/common.h>
+#include <aws/core/utils/event/EventHeader.h>
+#include <aws/core/utils/event/EventMessage.h>
+#include <aws/core/utils/event/EventStreamDecoder.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/UnreferencedParam.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ static const char EVENT_STREAM_DECODER_CLASS_TAG[] = "Aws::Utils::Event::EventStreamDecoder";
+
+ EventStreamDecoder::EventStreamDecoder(EventStreamHandler* handler) : m_eventStreamHandler(handler)
+ {
+ aws_event_stream_streaming_decoder_init(&m_decoder,
+ get_aws_allocator(),
+ onPayloadSegment,
+ onPreludeReceived,
+ onHeaderReceived,
+ onError,
+ (void*)handler);
+ }
+
+ EventStreamDecoder::~EventStreamDecoder()
+ {
+ aws_event_stream_streaming_decoder_clean_up(&m_decoder);
+ }
+
+ void EventStreamDecoder::Pump(const ByteBuffer& data)
+ {
+ Pump(data, data.GetLength());
+ }
+
+ void EventStreamDecoder::Pump(const ByteBuffer& data, size_t length)
+ {
+ aws_byte_buf dataBuf = aws_byte_buf_from_array(static_cast<uint8_t*>(data.GetUnderlyingData()), length);
+ aws_event_stream_streaming_decoder_pump(&m_decoder, &dataBuf);
+ }
+
+ void EventStreamDecoder::Reset()
+ {
+ m_eventStreamHandler->Reset();
+ }
+
+ void EventStreamDecoder::ResetEventStreamHandler(EventStreamHandler* handler)
+ {
+ aws_event_stream_streaming_decoder_init(&m_decoder, get_aws_allocator(),
+ onPayloadSegment,
+ onPreludeReceived,
+ onHeaderReceived,
+ onError,
+ reinterpret_cast<void *>(handler));
+ }
+
+ void EventStreamDecoder::onPayloadSegment(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_byte_buf* payload,
+ int8_t isFinalSegment,
+ void* context)
+ {
+ AWS_UNREFERENCED_PARAM(decoder);
+ auto handler = static_cast<EventStreamHandler*>(context);
+ assert(handler);
+ if (!handler)
+ {
+ AWS_LOGSTREAM_ERROR(EVENT_STREAM_DECODER_CLASS_TAG, "Payload received, but decoder encountered internal errors before."
+ "ErrorCode: " << EventStreamErrorsMapper::GetNameForError(handler->GetInternalError()) << ", "
+ "ErrorMessage: " << handler->GetEventPayloadAsString());
+ return;
+ }
+ handler->WriteMessageEventPayload(static_cast<unsigned char*>(payload->buffer), payload->len);
+
+ // Complete payload received
+ if (isFinalSegment == 1)
+ {
+ assert(handler->IsMessageCompleted());
+ handler->OnEvent();
+ handler->Reset();
+ }
+ }
+
+ void EventStreamDecoder::onPreludeReceived(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_event_stream_message_prelude* prelude,
+ void* context)
+ {
+ AWS_UNREFERENCED_PARAM(decoder);
+ auto handler = static_cast<EventStreamHandler*>(context);
+ handler->Reset();
+
+ //Encounter internal error in prelude received.
+ //This error will be handled by OnError callback function later.
+ if (prelude->total_len < prelude->headers_len + 16)
+ {
+ return;
+ }
+ handler->SetMessageMetadata(prelude->total_len, prelude->headers_len,
+ prelude->total_len - prelude->headers_len - 4/*total byte-length*/ - 4/*headers byte-length*/ - 4/*prelude crc*/ - 4/*message crc*/);
+ AWS_LOGSTREAM_TRACE(EVENT_STREAM_DECODER_CLASS_TAG, "Message received, the expected length of the message is: " << prelude->total_len <<
+ " bytes, and the expected length of the header is: " << prelude->headers_len << " bytes");
+
+ //Handle empty message
+ //if (handler->m_message.GetHeadersLength() == 0 && handler->m_message.GetPayloadLength() == 0)
+ if (handler->IsMessageCompleted())
+ {
+ handler->OnEvent();
+ handler->Reset();
+ }
+ }
+
+ void EventStreamDecoder::onHeaderReceived(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_event_stream_message_prelude* prelude,
+ aws_event_stream_header_value_pair* header,
+ void* context)
+ {
+ AWS_UNREFERENCED_PARAM(decoder);
+ AWS_UNREFERENCED_PARAM(prelude);
+ auto handler = static_cast<EventStreamHandler*>(context);
+ assert(handler);
+ if (!handler)
+ {
+ AWS_LOGSTREAM_ERROR(EVENT_STREAM_DECODER_CLASS_TAG, "Payload received, but decoder encountered internal errors before."
+ "ErrorCode: " << EventStreamErrorsMapper::GetNameForError(handler->GetInternalError()) << ", "
+ "ErrorMessage: " << handler->GetEventPayloadAsString());
+ return;
+ }
+
+ // The length of a header = 1 byte (to represent the length of header name) + length of header name + 1 byte (to represent header type)
+ // + 2 bytes (to represent length of header value) + length of header value
+ handler->InsertMessageEventHeader(Aws::String(header->header_name, header->header_name_len),
+ 1 + header->header_name_len + 1 + 2 + header->header_value_len, EventHeaderValue(header));
+
+ // Handle messages only have headers, but without payload.
+ //if (handler->m_message.GetHeadersLength() == handler->m_headersBytesReceived() && handler->m_message.GetPayloadLength() == 0)
+ if (handler->IsMessageCompleted())
+ {
+ handler->OnEvent();
+ handler->Reset();
+ }
+ }
+
+ void EventStreamDecoder::onError(
+ aws_event_stream_streaming_decoder* decoder,
+ aws_event_stream_message_prelude* prelude,
+ int error_code,
+ const char* message,
+ void* context)
+ {
+ AWS_UNREFERENCED_PARAM(decoder);
+ AWS_UNREFERENCED_PARAM(prelude);
+ auto handler = static_cast<EventStreamHandler*>(context);
+ handler->SetFailure();
+ handler->SetInternalError(error_code);
+ handler->WriteMessageEventPayload(reinterpret_cast<const unsigned char*>(message), strlen(message));
+ handler->OnEvent();
+ }
+ } // namespace Event
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamEncoder.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamEncoder.cpp
new file mode 100644
index 00000000000..ef7104e839c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamEncoder.cpp
@@ -0,0 +1,162 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/event/EventHeader.h>
+#include <aws/core/utils/event/EventMessage.h>
+#include <aws/core/utils/event/EventStreamEncoder.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/auth/AWSAuthSigner.h>
+#include <aws/common/byte_order.h>
+#include <aws/core/utils/memory/AWSMemory.h>
+
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ static const char TAG[] = "EventStreamEncoder";
+
+ static void EncodeHeaders(const Aws::Utils::Event::Message& msg, aws_array_list* headers)
+ {
+ aws_array_list_init_dynamic(headers, get_aws_allocator(), msg.GetEventHeaders().size(), sizeof(aws_event_stream_header_value_pair));
+ for (auto&& header : msg.GetEventHeaders())
+ {
+ const uint8_t headerKeyLen = static_cast<uint8_t>(header.first.length());
+ switch(header.second.GetType())
+ {
+ case EventHeaderValue::EventHeaderType::BOOL_TRUE:
+ case EventHeaderValue::EventHeaderType::BOOL_FALSE:
+ aws_event_stream_add_bool_header(headers, header.first.c_str(), headerKeyLen, header.second.GetEventHeaderValueAsBoolean());
+ break;
+ case EventHeaderValue::EventHeaderType::BYTE:
+ aws_event_stream_add_bool_header(headers, header.first.c_str(), headerKeyLen, header.second.GetEventHeaderValueAsByte());
+ break;
+ case EventHeaderValue::EventHeaderType::INT16:
+ aws_event_stream_add_int16_header(headers, header.first.c_str(), headerKeyLen, header.second.GetEventHeaderValueAsInt16());
+ break;
+ case EventHeaderValue::EventHeaderType::INT32:
+ aws_event_stream_add_int32_header(headers, header.first.c_str(), headerKeyLen, header.second.GetEventHeaderValueAsInt32());
+ break;
+ case EventHeaderValue::EventHeaderType::INT64:
+ aws_event_stream_add_int64_header(headers, header.first.c_str(), headerKeyLen, header.second.GetEventHeaderValueAsInt64());
+ break;
+ case EventHeaderValue::EventHeaderType::BYTE_BUF:
+ {
+ const auto& bytes = header.second.GetEventHeaderValueAsBytebuf();
+ aws_event_stream_add_bytebuf_header(headers, header.first.c_str(), headerKeyLen, bytes.GetUnderlyingData(), static_cast<uint16_t>(bytes.GetLength()), 1 /*copy*/);
+ }
+ break;
+ case EventHeaderValue::EventHeaderType::STRING:
+ {
+ const auto& bytes = header.second.GetUnderlyingBuffer();
+ aws_event_stream_add_string_header(headers, header.first.c_str(), headerKeyLen, reinterpret_cast<char*>(bytes.GetUnderlyingData()), static_cast<uint16_t>(bytes.GetLength()), 0 /*copy*/);
+ }
+ break;
+ case EventHeaderValue::EventHeaderType::TIMESTAMP:
+ aws_event_stream_add_timestamp_header(headers, header.first.c_str(), headerKeyLen, header.second.GetEventHeaderValueAsTimestamp());
+ break;
+ case EventHeaderValue::EventHeaderType::UUID:
+ {
+ ByteBuffer uuidBytes = header.second.GetEventHeaderValueAsUuid();
+ aws_event_stream_add_uuid_header(headers, header.first.c_str(), headerKeyLen, uuidBytes.GetUnderlyingData());
+ }
+ break;
+ default:
+ AWS_LOG_ERROR(TAG, "Encountered unknown type of header.");
+ break;
+ }
+ }
+ }
+
+ EventStreamEncoder::EventStreamEncoder(Client::AWSAuthSigner* signer) : m_signer(signer)
+ {
+ }
+
+
+ Aws::Vector<unsigned char> EventStreamEncoder::EncodeAndSign(const Aws::Utils::Event::Message& msg)
+ {
+ aws_event_stream_message encoded = Encode(msg);
+ aws_event_stream_message signedMessage = Sign(&encoded);
+
+ const auto signedMessageLength = signedMessage.message_buffer ? aws_event_stream_message_total_length(&signedMessage) : 0;
+
+ Aws::Vector<unsigned char> outputBits(signedMessage.message_buffer, signedMessage.message_buffer + signedMessageLength);
+ aws_event_stream_message_clean_up(&encoded);
+ aws_event_stream_message_clean_up(&signedMessage);
+ return outputBits;
+ }
+
+ aws_event_stream_message EventStreamEncoder::Encode(const Aws::Utils::Event::Message& msg)
+ {
+ aws_array_list headers;
+ EncodeHeaders(msg, &headers);
+
+ aws_byte_buf payload;
+ payload.len = msg.GetEventPayload().size();
+ // this const_cast is OK because aws_byte_buf will only be "read from" by the following functions.
+ payload.buffer = const_cast<uint8_t*>(msg.GetEventPayload().data());
+ payload.capacity = 0;
+ payload.allocator = nullptr;
+
+ aws_event_stream_message encoded;
+ if(aws_event_stream_message_init(&encoded, get_aws_allocator(), &headers, &payload) == AWS_OP_ERR)
+ {
+ AWS_LOGSTREAM_ERROR(TAG, "Error creating event-stream message from payload.");
+ aws_event_stream_headers_list_cleanup(&headers);
+ // GCC 4.9.4 issues a warning with -Wextra if we simply do
+ // return {};
+ aws_event_stream_message empty{nullptr, nullptr, 0};
+ return empty;
+ }
+ aws_event_stream_headers_list_cleanup(&headers);
+ return encoded;
+ }
+
+ aws_event_stream_message EventStreamEncoder::Sign(aws_event_stream_message* msg)
+ {
+ const auto msglen = msg->message_buffer ? aws_event_stream_message_total_length(msg) : 0;
+ Event::Message signedMessage;
+ signedMessage.WriteEventPayload(msg->message_buffer, msglen);
+
+ assert(m_signer);
+ if (!m_signer->SignEventMessage(signedMessage, m_signatureSeed))
+ {
+ AWS_LOGSTREAM_ERROR(TAG, "Failed to sign event message frame.");
+ // GCC 4.9.4 issues a warning with -Wextra if we simply do
+ // return {};
+ aws_event_stream_message empty{nullptr, nullptr, 0};
+ return empty;
+ }
+
+ aws_array_list headers;
+ EncodeHeaders(signedMessage, &headers);
+
+ aws_byte_buf payload;
+ payload.len = signedMessage.GetEventPayload().size();
+ payload.buffer = signedMessage.GetEventPayload().data();
+ payload.capacity = 0;
+ payload.allocator = nullptr;
+
+ aws_event_stream_message signedmsg;
+ if(aws_event_stream_message_init(&signedmsg, get_aws_allocator(), &headers, &payload))
+ {
+ AWS_LOGSTREAM_ERROR(TAG, "Error creating event-stream message from payload.");
+ aws_event_stream_headers_list_cleanup(&headers);
+ // GCC 4.9.4 issues a warning with -Wextra if we simply do
+ // return {};
+ aws_event_stream_message empty{nullptr, nullptr, 0};
+ return empty;
+ }
+ aws_event_stream_headers_list_cleanup(&headers);
+ return signedmsg;
+ }
+
+ } // namespace Event
+ } // namespace Utils
+} // namespace Aws
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamErrors.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamErrors.cpp
new file mode 100644
index 00000000000..836d0b47c55
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/event/EventStreamErrors.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/client/AWSError.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/event/EventStreamErrors.h>
+
+ using namespace Aws::Client;
+// using namespace Aws::S3;
+// using namespace Aws::Utils;
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Event
+ {
+ namespace EventStreamErrorsMapper
+ {
+ /*
+ static const int EVENT_STREAM_NO_ERROR_HASH = HashingUtils::HashString("EventStreamNoError");
+ static const int EVENT_STREAM_BUFFER_LENGTH_MISMATCH_HASH = HashingUtils::HashString("EventStreamBufferLengthMismatch");
+ static const int EVENT_STREAM_INSUFFICIENT_BUFFER_LEN_HASH = HashingUtils::HashString("EventStreamInsufficientBufferLen");
+ static const int EVENT_STREAM_MESSAGE_FIELD_SIZE_EXCEEDED_HASH = HashingUtils::HashString("EventStreamMessageFieldSizeExceeded");
+ static const int EVENT_STREAM_PRELUDE_CHECKSUM_FAILURE_HASH = HashingUtils::HashString("EventStreamPreludeChecksumFailure");
+ static const int EVENT_STREAM_MESSAGE_CHECKSUM_FAILURE_HASH = HashingUtils::HashString("EventStreamMessageChecksumFailure");
+ static const int EVENT_STREAM_MESSAGE_INVALID_HEADERS_LEN_HASH = HashingUtils::HashString("EventStreamMessageInvalidHeadersLen");
+ static const int EVENT_STREAM_MESSAGE_UNKNOWN_HEADER_TYPE_HASH = HashingUtils::HashString("EventStreamMessageUnknownHeaderType");
+ static const int EVENT_STREAM_MESSAGE_PARSER_ILLEGAL_STATE_HASH = HashingUtils::HashString("EventStreamMessageParserIllegalState");
+ */
+ const char* GetNameForError(EventStreamErrors error)
+ {
+ switch (error)
+ {
+ case EventStreamErrors::EVENT_STREAM_NO_ERROR:
+ return "EventStreamNoError";
+ case EventStreamErrors::EVENT_STREAM_BUFFER_LENGTH_MISMATCH:
+ return "EventStreamBufferLengthMismatch";
+ case EventStreamErrors::EVENT_STREAM_INSUFFICIENT_BUFFER_LEN:
+ return "EventStreamInsufficientBufferLen";
+ case EventStreamErrors::EVENT_STREAM_MESSAGE_FIELD_SIZE_EXCEEDED:
+ return "EventStreamMessageFieldSizeExceeded";
+ case EventStreamErrors::EVENT_STREAM_PRELUDE_CHECKSUM_FAILURE:
+ return "EventStreamPreludeChecksumFailure";
+ case EventStreamErrors::EVENT_STREAM_MESSAGE_CHECKSUM_FAILURE:
+ return "EventStreamMessageChecksumFailure";
+ case EventStreamErrors::EVENT_STREAM_MESSAGE_INVALID_HEADERS_LEN:
+ return "EventStreamMessageInvalidHeadersLen";
+ case EventStreamErrors::EVENT_STREAM_MESSAGE_UNKNOWN_HEADER_TYPE:
+ return "EventStreamMessageUnknownHeaderType";
+ case EventStreamErrors::EVENT_STREAM_MESSAGE_PARSER_ILLEGAL_STATE:
+ return "EventStreamMessageParserIllegalState";
+ default:
+ return "EventStreamUnknownError";
+ }
+ }
+
+ AWSError<CoreErrors> GetAwsErrorForEventStreamError(EventStreamErrors error)
+ {
+ return AWSError<CoreErrors>(CoreErrors::UNKNOWN, GetNameForError(error), "", false);
+ }
+ } // namespace EventStreamErrorsMapper
+ } // namespace Event
+ } // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp
new file mode 100644
index 00000000000..9b785d19950
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp
@@ -0,0 +1,665 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/json/JsonSerializer.h>
+
+#include <iterator>
+#include <algorithm>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/StringUtils.h>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Json;
+
+JsonValue::JsonValue() : m_wasParseSuccessful(true)
+{
+ m_value = nullptr;
+}
+
+JsonValue::JsonValue(cJSON* value) :
+ m_value(cJSON_Duplicate(value, true /* recurse */)),
+ m_wasParseSuccessful(true)
+{
+}
+
+JsonValue::JsonValue(const Aws::String& value) : m_wasParseSuccessful(true)
+{
+ const char* return_parse_end;
+ m_value = cJSON_ParseWithOpts(value.c_str(), &return_parse_end, 1/*require_null_terminated*/);
+
+ if (!m_value || cJSON_IsInvalid(m_value))
+ {
+ m_wasParseSuccessful = false;
+ m_errorMessage = "Failed to parse JSON at: ";
+ m_errorMessage += return_parse_end;
+ }
+}
+
+JsonValue::JsonValue(Aws::IStream& istream) : m_wasParseSuccessful(true)
+{
+ Aws::StringStream memoryStream;
+ std::copy(std::istreambuf_iterator<char>(istream), std::istreambuf_iterator<char>(), std::ostreambuf_iterator<char>(memoryStream));
+ const char* return_parse_end;
+ const auto input = memoryStream.str();
+ m_value = cJSON_ParseWithOpts(input.c_str(), &return_parse_end, 1/*require_null_terminated*/);
+
+ if (!m_value || cJSON_IsInvalid(m_value))
+ {
+ m_wasParseSuccessful = false;
+ m_errorMessage = "Failed to parse JSON. Invalid input at: ";
+ m_errorMessage += return_parse_end;
+ }
+}
+
+JsonValue::JsonValue(const JsonValue& value) :
+ m_value(cJSON_Duplicate(value.m_value, true/*recurse*/)),
+ m_wasParseSuccessful(value.m_wasParseSuccessful),
+ m_errorMessage(value.m_errorMessage)
+{
+}
+
+JsonValue::JsonValue(JsonValue&& value) :
+ m_value(value.m_value),
+ m_wasParseSuccessful(value.m_wasParseSuccessful),
+ m_errorMessage(std::move(value.m_errorMessage))
+{
+ value.m_value = nullptr;
+}
+
+void JsonValue::Destroy()
+{
+ cJSON_Delete(m_value);
+}
+
+JsonValue::~JsonValue()
+{
+ Destroy();
+}
+
+JsonValue& JsonValue::operator=(const JsonValue& other)
+{
+ if (this == &other)
+ {
+ return *this;
+ }
+
+ Destroy();
+ m_value = cJSON_Duplicate(other.m_value, true /*recurse*/);
+ m_wasParseSuccessful = other.m_wasParseSuccessful;
+ m_errorMessage = other.m_errorMessage;
+ return *this;
+}
+
+JsonValue& JsonValue::operator=(JsonValue&& other)
+{
+ if (this == &other)
+ {
+ return *this;
+ }
+
+ using std::swap;
+ swap(m_value, other.m_value);
+ swap(m_errorMessage, other.m_errorMessage);
+ m_wasParseSuccessful = other.m_wasParseSuccessful;
+ return *this;
+}
+
+static void AddOrReplace(cJSON* root, const char* key, cJSON* value)
+{
+ const auto existing = cJSON_GetObjectItemCaseSensitive(root, key);
+ if (existing)
+ {
+ cJSON_ReplaceItemInObjectCaseSensitive(root, key, value);
+ }
+ else
+ {
+ cJSON_AddItemToObject(root, key, value);
+ }
+}
+
+JsonValue& JsonValue::WithString(const char* key, const Aws::String& value)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ const auto val = cJSON_CreateString(value.c_str());
+ AddOrReplace(m_value, key, val);
+ return *this;
+}
+
+JsonValue& JsonValue::WithString(const Aws::String& key, const Aws::String& value)
+{
+ return WithString(key.c_str(), value);
+}
+
+JsonValue& JsonValue::AsString(const Aws::String& value)
+{
+ Destroy();
+ m_value = cJSON_CreateString(value.c_str());
+ return *this;
+}
+
+JsonValue& JsonValue::WithBool(const char* key, bool value)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ const auto val = cJSON_CreateBool(value);
+ AddOrReplace(m_value, key, val);
+ return *this;
+}
+
+JsonValue& JsonValue::WithBool(const Aws::String& key, bool value)
+{
+ return WithBool(key.c_str(), value);
+}
+
+JsonValue& JsonValue::AsBool(bool value)
+{
+ Destroy();
+ m_value = cJSON_CreateBool(value);
+ return *this;
+}
+
+JsonValue& JsonValue::WithInteger(const char* key, int value)
+{
+ return WithDouble(key, static_cast<double>(value));
+}
+
+JsonValue& JsonValue::WithInteger(const Aws::String& key, int value)
+{
+ return WithDouble(key.c_str(), static_cast<double>(value));
+}
+
+JsonValue& JsonValue::AsInteger(int value)
+{
+ Destroy();
+ m_value = cJSON_CreateNumber(static_cast<double>(value));
+ return *this;
+}
+
+JsonValue& JsonValue::WithInt64(const char* key, long long value)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ const auto val = cJSON_CreateInt64(value);
+ AddOrReplace(m_value, key, val);
+ return *this;
+}
+
+JsonValue& JsonValue::WithInt64(const Aws::String& key, long long value)
+{
+ return WithInt64(key.c_str(), value);
+}
+
+JsonValue& JsonValue::AsInt64(long long value)
+{
+ Destroy();
+ m_value = cJSON_CreateInt64(value);
+ return *this;
+}
+
+JsonValue& JsonValue::WithDouble(const char* key, double value)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ const auto val = cJSON_CreateNumber(value);
+ AddOrReplace(m_value, key, val);
+ return *this;
+}
+
+JsonValue& JsonValue::WithDouble(const Aws::String& key, double value)
+{
+ return WithDouble(key.c_str(), value);
+}
+
+JsonValue& JsonValue::AsDouble(double value)
+{
+ Destroy();
+ m_value = cJSON_CreateNumber(value);
+ return *this;
+}
+
+JsonValue& JsonValue::WithArray(const char* key, const Array<Aws::String>& array)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ auto arrayValue = cJSON_CreateArray();
+ for (unsigned i = 0; i < array.GetLength(); ++i)
+ {
+ cJSON_AddItemToArray(arrayValue, cJSON_CreateString(array[i].c_str()));
+ }
+
+ AddOrReplace(m_value, key, arrayValue);
+ return *this;
+}
+
+JsonValue& JsonValue::WithArray(const Aws::String& key, const Array<Aws::String>& array)
+{
+ return WithArray(key.c_str(), array);
+}
+
+JsonValue& JsonValue::WithArray(const Aws::String& key, const Array<JsonValue>& array)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ auto arrayValue = cJSON_CreateArray();
+ for (unsigned i = 0; i < array.GetLength(); ++i)
+ {
+ cJSON_AddItemToArray(arrayValue, cJSON_Duplicate(array[i].m_value, true /*recurse*/));
+ }
+
+ AddOrReplace(m_value, key.c_str(), arrayValue);
+ return *this;
+}
+
+JsonValue& JsonValue::WithArray(const Aws::String& key, Array<JsonValue>&& array)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ auto arrayValue = cJSON_CreateArray();
+ for (unsigned i = 0; i < array.GetLength(); ++i)
+ {
+ cJSON_AddItemToArray(arrayValue, array[i].m_value);
+ array[i].m_value = nullptr;
+ }
+
+ AddOrReplace(m_value, key.c_str(), arrayValue);
+ return *this;
+}
+
+JsonValue& JsonValue::AsArray(const Array<JsonValue>& array)
+{
+ auto arrayValue = cJSON_CreateArray();
+ for (unsigned i = 0; i < array.GetLength(); ++i)
+ {
+ cJSON_AddItemToArray(arrayValue, cJSON_Duplicate(array[i].m_value, true /*recurse*/));
+ }
+
+ Destroy();
+ m_value = arrayValue;
+ return *this;
+}
+
+JsonValue& JsonValue::AsArray(Array<JsonValue>&& array)
+{
+ auto arrayValue = cJSON_CreateArray();
+ for (unsigned i = 0; i < array.GetLength(); ++i)
+ {
+ cJSON_AddItemToArray(arrayValue, array[i].m_value);
+ array[i].m_value = nullptr;
+ }
+
+ Destroy();
+ m_value = arrayValue;
+ return *this;
+}
+
+JsonValue& JsonValue::WithObject(const char* key, const JsonValue& value)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ const auto copy = value.m_value == nullptr ? cJSON_CreateObject() : cJSON_Duplicate(value.m_value, true /*recurse*/);
+ AddOrReplace(m_value, key, copy);
+ return *this;
+}
+
+JsonValue& JsonValue::WithObject(const Aws::String& key, const JsonValue& value)
+{
+ return WithObject(key.c_str(), value);
+}
+
+JsonValue& JsonValue::WithObject(const char* key, JsonValue&& value)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_CreateObject();
+ }
+
+ AddOrReplace(m_value, key, value.m_value == nullptr ? cJSON_CreateObject() : value.m_value);
+ value.m_value = nullptr;
+ return *this;
+}
+
+JsonValue& JsonValue::WithObject(const Aws::String& key, JsonValue&& value)
+{
+ return WithObject(key.c_str(), std::move(value));
+}
+
+JsonValue& JsonValue::AsObject(const JsonValue& value)
+{
+ *this = value;
+ return *this;
+}
+
+JsonValue& JsonValue::AsObject(JsonValue && value)
+{
+ *this = std::move(value);
+ return *this;
+}
+
+bool JsonValue::operator==(const JsonValue& other) const
+{
+ return cJSON_Compare(m_value, other.m_value, true /*case-sensitive*/) != 0;
+}
+
+bool JsonValue::operator!=(const JsonValue& other) const
+{
+ return !(*this == other);
+}
+
+JsonView JsonValue::View() const
+{
+ return *this;
+}
+
+JsonView::JsonView() : m_value(nullptr)
+{
+}
+
+JsonView::JsonView(const JsonValue& val) : m_value(val.m_value)
+{
+}
+
+JsonView::JsonView(cJSON* val) : m_value(val)
+{
+}
+
+JsonView& JsonView::operator=(const JsonValue& v)
+{
+ m_value = v.m_value;
+ return *this;
+}
+
+JsonView& JsonView::operator=(cJSON* val)
+{
+ m_value = val;
+ return *this;
+}
+
+Aws::String JsonView::GetString(const Aws::String& key) const
+{
+ assert(m_value);
+ auto item = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ auto str = cJSON_GetStringValue(item);
+ return str ? str : "";
+}
+
+Aws::String JsonView::AsString() const
+{
+ const char* str = cJSON_GetStringValue(m_value);
+ if (str == nullptr)
+ {
+ return {};
+ }
+ return str;
+}
+
+bool JsonView::GetBool(const Aws::String& key) const
+{
+ assert(m_value);
+ auto item = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ assert(item);
+ return item->valueint != 0;
+}
+
+bool JsonView::AsBool() const
+{
+ assert(cJSON_IsBool(m_value));
+ return cJSON_IsTrue(m_value) != 0;
+}
+
+int JsonView::GetInteger(const Aws::String& key) const
+{
+ assert(m_value);
+ auto item = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ assert(item);
+ return item->valueint;
+}
+
+int JsonView::AsInteger() const
+{
+ assert(cJSON_IsNumber(m_value)); // can be double or value larger than int_max, but at least not UB
+ return m_value->valueint;
+}
+
+int64_t JsonView::GetInt64(const Aws::String& key) const
+{
+ assert(m_value);
+ auto item = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ assert(item);
+ if (item->valuestring)
+ {
+ return Aws::Utils::StringUtils::ConvertToInt64(item->valuestring);
+ }
+ else
+ {
+ return static_cast<int64_t>(item->valuedouble);
+ }
+}
+
+int64_t JsonView::AsInt64() const
+{
+ assert(cJSON_IsNumber(m_value));
+ if (m_value->valuestring)
+ {
+ return Aws::Utils::StringUtils::ConvertToInt64(m_value->valuestring);
+ }
+ else
+ {
+ return static_cast<int64_t>(m_value->valuedouble);
+ }
+}
+
+double JsonView::GetDouble(const Aws::String& key) const
+{
+ assert(m_value);
+ auto item = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ assert(item);
+ return item->valuedouble;
+}
+
+double JsonView::AsDouble() const
+{
+ assert(cJSON_IsNumber(m_value));
+ return m_value->valuedouble;
+}
+
+JsonView JsonView::GetObject(const Aws::String& key) const
+{
+ assert(m_value);
+ auto item = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ return item;
+}
+
+JsonView JsonView::AsObject() const
+{
+ assert(cJSON_IsObject(m_value) || cJSON_IsNull(m_value));
+ return m_value;
+}
+
+Array<JsonView> JsonView::GetArray(const Aws::String& key) const
+{
+ assert(m_value);
+ auto array = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ assert(cJSON_IsArray(array));
+ Array<JsonView> returnArray(cJSON_GetArraySize(array));
+
+ auto element = array->child;
+ for (unsigned i = 0; element && i < returnArray.GetLength(); ++i, element = element->next)
+ {
+ returnArray[i] = element;
+ }
+
+ return returnArray;
+}
+
+Array<JsonView> JsonView::AsArray() const
+{
+ assert(cJSON_IsArray(m_value));
+ Array<JsonView> returnArray(cJSON_GetArraySize(m_value));
+
+ auto element = m_value->child;
+
+ for (unsigned i = 0; element && i < returnArray.GetLength(); ++i, element = element->next)
+ {
+ returnArray[i] = element;
+ }
+
+ return returnArray;
+}
+
+Aws::Map<Aws::String, JsonView> JsonView::GetAllObjects() const
+{
+ Aws::Map<Aws::String, JsonView> valueMap;
+ if (!m_value)
+ {
+ return valueMap;
+ }
+
+ for (auto iter = m_value->child; iter; iter = iter->next)
+ {
+ valueMap.emplace(std::make_pair(Aws::String(iter->string), JsonView(iter)));
+ }
+
+ return valueMap;
+}
+
+bool JsonView::ValueExists(const Aws::String& key) const
+{
+ if (!cJSON_IsObject(m_value))
+ {
+ return false;
+ }
+
+ auto item = cJSON_GetObjectItemCaseSensitive(m_value, key.c_str());
+ return !(item == nullptr || cJSON_IsNull(item));
+}
+
+bool JsonView::KeyExists(const Aws::String& key) const
+{
+ if (!cJSON_IsObject(m_value))
+ {
+ return false;
+ }
+
+ return cJSON_GetObjectItemCaseSensitive(m_value, key.c_str()) != nullptr;;
+}
+
+bool JsonView::IsObject() const
+{
+ return cJSON_IsObject(m_value) != 0;
+}
+
+bool JsonView::IsBool() const
+{
+ return cJSON_IsBool(m_value) != 0;
+}
+
+bool JsonView::IsString() const
+{
+ return cJSON_IsString(m_value) != 0;
+}
+
+bool JsonView::IsIntegerType() const
+{
+ if (!cJSON_IsNumber(m_value))
+ {
+ return false;
+ }
+
+ if (m_value->valuestring)
+ {
+ Aws::String valueString = m_value->valuestring;
+ return std::all_of(valueString.begin(), valueString.end(), [](unsigned char c){ return ::isdigit(c) || c == '+' || c == '-'; });
+ }
+ return m_value->valuedouble == static_cast<long long>(m_value->valuedouble);
+}
+
+bool JsonView::IsFloatingPointType() const
+{
+ if (!cJSON_IsNumber(m_value))
+ {
+ return false;
+ }
+
+ if (m_value->valuestring)
+ {
+ Aws::String valueString = m_value->valuestring;
+ return std::any_of(valueString.begin(), valueString.end(), [](unsigned char c){ return !::isdigit(c) && c != '+' && c != '-'; });
+ }
+ return m_value->valuedouble != static_cast<long long>(m_value->valuedouble);
+}
+
+bool JsonView::IsListType() const
+{
+ return cJSON_IsArray(m_value) != 0;
+}
+
+bool JsonView::IsNull() const
+{
+ return cJSON_IsNull(m_value) != 0;
+}
+
+Aws::String JsonView::WriteCompact(bool treatAsObject) const
+{
+ if (!m_value)
+ {
+ if (treatAsObject)
+ {
+ return "{}";
+ }
+ return {};
+ }
+
+ auto temp = cJSON_PrintUnformatted(m_value);
+ Aws::String out(temp);
+ cJSON_free(temp);
+ return out;
+}
+
+Aws::String JsonView::WriteReadable(bool treatAsObject) const
+{
+ if (!m_value)
+ {
+ if (treatAsObject)
+ {
+ return "{\n}\n";
+ }
+ return {};
+ }
+
+ auto temp = cJSON_Print(m_value);
+ Aws::String out(temp);
+ cJSON_free(temp);
+ return out;
+}
+
+JsonValue JsonView::Materialize() const
+{
+ return m_value;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/AWSLogging.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/AWSLogging.cpp
new file mode 100644
index 00000000000..fc1b9fcc2ea
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/AWSLogging.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/logging/AWSLogging.h>
+#include <aws/core/utils/logging/LogSystemInterface.h>
+#include <aws/core/utils/memory/stl/AWSStack.h>
+
+#include <memory>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+
+static std::shared_ptr<LogSystemInterface> AWSLogSystem(nullptr);
+static std::shared_ptr<LogSystemInterface> OldLogger(nullptr);
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Logging {
+
+void InitializeAWSLogging(const std::shared_ptr<LogSystemInterface> &logSystem) {
+ AWSLogSystem = logSystem;
+}
+
+void ShutdownAWSLogging(void) {
+ InitializeAWSLogging(nullptr);
+}
+
+LogSystemInterface *GetLogSystem() {
+ return AWSLogSystem.get();
+}
+
+void PushLogger(const std::shared_ptr<LogSystemInterface> &logSystem)
+{
+ OldLogger = AWSLogSystem;
+ AWSLogSystem = logSystem;
+}
+
+void PopLogger()
+{
+ AWSLogSystem = OldLogger;
+ OldLogger = nullptr;
+}
+
+} // namespace Logging
+} // namespace Utils
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/ConsoleLogSystem.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/ConsoleLogSystem.cpp
new file mode 100644
index 00000000000..dec7cef82fa
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/ConsoleLogSystem.cpp
@@ -0,0 +1,22 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/logging/ConsoleLogSystem.h>
+
+#include <iostream>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+
+void ConsoleLogSystem::ProcessFormattedStatement(Aws::String&& statement)
+{
+ std::cout << statement;
+}
+
+void ConsoleLogSystem::Flush()
+{
+ std::cout.flush();
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/DefaultLogSystem.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/DefaultLogSystem.cpp
new file mode 100644
index 00000000000..7286bb63788
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/DefaultLogSystem.cpp
@@ -0,0 +1,117 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/logging/DefaultLogSystem.h>
+
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+
+#include <fstream>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+
+static const char* AllocationTag = "DefaultLogSystem";
+static const int BUFFERED_MSG_COUNT = 100;
+
+static std::shared_ptr<Aws::OFStream> MakeDefaultLogFile(const Aws::String& filenamePrefix)
+{
+ Aws::String newFileName = filenamePrefix + DateTime::CalculateGmtTimestampAsString("%Y-%m-%d-%H") + ".log";
+ return Aws::MakeShared<Aws::OFStream>(AllocationTag, newFileName.c_str(), Aws::OFStream::out | Aws::OFStream::app);
+}
+
+static void LogThread(DefaultLogSystem::LogSynchronizationData* syncData, const std::shared_ptr<Aws::OStream>& logFile, const Aws::String& filenamePrefix, bool rollLog)
+{
+ // localtime requires access to env. variables to get Timezone, which is not thread-safe
+ int32_t lastRolledHour = DateTime::Now().GetHour(false /*localtime*/);
+ std::shared_ptr<Aws::OStream> log = logFile;
+
+ for(;;)
+ {
+ std::unique_lock<std::mutex> locker(syncData->m_logQueueMutex);
+ syncData->m_queueSignal.wait(locker, [&](){ return syncData->m_stopLogging == true || syncData->m_queuedLogMessages.size() > 0; } );
+
+ if (syncData->m_stopLogging && syncData->m_queuedLogMessages.size() == 0)
+ {
+ break;
+ }
+
+ Aws::Vector<Aws::String> messages(std::move(syncData->m_queuedLogMessages));
+ syncData->m_queuedLogMessages.reserve(BUFFERED_MSG_COUNT);
+
+ locker.unlock();
+
+ if (messages.size() > 0)
+ {
+ if (rollLog)
+ {
+ // localtime requires access to env. variables to get Timezone, which is not thread-safe
+ int32_t currentHour = DateTime::Now().GetHour(false /*localtime*/);
+ if (currentHour != lastRolledHour)
+ {
+ log = MakeDefaultLogFile(filenamePrefix);
+ lastRolledHour = currentHour;
+ }
+ }
+
+ for (const auto& msg : messages)
+ {
+ (*log) << msg;
+ }
+
+ log->flush();
+ }
+ }
+}
+
+DefaultLogSystem::DefaultLogSystem(LogLevel logLevel, const std::shared_ptr<Aws::OStream>& logFile) :
+ Base(logLevel),
+ m_syncData(),
+ m_loggingThread()
+{
+ m_loggingThread = std::thread(LogThread, &m_syncData, logFile, "", false);
+}
+
+DefaultLogSystem::DefaultLogSystem(LogLevel logLevel, const Aws::String& filenamePrefix) :
+ Base(logLevel),
+ m_syncData(),
+ m_loggingThread()
+{
+ m_loggingThread = std::thread(LogThread, &m_syncData, MakeDefaultLogFile(filenamePrefix), filenamePrefix, true);
+}
+
+DefaultLogSystem::~DefaultLogSystem()
+{
+ {
+ std::lock_guard<std::mutex> locker(m_syncData.m_logQueueMutex);
+ m_syncData.m_stopLogging = true;
+ }
+
+ m_syncData.m_queueSignal.notify_one();
+
+ m_loggingThread.join();
+}
+
+void DefaultLogSystem::ProcessFormattedStatement(Aws::String&& statement)
+{
+ std::unique_lock<std::mutex> locker(m_syncData.m_logQueueMutex);
+ m_syncData.m_queuedLogMessages.emplace_back(std::move(statement));
+ if(m_syncData.m_queuedLogMessages.size() >= BUFFERED_MSG_COUNT)
+ {
+ locker.unlock();
+ m_syncData.m_queueSignal.notify_one();
+ }
+ else
+ {
+ locker.unlock();
+ }
+}
+
+void DefaultLogSystem::Flush()
+{
+ m_syncData.m_queueSignal.notify_one();
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/FormattedLogSystem.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/FormattedLogSystem.cpp
new file mode 100644
index 00000000000..41c4d7e09c5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/FormattedLogSystem.cpp
@@ -0,0 +1,99 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+
+#include <aws/core/utils/logging/FormattedLogSystem.h>
+
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/Array.h>
+
+#include <fstream>
+#include <cstdarg>
+#include <stdio.h>
+#include <thread>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Logging;
+
+static Aws::String CreateLogPrefixLine(LogLevel logLevel, const char* tag)
+{
+ Aws::StringStream ss;
+
+ switch(logLevel)
+ {
+ case LogLevel::Error:
+ ss << "[ERROR] ";
+ break;
+
+ case LogLevel::Fatal:
+ ss << "[FATAL] ";
+ break;
+
+ case LogLevel::Warn:
+ ss << "[WARN] ";
+ break;
+
+ case LogLevel::Info:
+ ss << "[INFO] ";
+ break;
+
+ case LogLevel::Debug:
+ ss << "[DEBUG] ";
+ break;
+
+ case LogLevel::Trace:
+ ss << "[TRACE] ";
+ break;
+
+ default:
+ ss << "[UNKOWN] ";
+ break;
+ }
+
+ ss << DateTime::Now().CalculateGmtTimeWithMsPrecision() << " " << tag << " [" << std::this_thread::get_id() << "] ";
+
+ return ss.str();
+}
+
+FormattedLogSystem::FormattedLogSystem(LogLevel logLevel) :
+ m_logLevel(logLevel)
+{
+}
+
+void FormattedLogSystem::Log(LogLevel logLevel, const char* tag, const char* formatStr, ...)
+{
+ Aws::StringStream ss;
+ ss << CreateLogPrefixLine(logLevel, tag);
+
+ std::va_list args;
+ va_start(args, formatStr);
+
+ va_list tmp_args; //unfortunately you cannot consume a va_list twice
+ va_copy(tmp_args, args); //so we have to copy it
+ #ifdef WIN32
+ const int requiredLength = _vscprintf(formatStr, tmp_args) + 1;
+ #else
+ const int requiredLength = vsnprintf(nullptr, 0, formatStr, tmp_args) + 1;
+ #endif
+ va_end(tmp_args);
+
+ Array<char> outputBuff(requiredLength);
+ #ifdef WIN32
+ vsnprintf_s(outputBuff.GetUnderlyingData(), requiredLength, _TRUNCATE, formatStr, args);
+ #else
+ vsnprintf(outputBuff.GetUnderlyingData(), requiredLength, formatStr, args);
+ #endif // WIN32
+
+ ss << outputBuff.GetUnderlyingData() << std::endl;
+
+ ProcessFormattedStatement(ss.str());
+
+ va_end(args);
+}
+
+void FormattedLogSystem::LogStream(LogLevel logLevel, const char* tag, const Aws::OStringStream &message_stream)
+{
+ ProcessFormattedStatement(CreateLogPrefixLine(logLevel, tag) + message_stream.str() + "\n");
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/LogLevel.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/LogLevel.cpp
new file mode 100644
index 00000000000..9ff1bf3126f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/logging/LogLevel.cpp
@@ -0,0 +1,45 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/logging/LogLevel.h>
+
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <cassert>
+
+using namespace Aws::Utils::Logging;
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Logging
+{
+
+Aws::String GetLogLevelName(LogLevel logLevel)
+{
+ switch (logLevel)
+ {
+ case LogLevel::Fatal:
+ return "FATAL";
+ case LogLevel::Error:
+ return "ERROR";
+ case LogLevel::Warn:
+ return "WARN";
+ case LogLevel::Info:
+ return "INFO";
+ case LogLevel::Debug:
+ return "DEBUG";
+ case LogLevel::Trace:
+ return "TRACE";
+ default:
+ assert(0);
+ return "";
+ }
+}
+
+} // namespace Logging
+} // namespace Utils
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/AWSMemory.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/AWSMemory.cpp
new file mode 100644
index 00000000000..96d339d385a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/AWSMemory.cpp
@@ -0,0 +1,134 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/memory/AWSMemory.h>
+
+#include <aws/core/utils/memory/MemorySystemInterface.h>
+#include <aws/common/common.h>
+
+#include <atomic>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Memory;
+
+#ifdef USE_AWS_MEMORY_MANAGEMENT
+ static MemorySystemInterface* AWSMemorySystem(nullptr);
+#endif // USE_AWS_MEMORY_MANAGEMENT
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Memory
+{
+
+void InitializeAWSMemorySystem(MemorySystemInterface& memorySystem)
+{
+ #ifdef USE_AWS_MEMORY_MANAGEMENT
+ if(AWSMemorySystem != nullptr)
+ {
+ AWSMemorySystem->End();
+ }
+
+ AWSMemorySystem = &memorySystem;
+ AWSMemorySystem->Begin();
+ #else
+ AWS_UNREFERENCED_PARAM(memorySystem);
+ #endif // USE_AWS_MEMORY_MANAGEMENT
+}
+
+void ShutdownAWSMemorySystem(void)
+{
+ #ifdef USE_AWS_MEMORY_MANAGEMENT
+ if(AWSMemorySystem != nullptr)
+ {
+ AWSMemorySystem->End();
+ }
+ AWSMemorySystem = nullptr;
+ #endif // USE_AWS_MEMORY_MANAGEMENT
+}
+
+MemorySystemInterface* GetMemorySystem()
+{
+ #ifdef USE_AWS_MEMORY_MANAGEMENT
+ return AWSMemorySystem;
+ #else
+ return nullptr;
+ #endif // USE_AWS_MEMORY_MANAGEMENT
+}
+
+} // namespace Memory
+} // namespace Utils
+
+void* Malloc(const char* allocationTag, size_t allocationSize)
+{
+ Aws::Utils::Memory::MemorySystemInterface* memorySystem = Aws::Utils::Memory::GetMemorySystem();
+
+ void* rawMemory = nullptr;
+ if(memorySystem != nullptr)
+ {
+ rawMemory = memorySystem->AllocateMemory(allocationSize, 1, allocationTag);
+ }
+ else
+ {
+ rawMemory = malloc(allocationSize);
+ }
+
+ return rawMemory;
+}
+
+
+void Free(void* memoryPtr)
+{
+ if(memoryPtr == nullptr)
+ {
+ return;
+ }
+
+ Aws::Utils::Memory::MemorySystemInterface* memorySystem = Aws::Utils::Memory::GetMemorySystem();
+ if(memorySystem != nullptr)
+ {
+ memorySystem->FreeMemory(memoryPtr);
+ }
+ else
+ {
+ free(memoryPtr);
+ }
+}
+
+static void* MemAcquire(aws_allocator* allocator, size_t size)
+{
+ (void)allocator; // unused;
+ return Aws::Malloc("MemAcquire", size);
+}
+
+static void MemRelease(aws_allocator* allocator, void* ptr)
+{
+ (void)allocator; // unused;
+ return Aws::Free(ptr);
+}
+
+static aws_allocator create_aws_allocator()
+{
+#if (__GNUC__ == 4) && !defined(__clang__)
+ AWS_SUPPRESS_WARNING("-Wmissing-field-initializers", aws_allocator wrapper{};);
+#else
+ aws_allocator wrapper{};
+#endif
+ wrapper.mem_acquire = MemAcquire;
+ wrapper.mem_release = MemRelease;
+ wrapper.mem_realloc = nullptr;
+ return wrapper;
+}
+
+aws_allocator* get_aws_allocator()
+{
+ static aws_allocator wrapper = create_aws_allocator();
+ return &wrapper;
+}
+
+} // namespace Aws
+
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/stl/SimpleStringStream.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/stl/SimpleStringStream.cpp
new file mode 100644
index 00000000000..46627498729
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/memory/stl/SimpleStringStream.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/memory/stl/SimpleStringStream.h>
+
+namespace Aws
+{
+
+SimpleStringStream::SimpleStringStream() :
+ base(&m_streamBuffer),
+ m_streamBuffer()
+{
+}
+
+SimpleStringStream::SimpleStringStream(const Aws::String& value) :
+ base(&m_streamBuffer),
+ m_streamBuffer(value)
+{
+}
+
+void SimpleStringStream::str(const Aws::String& value)
+{
+ m_streamBuffer.str(value);
+}
+
+//
+
+SimpleIStringStream::SimpleIStringStream() :
+ base(&m_streamBuffer),
+ m_streamBuffer()
+{
+}
+
+SimpleIStringStream::SimpleIStringStream(const Aws::String& value) :
+ base(&m_streamBuffer),
+ m_streamBuffer(value)
+{
+}
+
+void SimpleIStringStream::str(const Aws::String& value)
+{
+ m_streamBuffer.str(value);
+}
+
+//
+
+SimpleOStringStream::SimpleOStringStream() :
+ base(&m_streamBuffer),
+ m_streamBuffer()
+{
+}
+
+SimpleOStringStream::SimpleOStringStream(const Aws::String& value) :
+ base(&m_streamBuffer),
+ m_streamBuffer(value)
+{
+}
+
+void SimpleOStringStream::str(const Aws::String& value)
+{
+ m_streamBuffer.str(value);
+}
+
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ConcurrentStreamBuf.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ConcurrentStreamBuf.cpp
new file mode 100644
index 00000000000..3f59dbe96d4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ConcurrentStreamBuf.cpp
@@ -0,0 +1,126 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/core/utils/stream/ConcurrentStreamBuf.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <cstdint>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Stream
+ {
+ const char TAG[] = "ConcurrentStreamBuf";
+ ConcurrentStreamBuf::ConcurrentStreamBuf(size_t bufferLength) :
+ m_putArea(bufferLength), // we access [0] of the put area below so we must initialize it.
+ m_eof(false)
+ {
+ m_getArea.reserve(bufferLength);
+ m_backbuf.reserve(bufferLength);
+
+ char* pbegin = reinterpret_cast<char*>(&m_putArea[0]);
+ setp(pbegin, pbegin + bufferLength);
+ }
+
+ void ConcurrentStreamBuf::SetEof()
+ {
+ {
+ std::unique_lock<std::mutex> lock(m_lock);
+ m_eof = true;
+ }
+ m_signal.notify_all();
+ }
+
+ void ConcurrentStreamBuf::FlushPutArea()
+ {
+ const size_t bitslen = pptr() - pbase();
+ if (bitslen)
+ {
+ // scope the lock
+ {
+ std::unique_lock<std::mutex> lock(m_lock);
+ m_signal.wait(lock, [this, bitslen]{ return m_eof || bitslen <= (m_backbuf.capacity() - m_backbuf.size()); });
+ if (m_eof)
+ {
+ return;
+ }
+ std::copy(pbase(), pptr(), std::back_inserter(m_backbuf));
+ }
+ m_signal.notify_one();
+ char* pbegin = reinterpret_cast<char*>(&m_putArea[0]);
+ setp(pbegin, pbegin + m_putArea.size());
+ }
+ }
+
+ std::streampos ConcurrentStreamBuf::seekoff(std::streamoff, std::ios_base::seekdir, std::ios_base::openmode)
+ {
+ return std::streamoff(-1); // Seeking is not supported.
+ }
+
+ std::streampos ConcurrentStreamBuf::seekpos(std::streampos, std::ios_base::openmode)
+ {
+ return std::streamoff(-1); // Seeking is not supported.
+ }
+
+ int ConcurrentStreamBuf::underflow()
+ {
+ {
+ std::unique_lock<std::mutex> lock(m_lock);
+ m_signal.wait(lock, [this]{ return m_backbuf.empty() == false || m_eof; });
+
+ if (m_eof && m_backbuf.empty())
+ {
+ return std::char_traits<char>::eof();
+ }
+
+ m_getArea.clear(); // keep the get-area from growing unbounded.
+ std::copy(m_backbuf.begin(), m_backbuf.end(), std::back_inserter(m_getArea));
+ m_backbuf.clear();
+ }
+ m_signal.notify_one();
+ char* gbegin = reinterpret_cast<char*>(&m_getArea[0]);
+ setg(gbegin, gbegin, gbegin + m_getArea.size());
+ return std::char_traits<char>::to_int_type(*gptr());
+ }
+
+ std::streamsize ConcurrentStreamBuf::showmanyc()
+ {
+ std::unique_lock<std::mutex> lock(m_lock);
+ AWS_LOGSTREAM_TRACE(TAG, "stream how many character? " << m_backbuf.size());
+ return m_backbuf.size();
+ }
+
+ int ConcurrentStreamBuf::overflow(int ch)
+ {
+ const auto eof = std::char_traits<char>::eof();
+
+ if (ch == eof)
+ {
+ FlushPutArea();
+ return eof;
+ }
+
+ FlushPutArea();
+ {
+ std::unique_lock<std::mutex> lock(m_lock);
+ if (m_eof)
+ {
+ return eof;
+ }
+ *pptr() = static_cast<char>(ch);
+ pbump(1);
+ return ch;
+ }
+ }
+
+ int ConcurrentStreamBuf::sync()
+ {
+ FlushPutArea();
+ return 0;
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/PreallocatedStreamBuf.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/PreallocatedStreamBuf.cpp
new file mode 100644
index 00000000000..f656fc86138
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/PreallocatedStreamBuf.cpp
@@ -0,0 +1,75 @@
+
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/stream/PreallocatedStreamBuf.h>
+#include <cassert>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ namespace Stream
+ {
+ PreallocatedStreamBuf::PreallocatedStreamBuf(unsigned char* buffer, uint64_t lengthToRead) :
+ m_underlyingBuffer(buffer), m_lengthToRead(lengthToRead)
+ {
+ char* end = reinterpret_cast<char*>(m_underlyingBuffer + m_lengthToRead);
+ char* begin = reinterpret_cast<char*>(m_underlyingBuffer);
+ setp(begin, end);
+ setg(begin, begin, end);
+ }
+
+ PreallocatedStreamBuf::pos_type PreallocatedStreamBuf::seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which)
+ {
+ if (dir == std::ios_base::beg)
+ {
+ return seekpos(off, which);
+ }
+ else if (dir == std::ios_base::end)
+ {
+ return seekpos(m_lengthToRead - off, which);
+ }
+ else if (dir == std::ios_base::cur)
+ {
+ if(which == std::ios_base::in)
+ {
+ return seekpos((gptr() - reinterpret_cast<char*>(m_underlyingBuffer)) + off, which);
+ }
+ else
+ {
+ return seekpos((pptr() - reinterpret_cast<char*>(m_underlyingBuffer)) + off, which);
+ }
+ }
+
+ return off_type(-1);
+ }
+
+ PreallocatedStreamBuf::pos_type PreallocatedStreamBuf::seekpos(pos_type pos, std::ios_base::openmode which)
+ {
+ assert(static_cast<size_t>(pos) <= m_lengthToRead);
+ if (static_cast<size_t>(pos) > m_lengthToRead)
+ {
+ return pos_type(off_type(-1));
+ }
+
+ char* end = reinterpret_cast<char*>(m_underlyingBuffer + m_lengthToRead);
+ char* begin = reinterpret_cast<char*>(m_underlyingBuffer);
+
+ if (which == std::ios_base::in)
+ {
+ setg(begin, begin + static_cast<size_t>(pos), end);
+ }
+
+ if (which == std::ios_base::out)
+ {
+ setp(begin + static_cast<size_t>(pos), end);
+ }
+
+ return pos;
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ResponseStream.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ResponseStream.cpp
new file mode 100644
index 00000000000..6d1f90ed124
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/ResponseStream.cpp
@@ -0,0 +1,91 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#if defined(_GLIBCXX_FULLY_DYNAMIC_STRING) && _GLIBCXX_FULLY_DYNAMIC_STRING == 0 && defined(__ANDROID__)
+#include <aws/core/utils/stream/SimpleStreamBuf.h>
+using DefaultStreamBufType = Aws::Utils::Stream::SimpleStreamBuf;
+#else
+using DefaultStreamBufType = Aws::StringBuf;
+#endif
+
+using namespace Aws::Utils::Stream;
+
+ResponseStream::ResponseStream(void) :
+ m_underlyingStream(nullptr)
+{
+}
+
+ResponseStream::ResponseStream(Aws::IOStream* underlyingStreamToManage) :
+ m_underlyingStream(underlyingStreamToManage)
+{
+}
+
+ResponseStream::ResponseStream(const Aws::IOStreamFactory& factory) :
+ m_underlyingStream(factory())
+{
+}
+
+ResponseStream::ResponseStream(ResponseStream&& toMove) : m_underlyingStream(toMove.m_underlyingStream)
+{
+ toMove.m_underlyingStream = nullptr;
+}
+
+ResponseStream& ResponseStream::operator=(ResponseStream&& toMove)
+{
+ if(m_underlyingStream == toMove.m_underlyingStream)
+ {
+ return *this;
+ }
+
+ ReleaseStream();
+ m_underlyingStream = toMove.m_underlyingStream;
+ toMove.m_underlyingStream = nullptr;
+
+ return *this;
+}
+
+ResponseStream::~ResponseStream()
+{
+ ReleaseStream();
+}
+
+void ResponseStream::ReleaseStream()
+{
+ if (m_underlyingStream)
+ {
+ m_underlyingStream->flush();
+ Aws::Delete(m_underlyingStream);
+ }
+
+ m_underlyingStream = nullptr;
+}
+
+static const char *DEFAULT_STREAM_TAG = "DefaultUnderlyingStream";
+
+DefaultUnderlyingStream::DefaultUnderlyingStream() :
+ Base( Aws::New< DefaultStreamBufType >( DEFAULT_STREAM_TAG ) )
+{}
+
+DefaultUnderlyingStream::DefaultUnderlyingStream(Aws::UniquePtr<std::streambuf> buf) :
+ Base(buf.release())
+{}
+
+DefaultUnderlyingStream::~DefaultUnderlyingStream()
+{
+ if( rdbuf() )
+ {
+ Aws::Delete( rdbuf() );
+ }
+}
+
+static const char* RESPONSE_STREAM_FACTORY_TAG = "ResponseStreamFactory";
+
+Aws::IOStream* Aws::Utils::Stream::DefaultResponseStreamFactoryMethod()
+{
+ return Aws::New<Aws::Utils::Stream::DefaultUnderlyingStream>(RESPONSE_STREAM_FACTORY_TAG);
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/SimpleStreamBuf.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/SimpleStreamBuf.cpp
new file mode 100644
index 00000000000..6e429947445
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/stream/SimpleStreamBuf.cpp
@@ -0,0 +1,239 @@
+
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/stream/SimpleStreamBuf.h>
+
+#include <algorithm>
+#include <cassert>
+#include <cstring>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Stream
+{
+
+static const uint32_t DEFAULT_BUFFER_SIZE = 100;
+static const char* SIMPLE_STREAMBUF_ALLOCATION_TAG = "SimpleStreamBufTag";
+
+SimpleStreamBuf::SimpleStreamBuf() :
+ m_buffer(nullptr),
+ m_bufferSize(0)
+{
+ m_buffer = Aws::NewArray<char>(DEFAULT_BUFFER_SIZE, SIMPLE_STREAMBUF_ALLOCATION_TAG);
+ m_bufferSize = DEFAULT_BUFFER_SIZE;
+
+ char* begin = m_buffer;
+ char* end = begin + m_bufferSize;
+
+ setp(begin, end);
+ setg(begin, begin, begin);
+}
+
+SimpleStreamBuf::SimpleStreamBuf(const Aws::String& value) :
+ m_buffer(nullptr),
+ m_bufferSize(0)
+{
+ size_t baseSize = (std::max)(value.size(), static_cast<std::size_t>(DEFAULT_BUFFER_SIZE));
+
+ m_buffer = Aws::NewArray<char>(baseSize, SIMPLE_STREAMBUF_ALLOCATION_TAG);
+ m_bufferSize = baseSize;
+
+ std::memcpy(m_buffer, value.c_str(), value.size());
+
+ char* begin = m_buffer;
+ char* end = begin + m_bufferSize;
+
+ setp(begin + value.size(), end);
+ setg(begin, begin, begin);
+}
+
+SimpleStreamBuf::~SimpleStreamBuf()
+{
+ if(m_buffer)
+ {
+ Aws::DeleteArray<char>(m_buffer);
+ m_buffer = nullptr;
+ }
+
+ m_bufferSize = 0;
+}
+
+std::streampos SimpleStreamBuf::seekoff(std::streamoff off, std::ios_base::seekdir dir, std::ios_base::openmode which)
+{
+ if (dir == std::ios_base::beg)
+ {
+ return seekpos(off, which);
+ }
+ else if (dir == std::ios_base::end)
+ {
+ return seekpos((pptr() - m_buffer) - off, which);
+ }
+ else if (dir == std::ios_base::cur)
+ {
+ if(which == std::ios_base::in)
+ {
+ return seekpos((gptr() - m_buffer) + off, which);
+ }
+ else
+ {
+ return seekpos((pptr() - m_buffer) + off, which);
+ }
+ }
+
+ return off_type(-1);
+}
+
+std::streampos SimpleStreamBuf::seekpos(std::streampos pos, std::ios_base::openmode which)
+{
+ size_t maxSeek = pptr() - m_buffer;
+ assert(static_cast<size_t>(pos) <= maxSeek);
+ if (static_cast<size_t>(pos) > maxSeek)
+ {
+ return pos_type(off_type(-1));
+ }
+
+ if (which == std::ios_base::in)
+ {
+ setg(m_buffer, m_buffer + static_cast<size_t>(pos), pptr());
+ }
+
+ if (which == std::ios_base::out)
+ {
+ setp(m_buffer + static_cast<size_t>(pos), epptr());
+ }
+
+ return pos;
+}
+
+bool SimpleStreamBuf::GrowBuffer()
+{
+ size_t currentSize = m_bufferSize;
+ size_t newSize = currentSize * 2;
+
+ char* newBuffer = Aws::NewArray<char>(newSize, SIMPLE_STREAMBUF_ALLOCATION_TAG);
+ if(newBuffer == nullptr)
+ {
+ return false;
+ }
+
+ if(currentSize > 0)
+ {
+ std::memcpy(newBuffer, m_buffer, currentSize);
+ }
+
+ if(m_buffer)
+ {
+ Aws::DeleteArray<char>(m_buffer);
+ }
+
+ m_buffer = newBuffer;
+ m_bufferSize = newSize;
+
+ return true;
+}
+
+int SimpleStreamBuf::overflow (int c)
+{
+ auto endOfFile = std::char_traits< char >::eof();
+ if(c == endOfFile)
+ {
+ return endOfFile;
+ }
+
+ char* old_begin = m_buffer;
+
+ char *old_pptr = pptr();
+ char *old_gptr = gptr();
+ char *old_egptr = egptr();
+
+ size_t currentWritePosition = m_bufferSize;
+
+ if(!GrowBuffer())
+ {
+ return endOfFile;
+ }
+
+ char* new_begin = m_buffer;
+ char* new_end = new_begin + m_bufferSize;
+
+ setp(new_begin + (old_pptr - old_begin) + 1, new_end);
+ setg(new_begin, new_begin + (old_gptr - old_begin), new_begin + (old_egptr - old_begin));
+
+ auto val = std::char_traits< char >::to_char_type(c);
+ *(new_begin + currentWritePosition) = val;
+
+ return c;
+}
+
+std::streamsize SimpleStreamBuf::xsputn(const char* s, std::streamsize n)
+{
+ std::streamsize writeCount = 0;
+ while(writeCount < n)
+ {
+ char* current_pptr = pptr();
+ char* current_epptr = epptr();
+
+ if (current_pptr < current_epptr)
+ {
+ std::size_t copySize = (std::min)(static_cast< std::size_t >(n - writeCount),
+ static_cast< std::size_t >(current_epptr - current_pptr));
+
+ std::memcpy(current_pptr, s + writeCount, copySize);
+ writeCount += copySize;
+ setp(current_pptr + copySize, current_epptr);
+ setg(m_buffer, gptr(), pptr());
+ }
+ else if (overflow(std::char_traits< char >::to_int_type(*(s + writeCount))) != std::char_traits<char>::eof())
+ {
+ writeCount++;
+ }
+ else
+ {
+ return writeCount;
+ }
+ }
+
+ return writeCount;
+}
+
+Aws::String SimpleStreamBuf::str() const
+{
+ return Aws::String(m_buffer, pptr());
+}
+
+int SimpleStreamBuf::underflow()
+{
+ if(egptr() != pptr())
+ {
+ setg(m_buffer, gptr(), pptr());
+ }
+
+ if(gptr() != egptr())
+ {
+ return std::char_traits< char >::to_int_type(*gptr());
+ }
+ else
+ {
+ return std::char_traits< char >::eof();
+ }
+}
+
+void SimpleStreamBuf::str(const Aws::String& value)
+{
+ char* begin = m_buffer;
+ char* end = begin + m_bufferSize;
+
+ setp(begin, end);
+ setg(begin, begin, begin);
+
+ xsputn(value.c_str(), value.size());
+}
+
+}
+}
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Executor.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Executor.cpp
new file mode 100644
index 00000000000..4a3c4209c41
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Executor.cpp
@@ -0,0 +1,155 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/threading/Executor.h>
+#include <aws/core/utils/threading/ThreadTask.h>
+#include <thread>
+#include <cassert>
+
+static const char* POOLED_CLASS_TAG = "PooledThreadExecutor";
+
+using namespace Aws::Utils::Threading;
+
+bool DefaultExecutor::SubmitToThread(std::function<void()>&& fx)
+{
+ auto main = [fx, this] {
+ fx();
+ Detach(std::this_thread::get_id());
+ };
+
+ State expected;
+ do
+ {
+ expected = State::Free;
+ if(m_state.compare_exchange_strong(expected, State::Locked))
+ {
+ std::thread t(main);
+ const auto id = t.get_id(); // copy the id before we std::move the thread
+ m_threads.emplace(id, std::move(t));
+ m_state = State::Free;
+ return true;
+ }
+ }
+ while(expected != State::Shutdown);
+ return false;
+}
+
+void DefaultExecutor::Detach(std::thread::id id)
+{
+ State expected;
+ do
+ {
+ expected = State::Free;
+ if(m_state.compare_exchange_strong(expected, State::Locked))
+ {
+ auto it = m_threads.find(id);
+ assert(it != m_threads.end());
+ it->second.detach();
+ m_threads.erase(it);
+ m_state = State::Free;
+ return;
+ }
+ }
+ while(expected != State::Shutdown);
+}
+
+DefaultExecutor::~DefaultExecutor()
+{
+ auto expected = State::Free;
+ while(!m_state.compare_exchange_strong(expected, State::Shutdown))
+ {
+ //spin while currently detaching threads finish
+ assert(expected == State::Locked);
+ expected = State::Free;
+ }
+
+ auto it = m_threads.begin();
+ while(!m_threads.empty())
+ {
+ it->second.join();
+ it = m_threads.erase(it);
+ }
+}
+
+PooledThreadExecutor::PooledThreadExecutor(size_t poolSize, OverflowPolicy overflowPolicy) :
+ m_sync(0, poolSize), m_poolSize(poolSize), m_overflowPolicy(overflowPolicy)
+{
+ for (size_t index = 0; index < m_poolSize; ++index)
+ {
+ m_threadTaskHandles.push_back(Aws::New<ThreadTask>(POOLED_CLASS_TAG, *this));
+ }
+}
+
+PooledThreadExecutor::~PooledThreadExecutor()
+{
+ for(auto threadTask : m_threadTaskHandles)
+ {
+ threadTask->StopProcessingWork();
+ }
+
+ m_sync.ReleaseAll();
+
+ for (auto threadTask : m_threadTaskHandles)
+ {
+ Aws::Delete(threadTask);
+ }
+
+ while(m_tasks.size() > 0)
+ {
+ std::function<void()>* fn = m_tasks.front();
+ m_tasks.pop();
+
+ if(fn)
+ {
+ Aws::Delete(fn);
+ }
+ }
+
+}
+
+bool PooledThreadExecutor::SubmitToThread(std::function<void()>&& fn)
+{
+ //avoid the need to do copies inside the lock. Instead lets do a pointer push.
+ std::function<void()>* fnCpy = Aws::New<std::function<void()>>(POOLED_CLASS_TAG, std::forward<std::function<void()>>(fn));
+
+ {
+ std::lock_guard<std::mutex> locker(m_queueLock);
+
+ if (m_overflowPolicy == OverflowPolicy::REJECT_IMMEDIATELY && m_tasks.size() >= m_poolSize)
+ {
+ Aws::Delete(fnCpy);
+ return false;
+ }
+
+ m_tasks.push(fnCpy);
+ }
+
+ m_sync.Release();
+
+ return true;
+}
+
+std::function<void()>* PooledThreadExecutor::PopTask()
+{
+ std::lock_guard<std::mutex> locker(m_queueLock);
+
+ if (m_tasks.size() > 0)
+ {
+ std::function<void()>* fn = m_tasks.front();
+ if (fn)
+ {
+ m_tasks.pop();
+ return fn;
+ }
+ }
+
+ return nullptr;
+}
+
+bool PooledThreadExecutor::HasTasks()
+{
+ std::lock_guard<std::mutex> locker(m_queueLock);
+ return m_tasks.size() > 0;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ReaderWriterLock.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ReaderWriterLock.cpp
new file mode 100644
index 00000000000..ddb5860563d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ReaderWriterLock.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/threading/ReaderWriterLock.h>
+#include <cstdint>
+#include <limits>
+#include <cassert>
+
+using namespace Aws::Utils::Threading;
+
+static const int64_t MaxReaders = (std::numeric_limits<std::int32_t>::max)();
+
+ReaderWriterLock::ReaderWriterLock() :
+ m_readers(0),
+ m_holdouts(0),
+ m_readerSem(0, static_cast<size_t>(MaxReaders)),
+ m_writerSem(0, 1)
+{
+}
+
+void ReaderWriterLock::LockReader()
+{
+ if (++m_readers < 0)
+ {
+ m_readerSem.WaitOne();
+ }
+}
+
+void ReaderWriterLock::UnlockReader()
+{
+ if (--m_readers < 0 && --m_holdouts == 0)
+ {
+ m_writerSem.Release();
+ }
+}
+
+void ReaderWriterLock::LockWriter()
+{
+ m_writerLock.lock();
+ if(const auto current = m_readers.fetch_sub(MaxReaders))
+ {
+ assert(current > 0);
+ const auto holdouts = m_holdouts.fetch_add(current) + current;
+ assert(holdouts >= 0);
+ if(holdouts > 0)
+ {
+ m_writerSem.WaitOne();
+ }
+ }
+}
+
+void ReaderWriterLock::UnlockWriter()
+{
+ assert(m_holdouts == 0);
+ const auto current = m_readers.fetch_add(MaxReaders) + MaxReaders;
+ assert(current >= 0);
+ for(int64_t r = 0; r < current; r++)
+ {
+ m_readerSem.Release();
+ }
+ m_writerLock.unlock();
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Semaphore.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Semaphore.cpp
new file mode 100644
index 00000000000..86dabc9acf4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/Semaphore.cpp
@@ -0,0 +1,39 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/threading/Semaphore.h>
+#include <algorithm>
+
+using namespace Aws::Utils::Threading;
+
+Semaphore::Semaphore(size_t initialCount, size_t maxCount)
+ : m_count(initialCount), m_maxCount(maxCount)
+{
+}
+
+void Semaphore::WaitOne()
+{
+ std::unique_lock<std::mutex> locker(m_mutex);
+ if(0 == m_count)
+ {
+ m_syncPoint.wait(locker, [this] { return m_count > 0; });
+ }
+ --m_count;
+}
+
+void Semaphore::Release()
+{
+ std::lock_guard<std::mutex> locker(m_mutex);
+ m_count = (std::min)(m_maxCount, m_count + 1);
+ m_syncPoint.notify_one();
+}
+
+void Semaphore::ReleaseAll()
+{
+ std::lock_guard<std::mutex> locker(m_mutex);
+ m_count = m_maxCount;
+ m_syncPoint.notify_all();
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp
new file mode 100644
index 00000000000..a899fe045d7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp
@@ -0,0 +1,46 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/threading/ThreadTask.h>
+#include <aws/core/utils/threading/Executor.h>
+
+using namespace Aws::Utils;
+using namespace Aws::Utils::Threading;
+
+ThreadTask::ThreadTask(PooledThreadExecutor& executor) : m_continue(true), m_executor(executor), m_thread(std::bind(&ThreadTask::MainTaskRunner, this))
+{
+}
+
+ThreadTask::~ThreadTask()
+{
+ StopProcessingWork();
+ m_thread.join();
+}
+
+void ThreadTask::MainTaskRunner()
+{
+ while (m_continue)
+ {
+ while (m_continue && m_executor.HasTasks())
+ {
+ auto fn = m_executor.PopTask();
+ if(fn)
+ {
+ (*fn)();
+ Aws::Delete(fn);
+ }
+ }
+
+ if(m_continue)
+ {
+ m_executor.m_sync.WaitOne();
+ }
+ }
+}
+
+void ThreadTask::StopProcessingWork()
+{
+ m_continue = false;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/xml/XmlSerializer.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/xml/XmlSerializer.cpp
new file mode 100644
index 00000000000..c06befaf9b0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/source/utils/xml/XmlSerializer.cpp
@@ -0,0 +1,302 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/xml/XmlSerializer.h>
+
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/external/tinyxml2/tinyxml2.h>
+
+#include <utility>
+#include <algorithm>
+#include <iostream>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+Aws::String Aws::Utils::Xml::DecodeEscapedXmlText(const Aws::String& textToDecode)
+{
+ Aws::String decodedString = textToDecode;
+ StringUtils::Replace(decodedString, "&quot;", "\"");
+ StringUtils::Replace(decodedString, "&apos;", "'");
+ StringUtils::Replace(decodedString, "&lt;", "<");
+ StringUtils::Replace(decodedString, "&gt;", ">");
+ StringUtils::Replace(decodedString, "&amp;", "&");
+
+ return decodedString;
+}
+
+XmlNode::XmlNode(const XmlNode& other) : m_node(other.m_node), m_doc(other.m_doc)
+{
+}
+
+XmlNode& XmlNode::operator=(const XmlNode& other)
+{
+ if(this == &other)
+ {
+ return *this;
+ }
+
+ m_node = other.m_node;
+ m_doc = other.m_doc;
+
+ return *this;
+}
+
+const Aws::String XmlNode::GetName() const
+{
+ return m_node->Value();
+}
+
+void XmlNode::SetName(const Aws::String& name)
+{
+ m_node->SetValue(name.c_str(), false);
+}
+
+const Aws::String XmlNode::GetAttributeValue(const Aws::String& name) const
+{
+ auto pointer = m_node->ToElement()->Attribute(name.c_str(), nullptr);
+ return pointer ? pointer : "";
+}
+
+void XmlNode::SetAttributeValue(const Aws::String& name, const Aws::String& value)
+{
+ m_node->ToElement()->SetAttribute(name.c_str(), value.c_str());
+}
+
+bool XmlNode::HasNextNode() const
+{
+ return m_node->NextSibling() != nullptr;
+}
+
+XmlNode XmlNode::NextNode() const
+{
+ return XmlNode(m_node->NextSiblingElement(), *m_doc);
+}
+
+XmlNode XmlNode::NextNode(const char* name) const
+{
+ return XmlNode(m_node->NextSiblingElement(name), *m_doc);
+}
+
+XmlNode XmlNode::NextNode(const Aws::String& name) const
+{
+ return NextNode(name.c_str());
+}
+
+XmlNode XmlNode::FirstChild() const
+{
+ return XmlNode(m_node->FirstChildElement(), *m_doc);
+}
+
+XmlNode XmlNode::FirstChild(const char* name) const
+{
+ return XmlNode(m_node->FirstChildElement(name), *m_doc);
+}
+
+XmlNode XmlNode::FirstChild(const Aws::String& name) const
+{
+ return FirstChild(name.c_str());
+}
+
+bool XmlNode::HasChildren() const
+{
+ return !m_node->NoChildren();
+}
+
+XmlNode XmlNode::Parent() const
+{
+ return XmlNode(m_node->Parent()->ToElement(), *m_doc);
+}
+
+Aws::String XmlNode::GetText() const
+{
+ if (m_node != nullptr)
+ {
+ Aws::External::tinyxml2::XMLPrinter printer;
+ Aws::External::tinyxml2::XMLNode* node = m_node->FirstChild();
+ while (node != nullptr)
+ {
+ node->Accept(&printer);
+ node = node->NextSibling();
+ }
+
+ return printer.CStr();
+ }
+
+ return {};
+}
+
+void XmlNode::SetText(const Aws::String& textValue)
+{
+ if (m_node != nullptr)
+ {
+ Aws::External::tinyxml2::XMLText* text = m_doc->m_doc->NewText(textValue.c_str());
+ m_node->InsertEndChild(text);
+ }
+}
+
+XmlNode XmlNode::CreateChildElement(const Aws::String& name)
+{
+ Aws::External::tinyxml2::XMLElement* element = m_doc->m_doc->NewElement(name.c_str());
+ return XmlNode(m_node->InsertEndChild(element), *m_doc);
+}
+
+XmlNode XmlNode::CreateSiblingElement(const Aws::String& name)
+{
+ Aws::External::tinyxml2::XMLElement* element = m_doc->m_doc->NewElement(name.c_str());
+ return XmlNode(m_node->Parent()->InsertEndChild(element), *m_doc);
+}
+
+bool XmlNode::IsNull()
+{
+ return m_node == nullptr;
+}
+
+static const char* XML_SERIALIZER_ALLOCATION_TAG = "XmlDocument";
+
+XmlDocument::XmlDocument()
+{
+ m_doc = nullptr;
+}
+
+XmlDocument::XmlDocument(const XmlDocument& doc)
+{
+ if (doc.m_doc == nullptr)
+ {
+ m_doc = nullptr;
+ }
+ else
+ {
+ InitDoc();
+ doc.m_doc->DeepCopy(m_doc);
+ }
+}
+
+XmlDocument::XmlDocument(XmlDocument&& doc) : m_doc{ doc.m_doc } // take the innards
+{
+ doc.m_doc = nullptr; // leave nothing behind
+}
+
+XmlDocument& XmlDocument::operator=(const XmlDocument& other)
+{
+ if (this == &other)
+ {
+ return *this;
+ }
+
+ if (other.m_doc == nullptr)
+ {
+ if (m_doc != nullptr)
+ {
+ m_doc->Clear();
+ m_doc = nullptr;
+ }
+ }
+ else
+ {
+ if (m_doc == nullptr)
+ {
+ InitDoc();
+ }
+ else
+ {
+ m_doc->Clear();
+ }
+ other.m_doc->DeepCopy(m_doc);
+ }
+
+ return *this;
+}
+
+XmlDocument& XmlDocument::operator=(XmlDocument&& other)
+{
+ if (this == &other)
+ {
+ return *this;
+ }
+
+ std::swap(m_doc, other.m_doc);
+ return *this;
+}
+
+XmlDocument::~XmlDocument()
+{
+ if (m_doc)
+ {
+ Aws::Delete(m_doc);
+ }
+}
+
+void XmlDocument::InitDoc()
+{
+ m_doc = Aws::New<Aws::External::tinyxml2::XMLDocument>(XML_SERIALIZER_ALLOCATION_TAG, true, Aws::External::tinyxml2::Whitespace::PRESERVE_WHITESPACE);
+}
+
+XmlNode XmlDocument::GetRootElement() const
+{
+ if (m_doc)
+ {
+ return XmlNode(m_doc->FirstChildElement(), *this);
+ }
+ else
+ {
+ return XmlNode(nullptr, *this);
+ }
+
+}
+
+bool XmlDocument::WasParseSuccessful() const
+{
+ if (m_doc)
+ {
+ return !m_doc->Error();
+ }
+ else
+ {
+ return true;
+ }
+
+}
+
+Aws::String XmlDocument::GetErrorMessage() const
+{
+ return !WasParseSuccessful() ? m_doc->ErrorName() : "";
+}
+
+Aws::String XmlDocument::ConvertToString() const
+{
+ if (!m_doc) return "";
+
+ Aws::External::tinyxml2::XMLPrinter printer;
+ printer.PushHeader(false, true);
+ m_doc->Accept(&printer);
+
+ return printer.CStr();
+}
+
+XmlDocument XmlDocument::CreateFromXmlStream(Aws::IOStream& xmlStream)
+{
+ Aws::String xmlString((Aws::IStreamBufIterator(xmlStream)), Aws::IStreamBufIterator());
+ return CreateFromXmlString(xmlString);
+}
+
+XmlDocument XmlDocument::CreateFromXmlString(const Aws::String& xmlText)
+{
+ XmlDocument xmlDocument;
+ xmlDocument.InitDoc();
+ xmlDocument.m_doc->Parse(xmlText.c_str(), xmlText.size());
+ return xmlDocument;
+}
+
+XmlDocument XmlDocument::CreateWithRootNode(const Aws::String& rootNodeName)
+{
+ XmlDocument xmlDocument;
+ xmlDocument.InitDoc();
+ Aws::External::tinyxml2::XMLElement* rootNode = xmlDocument.m_doc->NewElement(rootNodeName.c_str());
+ xmlDocument.m_doc->LinkEndChild(rootNode);
+
+ return xmlDocument;
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/ya.make b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/ya.make
new file mode 100644
index 00000000000..d6b0823d455
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/ya.make
@@ -0,0 +1,154 @@
+# Generated by devtools/yamaker.
+
+LIBRARY()
+
+OWNER(
+ orivej
+ shindo
+ g:cpp-contrib
+)
+
+LICENSE(
+ Apache-2.0 AND
+ MIT AND
+ Zlib
+)
+
+LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
+
+PEERDIR(
+ contrib/libs/curl
+ contrib/libs/openssl
+ contrib/restricted/aws/aws-c-common
+ contrib/restricted/aws/aws-c-event-stream
+)
+
+ADDINCL(
+ GLOBAL contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include
+)
+
+NO_COMPILER_WARNINGS()
+
+NO_UTIL()
+
+CFLAGS(
+ -DAWS_CAL_USE_IMPORT_EXPORT
+ -DAWS_CHECKSUMS_USE_IMPORT_EXPORT
+ -DAWS_COMMON_USE_IMPORT_EXPORT
+ -DAWS_EVENT_STREAM_USE_IMPORT_EXPORT
+ -DAWS_IO_USE_IMPORT_EXPORT
+ -DAWS_SDK_VERSION_MAJOR=1
+ -DAWS_SDK_VERSION_MINOR=8
+ -DAWS_SDK_VERSION_PATCH=113
+ -DAWS_USE_EPOLL
+ -DCURL_HAS_H2
+ -DCURL_HAS_TLS_PROXY
+ -DENABLE_CURL_CLIENT
+ -DENABLE_CURL_LOGGING
+ -DENABLE_OPENSSL_ENCRYPTION
+ -DHAS_PATHCONF
+ -DHAS_UMASK
+ -DS2N_ADX
+ -DS2N_CPUID_AVAILABLE
+ -DS2N_HAVE_EXECINFO
+ -DS2N_SIKEP434R2_ASM
+)
+
+SRCS(
+ source/AmazonSerializableWebServiceRequest.cpp
+ source/AmazonStreamingWebServiceRequest.cpp
+ source/AmazonWebServiceRequest.cpp
+ source/Aws.cpp
+ source/Globals.cpp
+ source/Region.cpp
+ source/Version.cpp
+ source/auth/AWSAuthSigner.cpp
+ source/auth/AWSAuthSignerProvider.cpp
+ source/auth/AWSCredentialsProvider.cpp
+ source/auth/AWSCredentialsProviderChain.cpp
+ source/auth/STSCredentialsProvider.cpp
+ source/client/AWSClient.cpp
+ source/client/AWSErrorMarshaller.cpp
+ source/client/AsyncCallerContext.cpp
+ source/client/ClientConfiguration.cpp
+ source/client/CoreErrors.cpp
+ source/client/DefaultRetryStrategy.cpp
+ source/client/RetryStrategy.cpp
+ source/client/SpecifiedRetryableErrorsRetryStrategy.cpp
+ source/config/AWSProfileConfigLoader.cpp
+ source/external/cjson/cJSON.cpp
+ source/external/tinyxml2/tinyxml2.cpp
+ source/http/HttpClient.cpp
+ source/http/HttpClientFactory.cpp
+ source/http/HttpRequest.cpp
+ source/http/HttpTypes.cpp
+ source/http/Scheme.cpp
+ source/http/URI.cpp
+ source/http/curl/CurlHandleContainer.cpp
+ source/http/curl/CurlHttpClient.cpp
+ source/http/standard/StandardHttpRequest.cpp
+ source/http/standard/StandardHttpResponse.cpp
+ source/internal/AWSHttpResourceClient.cpp
+ source/monitoring/DefaultMonitoring.cpp
+ source/monitoring/HttpClientMetrics.cpp
+ source/monitoring/MonitoringManager.cpp
+ source/net/linux-shared/Net.cpp
+ source/net/linux-shared/SimpleUDP.cpp
+ source/platform/linux-shared/Environment.cpp
+ source/platform/linux-shared/FileSystem.cpp
+ source/platform/linux-shared/OSVersionInfo.cpp
+ source/platform/linux-shared/Security.cpp
+ source/platform/linux-shared/Time.cpp
+ source/utils/ARN.cpp
+ source/utils/Array.cpp
+ source/utils/DNS.cpp
+ source/utils/DateTimeCommon.cpp
+ source/utils/Directory.cpp
+ source/utils/EnumParseOverflowContainer.cpp
+ source/utils/FileSystemUtils.cpp
+ source/utils/GetTheLights.cpp
+ source/utils/HashingUtils.cpp
+ source/utils/StringUtils.cpp
+ source/utils/TempFile.cpp
+ source/utils/UUID.cpp
+ source/utils/base64/Base64.cpp
+ source/utils/crypto/Cipher.cpp
+ source/utils/crypto/ContentCryptoMaterial.cpp
+ source/utils/crypto/ContentCryptoScheme.cpp
+ source/utils/crypto/CryptoBuf.cpp
+ source/utils/crypto/CryptoStream.cpp
+ source/utils/crypto/EncryptionMaterials.cpp
+ source/utils/crypto/KeyWrapAlgorithm.cpp
+ source/utils/crypto/MD5.cpp
+ source/utils/crypto/Sha256.cpp
+ source/utils/crypto/Sha256HMAC.cpp
+ source/utils/crypto/factory/Factories.cpp
+ source/utils/crypto/openssl/CryptoImpl.cpp
+ source/utils/event/EventDecoderStream.cpp
+ source/utils/event/EventEncoderStream.cpp
+ source/utils/event/EventHeader.cpp
+ source/utils/event/EventMessage.cpp
+ source/utils/event/EventStreamBuf.cpp
+ source/utils/event/EventStreamDecoder.cpp
+ source/utils/event/EventStreamEncoder.cpp
+ source/utils/event/EventStreamErrors.cpp
+ source/utils/json/JsonSerializer.cpp
+ source/utils/logging/AWSLogging.cpp
+ source/utils/logging/ConsoleLogSystem.cpp
+ source/utils/logging/DefaultLogSystem.cpp
+ source/utils/logging/FormattedLogSystem.cpp
+ source/utils/logging/LogLevel.cpp
+ source/utils/memory/AWSMemory.cpp
+ source/utils/memory/stl/SimpleStringStream.cpp
+ source/utils/stream/ConcurrentStreamBuf.cpp
+ source/utils/stream/PreallocatedStreamBuf.cpp
+ source/utils/stream/ResponseStream.cpp
+ source/utils/stream/SimpleStreamBuf.cpp
+ source/utils/threading/Executor.cpp
+ source/utils/threading/ReaderWriterLock.cpp
+ source/utils/threading/Semaphore.cpp
+ source/utils/threading/ThreadTask.cpp
+ source/utils/xml/XmlSerializer.cpp
+)
+
+END()
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/.yandex_meta/licenses.list.txt b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/.yandex_meta/licenses.list.txt
new file mode 100644
index 00000000000..884b6d0848d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/.yandex_meta/licenses.list.txt
@@ -0,0 +1,209 @@
+====================Apache-2.0====================
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+====================Apache-2.0====================
+ * SPDX-License-Identifier: Apache-2.0.
+
+
+====================COPYRIGHT====================
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ARN.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ARN.h
new file mode 100644
index 00000000000..4d6cb56867c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ARN.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/s3/S3_EXPORTS.h>
+
+#include <aws/core/client/AWSError.h>
+#include <aws/core/utils/ARN.h>
+#include <aws/s3/S3Errors.h>
+
+namespace Aws
+{
+ namespace Utils
+ {
+ template<typename R, typename E> class Outcome;
+ }
+
+ namespace S3
+ {
+ namespace ARNResourceType
+ {
+ static const char ACCESSPOINT[] = "accesspoint";
+ static const char OUTPOST[] = "outpost";
+ }
+
+ typedef Aws::Utils::Outcome<bool, Aws::Client::AWSError<S3Errors>> S3ARNOutcome;
+
+ class AWS_S3_API S3ARN : public Aws::Utils::ARN
+ {
+ public:
+ S3ARN(const Aws::String& arn);
+
+ const Aws::String& GetResourceType() const { return m_resourceType; }
+ const Aws::String& GetResourceId() const { return m_resourceId; }
+ const Aws::String& GetSubResourceType() const { return m_subResourceType; }
+ const Aws::String& GetSubResourceId() const { return m_subResourceId; }
+ const Aws::String& GetResourceQualifier() const { return m_resourceQualifier; }
+
+ // Check if S3ARN is valid.
+ S3ARNOutcome Validate() const;
+ // Check if S3ARN is valid, and especially, ARN region should match the region specified.
+ S3ARNOutcome Validate(const char* region) const;
+
+ private:
+ void ParseARNResource();
+
+ Aws::String m_resourceType;
+ Aws::String m_resourceId;
+ Aws::String m_subResourceType;
+ Aws::String m_subResourceId;
+ Aws::String m_resourceQualifier;
+ };
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Client.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Client.h
new file mode 100644
index 00000000000..9c83c0ac1e4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Client.h
@@ -0,0 +1,11013 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Errors.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/ClientConfiguration.h>
+#include <aws/core/client/AWSClient.h>
+#include <aws/core/auth/AWSAuthSigner.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/DNS.h>
+#include <aws/s3/model/AbortMultipartUploadResult.h>
+#include <aws/s3/model/CompleteMultipartUploadResult.h>
+#include <aws/s3/model/CopyObjectResult.h>
+#include <aws/s3/model/CreateBucketResult.h>
+#include <aws/s3/model/CreateMultipartUploadResult.h>
+#include <aws/s3/model/DeleteObjectResult.h>
+#include <aws/s3/model/DeleteObjectTaggingResult.h>
+#include <aws/s3/model/DeleteObjectsResult.h>
+#include <aws/s3/model/GetBucketAccelerateConfigurationResult.h>
+#include <aws/s3/model/GetBucketAclResult.h>
+#include <aws/s3/model/GetBucketAnalyticsConfigurationResult.h>
+#include <aws/s3/model/GetBucketCorsResult.h>
+#include <aws/s3/model/GetBucketEncryptionResult.h>
+#include <aws/s3/model/GetBucketIntelligentTieringConfigurationResult.h>
+#include <aws/s3/model/GetBucketInventoryConfigurationResult.h>
+#include <aws/s3/model/GetBucketLifecycleConfigurationResult.h>
+#include <aws/s3/model/GetBucketLocationResult.h>
+#include <aws/s3/model/GetBucketLoggingResult.h>
+#include <aws/s3/model/GetBucketMetricsConfigurationResult.h>
+#include <aws/s3/model/GetBucketNotificationConfigurationResult.h>
+#include <aws/s3/model/GetBucketOwnershipControlsResult.h>
+#include <aws/s3/model/GetBucketPolicyResult.h>
+#include <aws/s3/model/GetBucketPolicyStatusResult.h>
+#include <aws/s3/model/GetBucketReplicationResult.h>
+#include <aws/s3/model/GetBucketRequestPaymentResult.h>
+#include <aws/s3/model/GetBucketTaggingResult.h>
+#include <aws/s3/model/GetBucketVersioningResult.h>
+#include <aws/s3/model/GetBucketWebsiteResult.h>
+#include <aws/s3/model/GetObjectResult.h>
+#include <aws/s3/model/GetObjectAclResult.h>
+#include <aws/s3/model/GetObjectLegalHoldResult.h>
+#include <aws/s3/model/GetObjectLockConfigurationResult.h>
+#include <aws/s3/model/GetObjectRetentionResult.h>
+#include <aws/s3/model/GetObjectTaggingResult.h>
+#include <aws/s3/model/GetObjectTorrentResult.h>
+#include <aws/s3/model/GetPublicAccessBlockResult.h>
+#include <aws/s3/model/HeadObjectResult.h>
+#include <aws/s3/model/ListBucketAnalyticsConfigurationsResult.h>
+#include <aws/s3/model/ListBucketIntelligentTieringConfigurationsResult.h>
+#include <aws/s3/model/ListBucketInventoryConfigurationsResult.h>
+#include <aws/s3/model/ListBucketMetricsConfigurationsResult.h>
+#include <aws/s3/model/ListBucketsResult.h>
+#include <aws/s3/model/ListMultipartUploadsResult.h>
+#include <aws/s3/model/ListObjectVersionsResult.h>
+#include <aws/s3/model/ListObjectsResult.h>
+#include <aws/s3/model/ListObjectsV2Result.h>
+#include <aws/s3/model/ListPartsResult.h>
+#include <aws/s3/model/PutObjectResult.h>
+#include <aws/s3/model/PutObjectAclResult.h>
+#include <aws/s3/model/PutObjectLegalHoldResult.h>
+#include <aws/s3/model/PutObjectLockConfigurationResult.h>
+#include <aws/s3/model/PutObjectRetentionResult.h>
+#include <aws/s3/model/PutObjectTaggingResult.h>
+#include <aws/s3/model/RestoreObjectResult.h>
+#include <aws/s3/model/UploadPartResult.h>
+#include <aws/s3/model/UploadPartCopyResult.h>
+#include <aws/core/NoResult.h>
+#include <aws/core/client/AsyncCallerContext.h>
+#include <aws/core/http/HttpTypes.h>
+#include <future>
+#include <functional>
+namespace Aws
+{
+
+ namespace Http
+ {
+ class HttpClient;
+ class HttpClientFactory;
+ } // namespace Http
+
+ namespace Utils
+ {
+ template< typename R, typename E> class Outcome;
+
+ namespace Threading
+ {
+ class Executor;
+ } // namespace Threading
+
+ namespace Xml
+ {
+ class XmlDocument;
+ } // namespace Xml
+ } // namespace Utils
+
+ namespace Auth
+ {
+ class AWSCredentials;
+ class AWSCredentialsProvider;
+ } // namespace Auth
+
+ namespace Client
+ {
+ class RetryStrategy;
+ } // namespace Client
+
+ namespace S3
+ {
+ namespace Model
+ {
+ class AbortMultipartUploadRequest;
+ class CompleteMultipartUploadRequest;
+ class CopyObjectRequest;
+ class CreateBucketRequest;
+ class CreateMultipartUploadRequest;
+ class DeleteBucketRequest;
+ class DeleteBucketAnalyticsConfigurationRequest;
+ class DeleteBucketCorsRequest;
+ class DeleteBucketEncryptionRequest;
+ class DeleteBucketIntelligentTieringConfigurationRequest;
+ class DeleteBucketInventoryConfigurationRequest;
+ class DeleteBucketLifecycleRequest;
+ class DeleteBucketMetricsConfigurationRequest;
+ class DeleteBucketOwnershipControlsRequest;
+ class DeleteBucketPolicyRequest;
+ class DeleteBucketReplicationRequest;
+ class DeleteBucketTaggingRequest;
+ class DeleteBucketWebsiteRequest;
+ class DeleteObjectRequest;
+ class DeleteObjectTaggingRequest;
+ class DeleteObjectsRequest;
+ class DeletePublicAccessBlockRequest;
+ class GetBucketAccelerateConfigurationRequest;
+ class GetBucketAclRequest;
+ class GetBucketAnalyticsConfigurationRequest;
+ class GetBucketCorsRequest;
+ class GetBucketEncryptionRequest;
+ class GetBucketIntelligentTieringConfigurationRequest;
+ class GetBucketInventoryConfigurationRequest;
+ class GetBucketLifecycleConfigurationRequest;
+ class GetBucketLocationRequest;
+ class GetBucketLoggingRequest;
+ class GetBucketMetricsConfigurationRequest;
+ class GetBucketNotificationConfigurationRequest;
+ class GetBucketOwnershipControlsRequest;
+ class GetBucketPolicyRequest;
+ class GetBucketPolicyStatusRequest;
+ class GetBucketReplicationRequest;
+ class GetBucketRequestPaymentRequest;
+ class GetBucketTaggingRequest;
+ class GetBucketVersioningRequest;
+ class GetBucketWebsiteRequest;
+ class GetObjectRequest;
+ class GetObjectAclRequest;
+ class GetObjectLegalHoldRequest;
+ class GetObjectLockConfigurationRequest;
+ class GetObjectRetentionRequest;
+ class GetObjectTaggingRequest;
+ class GetObjectTorrentRequest;
+ class GetPublicAccessBlockRequest;
+ class HeadBucketRequest;
+ class HeadObjectRequest;
+ class ListBucketAnalyticsConfigurationsRequest;
+ class ListBucketIntelligentTieringConfigurationsRequest;
+ class ListBucketInventoryConfigurationsRequest;
+ class ListBucketMetricsConfigurationsRequest;
+ class ListMultipartUploadsRequest;
+ class ListObjectVersionsRequest;
+ class ListObjectsRequest;
+ class ListObjectsV2Request;
+ class ListPartsRequest;
+ class PutBucketAccelerateConfigurationRequest;
+ class PutBucketAclRequest;
+ class PutBucketAnalyticsConfigurationRequest;
+ class PutBucketCorsRequest;
+ class PutBucketEncryptionRequest;
+ class PutBucketIntelligentTieringConfigurationRequest;
+ class PutBucketInventoryConfigurationRequest;
+ class PutBucketLifecycleConfigurationRequest;
+ class PutBucketLoggingRequest;
+ class PutBucketMetricsConfigurationRequest;
+ class PutBucketNotificationConfigurationRequest;
+ class PutBucketOwnershipControlsRequest;
+ class PutBucketPolicyRequest;
+ class PutBucketReplicationRequest;
+ class PutBucketRequestPaymentRequest;
+ class PutBucketTaggingRequest;
+ class PutBucketVersioningRequest;
+ class PutBucketWebsiteRequest;
+ class PutObjectRequest;
+ class PutObjectAclRequest;
+ class PutObjectLegalHoldRequest;
+ class PutObjectLockConfigurationRequest;
+ class PutObjectRetentionRequest;
+ class PutObjectTaggingRequest;
+ class PutPublicAccessBlockRequest;
+ class RestoreObjectRequest;
+ class SelectObjectContentRequest;
+ class UploadPartRequest;
+ class UploadPartCopyRequest;
+
+ typedef Aws::Utils::Outcome<AbortMultipartUploadResult, S3Error> AbortMultipartUploadOutcome;
+ typedef Aws::Utils::Outcome<CompleteMultipartUploadResult, S3Error> CompleteMultipartUploadOutcome;
+ typedef Aws::Utils::Outcome<CopyObjectResult, S3Error> CopyObjectOutcome;
+ typedef Aws::Utils::Outcome<CreateBucketResult, S3Error> CreateBucketOutcome;
+ typedef Aws::Utils::Outcome<CreateMultipartUploadResult, S3Error> CreateMultipartUploadOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketAnalyticsConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketCorsOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketEncryptionOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketIntelligentTieringConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketInventoryConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketLifecycleOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketMetricsConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketOwnershipControlsOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketPolicyOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketReplicationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketTaggingOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeleteBucketWebsiteOutcome;
+ typedef Aws::Utils::Outcome<DeleteObjectResult, S3Error> DeleteObjectOutcome;
+ typedef Aws::Utils::Outcome<DeleteObjectTaggingResult, S3Error> DeleteObjectTaggingOutcome;
+ typedef Aws::Utils::Outcome<DeleteObjectsResult, S3Error> DeleteObjectsOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> DeletePublicAccessBlockOutcome;
+ typedef Aws::Utils::Outcome<GetBucketAccelerateConfigurationResult, S3Error> GetBucketAccelerateConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketAclResult, S3Error> GetBucketAclOutcome;
+ typedef Aws::Utils::Outcome<GetBucketAnalyticsConfigurationResult, S3Error> GetBucketAnalyticsConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketCorsResult, S3Error> GetBucketCorsOutcome;
+ typedef Aws::Utils::Outcome<GetBucketEncryptionResult, S3Error> GetBucketEncryptionOutcome;
+ typedef Aws::Utils::Outcome<GetBucketIntelligentTieringConfigurationResult, S3Error> GetBucketIntelligentTieringConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketInventoryConfigurationResult, S3Error> GetBucketInventoryConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketLifecycleConfigurationResult, S3Error> GetBucketLifecycleConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketLocationResult, S3Error> GetBucketLocationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketLoggingResult, S3Error> GetBucketLoggingOutcome;
+ typedef Aws::Utils::Outcome<GetBucketMetricsConfigurationResult, S3Error> GetBucketMetricsConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketNotificationConfigurationResult, S3Error> GetBucketNotificationConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketOwnershipControlsResult, S3Error> GetBucketOwnershipControlsOutcome;
+ typedef Aws::Utils::Outcome<GetBucketPolicyResult, S3Error> GetBucketPolicyOutcome;
+ typedef Aws::Utils::Outcome<GetBucketPolicyStatusResult, S3Error> GetBucketPolicyStatusOutcome;
+ typedef Aws::Utils::Outcome<GetBucketReplicationResult, S3Error> GetBucketReplicationOutcome;
+ typedef Aws::Utils::Outcome<GetBucketRequestPaymentResult, S3Error> GetBucketRequestPaymentOutcome;
+ typedef Aws::Utils::Outcome<GetBucketTaggingResult, S3Error> GetBucketTaggingOutcome;
+ typedef Aws::Utils::Outcome<GetBucketVersioningResult, S3Error> GetBucketVersioningOutcome;
+ typedef Aws::Utils::Outcome<GetBucketWebsiteResult, S3Error> GetBucketWebsiteOutcome;
+ typedef Aws::Utils::Outcome<GetObjectResult, S3Error> GetObjectOutcome;
+ typedef Aws::Utils::Outcome<GetObjectAclResult, S3Error> GetObjectAclOutcome;
+ typedef Aws::Utils::Outcome<GetObjectLegalHoldResult, S3Error> GetObjectLegalHoldOutcome;
+ typedef Aws::Utils::Outcome<GetObjectLockConfigurationResult, S3Error> GetObjectLockConfigurationOutcome;
+ typedef Aws::Utils::Outcome<GetObjectRetentionResult, S3Error> GetObjectRetentionOutcome;
+ typedef Aws::Utils::Outcome<GetObjectTaggingResult, S3Error> GetObjectTaggingOutcome;
+ typedef Aws::Utils::Outcome<GetObjectTorrentResult, S3Error> GetObjectTorrentOutcome;
+ typedef Aws::Utils::Outcome<GetPublicAccessBlockResult, S3Error> GetPublicAccessBlockOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> HeadBucketOutcome;
+ typedef Aws::Utils::Outcome<HeadObjectResult, S3Error> HeadObjectOutcome;
+ typedef Aws::Utils::Outcome<ListBucketAnalyticsConfigurationsResult, S3Error> ListBucketAnalyticsConfigurationsOutcome;
+ typedef Aws::Utils::Outcome<ListBucketIntelligentTieringConfigurationsResult, S3Error> ListBucketIntelligentTieringConfigurationsOutcome;
+ typedef Aws::Utils::Outcome<ListBucketInventoryConfigurationsResult, S3Error> ListBucketInventoryConfigurationsOutcome;
+ typedef Aws::Utils::Outcome<ListBucketMetricsConfigurationsResult, S3Error> ListBucketMetricsConfigurationsOutcome;
+ typedef Aws::Utils::Outcome<ListBucketsResult, S3Error> ListBucketsOutcome;
+ typedef Aws::Utils::Outcome<ListMultipartUploadsResult, S3Error> ListMultipartUploadsOutcome;
+ typedef Aws::Utils::Outcome<ListObjectVersionsResult, S3Error> ListObjectVersionsOutcome;
+ typedef Aws::Utils::Outcome<ListObjectsResult, S3Error> ListObjectsOutcome;
+ typedef Aws::Utils::Outcome<ListObjectsV2Result, S3Error> ListObjectsV2Outcome;
+ typedef Aws::Utils::Outcome<ListPartsResult, S3Error> ListPartsOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketAccelerateConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketAclOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketAnalyticsConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketCorsOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketEncryptionOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketIntelligentTieringConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketInventoryConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketLifecycleConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketLoggingOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketMetricsConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketNotificationConfigurationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketOwnershipControlsOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketPolicyOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketReplicationOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketRequestPaymentOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketTaggingOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketVersioningOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutBucketWebsiteOutcome;
+ typedef Aws::Utils::Outcome<PutObjectResult, S3Error> PutObjectOutcome;
+ typedef Aws::Utils::Outcome<PutObjectAclResult, S3Error> PutObjectAclOutcome;
+ typedef Aws::Utils::Outcome<PutObjectLegalHoldResult, S3Error> PutObjectLegalHoldOutcome;
+ typedef Aws::Utils::Outcome<PutObjectLockConfigurationResult, S3Error> PutObjectLockConfigurationOutcome;
+ typedef Aws::Utils::Outcome<PutObjectRetentionResult, S3Error> PutObjectRetentionOutcome;
+ typedef Aws::Utils::Outcome<PutObjectTaggingResult, S3Error> PutObjectTaggingOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> PutPublicAccessBlockOutcome;
+ typedef Aws::Utils::Outcome<RestoreObjectResult, S3Error> RestoreObjectOutcome;
+ typedef Aws::Utils::Outcome<Aws::NoResult, S3Error> SelectObjectContentOutcome;
+ typedef Aws::Utils::Outcome<UploadPartResult, S3Error> UploadPartOutcome;
+ typedef Aws::Utils::Outcome<UploadPartCopyResult, S3Error> UploadPartCopyOutcome;
+
+ typedef std::future<AbortMultipartUploadOutcome> AbortMultipartUploadOutcomeCallable;
+ typedef std::future<CompleteMultipartUploadOutcome> CompleteMultipartUploadOutcomeCallable;
+ typedef std::future<CopyObjectOutcome> CopyObjectOutcomeCallable;
+ typedef std::future<CreateBucketOutcome> CreateBucketOutcomeCallable;
+ typedef std::future<CreateMultipartUploadOutcome> CreateMultipartUploadOutcomeCallable;
+ typedef std::future<DeleteBucketOutcome> DeleteBucketOutcomeCallable;
+ typedef std::future<DeleteBucketAnalyticsConfigurationOutcome> DeleteBucketAnalyticsConfigurationOutcomeCallable;
+ typedef std::future<DeleteBucketCorsOutcome> DeleteBucketCorsOutcomeCallable;
+ typedef std::future<DeleteBucketEncryptionOutcome> DeleteBucketEncryptionOutcomeCallable;
+ typedef std::future<DeleteBucketIntelligentTieringConfigurationOutcome> DeleteBucketIntelligentTieringConfigurationOutcomeCallable;
+ typedef std::future<DeleteBucketInventoryConfigurationOutcome> DeleteBucketInventoryConfigurationOutcomeCallable;
+ typedef std::future<DeleteBucketLifecycleOutcome> DeleteBucketLifecycleOutcomeCallable;
+ typedef std::future<DeleteBucketMetricsConfigurationOutcome> DeleteBucketMetricsConfigurationOutcomeCallable;
+ typedef std::future<DeleteBucketOwnershipControlsOutcome> DeleteBucketOwnershipControlsOutcomeCallable;
+ typedef std::future<DeleteBucketPolicyOutcome> DeleteBucketPolicyOutcomeCallable;
+ typedef std::future<DeleteBucketReplicationOutcome> DeleteBucketReplicationOutcomeCallable;
+ typedef std::future<DeleteBucketTaggingOutcome> DeleteBucketTaggingOutcomeCallable;
+ typedef std::future<DeleteBucketWebsiteOutcome> DeleteBucketWebsiteOutcomeCallable;
+ typedef std::future<DeleteObjectOutcome> DeleteObjectOutcomeCallable;
+ typedef std::future<DeleteObjectTaggingOutcome> DeleteObjectTaggingOutcomeCallable;
+ typedef std::future<DeleteObjectsOutcome> DeleteObjectsOutcomeCallable;
+ typedef std::future<DeletePublicAccessBlockOutcome> DeletePublicAccessBlockOutcomeCallable;
+ typedef std::future<GetBucketAccelerateConfigurationOutcome> GetBucketAccelerateConfigurationOutcomeCallable;
+ typedef std::future<GetBucketAclOutcome> GetBucketAclOutcomeCallable;
+ typedef std::future<GetBucketAnalyticsConfigurationOutcome> GetBucketAnalyticsConfigurationOutcomeCallable;
+ typedef std::future<GetBucketCorsOutcome> GetBucketCorsOutcomeCallable;
+ typedef std::future<GetBucketEncryptionOutcome> GetBucketEncryptionOutcomeCallable;
+ typedef std::future<GetBucketIntelligentTieringConfigurationOutcome> GetBucketIntelligentTieringConfigurationOutcomeCallable;
+ typedef std::future<GetBucketInventoryConfigurationOutcome> GetBucketInventoryConfigurationOutcomeCallable;
+ typedef std::future<GetBucketLifecycleConfigurationOutcome> GetBucketLifecycleConfigurationOutcomeCallable;
+ typedef std::future<GetBucketLocationOutcome> GetBucketLocationOutcomeCallable;
+ typedef std::future<GetBucketLoggingOutcome> GetBucketLoggingOutcomeCallable;
+ typedef std::future<GetBucketMetricsConfigurationOutcome> GetBucketMetricsConfigurationOutcomeCallable;
+ typedef std::future<GetBucketNotificationConfigurationOutcome> GetBucketNotificationConfigurationOutcomeCallable;
+ typedef std::future<GetBucketOwnershipControlsOutcome> GetBucketOwnershipControlsOutcomeCallable;
+ typedef std::future<GetBucketPolicyOutcome> GetBucketPolicyOutcomeCallable;
+ typedef std::future<GetBucketPolicyStatusOutcome> GetBucketPolicyStatusOutcomeCallable;
+ typedef std::future<GetBucketReplicationOutcome> GetBucketReplicationOutcomeCallable;
+ typedef std::future<GetBucketRequestPaymentOutcome> GetBucketRequestPaymentOutcomeCallable;
+ typedef std::future<GetBucketTaggingOutcome> GetBucketTaggingOutcomeCallable;
+ typedef std::future<GetBucketVersioningOutcome> GetBucketVersioningOutcomeCallable;
+ typedef std::future<GetBucketWebsiteOutcome> GetBucketWebsiteOutcomeCallable;
+ typedef std::future<GetObjectOutcome> GetObjectOutcomeCallable;
+ typedef std::future<GetObjectAclOutcome> GetObjectAclOutcomeCallable;
+ typedef std::future<GetObjectLegalHoldOutcome> GetObjectLegalHoldOutcomeCallable;
+ typedef std::future<GetObjectLockConfigurationOutcome> GetObjectLockConfigurationOutcomeCallable;
+ typedef std::future<GetObjectRetentionOutcome> GetObjectRetentionOutcomeCallable;
+ typedef std::future<GetObjectTaggingOutcome> GetObjectTaggingOutcomeCallable;
+ typedef std::future<GetObjectTorrentOutcome> GetObjectTorrentOutcomeCallable;
+ typedef std::future<GetPublicAccessBlockOutcome> GetPublicAccessBlockOutcomeCallable;
+ typedef std::future<HeadBucketOutcome> HeadBucketOutcomeCallable;
+ typedef std::future<HeadObjectOutcome> HeadObjectOutcomeCallable;
+ typedef std::future<ListBucketAnalyticsConfigurationsOutcome> ListBucketAnalyticsConfigurationsOutcomeCallable;
+ typedef std::future<ListBucketIntelligentTieringConfigurationsOutcome> ListBucketIntelligentTieringConfigurationsOutcomeCallable;
+ typedef std::future<ListBucketInventoryConfigurationsOutcome> ListBucketInventoryConfigurationsOutcomeCallable;
+ typedef std::future<ListBucketMetricsConfigurationsOutcome> ListBucketMetricsConfigurationsOutcomeCallable;
+ typedef std::future<ListBucketsOutcome> ListBucketsOutcomeCallable;
+ typedef std::future<ListMultipartUploadsOutcome> ListMultipartUploadsOutcomeCallable;
+ typedef std::future<ListObjectVersionsOutcome> ListObjectVersionsOutcomeCallable;
+ typedef std::future<ListObjectsOutcome> ListObjectsOutcomeCallable;
+ typedef std::future<ListObjectsV2Outcome> ListObjectsV2OutcomeCallable;
+ typedef std::future<ListPartsOutcome> ListPartsOutcomeCallable;
+ typedef std::future<PutBucketAccelerateConfigurationOutcome> PutBucketAccelerateConfigurationOutcomeCallable;
+ typedef std::future<PutBucketAclOutcome> PutBucketAclOutcomeCallable;
+ typedef std::future<PutBucketAnalyticsConfigurationOutcome> PutBucketAnalyticsConfigurationOutcomeCallable;
+ typedef std::future<PutBucketCorsOutcome> PutBucketCorsOutcomeCallable;
+ typedef std::future<PutBucketEncryptionOutcome> PutBucketEncryptionOutcomeCallable;
+ typedef std::future<PutBucketIntelligentTieringConfigurationOutcome> PutBucketIntelligentTieringConfigurationOutcomeCallable;
+ typedef std::future<PutBucketInventoryConfigurationOutcome> PutBucketInventoryConfigurationOutcomeCallable;
+ typedef std::future<PutBucketLifecycleConfigurationOutcome> PutBucketLifecycleConfigurationOutcomeCallable;
+ typedef std::future<PutBucketLoggingOutcome> PutBucketLoggingOutcomeCallable;
+ typedef std::future<PutBucketMetricsConfigurationOutcome> PutBucketMetricsConfigurationOutcomeCallable;
+ typedef std::future<PutBucketNotificationConfigurationOutcome> PutBucketNotificationConfigurationOutcomeCallable;
+ typedef std::future<PutBucketOwnershipControlsOutcome> PutBucketOwnershipControlsOutcomeCallable;
+ typedef std::future<PutBucketPolicyOutcome> PutBucketPolicyOutcomeCallable;
+ typedef std::future<PutBucketReplicationOutcome> PutBucketReplicationOutcomeCallable;
+ typedef std::future<PutBucketRequestPaymentOutcome> PutBucketRequestPaymentOutcomeCallable;
+ typedef std::future<PutBucketTaggingOutcome> PutBucketTaggingOutcomeCallable;
+ typedef std::future<PutBucketVersioningOutcome> PutBucketVersioningOutcomeCallable;
+ typedef std::future<PutBucketWebsiteOutcome> PutBucketWebsiteOutcomeCallable;
+ typedef std::future<PutObjectOutcome> PutObjectOutcomeCallable;
+ typedef std::future<PutObjectAclOutcome> PutObjectAclOutcomeCallable;
+ typedef std::future<PutObjectLegalHoldOutcome> PutObjectLegalHoldOutcomeCallable;
+ typedef std::future<PutObjectLockConfigurationOutcome> PutObjectLockConfigurationOutcomeCallable;
+ typedef std::future<PutObjectRetentionOutcome> PutObjectRetentionOutcomeCallable;
+ typedef std::future<PutObjectTaggingOutcome> PutObjectTaggingOutcomeCallable;
+ typedef std::future<PutPublicAccessBlockOutcome> PutPublicAccessBlockOutcomeCallable;
+ typedef std::future<RestoreObjectOutcome> RestoreObjectOutcomeCallable;
+ typedef std::future<SelectObjectContentOutcome> SelectObjectContentOutcomeCallable;
+ typedef std::future<UploadPartOutcome> UploadPartOutcomeCallable;
+ typedef std::future<UploadPartCopyOutcome> UploadPartCopyOutcomeCallable;
+ } // namespace Model
+
+ namespace SSEHeaders
+ {
+ static const char SERVER_SIDE_ENCRYPTION[] = "x-amz-server-side-encryption";
+ static const char SERVER_SIDE_ENCRYPTION_AWS_KMS_KEY_ID[] = "x-amz-server-side-encryption-aws-kms-key-id";
+ static const char SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM[] = "x-amz-server-side-encryption-customer-algorithm";
+ static const char SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY[] = "x-amz-server-side-encryption-customer-key";
+ static const char SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5[] = "x-amz-server-side-encryption-customer-key-MD5";
+ } // SS3Headers
+
+ class S3Client;
+
+ typedef std::function<void(const S3Client*, const Model::AbortMultipartUploadRequest&, const Model::AbortMultipartUploadOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > AbortMultipartUploadResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::CompleteMultipartUploadRequest&, const Model::CompleteMultipartUploadOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CompleteMultipartUploadResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::CopyObjectRequest&, const Model::CopyObjectOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CopyObjectResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::CreateBucketRequest&, const Model::CreateBucketOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateBucketResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::CreateMultipartUploadRequest&, const Model::CreateMultipartUploadOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateMultipartUploadResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketRequest&, const Model::DeleteBucketOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketAnalyticsConfigurationRequest&, const Model::DeleteBucketAnalyticsConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketAnalyticsConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketCorsRequest&, const Model::DeleteBucketCorsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketCorsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketEncryptionRequest&, const Model::DeleteBucketEncryptionOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketEncryptionResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketIntelligentTieringConfigurationRequest&, const Model::DeleteBucketIntelligentTieringConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketIntelligentTieringConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketInventoryConfigurationRequest&, const Model::DeleteBucketInventoryConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketInventoryConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketLifecycleRequest&, const Model::DeleteBucketLifecycleOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketLifecycleResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketMetricsConfigurationRequest&, const Model::DeleteBucketMetricsConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketMetricsConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketOwnershipControlsRequest&, const Model::DeleteBucketOwnershipControlsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketOwnershipControlsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketPolicyRequest&, const Model::DeleteBucketPolicyOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketPolicyResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketReplicationRequest&, const Model::DeleteBucketReplicationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketReplicationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketTaggingRequest&, const Model::DeleteBucketTaggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketTaggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteBucketWebsiteRequest&, const Model::DeleteBucketWebsiteOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteBucketWebsiteResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteObjectRequest&, const Model::DeleteObjectOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteObjectResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteObjectTaggingRequest&, const Model::DeleteObjectTaggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteObjectTaggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeleteObjectsRequest&, const Model::DeleteObjectsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteObjectsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::DeletePublicAccessBlockRequest&, const Model::DeletePublicAccessBlockOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeletePublicAccessBlockResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketAccelerateConfigurationRequest&, const Model::GetBucketAccelerateConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketAccelerateConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketAclRequest&, const Model::GetBucketAclOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketAclResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketAnalyticsConfigurationRequest&, const Model::GetBucketAnalyticsConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketAnalyticsConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketCorsRequest&, const Model::GetBucketCorsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketCorsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketEncryptionRequest&, const Model::GetBucketEncryptionOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketEncryptionResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketIntelligentTieringConfigurationRequest&, const Model::GetBucketIntelligentTieringConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketIntelligentTieringConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketInventoryConfigurationRequest&, const Model::GetBucketInventoryConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketInventoryConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketLifecycleConfigurationRequest&, const Model::GetBucketLifecycleConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketLifecycleConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketLocationRequest&, const Model::GetBucketLocationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketLocationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketLoggingRequest&, const Model::GetBucketLoggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketLoggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketMetricsConfigurationRequest&, const Model::GetBucketMetricsConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketMetricsConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketNotificationConfigurationRequest&, const Model::GetBucketNotificationConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketNotificationConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketOwnershipControlsRequest&, const Model::GetBucketOwnershipControlsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketOwnershipControlsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketPolicyRequest&, Model::GetBucketPolicyOutcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketPolicyResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketPolicyStatusRequest&, const Model::GetBucketPolicyStatusOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketPolicyStatusResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketReplicationRequest&, const Model::GetBucketReplicationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketReplicationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketRequestPaymentRequest&, const Model::GetBucketRequestPaymentOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketRequestPaymentResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketTaggingRequest&, const Model::GetBucketTaggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketTaggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketVersioningRequest&, const Model::GetBucketVersioningOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketVersioningResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetBucketWebsiteRequest&, const Model::GetBucketWebsiteOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetBucketWebsiteResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetObjectRequest&, Model::GetObjectOutcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetObjectResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetObjectAclRequest&, const Model::GetObjectAclOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetObjectAclResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetObjectLegalHoldRequest&, const Model::GetObjectLegalHoldOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetObjectLegalHoldResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetObjectLockConfigurationRequest&, const Model::GetObjectLockConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetObjectLockConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetObjectRetentionRequest&, const Model::GetObjectRetentionOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetObjectRetentionResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetObjectTaggingRequest&, const Model::GetObjectTaggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetObjectTaggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetObjectTorrentRequest&, Model::GetObjectTorrentOutcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetObjectTorrentResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::GetPublicAccessBlockRequest&, const Model::GetPublicAccessBlockOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetPublicAccessBlockResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::HeadBucketRequest&, const Model::HeadBucketOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > HeadBucketResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::HeadObjectRequest&, const Model::HeadObjectOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > HeadObjectResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListBucketAnalyticsConfigurationsRequest&, const Model::ListBucketAnalyticsConfigurationsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListBucketAnalyticsConfigurationsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListBucketIntelligentTieringConfigurationsRequest&, const Model::ListBucketIntelligentTieringConfigurationsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListBucketIntelligentTieringConfigurationsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListBucketInventoryConfigurationsRequest&, const Model::ListBucketInventoryConfigurationsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListBucketInventoryConfigurationsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListBucketMetricsConfigurationsRequest&, const Model::ListBucketMetricsConfigurationsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListBucketMetricsConfigurationsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListBucketsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListBucketsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListMultipartUploadsRequest&, const Model::ListMultipartUploadsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListMultipartUploadsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListObjectVersionsRequest&, const Model::ListObjectVersionsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListObjectVersionsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListObjectsRequest&, const Model::ListObjectsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListObjectsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListObjectsV2Request&, const Model::ListObjectsV2Outcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListObjectsV2ResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::ListPartsRequest&, const Model::ListPartsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListPartsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketAccelerateConfigurationRequest&, const Model::PutBucketAccelerateConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketAccelerateConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketAclRequest&, const Model::PutBucketAclOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketAclResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketAnalyticsConfigurationRequest&, const Model::PutBucketAnalyticsConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketAnalyticsConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketCorsRequest&, const Model::PutBucketCorsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketCorsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketEncryptionRequest&, const Model::PutBucketEncryptionOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketEncryptionResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketIntelligentTieringConfigurationRequest&, const Model::PutBucketIntelligentTieringConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketIntelligentTieringConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketInventoryConfigurationRequest&, const Model::PutBucketInventoryConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketInventoryConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketLifecycleConfigurationRequest&, const Model::PutBucketLifecycleConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketLifecycleConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketLoggingRequest&, const Model::PutBucketLoggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketLoggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketMetricsConfigurationRequest&, const Model::PutBucketMetricsConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketMetricsConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketNotificationConfigurationRequest&, const Model::PutBucketNotificationConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketNotificationConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketOwnershipControlsRequest&, const Model::PutBucketOwnershipControlsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketOwnershipControlsResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketPolicyRequest&, const Model::PutBucketPolicyOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketPolicyResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketReplicationRequest&, const Model::PutBucketReplicationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketReplicationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketRequestPaymentRequest&, const Model::PutBucketRequestPaymentOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketRequestPaymentResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketTaggingRequest&, const Model::PutBucketTaggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketTaggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketVersioningRequest&, const Model::PutBucketVersioningOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketVersioningResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutBucketWebsiteRequest&, const Model::PutBucketWebsiteOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutBucketWebsiteResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutObjectRequest&, const Model::PutObjectOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutObjectResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutObjectAclRequest&, const Model::PutObjectAclOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutObjectAclResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutObjectLegalHoldRequest&, const Model::PutObjectLegalHoldOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutObjectLegalHoldResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutObjectLockConfigurationRequest&, const Model::PutObjectLockConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutObjectLockConfigurationResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutObjectRetentionRequest&, const Model::PutObjectRetentionOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutObjectRetentionResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutObjectTaggingRequest&, const Model::PutObjectTaggingOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutObjectTaggingResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::PutPublicAccessBlockRequest&, const Model::PutPublicAccessBlockOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutPublicAccessBlockResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::RestoreObjectRequest&, const Model::RestoreObjectOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > RestoreObjectResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::SelectObjectContentRequest&, const Model::SelectObjectContentOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > SelectObjectContentResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::UploadPartRequest&, const Model::UploadPartOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UploadPartResponseReceivedHandler;
+ typedef std::function<void(const S3Client*, const Model::UploadPartCopyRequest&, const Model::UploadPartCopyOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UploadPartCopyResponseReceivedHandler;
+
+ // Get endpoint, signer region and signer service name after computing the endpoint.
+ struct ComputeEndpointResult
+ {
+ ComputeEndpointResult(const Aws::String& endpointName = {}, const Aws::String& region = {}, const Aws::String& serviceName = {}) :
+ endpoint(endpointName), signerRegion(region), signerServiceName(serviceName) {}
+
+ Aws::String endpoint;
+ Aws::String signerRegion;
+ Aws::String signerServiceName;
+ };
+ typedef Aws::Utils::Outcome<ComputeEndpointResult, Aws::Client::AWSError<S3Errors>> ComputeEndpointOutcome;
+
+ //max expiration for presigned urls in s3 is 7 days.
+ static const unsigned MAX_EXPIRATION_SECONDS = 7 * 24 * 60 * 60;
+
+ /**
+ * <p/>
+ */
+ enum class US_EAST_1_REGIONAL_ENDPOINT_OPTION
+ {
+ NOT_SET,
+ LEGACY, //stands for using global endpoint for us-east-1,
+ REGIONAL //stands for using regional endpoint for us-east-1
+ };
+ class AWS_S3_API S3Client : public Aws::Client::AWSXMLClient
+ {
+ public:
+ typedef Aws::Client::AWSXMLClient BASECLASS;
+
+ /**
+ * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
+ * is not specified, it will be initialized to default values.
+ */
+ S3Client(const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration(), Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy signPayloads = Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, bool useVirtualAddressing = true, Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION USEast1RegionalEndPointOption = Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::NOT_SET);
+
+ /**
+ * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
+ * is not specified, it will be initialized to default values.
+ */
+ S3Client(const Aws::Auth::AWSCredentials& credentials, const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration(), Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy signPayloads = Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, bool useVirtualAddressing = true, Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION USEast1RegionalEndPointOption = Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::NOT_SET);
+
+ /**
+ * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
+ * the default http client factory will be used
+ */
+ S3Client(const std::shared_ptr<Aws::Auth::AWSCredentialsProvider>& credentialsProvider,
+ const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration(), Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy signPayloads = Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, bool useVirtualAddressing = true, Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION USEast1RegionalEndPointOption = Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::NOT_SET);
+
+ virtual ~S3Client();
+
+
+ /**
+ * <p>This operation aborts a multipart upload. After a multipart upload is
+ * aborted, no additional parts can be uploaded using that upload ID. The storage
+ * consumed by any previously uploaded parts will be freed. However, if any part
+ * uploads are currently in progress, those part uploads might or might not
+ * succeed. As a result, it might be necessary to abort a given multipart upload
+ * multiple times in order to completely free all storage consumed by all parts.
+ * </p> <p>To verify that all parts have been removed, so you don't get charged for
+ * the part storage, you should call the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * operation and ensure that the parts list is empty.</p> <p>For information about
+ * permissions required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>AbortMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUpload">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::AbortMultipartUploadOutcome AbortMultipartUpload(const Model::AbortMultipartUploadRequest& request) const;
+
+ /**
+ * <p>This operation aborts a multipart upload. After a multipart upload is
+ * aborted, no additional parts can be uploaded using that upload ID. The storage
+ * consumed by any previously uploaded parts will be freed. However, if any part
+ * uploads are currently in progress, those part uploads might or might not
+ * succeed. As a result, it might be necessary to abort a given multipart upload
+ * multiple times in order to completely free all storage consumed by all parts.
+ * </p> <p>To verify that all parts have been removed, so you don't get charged for
+ * the part storage, you should call the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * operation and ensure that the parts list is empty.</p> <p>For information about
+ * permissions required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>AbortMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUpload">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::AbortMultipartUploadOutcomeCallable AbortMultipartUploadCallable(const Model::AbortMultipartUploadRequest& request) const;
+
+ /**
+ * <p>This operation aborts a multipart upload. After a multipart upload is
+ * aborted, no additional parts can be uploaded using that upload ID. The storage
+ * consumed by any previously uploaded parts will be freed. However, if any part
+ * uploads are currently in progress, those part uploads might or might not
+ * succeed. As a result, it might be necessary to abort a given multipart upload
+ * multiple times in order to completely free all storage consumed by all parts.
+ * </p> <p>To verify that all parts have been removed, so you don't get charged for
+ * the part storage, you should call the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * operation and ensure that the parts list is empty.</p> <p>For information about
+ * permissions required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>AbortMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUpload">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void AbortMultipartUploadAsync(const Model::AbortMultipartUploadRequest& request, const AbortMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Completes a multipart upload by assembling previously uploaded parts.</p>
+ * <p>You first initiate the multipart upload and then upload all parts using the
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * operation. After successfully uploading all relevant parts of an upload, you
+ * call this operation to complete the upload. Upon receiving this request, Amazon
+ * S3 concatenates all the parts in ascending order by part number to create a new
+ * object. In the Complete Multipart Upload request, you must provide the parts
+ * list. You must ensure that the parts list is complete. This operation
+ * concatenates the parts that you provide in the list. For each part in the list,
+ * you must provide the part number and the <code>ETag</code> value, returned after
+ * that part was uploaded.</p> <p>Processing of a Complete Multipart Upload request
+ * could take several minutes to complete. After Amazon S3 begins processing the
+ * request, it sends an HTTP response header that specifies a 200 OK response.
+ * While processing is in progress, Amazon S3 periodically sends white space
+ * characters to keep the connection from timing out. Because a request could fail
+ * after the initial 200 OK response has been sent, it is important that you check
+ * the response body to determine whether the request succeeded.</p> <p>Note that
+ * if <code>CompleteMultipartUpload</code> fails, applications should be prepared
+ * to retry the failed requests. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html">Amazon
+ * S3 Error Best Practices</a>.</p> <p>For more information about multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information about permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p> <code>CompleteMultipartUpload</code> has
+ * the following special errors:</p> <ul> <li> <p>Error code:
+ * <code>EntityTooSmall</code> </p> <ul> <li> <p>Description: Your proposed upload
+ * is smaller than the minimum allowed object size. Each part must be at least 5 MB
+ * in size, except the last part.</p> </li> <li> <p>400 Bad Request</p> </li> </ul>
+ * </li> <li> <p>Error code: <code>InvalidPart</code> </p> <ul> <li>
+ * <p>Description: One or more of the specified parts could not be found. The part
+ * might not have been uploaded, or the specified entity tag might not have matched
+ * the part's entity tag.</p> </li> <li> <p>400 Bad Request</p> </li> </ul> </li>
+ * <li> <p>Error code: <code>InvalidPartOrder</code> </p> <ul> <li> <p>Description:
+ * The list of parts was not in ascending order. The parts list must be specified
+ * in order by part number.</p> </li> <li> <p>400 Bad Request</p> </li> </ul> </li>
+ * <li> <p>Error code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The
+ * specified multipart upload does not exist. The upload ID might be invalid, or
+ * the multipart upload might have been aborted or completed.</p> </li> <li> <p>404
+ * Not Found</p> </li> </ul> </li> </ul> <p>The following operations are related to
+ * <code>CompleteMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUpload">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::CompleteMultipartUploadOutcome CompleteMultipartUpload(const Model::CompleteMultipartUploadRequest& request) const;
+
+ /**
+ * <p>Completes a multipart upload by assembling previously uploaded parts.</p>
+ * <p>You first initiate the multipart upload and then upload all parts using the
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * operation. After successfully uploading all relevant parts of an upload, you
+ * call this operation to complete the upload. Upon receiving this request, Amazon
+ * S3 concatenates all the parts in ascending order by part number to create a new
+ * object. In the Complete Multipart Upload request, you must provide the parts
+ * list. You must ensure that the parts list is complete. This operation
+ * concatenates the parts that you provide in the list. For each part in the list,
+ * you must provide the part number and the <code>ETag</code> value, returned after
+ * that part was uploaded.</p> <p>Processing of a Complete Multipart Upload request
+ * could take several minutes to complete. After Amazon S3 begins processing the
+ * request, it sends an HTTP response header that specifies a 200 OK response.
+ * While processing is in progress, Amazon S3 periodically sends white space
+ * characters to keep the connection from timing out. Because a request could fail
+ * after the initial 200 OK response has been sent, it is important that you check
+ * the response body to determine whether the request succeeded.</p> <p>Note that
+ * if <code>CompleteMultipartUpload</code> fails, applications should be prepared
+ * to retry the failed requests. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html">Amazon
+ * S3 Error Best Practices</a>.</p> <p>For more information about multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information about permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p> <code>CompleteMultipartUpload</code> has
+ * the following special errors:</p> <ul> <li> <p>Error code:
+ * <code>EntityTooSmall</code> </p> <ul> <li> <p>Description: Your proposed upload
+ * is smaller than the minimum allowed object size. Each part must be at least 5 MB
+ * in size, except the last part.</p> </li> <li> <p>400 Bad Request</p> </li> </ul>
+ * </li> <li> <p>Error code: <code>InvalidPart</code> </p> <ul> <li>
+ * <p>Description: One or more of the specified parts could not be found. The part
+ * might not have been uploaded, or the specified entity tag might not have matched
+ * the part's entity tag.</p> </li> <li> <p>400 Bad Request</p> </li> </ul> </li>
+ * <li> <p>Error code: <code>InvalidPartOrder</code> </p> <ul> <li> <p>Description:
+ * The list of parts was not in ascending order. The parts list must be specified
+ * in order by part number.</p> </li> <li> <p>400 Bad Request</p> </li> </ul> </li>
+ * <li> <p>Error code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The
+ * specified multipart upload does not exist. The upload ID might be invalid, or
+ * the multipart upload might have been aborted or completed.</p> </li> <li> <p>404
+ * Not Found</p> </li> </ul> </li> </ul> <p>The following operations are related to
+ * <code>CompleteMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUpload">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::CompleteMultipartUploadOutcomeCallable CompleteMultipartUploadCallable(const Model::CompleteMultipartUploadRequest& request) const;
+
+ /**
+ * <p>Completes a multipart upload by assembling previously uploaded parts.</p>
+ * <p>You first initiate the multipart upload and then upload all parts using the
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * operation. After successfully uploading all relevant parts of an upload, you
+ * call this operation to complete the upload. Upon receiving this request, Amazon
+ * S3 concatenates all the parts in ascending order by part number to create a new
+ * object. In the Complete Multipart Upload request, you must provide the parts
+ * list. You must ensure that the parts list is complete. This operation
+ * concatenates the parts that you provide in the list. For each part in the list,
+ * you must provide the part number and the <code>ETag</code> value, returned after
+ * that part was uploaded.</p> <p>Processing of a Complete Multipart Upload request
+ * could take several minutes to complete. After Amazon S3 begins processing the
+ * request, it sends an HTTP response header that specifies a 200 OK response.
+ * While processing is in progress, Amazon S3 periodically sends white space
+ * characters to keep the connection from timing out. Because a request could fail
+ * after the initial 200 OK response has been sent, it is important that you check
+ * the response body to determine whether the request succeeded.</p> <p>Note that
+ * if <code>CompleteMultipartUpload</code> fails, applications should be prepared
+ * to retry the failed requests. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html">Amazon
+ * S3 Error Best Practices</a>.</p> <p>For more information about multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information about permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p> <code>CompleteMultipartUpload</code> has
+ * the following special errors:</p> <ul> <li> <p>Error code:
+ * <code>EntityTooSmall</code> </p> <ul> <li> <p>Description: Your proposed upload
+ * is smaller than the minimum allowed object size. Each part must be at least 5 MB
+ * in size, except the last part.</p> </li> <li> <p>400 Bad Request</p> </li> </ul>
+ * </li> <li> <p>Error code: <code>InvalidPart</code> </p> <ul> <li>
+ * <p>Description: One or more of the specified parts could not be found. The part
+ * might not have been uploaded, or the specified entity tag might not have matched
+ * the part's entity tag.</p> </li> <li> <p>400 Bad Request</p> </li> </ul> </li>
+ * <li> <p>Error code: <code>InvalidPartOrder</code> </p> <ul> <li> <p>Description:
+ * The list of parts was not in ascending order. The parts list must be specified
+ * in order by part number.</p> </li> <li> <p>400 Bad Request</p> </li> </ul> </li>
+ * <li> <p>Error code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The
+ * specified multipart upload does not exist. The upload ID might be invalid, or
+ * the multipart upload might have been aborted or completed.</p> </li> <li> <p>404
+ * Not Found</p> </li> </ul> </li> </ul> <p>The following operations are related to
+ * <code>CompleteMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUpload">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void CompleteMultipartUploadAsync(const Model::CompleteMultipartUploadRequest& request, const CompleteMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Creates a copy of an object that is already stored in Amazon S3.</p>
+ * <p>You can store individual objects of up to 5 TB in Amazon S3. You create a
+ * copy of your object up to 5 GB in size in a single atomic operation using this
+ * API. However, to copy an object greater than 5 GB, you must use the multipart
+ * upload Upload Part - Copy API. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html">Copy
+ * Object Using the REST Multipart Upload API</a>.</p> <p>All copy requests
+ * must be authenticated. Additionally, you must have <i>read</i> access to the
+ * source object and <i>write</i> access to the destination bucket. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>. Both the Region that you want to copy the object from and
+ * the Region that you want to copy the object to must be enabled for your
+ * account.</p> <p>A copy request might return an error when Amazon S3 receives the
+ * copy request or while Amazon S3 is copying the files. If the error occurs before
+ * the copy operation starts, you receive a standard Amazon S3 error. If the error
+ * occurs during the copy operation, the error response is embedded in the
+ * <code>200 OK</code> response. This means that a <code>200 OK</code> response can
+ * contain either a success or an error. Design your application to parse the
+ * contents of the response and handle it appropriately.</p> <p>If the copy is
+ * successful, you receive a response with information about the copied object.</p>
+ * <p>If the request is an HTTP 1.1 request, the response is chunk encoded.
+ * If it were not, it would not contain the content-length, and you would need to
+ * read the entire body.</p> <p>The copy request charge is based on the
+ * storage class and Region that you specify for the destination object. For
+ * pricing information, see <a href="https://aws.amazon.com/s3/pricing/">Amazon S3
+ * pricing</a>.</p> <p>Amazon S3 transfer acceleration does not support
+ * cross-Region copies. If you request a cross-Region copy using a transfer
+ * acceleration endpoint, you get a 400 <code>Bad Request</code> error. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a>.</p> <p> <b>Metadata</b> </p> <p>When copying an
+ * object, you can preserve all metadata (default) or specify new metadata.
+ * However, the ACL is not preserved and is set to private for the user making the
+ * request. To override the default ACL setting, specify a new ACL when generating
+ * a copy request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. </p> <p>To specify whether you want the object metadata copied from
+ * the source object or replaced with metadata provided in the request, you can
+ * optionally add the <code>x-amz-metadata-directive</code> header. When you grant
+ * permissions, you can use the <code>s3:x-amz-metadata-directive</code> condition
+ * key to enforce certain metadata behavior when objects are uploaded. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html">Specifying
+ * Conditions in a Policy</a> in the <i>Amazon S3 Developer Guide</i>. For a
+ * complete list of Amazon S3-specific condition keys, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html">Actions,
+ * Resources, and Condition Keys for Amazon S3</a>.</p> <p> <b>
+ * <code>x-amz-copy-source-if</code> Headers</b> </p> <p>To only copy an object
+ * under certain conditions, such as whether the <code>Etag</code> matches or
+ * whether the object was modified before or after a specified date, use the
+ * following request parameters:</p> <ul> <li> <p>
+ * <code>x-amz-copy-source-if-match</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-none-match</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-modified-since</code> </p> </li> </ul> <p> If both
+ * the <code>x-amz-copy-source-if-match</code> and
+ * <code>x-amz-copy-source-if-unmodified-since</code> headers are present in the
+ * request and evaluate as follows, Amazon S3 returns <code>200 OK</code> and
+ * copies the data:</p> <ul> <li> <p> <code>x-amz-copy-source-if-match</code>
+ * condition evaluates to true</p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> condition evaluates to
+ * false</p> </li> </ul> <p>If both the
+ * <code>x-amz-copy-source-if-none-match</code> and
+ * <code>x-amz-copy-source-if-modified-since</code> headers are present in the
+ * request and evaluate as follows, Amazon S3 returns the <code>412 Precondition
+ * Failed</code> response code:</p> <ul> <li> <p>
+ * <code>x-amz-copy-source-if-none-match</code> condition evaluates to false</p>
+ * </li> <li> <p> <code>x-amz-copy-source-if-modified-since</code> condition
+ * evaluates to true</p> </li> </ul> <p>All headers with the
+ * <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be
+ * signed.</p> <p> <b>Server-side encryption</b> </p> <p>When you perform a
+ * CopyObject operation, you can optionally use the appropriate encryption-related
+ * headers to encrypt the object using server-side encryption with AWS managed
+ * encryption keys (SSE-S3 or SSE-KMS) or a customer-provided encryption key. With
+ * server-side encryption, Amazon S3 encrypts your data as it writes it to disks in
+ * its data centers and decrypts the data when you access it. For more information
+ * about server-side encryption, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Using
+ * Server-Side Encryption</a>.</p> <p>If a target object uses SSE-KMS, you can
+ * enable an S3 Bucket Key for the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p> <b>Access Control List (ACL)-Specific Request Headers</b> </p> <p>When
+ * copying an object, you can optionally use headers to grant ACL-based
+ * permissions. By default, all objects are private. Only the owner has full access
+ * control. When adding a new object, you can grant permissions to individual AWS
+ * accounts or to predefined groups defined by Amazon S3. These permissions are
+ * then added to the ACL on the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing
+ * ACLs Using the REST API</a>. </p> <p> <b>Storage Class Options</b> </p> <p>You
+ * can use the <code>CopyObject</code> operation to change the storage class of an
+ * object that is already stored in Amazon S3 using the <code>StorageClass</code>
+ * parameter. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p> <p>
+ * <b>Versioning</b> </p> <p>By default, <code>x-amz-copy-source</code> identifies
+ * the current version of an object to copy. If the current version is a delete
+ * marker, Amazon S3 behaves as if the object was deleted. To copy a different
+ * version, use the <code>versionId</code> subresource.</p> <p>If you enable
+ * versioning on the target bucket, Amazon S3 generates a unique version ID for the
+ * object being copied. This version ID is different from the version ID of the
+ * source object. Amazon S3 returns the version ID of the copied object in the
+ * <code>x-amz-version-id</code> response header in the response.</p> <p>If you do
+ * not enable versioning or suspend it on the target bucket, the version ID that
+ * Amazon S3 generates is always null.</p> <p>If the source object's storage class
+ * is GLACIER, you must restore a copy of this object before you can use it as a
+ * source object for the copy operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>.</p>
+ * <p>The following operations are related to <code>CopyObject</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html">Copying
+ * Objects</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObject">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::CopyObjectOutcome CopyObject(const Model::CopyObjectRequest& request) const;
+
+ /**
+ * <p>Creates a copy of an object that is already stored in Amazon S3.</p>
+ * <p>You can store individual objects of up to 5 TB in Amazon S3. You create a
+ * copy of your object up to 5 GB in size in a single atomic operation using this
+ * API. However, to copy an object greater than 5 GB, you must use the multipart
+ * upload Upload Part - Copy API. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html">Copy
+ * Object Using the REST Multipart Upload API</a>.</p> <p>All copy requests
+ * must be authenticated. Additionally, you must have <i>read</i> access to the
+ * source object and <i>write</i> access to the destination bucket. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>. Both the Region that you want to copy the object from and
+ * the Region that you want to copy the object to must be enabled for your
+ * account.</p> <p>A copy request might return an error when Amazon S3 receives the
+ * copy request or while Amazon S3 is copying the files. If the error occurs before
+ * the copy operation starts, you receive a standard Amazon S3 error. If the error
+ * occurs during the copy operation, the error response is embedded in the
+ * <code>200 OK</code> response. This means that a <code>200 OK</code> response can
+ * contain either a success or an error. Design your application to parse the
+ * contents of the response and handle it appropriately.</p> <p>If the copy is
+ * successful, you receive a response with information about the copied object.</p>
+ * <p>If the request is an HTTP 1.1 request, the response is chunk encoded.
+ * If it were not, it would not contain the content-length, and you would need to
+ * read the entire body.</p> <p>The copy request charge is based on the
+ * storage class and Region that you specify for the destination object. For
+ * pricing information, see <a href="https://aws.amazon.com/s3/pricing/">Amazon S3
+ * pricing</a>.</p> <p>Amazon S3 transfer acceleration does not support
+ * cross-Region copies. If you request a cross-Region copy using a transfer
+ * acceleration endpoint, you get a 400 <code>Bad Request</code> error. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a>.</p> <p> <b>Metadata</b> </p> <p>When copying an
+ * object, you can preserve all metadata (default) or specify new metadata.
+ * However, the ACL is not preserved and is set to private for the user making the
+ * request. To override the default ACL setting, specify a new ACL when generating
+ * a copy request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. </p> <p>To specify whether you want the object metadata copied from
+ * the source object or replaced with metadata provided in the request, you can
+ * optionally add the <code>x-amz-metadata-directive</code> header. When you grant
+ * permissions, you can use the <code>s3:x-amz-metadata-directive</code> condition
+ * key to enforce certain metadata behavior when objects are uploaded. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html">Specifying
+ * Conditions in a Policy</a> in the <i>Amazon S3 Developer Guide</i>. For a
+ * complete list of Amazon S3-specific condition keys, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html">Actions,
+ * Resources, and Condition Keys for Amazon S3</a>.</p> <p> <b>
+ * <code>x-amz-copy-source-if</code> Headers</b> </p> <p>To only copy an object
+ * under certain conditions, such as whether the <code>Etag</code> matches or
+ * whether the object was modified before or after a specified date, use the
+ * following request parameters:</p> <ul> <li> <p>
+ * <code>x-amz-copy-source-if-match</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-none-match</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-modified-since</code> </p> </li> </ul> <p> If both
+ * the <code>x-amz-copy-source-if-match</code> and
+ * <code>x-amz-copy-source-if-unmodified-since</code> headers are present in the
+ * request and evaluate as follows, Amazon S3 returns <code>200 OK</code> and
+ * copies the data:</p> <ul> <li> <p> <code>x-amz-copy-source-if-match</code>
+ * condition evaluates to true</p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> condition evaluates to
+ * false</p> </li> </ul> <p>If both the
+ * <code>x-amz-copy-source-if-none-match</code> and
+ * <code>x-amz-copy-source-if-modified-since</code> headers are present in the
+ * request and evaluate as follows, Amazon S3 returns the <code>412 Precondition
+ * Failed</code> response code:</p> <ul> <li> <p>
+ * <code>x-amz-copy-source-if-none-match</code> condition evaluates to false</p>
+ * </li> <li> <p> <code>x-amz-copy-source-if-modified-since</code> condition
+ * evaluates to true</p> </li> </ul> <p>All headers with the
+ * <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be
+ * signed.</p> <p> <b>Server-side encryption</b> </p> <p>When you perform a
+ * CopyObject operation, you can optionally use the appropriate encryption-related
+ * headers to encrypt the object using server-side encryption with AWS managed
+ * encryption keys (SSE-S3 or SSE-KMS) or a customer-provided encryption key. With
+ * server-side encryption, Amazon S3 encrypts your data as it writes it to disks in
+ * its data centers and decrypts the data when you access it. For more information
+ * about server-side encryption, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Using
+ * Server-Side Encryption</a>.</p> <p>If a target object uses SSE-KMS, you can
+ * enable an S3 Bucket Key for the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p> <b>Access Control List (ACL)-Specific Request Headers</b> </p> <p>When
+ * copying an object, you can optionally use headers to grant ACL-based
+ * permissions. By default, all objects are private. Only the owner has full access
+ * control. When adding a new object, you can grant permissions to individual AWS
+ * accounts or to predefined groups defined by Amazon S3. These permissions are
+ * then added to the ACL on the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing
+ * ACLs Using the REST API</a>. </p> <p> <b>Storage Class Options</b> </p> <p>You
+ * can use the <code>CopyObject</code> operation to change the storage class of an
+ * object that is already stored in Amazon S3 using the <code>StorageClass</code>
+ * parameter. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p> <p>
+ * <b>Versioning</b> </p> <p>By default, <code>x-amz-copy-source</code> identifies
+ * the current version of an object to copy. If the current version is a delete
+ * marker, Amazon S3 behaves as if the object was deleted. To copy a different
+ * version, use the <code>versionId</code> subresource.</p> <p>If you enable
+ * versioning on the target bucket, Amazon S3 generates a unique version ID for the
+ * object being copied. This version ID is different from the version ID of the
+ * source object. Amazon S3 returns the version ID of the copied object in the
+ * <code>x-amz-version-id</code> response header in the response.</p> <p>If you do
+ * not enable versioning or suspend it on the target bucket, the version ID that
+ * Amazon S3 generates is always null.</p> <p>If the source object's storage class
+ * is GLACIER, you must restore a copy of this object before you can use it as a
+ * source object for the copy operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>.</p>
+ * <p>The following operations are related to <code>CopyObject</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html">Copying
+ * Objects</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObject">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::CopyObjectOutcomeCallable CopyObjectCallable(const Model::CopyObjectRequest& request) const;
+
+ /**
+ * <p>Creates a copy of an object that is already stored in Amazon S3.</p>
+ * <p>You can store individual objects of up to 5 TB in Amazon S3. You create a
+ * copy of your object up to 5 GB in size in a single atomic operation using this
+ * API. However, to copy an object greater than 5 GB, you must use the multipart
+ * upload Upload Part - Copy API. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html">Copy
+ * Object Using the REST Multipart Upload API</a>.</p> <p>All copy requests
+ * must be authenticated. Additionally, you must have <i>read</i> access to the
+ * source object and <i>write</i> access to the destination bucket. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>. Both the Region that you want to copy the object from and
+ * the Region that you want to copy the object to must be enabled for your
+ * account.</p> <p>A copy request might return an error when Amazon S3 receives the
+ * copy request or while Amazon S3 is copying the files. If the error occurs before
+ * the copy operation starts, you receive a standard Amazon S3 error. If the error
+ * occurs during the copy operation, the error response is embedded in the
+ * <code>200 OK</code> response. This means that a <code>200 OK</code> response can
+ * contain either a success or an error. Design your application to parse the
+ * contents of the response and handle it appropriately.</p> <p>If the copy is
+ * successful, you receive a response with information about the copied object.</p>
+ * <p>If the request is an HTTP 1.1 request, the response is chunk encoded.
+ * If it were not, it would not contain the content-length, and you would need to
+ * read the entire body.</p> <p>The copy request charge is based on the
+ * storage class and Region that you specify for the destination object. For
+ * pricing information, see <a href="https://aws.amazon.com/s3/pricing/">Amazon S3
+ * pricing</a>.</p> <p>Amazon S3 transfer acceleration does not support
+ * cross-Region copies. If you request a cross-Region copy using a transfer
+ * acceleration endpoint, you get a 400 <code>Bad Request</code> error. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a>.</p> <p> <b>Metadata</b> </p> <p>When copying an
+ * object, you can preserve all metadata (default) or specify new metadata.
+ * However, the ACL is not preserved and is set to private for the user making the
+ * request. To override the default ACL setting, specify a new ACL when generating
+ * a copy request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. </p> <p>To specify whether you want the object metadata copied from
+ * the source object or replaced with metadata provided in the request, you can
+ * optionally add the <code>x-amz-metadata-directive</code> header. When you grant
+ * permissions, you can use the <code>s3:x-amz-metadata-directive</code> condition
+ * key to enforce certain metadata behavior when objects are uploaded. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html">Specifying
+ * Conditions in a Policy</a> in the <i>Amazon S3 Developer Guide</i>. For a
+ * complete list of Amazon S3-specific condition keys, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html">Actions,
+ * Resources, and Condition Keys for Amazon S3</a>.</p> <p> <b>
+ * <code>x-amz-copy-source-if</code> Headers</b> </p> <p>To only copy an object
+ * under certain conditions, such as whether the <code>Etag</code> matches or
+ * whether the object was modified before or after a specified date, use the
+ * following request parameters:</p> <ul> <li> <p>
+ * <code>x-amz-copy-source-if-match</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-none-match</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> </p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-modified-since</code> </p> </li> </ul> <p> If both
+ * the <code>x-amz-copy-source-if-match</code> and
+ * <code>x-amz-copy-source-if-unmodified-since</code> headers are present in the
+ * request and evaluate as follows, Amazon S3 returns <code>200 OK</code> and
+ * copies the data:</p> <ul> <li> <p> <code>x-amz-copy-source-if-match</code>
+ * condition evaluates to true</p> </li> <li> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> condition evaluates to
+ * false</p> </li> </ul> <p>If both the
+ * <code>x-amz-copy-source-if-none-match</code> and
+ * <code>x-amz-copy-source-if-modified-since</code> headers are present in the
+ * request and evaluate as follows, Amazon S3 returns the <code>412 Precondition
+ * Failed</code> response code:</p> <ul> <li> <p>
+ * <code>x-amz-copy-source-if-none-match</code> condition evaluates to false</p>
+ * </li> <li> <p> <code>x-amz-copy-source-if-modified-since</code> condition
+ * evaluates to true</p> </li> </ul> <p>All headers with the
+ * <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be
+ * signed.</p> <p> <b>Server-side encryption</b> </p> <p>When you perform a
+ * CopyObject operation, you can optionally use the appropriate encryption-related
+ * headers to encrypt the object using server-side encryption with AWS managed
+ * encryption keys (SSE-S3 or SSE-KMS) or a customer-provided encryption key. With
+ * server-side encryption, Amazon S3 encrypts your data as it writes it to disks in
+ * its data centers and decrypts the data when you access it. For more information
+ * about server-side encryption, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Using
+ * Server-Side Encryption</a>.</p> <p>If a target object uses SSE-KMS, you can
+ * enable an S3 Bucket Key for the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p> <b>Access Control List (ACL)-Specific Request Headers</b> </p> <p>When
+ * copying an object, you can optionally use headers to grant ACL-based
+ * permissions. By default, all objects are private. Only the owner has full access
+ * control. When adding a new object, you can grant permissions to individual AWS
+ * accounts or to predefined groups defined by Amazon S3. These permissions are
+ * then added to the ACL on the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing
+ * ACLs Using the REST API</a>. </p> <p> <b>Storage Class Options</b> </p> <p>You
+ * can use the <code>CopyObject</code> operation to change the storage class of an
+ * object that is already stored in Amazon S3 using the <code>StorageClass</code>
+ * parameter. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p> <p>
+ * <b>Versioning</b> </p> <p>By default, <code>x-amz-copy-source</code> identifies
+ * the current version of an object to copy. If the current version is a delete
+ * marker, Amazon S3 behaves as if the object was deleted. To copy a different
+ * version, use the <code>versionId</code> subresource.</p> <p>If you enable
+ * versioning on the target bucket, Amazon S3 generates a unique version ID for the
+ * object being copied. This version ID is different from the version ID of the
+ * source object. Amazon S3 returns the version ID of the copied object in the
+ * <code>x-amz-version-id</code> response header in the response.</p> <p>If you do
+ * not enable versioning or suspend it on the target bucket, the version ID that
+ * Amazon S3 generates is always null.</p> <p>If the source object's storage class
+ * is GLACIER, you must restore a copy of this object before you can use it as a
+ * source object for the copy operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>.</p>
+ * <p>The following operations are related to <code>CopyObject</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html">Copying
+ * Objects</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObject">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void CopyObjectAsync(const Model::CopyObjectRequest& request, const CopyObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Creates a new S3 bucket. To create a bucket, you must register with Amazon S3
+ * and have a valid AWS Access Key ID to authenticate requests. Anonymous requests
+ * are never allowed to create buckets. By creating the bucket, you become the
+ * bucket owner.</p> <p>Not every string is an acceptable bucket name. For
+ * information about bucket naming restrictions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html">Working
+ * with Amazon S3 buckets</a>. </p> <p>If you want to create an Amazon S3 on
+ * Outposts bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html">Create
+ * Bucket</a>. </p> <p>By default, the bucket is created in the US East (N.
+ * Virginia) Region. You can optionally specify a Region in the request body. You
+ * might choose a Region to optimize latency, minimize costs, or address regulatory
+ * requirements. For example, if you reside in Europe, you will probably find it
+ * advantageous to create buckets in the Europe (Ireland) Region. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">Accessing
+ * a bucket</a>.</p> <p>If you send your create bucket request to the
+ * <code>s3.amazonaws.com</code> endpoint, the request goes to the us-east-1
+ * Region. Accordingly, the signature calculations in Signature Version 4 must use
+ * us-east-1 as the Region, even if the location constraint in the request
+ * specifies another Region where the bucket is to be created. If you create a
+ * bucket in a Region other than US East (N. Virginia), your application must be
+ * able to handle 307 redirect. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html">Virtual
+ * hosting of buckets</a>.</p> <p>When creating a bucket using this
+ * operation, you can optionally specify the accounts or groups that should be
+ * granted specific permissions on the bucket. There are two ways to grant the
+ * appropriate permissions using the request headers.</p> <ul> <li> <p>Specify a
+ * canned ACL using the <code>x-amz-acl</code> request header. Amazon S3 supports a
+ * set of predefined ACLs, known as <i>canned ACLs</i>. Each canned ACL has a
+ * predefined set of grantees and permissions. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly using the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-write</code>,
+ * <code>x-amz-grant-read-acp</code>, <code>x-amz-grant-write-acp</code>, and
+ * <code>x-amz-grant-full-control</code> headers. These headers map to the set of
+ * permissions Amazon S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * control list (ACL) overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants the AWS
+ * accounts identified by account IDs permissions to read object data and its
+ * metadata:</p> <p> <code>x-amz-grant-read: id="11112222333", id="444455556666"
+ * </code> </p> </li> </ul> <p>You can use either a canned ACL or specify
+ * access permissions explicitly. You cannot do both.</p> <p>The following
+ * operations are related to <code>CreateBucket</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucket">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::CreateBucketOutcome CreateBucket(const Model::CreateBucketRequest& request) const;
+
+ /**
+ * <p>Creates a new S3 bucket. To create a bucket, you must register with Amazon S3
+ * and have a valid AWS Access Key ID to authenticate requests. Anonymous requests
+ * are never allowed to create buckets. By creating the bucket, you become the
+ * bucket owner.</p> <p>Not every string is an acceptable bucket name. For
+ * information about bucket naming restrictions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html">Working
+ * with Amazon S3 buckets</a>. </p> <p>If you want to create an Amazon S3 on
+ * Outposts bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html">Create
+ * Bucket</a>. </p> <p>By default, the bucket is created in the US East (N.
+ * Virginia) Region. You can optionally specify a Region in the request body. You
+ * might choose a Region to optimize latency, minimize costs, or address regulatory
+ * requirements. For example, if you reside in Europe, you will probably find it
+ * advantageous to create buckets in the Europe (Ireland) Region. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">Accessing
+ * a bucket</a>.</p> <p>If you send your create bucket request to the
+ * <code>s3.amazonaws.com</code> endpoint, the request goes to the us-east-1
+ * Region. Accordingly, the signature calculations in Signature Version 4 must use
+ * us-east-1 as the Region, even if the location constraint in the request
+ * specifies another Region where the bucket is to be created. If you create a
+ * bucket in a Region other than US East (N. Virginia), your application must be
+ * able to handle 307 redirect. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html">Virtual
+ * hosting of buckets</a>.</p> <p>When creating a bucket using this
+ * operation, you can optionally specify the accounts or groups that should be
+ * granted specific permissions on the bucket. There are two ways to grant the
+ * appropriate permissions using the request headers.</p> <ul> <li> <p>Specify a
+ * canned ACL using the <code>x-amz-acl</code> request header. Amazon S3 supports a
+ * set of predefined ACLs, known as <i>canned ACLs</i>. Each canned ACL has a
+ * predefined set of grantees and permissions. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly using the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-write</code>,
+ * <code>x-amz-grant-read-acp</code>, <code>x-amz-grant-write-acp</code>, and
+ * <code>x-amz-grant-full-control</code> headers. These headers map to the set of
+ * permissions Amazon S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * control list (ACL) overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants the AWS
+ * accounts identified by account IDs permissions to read object data and its
+ * metadata:</p> <p> <code>x-amz-grant-read: id="11112222333", id="444455556666"
+ * </code> </p> </li> </ul> <p>You can use either a canned ACL or specify
+ * access permissions explicitly. You cannot do both.</p> <p>The following
+ * operations are related to <code>CreateBucket</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucket">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::CreateBucketOutcomeCallable CreateBucketCallable(const Model::CreateBucketRequest& request) const;
+
+ /**
+ * <p>Creates a new S3 bucket. To create a bucket, you must register with Amazon S3
+ * and have a valid AWS Access Key ID to authenticate requests. Anonymous requests
+ * are never allowed to create buckets. By creating the bucket, you become the
+ * bucket owner.</p> <p>Not every string is an acceptable bucket name. For
+ * information about bucket naming restrictions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html">Working
+ * with Amazon S3 buckets</a>. </p> <p>If you want to create an Amazon S3 on
+ * Outposts bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html">Create
+ * Bucket</a>. </p> <p>By default, the bucket is created in the US East (N.
+ * Virginia) Region. You can optionally specify a Region in the request body. You
+ * might choose a Region to optimize latency, minimize costs, or address regulatory
+ * requirements. For example, if you reside in Europe, you will probably find it
+ * advantageous to create buckets in the Europe (Ireland) Region. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">Accessing
+ * a bucket</a>.</p> <p>If you send your create bucket request to the
+ * <code>s3.amazonaws.com</code> endpoint, the request goes to the us-east-1
+ * Region. Accordingly, the signature calculations in Signature Version 4 must use
+ * us-east-1 as the Region, even if the location constraint in the request
+ * specifies another Region where the bucket is to be created. If you create a
+ * bucket in a Region other than US East (N. Virginia), your application must be
+ * able to handle 307 redirect. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html">Virtual
+ * hosting of buckets</a>.</p> <p>When creating a bucket using this
+ * operation, you can optionally specify the accounts or groups that should be
+ * granted specific permissions on the bucket. There are two ways to grant the
+ * appropriate permissions using the request headers.</p> <ul> <li> <p>Specify a
+ * canned ACL using the <code>x-amz-acl</code> request header. Amazon S3 supports a
+ * set of predefined ACLs, known as <i>canned ACLs</i>. Each canned ACL has a
+ * predefined set of grantees and permissions. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly using the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-write</code>,
+ * <code>x-amz-grant-read-acp</code>, <code>x-amz-grant-write-acp</code>, and
+ * <code>x-amz-grant-full-control</code> headers. These headers map to the set of
+ * permissions Amazon S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * control list (ACL) overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants the AWS
+ * accounts identified by account IDs permissions to read object data and its
+ * metadata:</p> <p> <code>x-amz-grant-read: id="11112222333", id="444455556666"
+ * </code> </p> </li> </ul> <p>You can use either a canned ACL or specify
+ * access permissions explicitly. You cannot do both.</p> <p>The following
+ * operations are related to <code>CreateBucket</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucket">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void CreateBucketAsync(const Model::CreateBucketRequest& request, const CreateBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This operation initiates a multipart upload and returns an upload ID. This
+ * upload ID is used to associate all of the parts in the specific multipart
+ * upload. You specify this upload ID in each of your subsequent upload part
+ * requests (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>).
+ * You also include this upload ID in the final request to either complete or abort
+ * the multipart upload request.</p> <p>For more information about multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html">Multipart
+ * Upload Overview</a>.</p> <p>If you have configured a lifecycle rule to abort
+ * incomplete multipart uploads, the upload must complete within the number of days
+ * specified in the bucket lifecycle configuration. Otherwise, the incomplete
+ * multipart upload becomes eligible for an abort operation and Amazon S3 aborts
+ * the multipart upload. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>For
+ * information about the permissions required to use the multipart upload API, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>For request signing, multipart upload is
+ * just a series of regular requests. You initiate a multipart upload, send one or
+ * more requests to upload parts, and then complete the multipart upload process.
+ * You sign each request individually. There is nothing special about signing
+ * multipart upload requests. For more information about signing, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html">Authenticating
+ * Requests (AWS Signature Version 4)</a>.</p> <p> After you initiate a
+ * multipart upload and upload one or more parts, to stop being charged for storing
+ * the uploaded parts, you must either complete or abort the multipart upload.
+ * Amazon S3 frees up the space used to store the parts and stop charging you for
+ * storing them only after you either complete or abort a multipart upload. </p>
+ * <p>You can optionally request server-side encryption. For server-side
+ * encryption, Amazon S3 encrypts your data as it writes it to disks in its data
+ * centers and decrypts it when you access it. You can provide your own encryption
+ * key, or use AWS Key Management Service (AWS KMS) customer master keys (CMKs) or
+ * Amazon S3-managed encryption keys. If you choose to provide your own encryption
+ * key, the request headers you provide in <a
+ * href="AmazonS3/latest/API/API_UploadPart.html">UploadPart</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>
+ * requests must match the headers you used in the request to initiate the upload
+ * by using <code>CreateMultipartUpload</code>. </p> <p>To perform a multipart
+ * upload with encryption using an AWS KMS CMK, the requester must have permission
+ * to the <code>kms:Encrypt</code>, <code>kms:Decrypt</code>,
+ * <code>kms:ReEncrypt*</code>, <code>kms:GenerateDataKey*</code>, and
+ * <code>kms:DescribeKey</code> actions on the key. These permissions are required
+ * because Amazon S3 must decrypt and read data from the encrypted file parts
+ * before it completes the multipart upload.</p> <p>If your AWS Identity and Access
+ * Management (IAM) user or role is in the same AWS account as the AWS KMS CMK,
+ * then you must have these permissions on the key policy. If your IAM user or role
+ * belongs to a different account than the key, then you must have the permissions
+ * on both the key policy and your IAM user or role.</p> <p> For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a>.</p> <dl> <dt>Access Permissions</dt> <dd>
+ * <p>When copying an object, you can optionally specify the accounts or groups
+ * that should be granted specific permissions on the new object. There are two
+ * ways to grant the permissions using the request headers:</p> <ul> <li>
+ * <p>Specify a canned ACL with the <code>x-amz-acl</code> request header. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. These parameters map to the set of permissions that Amazon S3 supports
+ * in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> </li> </ul> <p>You can use either a canned
+ * ACL or specify access permissions explicitly. You cannot do both.</p> </dd>
+ * <dt>Server-Side- Encryption-Specific Request Headers</dt> <dd> <p>You can
+ * optionally tell Amazon S3 to encrypt data at rest using server-side encryption.
+ * Server-side encryption is for data encryption at rest. Amazon S3 encrypts your
+ * data as it writes it to disks in its data centers and decrypts it when you
+ * access it. The option you use depends on whether you want to use AWS managed
+ * encryption keys or provide your own encryption key. </p> <ul> <li> <p>Use
+ * encryption keys managed by Amazon S3 or customer master keys (CMKs) stored in
+ * AWS Key Management Service (AWS KMS) – If you want AWS to manage the keys used
+ * to encrypt data, specify the following headers in the request.</p> <ul> <li>
+ * <p>x-amz-server-side-encryption</p> </li> <li>
+ * <p>x-amz-server-side-encryption-aws-kms-key-id</p> </li> <li>
+ * <p>x-amz-server-side-encryption-context</p> </li> </ul> <p>If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but don't provide
+ * <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS KMS to protect the data.</p> <p>All GET
+ * and PUT requests for an object protected by AWS KMS fail if you don't make them
+ * with SSL or by using SigV4.</p> <p>For more information about
+ * server-side encryption with CMKs stored in AWS KMS (SSE-KMS), see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html">Protecting
+ * Data Using Server-Side Encryption with CMKs stored in AWS KMS</a>.</p> </li>
+ * <li> <p>Use customer-provided encryption keys – If you want to manage your own
+ * encryption keys, provide all the following headers in the request.</p> <ul> <li>
+ * <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about server-side encryption with CMKs stored in AWS KMS (SSE-KMS),
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html">Protecting
+ * Data Using Server-Side Encryption with CMKs stored in AWS KMS</a>.</p> </li>
+ * </ul> </dd> <dt>Access-Control-List (ACL)-Specific Request Headers</dt> <dd>
+ * <p>You also can use the following access control–related headers with this
+ * operation. By default, all objects are private. Only the owner has full access
+ * control. When adding a new object, you can grant permissions to individual AWS
+ * accounts or to predefined groups defined by Amazon S3. These permissions are
+ * then added to the access control list (ACL) on the object. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. With this operation, you can grant access permissions using one of the
+ * following two methods:</p> <ul> <li> <p>Specify a canned ACL
+ * (<code>x-amz-acl</code>) — Amazon S3 supports a set of predefined ACLs, known as
+ * <i>canned ACLs</i>. Each canned ACL has a predefined set of grantees and
+ * permissions. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly — To explicitly
+ * grant access permissions to specific AWS accounts or groups, use the following
+ * headers. Each header maps to specific permissions that Amazon S3 supports in an
+ * ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>. In the header, you specify a list of grantees
+ * who get the specific permission. To grant permissions explicitly, use:</p> <ul>
+ * <li> <p>x-amz-grant-read</p> </li> <li> <p>x-amz-grant-write</p> </li> <li>
+ * <p>x-amz-grant-read-acp</p> </li> <li> <p>x-amz-grant-write-acp</p> </li> <li>
+ * <p>x-amz-grant-full-control</p> </li> </ul> <p>You specify each grantee as a
+ * type=value pair, where the type is one of the following:</p> <ul> <li> <p>
+ * <code>id</code> – if the value specified is the canonical user ID of an AWS
+ * account</p> </li> <li> <p> <code>uri</code> – if you are granting permissions to
+ * a predefined group</p> </li> <li> <p> <code>emailAddress</code> – if the value
+ * specified is the email address of an AWS account</p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants the AWS
+ * accounts identified by account IDs permissions to read object data and its
+ * metadata:</p> <p> <code>x-amz-grant-read: id="11112222333", id="444455556666"
+ * </code> </p> </li> </ul> </dd> </dl> <p>The following operations are related to
+ * <code>CreateMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUpload">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::CreateMultipartUploadOutcome CreateMultipartUpload(const Model::CreateMultipartUploadRequest& request) const;
+
+ /**
+ * <p>This operation initiates a multipart upload and returns an upload ID. This
+ * upload ID is used to associate all of the parts in the specific multipart
+ * upload. You specify this upload ID in each of your subsequent upload part
+ * requests (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>).
+ * You also include this upload ID in the final request to either complete or abort
+ * the multipart upload request.</p> <p>For more information about multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html">Multipart
+ * Upload Overview</a>.</p> <p>If you have configured a lifecycle rule to abort
+ * incomplete multipart uploads, the upload must complete within the number of days
+ * specified in the bucket lifecycle configuration. Otherwise, the incomplete
+ * multipart upload becomes eligible for an abort operation and Amazon S3 aborts
+ * the multipart upload. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>For
+ * information about the permissions required to use the multipart upload API, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>For request signing, multipart upload is
+ * just a series of regular requests. You initiate a multipart upload, send one or
+ * more requests to upload parts, and then complete the multipart upload process.
+ * You sign each request individually. There is nothing special about signing
+ * multipart upload requests. For more information about signing, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html">Authenticating
+ * Requests (AWS Signature Version 4)</a>.</p> <p> After you initiate a
+ * multipart upload and upload one or more parts, to stop being charged for storing
+ * the uploaded parts, you must either complete or abort the multipart upload.
+ * Amazon S3 frees up the space used to store the parts and stop charging you for
+ * storing them only after you either complete or abort a multipart upload. </p>
+ * <p>You can optionally request server-side encryption. For server-side
+ * encryption, Amazon S3 encrypts your data as it writes it to disks in its data
+ * centers and decrypts it when you access it. You can provide your own encryption
+ * key, or use AWS Key Management Service (AWS KMS) customer master keys (CMKs) or
+ * Amazon S3-managed encryption keys. If you choose to provide your own encryption
+ * key, the request headers you provide in <a
+ * href="AmazonS3/latest/API/API_UploadPart.html">UploadPart</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>
+ * requests must match the headers you used in the request to initiate the upload
+ * by using <code>CreateMultipartUpload</code>. </p> <p>To perform a multipart
+ * upload with encryption using an AWS KMS CMK, the requester must have permission
+ * to the <code>kms:Encrypt</code>, <code>kms:Decrypt</code>,
+ * <code>kms:ReEncrypt*</code>, <code>kms:GenerateDataKey*</code>, and
+ * <code>kms:DescribeKey</code> actions on the key. These permissions are required
+ * because Amazon S3 must decrypt and read data from the encrypted file parts
+ * before it completes the multipart upload.</p> <p>If your AWS Identity and Access
+ * Management (IAM) user or role is in the same AWS account as the AWS KMS CMK,
+ * then you must have these permissions on the key policy. If your IAM user or role
+ * belongs to a different account than the key, then you must have the permissions
+ * on both the key policy and your IAM user or role.</p> <p> For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a>.</p> <dl> <dt>Access Permissions</dt> <dd>
+ * <p>When copying an object, you can optionally specify the accounts or groups
+ * that should be granted specific permissions on the new object. There are two
+ * ways to grant the permissions using the request headers:</p> <ul> <li>
+ * <p>Specify a canned ACL with the <code>x-amz-acl</code> request header. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. These parameters map to the set of permissions that Amazon S3 supports
+ * in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> </li> </ul> <p>You can use either a canned
+ * ACL or specify access permissions explicitly. You cannot do both.</p> </dd>
+ * <dt>Server-Side- Encryption-Specific Request Headers</dt> <dd> <p>You can
+ * optionally tell Amazon S3 to encrypt data at rest using server-side encryption.
+ * Server-side encryption is for data encryption at rest. Amazon S3 encrypts your
+ * data as it writes it to disks in its data centers and decrypts it when you
+ * access it. The option you use depends on whether you want to use AWS managed
+ * encryption keys or provide your own encryption key. </p> <ul> <li> <p>Use
+ * encryption keys managed by Amazon S3 or customer master keys (CMKs) stored in
+ * AWS Key Management Service (AWS KMS) – If you want AWS to manage the keys used
+ * to encrypt data, specify the following headers in the request.</p> <ul> <li>
+ * <p>x-amz-server-side-encryption</p> </li> <li>
+ * <p>x-amz-server-side-encryption-aws-kms-key-id</p> </li> <li>
+ * <p>x-amz-server-side-encryption-context</p> </li> </ul> <p>If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but don't provide
+ * <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS KMS to protect the data.</p> <p>All GET
+ * and PUT requests for an object protected by AWS KMS fail if you don't make them
+ * with SSL or by using SigV4.</p> <p>For more information about
+ * server-side encryption with CMKs stored in AWS KMS (SSE-KMS), see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html">Protecting
+ * Data Using Server-Side Encryption with CMKs stored in AWS KMS</a>.</p> </li>
+ * <li> <p>Use customer-provided encryption keys – If you want to manage your own
+ * encryption keys, provide all the following headers in the request.</p> <ul> <li>
+ * <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about server-side encryption with CMKs stored in AWS KMS (SSE-KMS),
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html">Protecting
+ * Data Using Server-Side Encryption with CMKs stored in AWS KMS</a>.</p> </li>
+ * </ul> </dd> <dt>Access-Control-List (ACL)-Specific Request Headers</dt> <dd>
+ * <p>You also can use the following access control–related headers with this
+ * operation. By default, all objects are private. Only the owner has full access
+ * control. When adding a new object, you can grant permissions to individual AWS
+ * accounts or to predefined groups defined by Amazon S3. These permissions are
+ * then added to the access control list (ACL) on the object. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. With this operation, you can grant access permissions using one of the
+ * following two methods:</p> <ul> <li> <p>Specify a canned ACL
+ * (<code>x-amz-acl</code>) — Amazon S3 supports a set of predefined ACLs, known as
+ * <i>canned ACLs</i>. Each canned ACL has a predefined set of grantees and
+ * permissions. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly — To explicitly
+ * grant access permissions to specific AWS accounts or groups, use the following
+ * headers. Each header maps to specific permissions that Amazon S3 supports in an
+ * ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>. In the header, you specify a list of grantees
+ * who get the specific permission. To grant permissions explicitly, use:</p> <ul>
+ * <li> <p>x-amz-grant-read</p> </li> <li> <p>x-amz-grant-write</p> </li> <li>
+ * <p>x-amz-grant-read-acp</p> </li> <li> <p>x-amz-grant-write-acp</p> </li> <li>
+ * <p>x-amz-grant-full-control</p> </li> </ul> <p>You specify each grantee as a
+ * type=value pair, where the type is one of the following:</p> <ul> <li> <p>
+ * <code>id</code> – if the value specified is the canonical user ID of an AWS
+ * account</p> </li> <li> <p> <code>uri</code> – if you are granting permissions to
+ * a predefined group</p> </li> <li> <p> <code>emailAddress</code> – if the value
+ * specified is the email address of an AWS account</p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants the AWS
+ * accounts identified by account IDs permissions to read object data and its
+ * metadata:</p> <p> <code>x-amz-grant-read: id="11112222333", id="444455556666"
+ * </code> </p> </li> </ul> </dd> </dl> <p>The following operations are related to
+ * <code>CreateMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUpload">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::CreateMultipartUploadOutcomeCallable CreateMultipartUploadCallable(const Model::CreateMultipartUploadRequest& request) const;
+
+ /**
+ * <p>This operation initiates a multipart upload and returns an upload ID. This
+ * upload ID is used to associate all of the parts in the specific multipart
+ * upload. You specify this upload ID in each of your subsequent upload part
+ * requests (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>).
+ * You also include this upload ID in the final request to either complete or abort
+ * the multipart upload request.</p> <p>For more information about multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html">Multipart
+ * Upload Overview</a>.</p> <p>If you have configured a lifecycle rule to abort
+ * incomplete multipart uploads, the upload must complete within the number of days
+ * specified in the bucket lifecycle configuration. Otherwise, the incomplete
+ * multipart upload becomes eligible for an abort operation and Amazon S3 aborts
+ * the multipart upload. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>For
+ * information about the permissions required to use the multipart upload API, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>For request signing, multipart upload is
+ * just a series of regular requests. You initiate a multipart upload, send one or
+ * more requests to upload parts, and then complete the multipart upload process.
+ * You sign each request individually. There is nothing special about signing
+ * multipart upload requests. For more information about signing, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html">Authenticating
+ * Requests (AWS Signature Version 4)</a>.</p> <p> After you initiate a
+ * multipart upload and upload one or more parts, to stop being charged for storing
+ * the uploaded parts, you must either complete or abort the multipart upload.
+ * Amazon S3 frees up the space used to store the parts and stop charging you for
+ * storing them only after you either complete or abort a multipart upload. </p>
+ * <p>You can optionally request server-side encryption. For server-side
+ * encryption, Amazon S3 encrypts your data as it writes it to disks in its data
+ * centers and decrypts it when you access it. You can provide your own encryption
+ * key, or use AWS Key Management Service (AWS KMS) customer master keys (CMKs) or
+ * Amazon S3-managed encryption keys. If you choose to provide your own encryption
+ * key, the request headers you provide in <a
+ * href="AmazonS3/latest/API/API_UploadPart.html">UploadPart</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>
+ * requests must match the headers you used in the request to initiate the upload
+ * by using <code>CreateMultipartUpload</code>. </p> <p>To perform a multipart
+ * upload with encryption using an AWS KMS CMK, the requester must have permission
+ * to the <code>kms:Encrypt</code>, <code>kms:Decrypt</code>,
+ * <code>kms:ReEncrypt*</code>, <code>kms:GenerateDataKey*</code>, and
+ * <code>kms:DescribeKey</code> actions on the key. These permissions are required
+ * because Amazon S3 must decrypt and read data from the encrypted file parts
+ * before it completes the multipart upload.</p> <p>If your AWS Identity and Access
+ * Management (IAM) user or role is in the same AWS account as the AWS KMS CMK,
+ * then you must have these permissions on the key policy. If your IAM user or role
+ * belongs to a different account than the key, then you must have the permissions
+ * on both the key policy and your IAM user or role.</p> <p> For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a>.</p> <dl> <dt>Access Permissions</dt> <dd>
+ * <p>When copying an object, you can optionally specify the accounts or groups
+ * that should be granted specific permissions on the new object. There are two
+ * ways to grant the permissions using the request headers:</p> <ul> <li>
+ * <p>Specify a canned ACL with the <code>x-amz-acl</code> request header. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. These parameters map to the set of permissions that Amazon S3 supports
+ * in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> </li> </ul> <p>You can use either a canned
+ * ACL or specify access permissions explicitly. You cannot do both.</p> </dd>
+ * <dt>Server-Side- Encryption-Specific Request Headers</dt> <dd> <p>You can
+ * optionally tell Amazon S3 to encrypt data at rest using server-side encryption.
+ * Server-side encryption is for data encryption at rest. Amazon S3 encrypts your
+ * data as it writes it to disks in its data centers and decrypts it when you
+ * access it. The option you use depends on whether you want to use AWS managed
+ * encryption keys or provide your own encryption key. </p> <ul> <li> <p>Use
+ * encryption keys managed by Amazon S3 or customer master keys (CMKs) stored in
+ * AWS Key Management Service (AWS KMS) – If you want AWS to manage the keys used
+ * to encrypt data, specify the following headers in the request.</p> <ul> <li>
+ * <p>x-amz-server-side-encryption</p> </li> <li>
+ * <p>x-amz-server-side-encryption-aws-kms-key-id</p> </li> <li>
+ * <p>x-amz-server-side-encryption-context</p> </li> </ul> <p>If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but don't provide
+ * <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS KMS to protect the data.</p> <p>All GET
+ * and PUT requests for an object protected by AWS KMS fail if you don't make them
+ * with SSL or by using SigV4.</p> <p>For more information about
+ * server-side encryption with CMKs stored in AWS KMS (SSE-KMS), see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html">Protecting
+ * Data Using Server-Side Encryption with CMKs stored in AWS KMS</a>.</p> </li>
+ * <li> <p>Use customer-provided encryption keys – If you want to manage your own
+ * encryption keys, provide all the following headers in the request.</p> <ul> <li>
+ * <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about server-side encryption with CMKs stored in AWS KMS (SSE-KMS),
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html">Protecting
+ * Data Using Server-Side Encryption with CMKs stored in AWS KMS</a>.</p> </li>
+ * </ul> </dd> <dt>Access-Control-List (ACL)-Specific Request Headers</dt> <dd>
+ * <p>You also can use the following access control–related headers with this
+ * operation. By default, all objects are private. Only the owner has full access
+ * control. When adding a new object, you can grant permissions to individual AWS
+ * accounts or to predefined groups defined by Amazon S3. These permissions are
+ * then added to the access control list (ACL) on the object. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. With this operation, you can grant access permissions using one of the
+ * following two methods:</p> <ul> <li> <p>Specify a canned ACL
+ * (<code>x-amz-acl</code>) — Amazon S3 supports a set of predefined ACLs, known as
+ * <i>canned ACLs</i>. Each canned ACL has a predefined set of grantees and
+ * permissions. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly — To explicitly
+ * grant access permissions to specific AWS accounts or groups, use the following
+ * headers. Each header maps to specific permissions that Amazon S3 supports in an
+ * ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>. In the header, you specify a list of grantees
+ * who get the specific permission. To grant permissions explicitly, use:</p> <ul>
+ * <li> <p>x-amz-grant-read</p> </li> <li> <p>x-amz-grant-write</p> </li> <li>
+ * <p>x-amz-grant-read-acp</p> </li> <li> <p>x-amz-grant-write-acp</p> </li> <li>
+ * <p>x-amz-grant-full-control</p> </li> </ul> <p>You specify each grantee as a
+ * type=value pair, where the type is one of the following:</p> <ul> <li> <p>
+ * <code>id</code> – if the value specified is the canonical user ID of an AWS
+ * account</p> </li> <li> <p> <code>uri</code> – if you are granting permissions to
+ * a predefined group</p> </li> <li> <p> <code>emailAddress</code> – if the value
+ * specified is the email address of an AWS account</p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants the AWS
+ * accounts identified by account IDs permissions to read object data and its
+ * metadata:</p> <p> <code>x-amz-grant-read: id="11112222333", id="444455556666"
+ * </code> </p> </li> </ul> </dd> </dl> <p>The following operations are related to
+ * <code>CreateMultipartUpload</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUpload">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void CreateMultipartUploadAsync(const Model::CreateMultipartUploadRequest& request, const CreateMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes the S3 bucket. All objects (including all object versions and delete
+ * markers) in the bucket must be deleted before the bucket itself can be
+ * deleted.</p> <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucket">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::DeleteBucketOutcome DeleteBucket(const Model::DeleteBucketRequest& request) const;
+
+ /**
+ * <p>Deletes the S3 bucket. All objects (including all object versions and delete
+ * markers) in the bucket must be deleted before the bucket itself can be
+ * deleted.</p> <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucket">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketOutcomeCallable DeleteBucketCallable(const Model::DeleteBucketRequest& request) const;
+
+ /**
+ * <p>Deletes the S3 bucket. All objects (including all object versions and delete
+ * markers) in the bucket must be deleted before the bucket itself can be
+ * deleted.</p> <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucket">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketAsync(const Model::DeleteBucketRequest& request, const DeleteBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes an analytics configuration for the bucket (specified by the analytics
+ * configuration ID).</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are
+ * related to <code>DeleteBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketAnalyticsConfigurationOutcome DeleteBucketAnalyticsConfiguration(const Model::DeleteBucketAnalyticsConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes an analytics configuration for the bucket (specified by the analytics
+ * configuration ID).</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are
+ * related to <code>DeleteBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketAnalyticsConfigurationOutcomeCallable DeleteBucketAnalyticsConfigurationCallable(const Model::DeleteBucketAnalyticsConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes an analytics configuration for the bucket (specified by the analytics
+ * configuration ID).</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are
+ * related to <code>DeleteBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketAnalyticsConfigurationAsync(const Model::DeleteBucketAnalyticsConfigurationRequest& request, const DeleteBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes the <code>cors</code> configuration information set for the
+ * bucket.</p> <p>To use this operation, you must have permission to perform the
+ * <code>s3:PutBucketCORS</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. </p> <p>For information about
+ * <code>cors</code>, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p class="title"> <b>Related Resources:</b> </p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html">PutBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html">RESTOPTIONSobject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCors">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketCorsOutcome DeleteBucketCors(const Model::DeleteBucketCorsRequest& request) const;
+
+ /**
+ * <p>Deletes the <code>cors</code> configuration information set for the
+ * bucket.</p> <p>To use this operation, you must have permission to perform the
+ * <code>s3:PutBucketCORS</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. </p> <p>For information about
+ * <code>cors</code>, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p class="title"> <b>Related Resources:</b> </p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html">PutBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html">RESTOPTIONSobject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCors">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketCorsOutcomeCallable DeleteBucketCorsCallable(const Model::DeleteBucketCorsRequest& request) const;
+
+ /**
+ * <p>Deletes the <code>cors</code> configuration information set for the
+ * bucket.</p> <p>To use this operation, you must have permission to perform the
+ * <code>s3:PutBucketCORS</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. </p> <p>For information about
+ * <code>cors</code>, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p class="title"> <b>Related Resources:</b> </p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html">PutBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html">RESTOPTIONSobject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCors">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketCorsAsync(const Model::DeleteBucketCorsRequest& request, const DeleteBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This implementation of the DELETE operation removes default encryption from
+ * the bucket. For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:PutEncryptionConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html">PutBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html">GetBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryption">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketEncryptionOutcome DeleteBucketEncryption(const Model::DeleteBucketEncryptionRequest& request) const;
+
+ /**
+ * <p>This implementation of the DELETE operation removes default encryption from
+ * the bucket. For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:PutEncryptionConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html">PutBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html">GetBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryption">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketEncryptionOutcomeCallable DeleteBucketEncryptionCallable(const Model::DeleteBucketEncryptionRequest& request) const;
+
+ /**
+ * <p>This implementation of the DELETE operation removes default encryption from
+ * the bucket. For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:PutEncryptionConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html">PutBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html">GetBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryption">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketEncryptionAsync(const Model::DeleteBucketEncryptionRequest& request, const DeleteBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes the S3 Intelligent-Tiering configuration from the specified
+ * bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize
+ * storage costs by automatically moving data to the most cost-effective storage
+ * access tier, without additional operational overhead. S3 Intelligent-Tiering
+ * delivers automatic cost savings by moving data between access tiers, when access
+ * patterns change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for
+ * objects larger than 128 KB that you plan to store for at least 30 days. If the
+ * size of an object is less than 128 KB, it is not eligible for auto-tiering.
+ * Smaller objects can be stored, but they are always charged at the frequent
+ * access tier rates in the S3 Intelligent-Tiering storage class. </p> <p>If you
+ * delete an object before the end of the 30-day minimum storage duration period,
+ * you are charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>DeleteBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketIntelligentTieringConfigurationOutcome DeleteBucketIntelligentTieringConfiguration(const Model::DeleteBucketIntelligentTieringConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes the S3 Intelligent-Tiering configuration from the specified
+ * bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize
+ * storage costs by automatically moving data to the most cost-effective storage
+ * access tier, without additional operational overhead. S3 Intelligent-Tiering
+ * delivers automatic cost savings by moving data between access tiers, when access
+ * patterns change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for
+ * objects larger than 128 KB that you plan to store for at least 30 days. If the
+ * size of an object is less than 128 KB, it is not eligible for auto-tiering.
+ * Smaller objects can be stored, but they are always charged at the frequent
+ * access tier rates in the S3 Intelligent-Tiering storage class. </p> <p>If you
+ * delete an object before the end of the 30-day minimum storage duration period,
+ * you are charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>DeleteBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketIntelligentTieringConfigurationOutcomeCallable DeleteBucketIntelligentTieringConfigurationCallable(const Model::DeleteBucketIntelligentTieringConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes the S3 Intelligent-Tiering configuration from the specified
+ * bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize
+ * storage costs by automatically moving data to the most cost-effective storage
+ * access tier, without additional operational overhead. S3 Intelligent-Tiering
+ * delivers automatic cost savings by moving data between access tiers, when access
+ * patterns change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for
+ * objects larger than 128 KB that you plan to store for at least 30 days. If the
+ * size of an object is less than 128 KB, it is not eligible for auto-tiering.
+ * Smaller objects can be stored, but they are always charged at the frequent
+ * access tier rates in the S3 Intelligent-Tiering storage class. </p> <p>If you
+ * delete an object before the end of the 30-day minimum storage duration period,
+ * you are charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>DeleteBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketIntelligentTieringConfigurationAsync(const Model::DeleteBucketIntelligentTieringConfigurationRequest& request, const DeleteBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes an inventory configuration (identified by the inventory ID) from the
+ * bucket.</p> <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a>.</p> <p>Operations related to
+ * <code>DeleteBucketInventoryConfiguration</code> include: </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketInventoryConfigurationOutcome DeleteBucketInventoryConfiguration(const Model::DeleteBucketInventoryConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes an inventory configuration (identified by the inventory ID) from the
+ * bucket.</p> <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a>.</p> <p>Operations related to
+ * <code>DeleteBucketInventoryConfiguration</code> include: </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketInventoryConfigurationOutcomeCallable DeleteBucketInventoryConfigurationCallable(const Model::DeleteBucketInventoryConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes an inventory configuration (identified by the inventory ID) from the
+ * bucket.</p> <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a>.</p> <p>Operations related to
+ * <code>DeleteBucketInventoryConfiguration</code> include: </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketInventoryConfigurationAsync(const Model::DeleteBucketInventoryConfigurationRequest& request, const DeleteBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes the lifecycle configuration from the specified bucket. Amazon S3
+ * removes all the lifecycle configuration rules in the lifecycle subresource
+ * associated with the bucket. Your objects never expire, and Amazon S3 no longer
+ * automatically deletes any objects on the basis of rules contained in the deleted
+ * lifecycle configuration.</p> <p>To use this operation, you must have permission
+ * to perform the <code>s3:PutLifecycleConfiguration</code> action. By default, the
+ * bucket owner has this permission and the bucket owner can grant this permission
+ * to others.</p> <p>There is usually some time lag before lifecycle configuration
+ * deletion is fully propagated to all the Amazon S3 systems.</p> <p>For more
+ * information about the object expiration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions">Elements
+ * to Describe Lifecycle Actions</a>.</p> <p>Related actions include:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycle">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketLifecycleOutcome DeleteBucketLifecycle(const Model::DeleteBucketLifecycleRequest& request) const;
+
+ /**
+ * <p>Deletes the lifecycle configuration from the specified bucket. Amazon S3
+ * removes all the lifecycle configuration rules in the lifecycle subresource
+ * associated with the bucket. Your objects never expire, and Amazon S3 no longer
+ * automatically deletes any objects on the basis of rules contained in the deleted
+ * lifecycle configuration.</p> <p>To use this operation, you must have permission
+ * to perform the <code>s3:PutLifecycleConfiguration</code> action. By default, the
+ * bucket owner has this permission and the bucket owner can grant this permission
+ * to others.</p> <p>There is usually some time lag before lifecycle configuration
+ * deletion is fully propagated to all the Amazon S3 systems.</p> <p>For more
+ * information about the object expiration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions">Elements
+ * to Describe Lifecycle Actions</a>.</p> <p>Related actions include:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycle">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketLifecycleOutcomeCallable DeleteBucketLifecycleCallable(const Model::DeleteBucketLifecycleRequest& request) const;
+
+ /**
+ * <p>Deletes the lifecycle configuration from the specified bucket. Amazon S3
+ * removes all the lifecycle configuration rules in the lifecycle subresource
+ * associated with the bucket. Your objects never expire, and Amazon S3 no longer
+ * automatically deletes any objects on the basis of rules contained in the deleted
+ * lifecycle configuration.</p> <p>To use this operation, you must have permission
+ * to perform the <code>s3:PutLifecycleConfiguration</code> action. By default, the
+ * bucket owner has this permission and the bucket owner can grant this permission
+ * to others.</p> <p>There is usually some time lag before lifecycle configuration
+ * deletion is fully propagated to all the Amazon S3 systems.</p> <p>For more
+ * information about the object expiration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions">Elements
+ * to Describe Lifecycle Actions</a>.</p> <p>Related actions include:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycle">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketLifecycleAsync(const Model::DeleteBucketLifecycleRequest& request, const DeleteBucketLifecycleResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes a metrics configuration for the Amazon CloudWatch request metrics
+ * (specified by the metrics configuration ID) from the bucket. Note that this
+ * doesn't include the daily storage metrics.</p> <p> To use this operation, you
+ * must have permissions to perform the <code>s3:PutMetricsConfiguration</code>
+ * action. The bucket owner has this permission by default. The bucket owner can
+ * grant this permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>. </p> <p>The following operations are related
+ * to <code>DeleteBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html">GetBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketMetricsConfigurationOutcome DeleteBucketMetricsConfiguration(const Model::DeleteBucketMetricsConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes a metrics configuration for the Amazon CloudWatch request metrics
+ * (specified by the metrics configuration ID) from the bucket. Note that this
+ * doesn't include the daily storage metrics.</p> <p> To use this operation, you
+ * must have permissions to perform the <code>s3:PutMetricsConfiguration</code>
+ * action. The bucket owner has this permission by default. The bucket owner can
+ * grant this permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>. </p> <p>The following operations are related
+ * to <code>DeleteBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html">GetBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketMetricsConfigurationOutcomeCallable DeleteBucketMetricsConfigurationCallable(const Model::DeleteBucketMetricsConfigurationRequest& request) const;
+
+ /**
+ * <p>Deletes a metrics configuration for the Amazon CloudWatch request metrics
+ * (specified by the metrics configuration ID) from the bucket. Note that this
+ * doesn't include the daily storage metrics.</p> <p> To use this operation, you
+ * must have permissions to perform the <code>s3:PutMetricsConfiguration</code>
+ * action. The bucket owner has this permission by default. The bucket owner can
+ * grant this permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>. </p> <p>The following operations are related
+ * to <code>DeleteBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html">GetBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketMetricsConfigurationAsync(const Model::DeleteBucketMetricsConfigurationRequest& request, const DeleteBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Removes <code>OwnershipControls</code> for an Amazon S3 bucket. To use this
+ * operation, you must have the <code>s3:PutBucketOwnershipControls</code>
+ * permission. For more information about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>DeleteBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>GetBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>PutBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketOwnershipControlsOutcome DeleteBucketOwnershipControls(const Model::DeleteBucketOwnershipControlsRequest& request) const;
+
+ /**
+ * <p>Removes <code>OwnershipControls</code> for an Amazon S3 bucket. To use this
+ * operation, you must have the <code>s3:PutBucketOwnershipControls</code>
+ * permission. For more information about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>DeleteBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>GetBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>PutBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketOwnershipControlsOutcomeCallable DeleteBucketOwnershipControlsCallable(const Model::DeleteBucketOwnershipControlsRequest& request) const;
+
+ /**
+ * <p>Removes <code>OwnershipControls</code> for an Amazon S3 bucket. To use this
+ * operation, you must have the <code>s3:PutBucketOwnershipControls</code>
+ * permission. For more information about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>DeleteBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>GetBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>PutBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketOwnershipControlsAsync(const Model::DeleteBucketOwnershipControlsRequest& request, const DeleteBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This implementation of the DELETE operation uses the policy subresource to
+ * delete the policy of a specified bucket. If you are using an identity other than
+ * the root user of the AWS account that owns the bucket, the calling identity must
+ * have the <code>DeleteBucketPolicy</code> permissions on the specified bucket and
+ * belong to the bucket owner's account to use this operation. </p> <p>If you don't
+ * have <code>DeleteBucketPolicy</code> permissions, Amazon S3 returns a <code>403
+ * Access Denied</code> error. If you have the correct permissions, but you're not
+ * using an identity that belongs to the bucket owner's account, Amazon S3 returns
+ * a <code>405 Method Not Allowed</code> error. </p> <p>As a security
+ * precaution, the root user of the AWS account that owns a bucket can always use
+ * this operation, even if the policy explicitly denies the root user the ability
+ * to perform this action.</p> <p>For more information about bucket
+ * policies, see <a href="
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and UserPolicies</a>. </p> <p>The following operations are
+ * related to <code>DeleteBucketPolicy</code> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicy">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketPolicyOutcome DeleteBucketPolicy(const Model::DeleteBucketPolicyRequest& request) const;
+
+ /**
+ * <p>This implementation of the DELETE operation uses the policy subresource to
+ * delete the policy of a specified bucket. If you are using an identity other than
+ * the root user of the AWS account that owns the bucket, the calling identity must
+ * have the <code>DeleteBucketPolicy</code> permissions on the specified bucket and
+ * belong to the bucket owner's account to use this operation. </p> <p>If you don't
+ * have <code>DeleteBucketPolicy</code> permissions, Amazon S3 returns a <code>403
+ * Access Denied</code> error. If you have the correct permissions, but you're not
+ * using an identity that belongs to the bucket owner's account, Amazon S3 returns
+ * a <code>405 Method Not Allowed</code> error. </p> <p>As a security
+ * precaution, the root user of the AWS account that owns a bucket can always use
+ * this operation, even if the policy explicitly denies the root user the ability
+ * to perform this action.</p> <p>For more information about bucket
+ * policies, see <a href="
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and UserPolicies</a>. </p> <p>The following operations are
+ * related to <code>DeleteBucketPolicy</code> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicy">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketPolicyOutcomeCallable DeleteBucketPolicyCallable(const Model::DeleteBucketPolicyRequest& request) const;
+
+ /**
+ * <p>This implementation of the DELETE operation uses the policy subresource to
+ * delete the policy of a specified bucket. If you are using an identity other than
+ * the root user of the AWS account that owns the bucket, the calling identity must
+ * have the <code>DeleteBucketPolicy</code> permissions on the specified bucket and
+ * belong to the bucket owner's account to use this operation. </p> <p>If you don't
+ * have <code>DeleteBucketPolicy</code> permissions, Amazon S3 returns a <code>403
+ * Access Denied</code> error. If you have the correct permissions, but you're not
+ * using an identity that belongs to the bucket owner's account, Amazon S3 returns
+ * a <code>405 Method Not Allowed</code> error. </p> <p>As a security
+ * precaution, the root user of the AWS account that owns a bucket can always use
+ * this operation, even if the policy explicitly denies the root user the ability
+ * to perform this action.</p> <p>For more information about bucket
+ * policies, see <a href="
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and UserPolicies</a>. </p> <p>The following operations are
+ * related to <code>DeleteBucketPolicy</code> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicy">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketPolicyAsync(const Model::DeleteBucketPolicyRequest& request, const DeleteBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p> Deletes the replication configuration from the bucket.</p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutReplicationConfiguration</code> action. The bucket owner has these
+ * permissions by default and can grant it to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>. </p> <p>It can take a
+ * while for the deletion of a replication configuration to fully propagate.</p>
+ * <p> For information about replication configuration, see <a href="
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon S3 Developer Guide</i>. </p> <p>The following operations are
+ * related to <code>DeleteBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html">PutBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html">GetBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplication">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketReplicationOutcome DeleteBucketReplication(const Model::DeleteBucketReplicationRequest& request) const;
+
+ /**
+ * <p> Deletes the replication configuration from the bucket.</p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutReplicationConfiguration</code> action. The bucket owner has these
+ * permissions by default and can grant it to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>. </p> <p>It can take a
+ * while for the deletion of a replication configuration to fully propagate.</p>
+ * <p> For information about replication configuration, see <a href="
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon S3 Developer Guide</i>. </p> <p>The following operations are
+ * related to <code>DeleteBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html">PutBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html">GetBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplication">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketReplicationOutcomeCallable DeleteBucketReplicationCallable(const Model::DeleteBucketReplicationRequest& request) const;
+
+ /**
+ * <p> Deletes the replication configuration from the bucket.</p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutReplicationConfiguration</code> action. The bucket owner has these
+ * permissions by default and can grant it to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>. </p> <p>It can take a
+ * while for the deletion of a replication configuration to fully propagate.</p>
+ * <p> For information about replication configuration, see <a href="
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon S3 Developer Guide</i>. </p> <p>The following operations are
+ * related to <code>DeleteBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html">PutBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html">GetBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplication">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketReplicationAsync(const Model::DeleteBucketReplicationRequest& request, const DeleteBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Deletes the tags from the bucket.</p> <p>To use this operation, you must have
+ * permission to perform the <code>s3:PutBucketTagging</code> action. By default,
+ * the bucket owner has this permission and can grant this permission to others.
+ * </p> <p>The following operations are related to
+ * <code>DeleteBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html">GetBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html">PutBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTagging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketTaggingOutcome DeleteBucketTagging(const Model::DeleteBucketTaggingRequest& request) const;
+
+ /**
+ * <p>Deletes the tags from the bucket.</p> <p>To use this operation, you must have
+ * permission to perform the <code>s3:PutBucketTagging</code> action. By default,
+ * the bucket owner has this permission and can grant this permission to others.
+ * </p> <p>The following operations are related to
+ * <code>DeleteBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html">GetBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html">PutBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTagging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketTaggingOutcomeCallable DeleteBucketTaggingCallable(const Model::DeleteBucketTaggingRequest& request) const;
+
+ /**
+ * <p>Deletes the tags from the bucket.</p> <p>To use this operation, you must have
+ * permission to perform the <code>s3:PutBucketTagging</code> action. By default,
+ * the bucket owner has this permission and can grant this permission to others.
+ * </p> <p>The following operations are related to
+ * <code>DeleteBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html">GetBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html">PutBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTagging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketTaggingAsync(const Model::DeleteBucketTaggingRequest& request, const DeleteBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This operation removes the website configuration for a bucket. Amazon S3
+ * returns a <code>200 OK</code> response upon successfully deleting a website
+ * configuration on the specified bucket. You will get a <code>200 OK</code>
+ * response if the website configuration you are trying to delete does not exist on
+ * the bucket. Amazon S3 returns a <code>404</code> response if the bucket
+ * specified in the request does not exist.</p> <p>This DELETE operation requires
+ * the <code>S3:DeleteBucketWebsite</code> permission. By default, only the bucket
+ * owner can delete the website configuration attached to a bucket. However, bucket
+ * owners can grant other users permission to delete the website configuration by
+ * writing a bucket policy granting them the <code>S3:DeleteBucketWebsite</code>
+ * permission. </p> <p>For more information about hosting websites, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>. </p> <p>The following operations are related to
+ * <code>DeleteBucketWebsite</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html">GetBucketWebsite</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html">PutBucketWebsite</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsite">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteBucketWebsiteOutcome DeleteBucketWebsite(const Model::DeleteBucketWebsiteRequest& request) const;
+
+ /**
+ * <p>This operation removes the website configuration for a bucket. Amazon S3
+ * returns a <code>200 OK</code> response upon successfully deleting a website
+ * configuration on the specified bucket. You will get a <code>200 OK</code>
+ * response if the website configuration you are trying to delete does not exist on
+ * the bucket. Amazon S3 returns a <code>404</code> response if the bucket
+ * specified in the request does not exist.</p> <p>This DELETE operation requires
+ * the <code>S3:DeleteBucketWebsite</code> permission. By default, only the bucket
+ * owner can delete the website configuration attached to a bucket. However, bucket
+ * owners can grant other users permission to delete the website configuration by
+ * writing a bucket policy granting them the <code>S3:DeleteBucketWebsite</code>
+ * permission. </p> <p>For more information about hosting websites, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>. </p> <p>The following operations are related to
+ * <code>DeleteBucketWebsite</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html">GetBucketWebsite</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html">PutBucketWebsite</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsite">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteBucketWebsiteOutcomeCallable DeleteBucketWebsiteCallable(const Model::DeleteBucketWebsiteRequest& request) const;
+
+ /**
+ * <p>This operation removes the website configuration for a bucket. Amazon S3
+ * returns a <code>200 OK</code> response upon successfully deleting a website
+ * configuration on the specified bucket. You will get a <code>200 OK</code>
+ * response if the website configuration you are trying to delete does not exist on
+ * the bucket. Amazon S3 returns a <code>404</code> response if the bucket
+ * specified in the request does not exist.</p> <p>This DELETE operation requires
+ * the <code>S3:DeleteBucketWebsite</code> permission. By default, only the bucket
+ * owner can delete the website configuration attached to a bucket. However, bucket
+ * owners can grant other users permission to delete the website configuration by
+ * writing a bucket policy granting them the <code>S3:DeleteBucketWebsite</code>
+ * permission. </p> <p>For more information about hosting websites, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>. </p> <p>The following operations are related to
+ * <code>DeleteBucketWebsite</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html">GetBucketWebsite</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html">PutBucketWebsite</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsite">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteBucketWebsiteAsync(const Model::DeleteBucketWebsiteRequest& request, const DeleteBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Removes the null version (if there is one) of an object and inserts a delete
+ * marker, which becomes the latest version of the object. If there isn't a null
+ * version, Amazon S3 does not remove any objects.</p> <p>To remove a specific
+ * version, you must be the bucket owner and you must use the version Id
+ * subresource. Using this subresource permanently deletes the version. If the
+ * object deleted is a delete marker, Amazon S3 sets the response header,
+ * <code>x-amz-delete-marker</code>, to true. </p> <p>If the object you want to
+ * delete is in a bucket where the bucket versioning configuration is MFA Delete
+ * enabled, you must include the <code>x-amz-mfa</code> request header in the
+ * DELETE <code>versionId</code> request. Requests that include
+ * <code>x-amz-mfa</code> must use HTTPS. </p> <p> For more information about MFA
+ * Delete, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html">Using
+ * MFA Delete</a>. To see sample requests that use versioning, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html#ExampleVersionObjectDelete">Sample
+ * Request</a>. </p> <p>You can delete objects by explicitly calling the DELETE
+ * Object API or configure its lifecycle (<a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>)
+ * to enable Amazon S3 to remove them for you. If you want to block users or
+ * accounts from removing or deleting objects from your bucket, you must deny them
+ * the <code>s3:DeleteObject</code>, <code>s3:DeleteObjectVersion</code>, and
+ * <code>s3:PutLifeCycleConfiguration</code> actions. </p> <p>The following
+ * operation is related to <code>DeleteObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObject">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::DeleteObjectOutcome DeleteObject(const Model::DeleteObjectRequest& request) const;
+
+ /**
+ * <p>Removes the null version (if there is one) of an object and inserts a delete
+ * marker, which becomes the latest version of the object. If there isn't a null
+ * version, Amazon S3 does not remove any objects.</p> <p>To remove a specific
+ * version, you must be the bucket owner and you must use the version Id
+ * subresource. Using this subresource permanently deletes the version. If the
+ * object deleted is a delete marker, Amazon S3 sets the response header,
+ * <code>x-amz-delete-marker</code>, to true. </p> <p>If the object you want to
+ * delete is in a bucket where the bucket versioning configuration is MFA Delete
+ * enabled, you must include the <code>x-amz-mfa</code> request header in the
+ * DELETE <code>versionId</code> request. Requests that include
+ * <code>x-amz-mfa</code> must use HTTPS. </p> <p> For more information about MFA
+ * Delete, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html">Using
+ * MFA Delete</a>. To see sample requests that use versioning, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html#ExampleVersionObjectDelete">Sample
+ * Request</a>. </p> <p>You can delete objects by explicitly calling the DELETE
+ * Object API or configure its lifecycle (<a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>)
+ * to enable Amazon S3 to remove them for you. If you want to block users or
+ * accounts from removing or deleting objects from your bucket, you must deny them
+ * the <code>s3:DeleteObject</code>, <code>s3:DeleteObjectVersion</code>, and
+ * <code>s3:PutLifeCycleConfiguration</code> actions. </p> <p>The following
+ * operation is related to <code>DeleteObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObject">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteObjectOutcomeCallable DeleteObjectCallable(const Model::DeleteObjectRequest& request) const;
+
+ /**
+ * <p>Removes the null version (if there is one) of an object and inserts a delete
+ * marker, which becomes the latest version of the object. If there isn't a null
+ * version, Amazon S3 does not remove any objects.</p> <p>To remove a specific
+ * version, you must be the bucket owner and you must use the version Id
+ * subresource. Using this subresource permanently deletes the version. If the
+ * object deleted is a delete marker, Amazon S3 sets the response header,
+ * <code>x-amz-delete-marker</code>, to true. </p> <p>If the object you want to
+ * delete is in a bucket where the bucket versioning configuration is MFA Delete
+ * enabled, you must include the <code>x-amz-mfa</code> request header in the
+ * DELETE <code>versionId</code> request. Requests that include
+ * <code>x-amz-mfa</code> must use HTTPS. </p> <p> For more information about MFA
+ * Delete, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html">Using
+ * MFA Delete</a>. To see sample requests that use versioning, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html#ExampleVersionObjectDelete">Sample
+ * Request</a>. </p> <p>You can delete objects by explicitly calling the DELETE
+ * Object API or configure its lifecycle (<a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>)
+ * to enable Amazon S3 to remove them for you. If you want to block users or
+ * accounts from removing or deleting objects from your bucket, you must deny them
+ * the <code>s3:DeleteObject</code>, <code>s3:DeleteObjectVersion</code>, and
+ * <code>s3:PutLifeCycleConfiguration</code> actions. </p> <p>The following
+ * operation is related to <code>DeleteObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObject">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteObjectAsync(const Model::DeleteObjectRequest& request, const DeleteObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Removes the entire tag set from the specified object. For more information
+ * about managing object tags, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">
+ * Object Tagging</a>.</p> <p>To use this operation, you must have permission to
+ * perform the <code>s3:DeleteObjectTagging</code> action.</p> <p>To delete tags of
+ * a specific object version, add the <code>versionId</code> query parameter in the
+ * request. You will need permission for the
+ * <code>s3:DeleteObjectVersionTagging</code> action.</p> <p>The following
+ * operations are related to <code>DeleteBucketMetricsConfiguration</code>:</p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html">PutObjectTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTagging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteObjectTaggingOutcome DeleteObjectTagging(const Model::DeleteObjectTaggingRequest& request) const;
+
+ /**
+ * <p>Removes the entire tag set from the specified object. For more information
+ * about managing object tags, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">
+ * Object Tagging</a>.</p> <p>To use this operation, you must have permission to
+ * perform the <code>s3:DeleteObjectTagging</code> action.</p> <p>To delete tags of
+ * a specific object version, add the <code>versionId</code> query parameter in the
+ * request. You will need permission for the
+ * <code>s3:DeleteObjectVersionTagging</code> action.</p> <p>The following
+ * operations are related to <code>DeleteBucketMetricsConfiguration</code>:</p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html">PutObjectTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTagging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteObjectTaggingOutcomeCallable DeleteObjectTaggingCallable(const Model::DeleteObjectTaggingRequest& request) const;
+
+ /**
+ * <p>Removes the entire tag set from the specified object. For more information
+ * about managing object tags, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">
+ * Object Tagging</a>.</p> <p>To use this operation, you must have permission to
+ * perform the <code>s3:DeleteObjectTagging</code> action.</p> <p>To delete tags of
+ * a specific object version, add the <code>versionId</code> query parameter in the
+ * request. You will need permission for the
+ * <code>s3:DeleteObjectVersionTagging</code> action.</p> <p>The following
+ * operations are related to <code>DeleteBucketMetricsConfiguration</code>:</p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html">PutObjectTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTagging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteObjectTaggingAsync(const Model::DeleteObjectTaggingRequest& request, const DeleteObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This operation enables you to delete multiple objects from a bucket using a
+ * single HTTP request. If you know the object keys that you want to delete, then
+ * this operation provides a suitable alternative to sending individual delete
+ * requests, reducing per-request overhead.</p> <p>The request contains a list of
+ * up to 1000 keys that you want to delete. In the XML, you provide the object key
+ * names, and optionally, version IDs if you want to delete a specific version of
+ * the object from a versioning-enabled bucket. For each key, Amazon S3 performs a
+ * delete operation and returns the result of that delete, success, or failure, in
+ * the response. Note that if the object specified in the request is not found,
+ * Amazon S3 returns the result as deleted.</p> <p> The operation supports two
+ * modes for the response: verbose and quiet. By default, the operation uses
+ * verbose mode in which the response includes the result of deletion of each key
+ * in your request. In quiet mode the response includes only keys where the delete
+ * operation encountered an error. For a successful deletion, the operation does
+ * not return any information about the delete in the response body.</p> <p>When
+ * performing this operation on an MFA Delete enabled bucket, that attempts to
+ * delete any versioned objects, you must include an MFA token. If you do not
+ * provide one, the entire request will fail, even if there are non-versioned
+ * objects you are trying to delete. If you provide an invalid token, whether there
+ * are versioned keys in the request or not, the entire Multi-Object Delete request
+ * will fail. For information about MFA Delete, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete">
+ * MFA Delete</a>.</p> <p>Finally, the Content-MD5 header is required for all
+ * Multi-Object Delete requests. Amazon S3 uses the header value to ensure that
+ * your request body has not been altered in transit.</p> <p>The following
+ * operations are related to <code>DeleteObjects</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjects">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeleteObjectsOutcome DeleteObjects(const Model::DeleteObjectsRequest& request) const;
+
+ /**
+ * <p>This operation enables you to delete multiple objects from a bucket using a
+ * single HTTP request. If you know the object keys that you want to delete, then
+ * this operation provides a suitable alternative to sending individual delete
+ * requests, reducing per-request overhead.</p> <p>The request contains a list of
+ * up to 1000 keys that you want to delete. In the XML, you provide the object key
+ * names, and optionally, version IDs if you want to delete a specific version of
+ * the object from a versioning-enabled bucket. For each key, Amazon S3 performs a
+ * delete operation and returns the result of that delete, success, or failure, in
+ * the response. Note that if the object specified in the request is not found,
+ * Amazon S3 returns the result as deleted.</p> <p> The operation supports two
+ * modes for the response: verbose and quiet. By default, the operation uses
+ * verbose mode in which the response includes the result of deletion of each key
+ * in your request. In quiet mode the response includes only keys where the delete
+ * operation encountered an error. For a successful deletion, the operation does
+ * not return any information about the delete in the response body.</p> <p>When
+ * performing this operation on an MFA Delete enabled bucket, that attempts to
+ * delete any versioned objects, you must include an MFA token. If you do not
+ * provide one, the entire request will fail, even if there are non-versioned
+ * objects you are trying to delete. If you provide an invalid token, whether there
+ * are versioned keys in the request or not, the entire Multi-Object Delete request
+ * will fail. For information about MFA Delete, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete">
+ * MFA Delete</a>.</p> <p>Finally, the Content-MD5 header is required for all
+ * Multi-Object Delete requests. Amazon S3 uses the header value to ensure that
+ * your request body has not been altered in transit.</p> <p>The following
+ * operations are related to <code>DeleteObjects</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjects">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeleteObjectsOutcomeCallable DeleteObjectsCallable(const Model::DeleteObjectsRequest& request) const;
+
+ /**
+ * <p>This operation enables you to delete multiple objects from a bucket using a
+ * single HTTP request. If you know the object keys that you want to delete, then
+ * this operation provides a suitable alternative to sending individual delete
+ * requests, reducing per-request overhead.</p> <p>The request contains a list of
+ * up to 1000 keys that you want to delete. In the XML, you provide the object key
+ * names, and optionally, version IDs if you want to delete a specific version of
+ * the object from a versioning-enabled bucket. For each key, Amazon S3 performs a
+ * delete operation and returns the result of that delete, success, or failure, in
+ * the response. Note that if the object specified in the request is not found,
+ * Amazon S3 returns the result as deleted.</p> <p> The operation supports two
+ * modes for the response: verbose and quiet. By default, the operation uses
+ * verbose mode in which the response includes the result of deletion of each key
+ * in your request. In quiet mode the response includes only keys where the delete
+ * operation encountered an error. For a successful deletion, the operation does
+ * not return any information about the delete in the response body.</p> <p>When
+ * performing this operation on an MFA Delete enabled bucket, that attempts to
+ * delete any versioned objects, you must include an MFA token. If you do not
+ * provide one, the entire request will fail, even if there are non-versioned
+ * objects you are trying to delete. If you provide an invalid token, whether there
+ * are versioned keys in the request or not, the entire Multi-Object Delete request
+ * will fail. For information about MFA Delete, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete">
+ * MFA Delete</a>.</p> <p>Finally, the Content-MD5 header is required for all
+ * Multi-Object Delete requests. Amazon S3 uses the header value to ensure that
+ * your request body has not been altered in transit.</p> <p>The following
+ * operations are related to <code>DeleteObjects</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjects">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeleteObjectsAsync(const Model::DeleteObjectsRequest& request, const DeleteObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Removes the <code>PublicAccessBlock</code> configuration for an Amazon S3
+ * bucket. To use this operation, you must have the
+ * <code>s3:PutBucketPublicAccessBlock</code> permission. For more information
+ * about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following
+ * operations are related to <code>DeletePublicAccessBlock</code>:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html">GetBucketPolicyStatus</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlock">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::DeletePublicAccessBlockOutcome DeletePublicAccessBlock(const Model::DeletePublicAccessBlockRequest& request) const;
+
+ /**
+ * <p>Removes the <code>PublicAccessBlock</code> configuration for an Amazon S3
+ * bucket. To use this operation, you must have the
+ * <code>s3:PutBucketPublicAccessBlock</code> permission. For more information
+ * about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following
+ * operations are related to <code>DeletePublicAccessBlock</code>:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html">GetBucketPolicyStatus</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlock">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::DeletePublicAccessBlockOutcomeCallable DeletePublicAccessBlockCallable(const Model::DeletePublicAccessBlockRequest& request) const;
+
+ /**
+ * <p>Removes the <code>PublicAccessBlock</code> configuration for an Amazon S3
+ * bucket. To use this operation, you must have the
+ * <code>s3:PutBucketPublicAccessBlock</code> permission. For more information
+ * about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following
+ * operations are related to <code>DeletePublicAccessBlock</code>:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html">GetBucketPolicyStatus</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlock">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void DeletePublicAccessBlockAsync(const Model::DeletePublicAccessBlockRequest& request, const DeletePublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This implementation of the GET operation uses the <code>accelerate</code>
+ * subresource to return the Transfer Acceleration state of a bucket, which is
+ * either <code>Enabled</code> or <code>Suspended</code>. Amazon S3 Transfer
+ * Acceleration is a bucket-level feature that enables you to perform faster data
+ * transfers to and from Amazon S3.</p> <p>To use this operation, you must have
+ * permission to perform the <code>s3:GetAccelerateConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p>You set the Transfer Acceleration
+ * state of an existing bucket to <code>Enabled</code> or <code>Suspended</code> by
+ * using the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html">PutBucketAccelerateConfiguration</a>
+ * operation. </p> <p>A GET <code>accelerate</code> request does not return a state
+ * value for a bucket that has no transfer acceleration state. A bucket has no
+ * Transfer Acceleration state if a state has never been set on the bucket. </p>
+ * <p>For more information about transfer acceleration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a> in the Amazon Simple Storage Service Developer Guide.</p> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html">PutBucketAccelerateConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketAccelerateConfigurationOutcome GetBucketAccelerateConfiguration(const Model::GetBucketAccelerateConfigurationRequest& request) const;
+
+ /**
+ * <p>This implementation of the GET operation uses the <code>accelerate</code>
+ * subresource to return the Transfer Acceleration state of a bucket, which is
+ * either <code>Enabled</code> or <code>Suspended</code>. Amazon S3 Transfer
+ * Acceleration is a bucket-level feature that enables you to perform faster data
+ * transfers to and from Amazon S3.</p> <p>To use this operation, you must have
+ * permission to perform the <code>s3:GetAccelerateConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p>You set the Transfer Acceleration
+ * state of an existing bucket to <code>Enabled</code> or <code>Suspended</code> by
+ * using the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html">PutBucketAccelerateConfiguration</a>
+ * operation. </p> <p>A GET <code>accelerate</code> request does not return a state
+ * value for a bucket that has no transfer acceleration state. A bucket has no
+ * Transfer Acceleration state if a state has never been set on the bucket. </p>
+ * <p>For more information about transfer acceleration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a> in the Amazon Simple Storage Service Developer Guide.</p> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html">PutBucketAccelerateConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketAccelerateConfigurationOutcomeCallable GetBucketAccelerateConfigurationCallable(const Model::GetBucketAccelerateConfigurationRequest& request) const;
+
+ /**
+ * <p>This implementation of the GET operation uses the <code>accelerate</code>
+ * subresource to return the Transfer Acceleration state of a bucket, which is
+ * either <code>Enabled</code> or <code>Suspended</code>. Amazon S3 Transfer
+ * Acceleration is a bucket-level feature that enables you to perform faster data
+ * transfers to and from Amazon S3.</p> <p>To use this operation, you must have
+ * permission to perform the <code>s3:GetAccelerateConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p>You set the Transfer Acceleration
+ * state of an existing bucket to <code>Enabled</code> or <code>Suspended</code> by
+ * using the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html">PutBucketAccelerateConfiguration</a>
+ * operation. </p> <p>A GET <code>accelerate</code> request does not return a state
+ * value for a bucket that has no transfer acceleration state. A bucket has no
+ * Transfer Acceleration state if a state has never been set on the bucket. </p>
+ * <p>For more information about transfer acceleration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a> in the Amazon Simple Storage Service Developer Guide.</p> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html">PutBucketAccelerateConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketAccelerateConfigurationAsync(const Model::GetBucketAccelerateConfigurationRequest& request, const GetBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This implementation of the <code>GET</code> operation uses the
+ * <code>acl</code> subresource to return the access control list (ACL) of a
+ * bucket. To use <code>GET</code> to return the ACL of the bucket, you must have
+ * <code>READ_ACP</code> access to the bucket. If <code>READ_ACP</code> permission
+ * is granted to the anonymous user, you can return the ACL of the bucket without
+ * using an authorization header.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAcl">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::GetBucketAclOutcome GetBucketAcl(const Model::GetBucketAclRequest& request) const;
+
+ /**
+ * <p>This implementation of the <code>GET</code> operation uses the
+ * <code>acl</code> subresource to return the access control list (ACL) of a
+ * bucket. To use <code>GET</code> to return the ACL of the bucket, you must have
+ * <code>READ_ACP</code> access to the bucket. If <code>READ_ACP</code> permission
+ * is granted to the anonymous user, you can return the ACL of the bucket without
+ * using an authorization header.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAcl">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketAclOutcomeCallable GetBucketAclCallable(const Model::GetBucketAclRequest& request) const;
+
+ /**
+ * <p>This implementation of the <code>GET</code> operation uses the
+ * <code>acl</code> subresource to return the access control list (ACL) of a
+ * bucket. To use <code>GET</code> to return the ACL of the bucket, you must have
+ * <code>READ_ACP</code> access to the bucket. If <code>READ_ACP</code> permission
+ * is granted to the anonymous user, you can return the ACL of the bucket without
+ * using an authorization header.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAcl">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketAclAsync(const Model::GetBucketAclRequest& request, const GetBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This implementation of the GET operation returns an analytics configuration
+ * (identified by the analytics configuration ID) from the bucket.</p> <p>To use
+ * this operation, you must have permissions to perform the
+ * <code>s3:GetAnalyticsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">
+ * Permissions Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>For information about Amazon S3
+ * analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a> in the <i>Amazon Simple Storage
+ * Service Developer Guide</i>.</p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketAnalyticsConfigurationOutcome GetBucketAnalyticsConfiguration(const Model::GetBucketAnalyticsConfigurationRequest& request) const;
+
+ /**
+ * <p>This implementation of the GET operation returns an analytics configuration
+ * (identified by the analytics configuration ID) from the bucket.</p> <p>To use
+ * this operation, you must have permissions to perform the
+ * <code>s3:GetAnalyticsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">
+ * Permissions Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>For information about Amazon S3
+ * analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a> in the <i>Amazon Simple Storage
+ * Service Developer Guide</i>.</p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketAnalyticsConfigurationOutcomeCallable GetBucketAnalyticsConfigurationCallable(const Model::GetBucketAnalyticsConfigurationRequest& request) const;
+
+ /**
+ * <p>This implementation of the GET operation returns an analytics configuration
+ * (identified by the analytics configuration ID) from the bucket.</p> <p>To use
+ * this operation, you must have permissions to perform the
+ * <code>s3:GetAnalyticsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">
+ * Permissions Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>For information about Amazon S3
+ * analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a> in the <i>Amazon Simple Storage
+ * Service Developer Guide</i>.</p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketAnalyticsConfigurationAsync(const Model::GetBucketAnalyticsConfigurationRequest& request, const GetBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the cors configuration information set for the bucket.</p> <p> To use
+ * this operation, you must have permission to perform the s3:GetBucketCORS action.
+ * By default, the bucket owner has this permission and can grant it to others.</p>
+ * <p> For more information about cors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html"> Enabling
+ * Cross-Origin Resource Sharing</a>.</p> <p>The following operations are related
+ * to <code>GetBucketCors</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html">PutBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html">DeleteBucketCors</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCors">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketCorsOutcome GetBucketCors(const Model::GetBucketCorsRequest& request) const;
+
+ /**
+ * <p>Returns the cors configuration information set for the bucket.</p> <p> To use
+ * this operation, you must have permission to perform the s3:GetBucketCORS action.
+ * By default, the bucket owner has this permission and can grant it to others.</p>
+ * <p> For more information about cors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html"> Enabling
+ * Cross-Origin Resource Sharing</a>.</p> <p>The following operations are related
+ * to <code>GetBucketCors</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html">PutBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html">DeleteBucketCors</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCors">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketCorsOutcomeCallable GetBucketCorsCallable(const Model::GetBucketCorsRequest& request) const;
+
+ /**
+ * <p>Returns the cors configuration information set for the bucket.</p> <p> To use
+ * this operation, you must have permission to perform the s3:GetBucketCORS action.
+ * By default, the bucket owner has this permission and can grant it to others.</p>
+ * <p> For more information about cors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html"> Enabling
+ * Cross-Origin Resource Sharing</a>.</p> <p>The following operations are related
+ * to <code>GetBucketCors</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html">PutBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html">DeleteBucketCors</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCors">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketCorsAsync(const Model::GetBucketCorsRequest& request, const GetBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the default encryption configuration for an Amazon S3 bucket. For
+ * information about the Amazon S3 default encryption feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a>.</p> <p> To use this operation, you must have
+ * permission to perform the <code>s3:GetEncryptionConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following
+ * operations are related to <code>GetBucketEncryption</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html">PutBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html">DeleteBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryption">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketEncryptionOutcome GetBucketEncryption(const Model::GetBucketEncryptionRequest& request) const;
+
+ /**
+ * <p>Returns the default encryption configuration for an Amazon S3 bucket. For
+ * information about the Amazon S3 default encryption feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a>.</p> <p> To use this operation, you must have
+ * permission to perform the <code>s3:GetEncryptionConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following
+ * operations are related to <code>GetBucketEncryption</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html">PutBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html">DeleteBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryption">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketEncryptionOutcomeCallable GetBucketEncryptionCallable(const Model::GetBucketEncryptionRequest& request) const;
+
+ /**
+ * <p>Returns the default encryption configuration for an Amazon S3 bucket. For
+ * information about the Amazon S3 default encryption feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a>.</p> <p> To use this operation, you must have
+ * permission to perform the <code>s3:GetEncryptionConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following
+ * operations are related to <code>GetBucketEncryption</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html">PutBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html">DeleteBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryption">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketEncryptionAsync(const Model::GetBucketEncryptionRequest& request, const GetBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Gets the S3 Intelligent-Tiering configuration from the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>GetBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketIntelligentTieringConfigurationOutcome GetBucketIntelligentTieringConfiguration(const Model::GetBucketIntelligentTieringConfigurationRequest& request) const;
+
+ /**
+ * <p>Gets the S3 Intelligent-Tiering configuration from the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>GetBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketIntelligentTieringConfigurationOutcomeCallable GetBucketIntelligentTieringConfigurationCallable(const Model::GetBucketIntelligentTieringConfigurationRequest& request) const;
+
+ /**
+ * <p>Gets the S3 Intelligent-Tiering configuration from the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>GetBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketIntelligentTieringConfigurationAsync(const Model::GetBucketIntelligentTieringConfigurationRequest& request, const GetBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns an inventory configuration (identified by the inventory configuration
+ * ID) from the bucket.</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner
+ * has this permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a>.</p> <p>The following operations are related to
+ * <code>GetBucketInventoryConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketInventoryConfigurationOutcome GetBucketInventoryConfiguration(const Model::GetBucketInventoryConfigurationRequest& request) const;
+
+ /**
+ * <p>Returns an inventory configuration (identified by the inventory configuration
+ * ID) from the bucket.</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner
+ * has this permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a>.</p> <p>The following operations are related to
+ * <code>GetBucketInventoryConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketInventoryConfigurationOutcomeCallable GetBucketInventoryConfigurationCallable(const Model::GetBucketInventoryConfigurationRequest& request) const;
+
+ /**
+ * <p>Returns an inventory configuration (identified by the inventory configuration
+ * ID) from the bucket.</p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner
+ * has this permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a>.</p> <p>The following operations are related to
+ * <code>GetBucketInventoryConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketInventoryConfigurationAsync(const Model::GetBucketInventoryConfigurationRequest& request, const GetBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Bucket lifecycle configuration now supports specifying a lifecycle
+ * rule using an object key name prefix, one or more object tags, or a combination
+ * of both. Accordingly, this section describes the latest API. The response
+ * describes the new filter element that you can use to specify a filter to select
+ * a subset of objects to which the rule applies. If you are using a previous
+ * version of the lifecycle configuration, it still works. For the earlier API
+ * description, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html">GetBucketLifecycle</a>.</p>
+ * <p>Returns the lifecycle configuration information set on the bucket.
+ * For information about lifecycle configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a>.</p> <p>To use this operation, you must have permission
+ * to perform the <code>s3:GetLifecycleConfiguration</code> action. The bucket
+ * owner has this permission, by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>
+ * <code>GetBucketLifecycleConfiguration</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code>
+ * </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p>
+ * </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code
+ * Prefix: Client</p> </li> </ul> </li> </ul> <p>The following operations are
+ * related to <code>GetBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html">GetBucketLifecycle</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html">DeleteBucketLifecycle</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketLifecycleConfigurationOutcome GetBucketLifecycleConfiguration(const Model::GetBucketLifecycleConfigurationRequest& request) const;
+
+ /**
+ * <p>Bucket lifecycle configuration now supports specifying a lifecycle
+ * rule using an object key name prefix, one or more object tags, or a combination
+ * of both. Accordingly, this section describes the latest API. The response
+ * describes the new filter element that you can use to specify a filter to select
+ * a subset of objects to which the rule applies. If you are using a previous
+ * version of the lifecycle configuration, it still works. For the earlier API
+ * description, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html">GetBucketLifecycle</a>.</p>
+ * <p>Returns the lifecycle configuration information set on the bucket.
+ * For information about lifecycle configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a>.</p> <p>To use this operation, you must have permission
+ * to perform the <code>s3:GetLifecycleConfiguration</code> action. The bucket
+ * owner has this permission, by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>
+ * <code>GetBucketLifecycleConfiguration</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code>
+ * </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p>
+ * </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code
+ * Prefix: Client</p> </li> </ul> </li> </ul> <p>The following operations are
+ * related to <code>GetBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html">GetBucketLifecycle</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html">DeleteBucketLifecycle</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketLifecycleConfigurationOutcomeCallable GetBucketLifecycleConfigurationCallable(const Model::GetBucketLifecycleConfigurationRequest& request) const;
+
+ /**
+ * <p>Bucket lifecycle configuration now supports specifying a lifecycle
+ * rule using an object key name prefix, one or more object tags, or a combination
+ * of both. Accordingly, this section describes the latest API. The response
+ * describes the new filter element that you can use to specify a filter to select
+ * a subset of objects to which the rule applies. If you are using a previous
+ * version of the lifecycle configuration, it still works. For the earlier API
+ * description, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html">GetBucketLifecycle</a>.</p>
+ * <p>Returns the lifecycle configuration information set on the bucket.
+ * For information about lifecycle configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a>.</p> <p>To use this operation, you must have permission
+ * to perform the <code>s3:GetLifecycleConfiguration</code> action. The bucket
+ * owner has this permission, by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>
+ * <code>GetBucketLifecycleConfiguration</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code>
+ * </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p>
+ * </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code
+ * Prefix: Client</p> </li> </ul> </li> </ul> <p>The following operations are
+ * related to <code>GetBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html">GetBucketLifecycle</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html">DeleteBucketLifecycle</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketLifecycleConfigurationAsync(const Model::GetBucketLifecycleConfigurationRequest& request, const GetBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the Region the bucket resides in. You set the bucket's Region using
+ * the <code>LocationConstraint</code> request parameter in a
+ * <code>CreateBucket</code> request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>.</p>
+ * <p> To use this implementation of the operation, you must be the bucket
+ * owner.</p> <p>The following operations are related to
+ * <code>GetBucketLocation</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocation">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketLocationOutcome GetBucketLocation(const Model::GetBucketLocationRequest& request) const;
+
+ /**
+ * <p>Returns the Region the bucket resides in. You set the bucket's Region using
+ * the <code>LocationConstraint</code> request parameter in a
+ * <code>CreateBucket</code> request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>.</p>
+ * <p> To use this implementation of the operation, you must be the bucket
+ * owner.</p> <p>The following operations are related to
+ * <code>GetBucketLocation</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocation">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketLocationOutcomeCallable GetBucketLocationCallable(const Model::GetBucketLocationRequest& request) const;
+
+ /**
+ * <p>Returns the Region the bucket resides in. You set the bucket's Region using
+ * the <code>LocationConstraint</code> request parameter in a
+ * <code>CreateBucket</code> request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>.</p>
+ * <p> To use this implementation of the operation, you must be the bucket
+ * owner.</p> <p>The following operations are related to
+ * <code>GetBucketLocation</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocation">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketLocationAsync(const Model::GetBucketLocationRequest& request, const GetBucketLocationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the logging status of a bucket and the permissions users have to view
+ * and modify that status. To use GET, you must be the bucket owner.</p> <p>The
+ * following operations are related to <code>GetBucketLogging</code>:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html">PutBucketLogging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLogging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketLoggingOutcome GetBucketLogging(const Model::GetBucketLoggingRequest& request) const;
+
+ /**
+ * <p>Returns the logging status of a bucket and the permissions users have to view
+ * and modify that status. To use GET, you must be the bucket owner.</p> <p>The
+ * following operations are related to <code>GetBucketLogging</code>:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html">PutBucketLogging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLogging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketLoggingOutcomeCallable GetBucketLoggingCallable(const Model::GetBucketLoggingRequest& request) const;
+
+ /**
+ * <p>Returns the logging status of a bucket and the permissions users have to view
+ * and modify that status. To use GET, you must be the bucket owner.</p> <p>The
+ * following operations are related to <code>GetBucketLogging</code>:</p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html">PutBucketLogging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLogging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketLoggingAsync(const Model::GetBucketLoggingRequest& request, const GetBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Gets a metrics configuration (specified by the metrics configuration ID) from
+ * the bucket. Note that this doesn't include the daily storage metrics.</p> <p> To
+ * use this operation, you must have permissions to perform the
+ * <code>s3:GetMetricsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> For information
+ * about CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>GetBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketMetricsConfigurationOutcome GetBucketMetricsConfiguration(const Model::GetBucketMetricsConfigurationRequest& request) const;
+
+ /**
+ * <p>Gets a metrics configuration (specified by the metrics configuration ID) from
+ * the bucket. Note that this doesn't include the daily storage metrics.</p> <p> To
+ * use this operation, you must have permissions to perform the
+ * <code>s3:GetMetricsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> For information
+ * about CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>GetBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketMetricsConfigurationOutcomeCallable GetBucketMetricsConfigurationCallable(const Model::GetBucketMetricsConfigurationRequest& request) const;
+
+ /**
+ * <p>Gets a metrics configuration (specified by the metrics configuration ID) from
+ * the bucket. Note that this doesn't include the daily storage metrics.</p> <p> To
+ * use this operation, you must have permissions to perform the
+ * <code>s3:GetMetricsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> For information
+ * about CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>GetBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketMetricsConfigurationAsync(const Model::GetBucketMetricsConfigurationRequest& request, const GetBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the notification configuration of a bucket.</p> <p>If notifications
+ * are not enabled on the bucket, the operation returns an empty
+ * <code>NotificationConfiguration</code> element.</p> <p>By default, you must be
+ * the bucket owner to read the notification configuration of a bucket. However,
+ * the bucket owner can use a bucket policy to grant permission to other users to
+ * read this configuration with the <code>s3:GetBucketNotification</code>
+ * permission.</p> <p>For more information about setting and reading the
+ * notification configuration on a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Setting
+ * Up Notification of Bucket Events</a>. For more information about bucket
+ * policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies</a>.</p> <p>The following operation is related to
+ * <code>GetBucketNotification</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotification.html">PutBucketNotification</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketNotificationConfigurationOutcome GetBucketNotificationConfiguration(const Model::GetBucketNotificationConfigurationRequest& request) const;
+
+ /**
+ * <p>Returns the notification configuration of a bucket.</p> <p>If notifications
+ * are not enabled on the bucket, the operation returns an empty
+ * <code>NotificationConfiguration</code> element.</p> <p>By default, you must be
+ * the bucket owner to read the notification configuration of a bucket. However,
+ * the bucket owner can use a bucket policy to grant permission to other users to
+ * read this configuration with the <code>s3:GetBucketNotification</code>
+ * permission.</p> <p>For more information about setting and reading the
+ * notification configuration on a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Setting
+ * Up Notification of Bucket Events</a>. For more information about bucket
+ * policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies</a>.</p> <p>The following operation is related to
+ * <code>GetBucketNotification</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotification.html">PutBucketNotification</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketNotificationConfigurationOutcomeCallable GetBucketNotificationConfigurationCallable(const Model::GetBucketNotificationConfigurationRequest& request) const;
+
+ /**
+ * <p>Returns the notification configuration of a bucket.</p> <p>If notifications
+ * are not enabled on the bucket, the operation returns an empty
+ * <code>NotificationConfiguration</code> element.</p> <p>By default, you must be
+ * the bucket owner to read the notification configuration of a bucket. However,
+ * the bucket owner can use a bucket policy to grant permission to other users to
+ * read this configuration with the <code>s3:GetBucketNotification</code>
+ * permission.</p> <p>For more information about setting and reading the
+ * notification configuration on a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Setting
+ * Up Notification of Bucket Events</a>. For more information about bucket
+ * policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies</a>.</p> <p>The following operation is related to
+ * <code>GetBucketNotification</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotification.html">PutBucketNotification</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketNotificationConfigurationAsync(const Model::GetBucketNotificationConfigurationRequest& request, const GetBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Retrieves <code>OwnershipControls</code> for an Amazon S3 bucket. To use this
+ * operation, you must have the <code>s3:GetBucketOwnershipControls</code>
+ * permission. For more information about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. </p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>GetBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>PutBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>DeleteBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketOwnershipControlsOutcome GetBucketOwnershipControls(const Model::GetBucketOwnershipControlsRequest& request) const;
+
+ /**
+ * <p>Retrieves <code>OwnershipControls</code> for an Amazon S3 bucket. To use this
+ * operation, you must have the <code>s3:GetBucketOwnershipControls</code>
+ * permission. For more information about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. </p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>GetBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>PutBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>DeleteBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketOwnershipControlsOutcomeCallable GetBucketOwnershipControlsCallable(const Model::GetBucketOwnershipControlsRequest& request) const;
+
+ /**
+ * <p>Retrieves <code>OwnershipControls</code> for an Amazon S3 bucket. To use this
+ * operation, you must have the <code>s3:GetBucketOwnershipControls</code>
+ * permission. For more information about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. </p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>GetBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>PutBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>DeleteBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketOwnershipControlsAsync(const Model::GetBucketOwnershipControlsRequest& request, const GetBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the policy of a specified bucket. If you are using an identity other
+ * than the root user of the AWS account that owns the bucket, the calling identity
+ * must have the <code>GetBucketPolicy</code> permissions on the specified bucket
+ * and belong to the bucket owner's account in order to use this operation.</p>
+ * <p>If you don't have <code>GetBucketPolicy</code> permissions, Amazon S3 returns
+ * a <code>403 Access Denied</code> error. If you have the correct permissions, but
+ * you're not using an identity that belongs to the bucket owner's account, Amazon
+ * S3 returns a <code>405 Method Not Allowed</code> error.</p> <p>As a
+ * security precaution, the root user of the AWS account that owns a bucket can
+ * always use this operation, even if the policy explicitly denies the root user
+ * the ability to perform this action.</p> <p>For more information
+ * about bucket policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>The following operation is related
+ * to <code>GetBucketPolicy</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicy">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketPolicyOutcome GetBucketPolicy(const Model::GetBucketPolicyRequest& request) const;
+
+ /**
+ * <p>Returns the policy of a specified bucket. If you are using an identity other
+ * than the root user of the AWS account that owns the bucket, the calling identity
+ * must have the <code>GetBucketPolicy</code> permissions on the specified bucket
+ * and belong to the bucket owner's account in order to use this operation.</p>
+ * <p>If you don't have <code>GetBucketPolicy</code> permissions, Amazon S3 returns
+ * a <code>403 Access Denied</code> error. If you have the correct permissions, but
+ * you're not using an identity that belongs to the bucket owner's account, Amazon
+ * S3 returns a <code>405 Method Not Allowed</code> error.</p> <p>As a
+ * security precaution, the root user of the AWS account that owns a bucket can
+ * always use this operation, even if the policy explicitly denies the root user
+ * the ability to perform this action.</p> <p>For more information
+ * about bucket policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>The following operation is related
+ * to <code>GetBucketPolicy</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicy">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketPolicyOutcomeCallable GetBucketPolicyCallable(const Model::GetBucketPolicyRequest& request) const;
+
+ /**
+ * <p>Returns the policy of a specified bucket. If you are using an identity other
+ * than the root user of the AWS account that owns the bucket, the calling identity
+ * must have the <code>GetBucketPolicy</code> permissions on the specified bucket
+ * and belong to the bucket owner's account in order to use this operation.</p>
+ * <p>If you don't have <code>GetBucketPolicy</code> permissions, Amazon S3 returns
+ * a <code>403 Access Denied</code> error. If you have the correct permissions, but
+ * you're not using an identity that belongs to the bucket owner's account, Amazon
+ * S3 returns a <code>405 Method Not Allowed</code> error.</p> <p>As a
+ * security precaution, the root user of the AWS account that owns a bucket can
+ * always use this operation, even if the policy explicitly denies the root user
+ * the ability to perform this action.</p> <p>For more information
+ * about bucket policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>The following operation is related
+ * to <code>GetBucketPolicy</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicy">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketPolicyAsync(const Model::GetBucketPolicyRequest& request, const GetBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Retrieves the policy status for an Amazon S3 bucket, indicating whether the
+ * bucket is public. In order to use this operation, you must have the
+ * <code>s3:GetBucketPolicyStatus</code> permission. For more information about
+ * Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p> For more information about when Amazon S3
+ * considers a bucket public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>. </p> <p>The following operations are related to
+ * <code>GetBucketPolicyStatus</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatus">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketPolicyStatusOutcome GetBucketPolicyStatus(const Model::GetBucketPolicyStatusRequest& request) const;
+
+ /**
+ * <p>Retrieves the policy status for an Amazon S3 bucket, indicating whether the
+ * bucket is public. In order to use this operation, you must have the
+ * <code>s3:GetBucketPolicyStatus</code> permission. For more information about
+ * Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p> For more information about when Amazon S3
+ * considers a bucket public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>. </p> <p>The following operations are related to
+ * <code>GetBucketPolicyStatus</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatus">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketPolicyStatusOutcomeCallable GetBucketPolicyStatusCallable(const Model::GetBucketPolicyStatusRequest& request) const;
+
+ /**
+ * <p>Retrieves the policy status for an Amazon S3 bucket, indicating whether the
+ * bucket is public. In order to use this operation, you must have the
+ * <code>s3:GetBucketPolicyStatus</code> permission. For more information about
+ * Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p> For more information about when Amazon S3
+ * considers a bucket public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>. </p> <p>The following operations are related to
+ * <code>GetBucketPolicyStatus</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatus">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketPolicyStatusAsync(const Model::GetBucketPolicyStatusRequest& request, const GetBucketPolicyStatusResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the replication configuration of a bucket.</p> <p> It can take
+ * a while to propagate the put or delete a replication configuration to all Amazon
+ * S3 systems. Therefore, a get request soon after put or delete can return a wrong
+ * result. </p> <p> For information about replication configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon Simple Storage Service Developer Guide</i>.</p> <p>This
+ * operation requires permissions for the
+ * <code>s3:GetReplicationConfiguration</code> action. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>If you include the
+ * <code>Filter</code> element in a replication configuration, you must also
+ * include the <code>DeleteMarkerReplication</code> and <code>Priority</code>
+ * elements. The response also returns those elements.</p> <p>For information about
+ * <code>GetBucketReplication</code> errors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList">List
+ * of replication-related error codes</a> </p> <p>The following operations are
+ * related to <code>GetBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html">PutBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html">DeleteBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplication">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketReplicationOutcome GetBucketReplication(const Model::GetBucketReplicationRequest& request) const;
+
+ /**
+ * <p>Returns the replication configuration of a bucket.</p> <p> It can take
+ * a while to propagate the put or delete a replication configuration to all Amazon
+ * S3 systems. Therefore, a get request soon after put or delete can return a wrong
+ * result. </p> <p> For information about replication configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon Simple Storage Service Developer Guide</i>.</p> <p>This
+ * operation requires permissions for the
+ * <code>s3:GetReplicationConfiguration</code> action. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>If you include the
+ * <code>Filter</code> element in a replication configuration, you must also
+ * include the <code>DeleteMarkerReplication</code> and <code>Priority</code>
+ * elements. The response also returns those elements.</p> <p>For information about
+ * <code>GetBucketReplication</code> errors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList">List
+ * of replication-related error codes</a> </p> <p>The following operations are
+ * related to <code>GetBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html">PutBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html">DeleteBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplication">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketReplicationOutcomeCallable GetBucketReplicationCallable(const Model::GetBucketReplicationRequest& request) const;
+
+ /**
+ * <p>Returns the replication configuration of a bucket.</p> <p> It can take
+ * a while to propagate the put or delete a replication configuration to all Amazon
+ * S3 systems. Therefore, a get request soon after put or delete can return a wrong
+ * result. </p> <p> For information about replication configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon Simple Storage Service Developer Guide</i>.</p> <p>This
+ * operation requires permissions for the
+ * <code>s3:GetReplicationConfiguration</code> action. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>If you include the
+ * <code>Filter</code> element in a replication configuration, you must also
+ * include the <code>DeleteMarkerReplication</code> and <code>Priority</code>
+ * elements. The response also returns those elements.</p> <p>For information about
+ * <code>GetBucketReplication</code> errors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList">List
+ * of replication-related error codes</a> </p> <p>The following operations are
+ * related to <code>GetBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html">PutBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html">DeleteBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplication">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketReplicationAsync(const Model::GetBucketReplicationRequest& request, const GetBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the request payment configuration of a bucket. To use this version of
+ * the operation, you must be the bucket owner. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html">Requester
+ * Pays Buckets</a>.</p> <p>The following operations are related to
+ * <code>GetBucketRequestPayment</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPayment">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketRequestPaymentOutcome GetBucketRequestPayment(const Model::GetBucketRequestPaymentRequest& request) const;
+
+ /**
+ * <p>Returns the request payment configuration of a bucket. To use this version of
+ * the operation, you must be the bucket owner. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html">Requester
+ * Pays Buckets</a>.</p> <p>The following operations are related to
+ * <code>GetBucketRequestPayment</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPayment">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketRequestPaymentOutcomeCallable GetBucketRequestPaymentCallable(const Model::GetBucketRequestPaymentRequest& request) const;
+
+ /**
+ * <p>Returns the request payment configuration of a bucket. To use this version of
+ * the operation, you must be the bucket owner. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html">Requester
+ * Pays Buckets</a>.</p> <p>The following operations are related to
+ * <code>GetBucketRequestPayment</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPayment">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketRequestPaymentAsync(const Model::GetBucketRequestPaymentRequest& request, const GetBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the tag set associated with the bucket.</p> <p>To use this operation,
+ * you must have permission to perform the <code>s3:GetBucketTagging</code> action.
+ * By default, the bucket owner has this permission and can grant this permission
+ * to others.</p> <p> <code>GetBucketTagging</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>NoSuchTagSetError</code> </p> <ul>
+ * <li> <p>Description: There is no tag set associated with the bucket.</p> </li>
+ * </ul> </li> </ul> <p>The following operations are related to
+ * <code>GetBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html">PutBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html">DeleteBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTagging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketTaggingOutcome GetBucketTagging(const Model::GetBucketTaggingRequest& request) const;
+
+ /**
+ * <p>Returns the tag set associated with the bucket.</p> <p>To use this operation,
+ * you must have permission to perform the <code>s3:GetBucketTagging</code> action.
+ * By default, the bucket owner has this permission and can grant this permission
+ * to others.</p> <p> <code>GetBucketTagging</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>NoSuchTagSetError</code> </p> <ul>
+ * <li> <p>Description: There is no tag set associated with the bucket.</p> </li>
+ * </ul> </li> </ul> <p>The following operations are related to
+ * <code>GetBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html">PutBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html">DeleteBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTagging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketTaggingOutcomeCallable GetBucketTaggingCallable(const Model::GetBucketTaggingRequest& request) const;
+
+ /**
+ * <p>Returns the tag set associated with the bucket.</p> <p>To use this operation,
+ * you must have permission to perform the <code>s3:GetBucketTagging</code> action.
+ * By default, the bucket owner has this permission and can grant this permission
+ * to others.</p> <p> <code>GetBucketTagging</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>NoSuchTagSetError</code> </p> <ul>
+ * <li> <p>Description: There is no tag set associated with the bucket.</p> </li>
+ * </ul> </li> </ul> <p>The following operations are related to
+ * <code>GetBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html">PutBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html">DeleteBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTagging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketTaggingAsync(const Model::GetBucketTaggingRequest& request, const GetBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the versioning state of a bucket.</p> <p>To retrieve the versioning
+ * state of a bucket, you must be the bucket owner.</p> <p>This implementation also
+ * returns the MFA Delete status of the versioning state. If the MFA Delete status
+ * is <code>enabled</code>, the bucket owner must use an authentication device to
+ * change the versioning state of the bucket.</p> <p>The following operations are
+ * related to <code>GetBucketVersioning</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioning">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketVersioningOutcome GetBucketVersioning(const Model::GetBucketVersioningRequest& request) const;
+
+ /**
+ * <p>Returns the versioning state of a bucket.</p> <p>To retrieve the versioning
+ * state of a bucket, you must be the bucket owner.</p> <p>This implementation also
+ * returns the MFA Delete status of the versioning state. If the MFA Delete status
+ * is <code>enabled</code>, the bucket owner must use an authentication device to
+ * change the versioning state of the bucket.</p> <p>The following operations are
+ * related to <code>GetBucketVersioning</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioning">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketVersioningOutcomeCallable GetBucketVersioningCallable(const Model::GetBucketVersioningRequest& request) const;
+
+ /**
+ * <p>Returns the versioning state of a bucket.</p> <p>To retrieve the versioning
+ * state of a bucket, you must be the bucket owner.</p> <p>This implementation also
+ * returns the MFA Delete status of the versioning state. If the MFA Delete status
+ * is <code>enabled</code>, the bucket owner must use an authentication device to
+ * change the versioning state of the bucket.</p> <p>The following operations are
+ * related to <code>GetBucketVersioning</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioning">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketVersioningAsync(const Model::GetBucketVersioningRequest& request, const GetBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the website configuration for a bucket. To host website on Amazon S3,
+ * you can configure a bucket as website by adding a website configuration. For
+ * more information about hosting websites, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>. </p> <p>This GET operation requires the
+ * <code>S3:GetBucketWebsite</code> permission. By default, only the bucket owner
+ * can read the bucket website configuration. However, bucket owners can allow
+ * other users to read the website configuration by writing a bucket policy
+ * granting them the <code>S3:GetBucketWebsite</code> permission.</p> <p>The
+ * following operations are related to <code>DeleteBucketWebsite</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html">DeleteBucketWebsite</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html">PutBucketWebsite</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsite">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetBucketWebsiteOutcome GetBucketWebsite(const Model::GetBucketWebsiteRequest& request) const;
+
+ /**
+ * <p>Returns the website configuration for a bucket. To host website on Amazon S3,
+ * you can configure a bucket as website by adding a website configuration. For
+ * more information about hosting websites, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>. </p> <p>This GET operation requires the
+ * <code>S3:GetBucketWebsite</code> permission. By default, only the bucket owner
+ * can read the bucket website configuration. However, bucket owners can allow
+ * other users to read the website configuration by writing a bucket policy
+ * granting them the <code>S3:GetBucketWebsite</code> permission.</p> <p>The
+ * following operations are related to <code>DeleteBucketWebsite</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html">DeleteBucketWebsite</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html">PutBucketWebsite</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsite">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetBucketWebsiteOutcomeCallable GetBucketWebsiteCallable(const Model::GetBucketWebsiteRequest& request) const;
+
+ /**
+ * <p>Returns the website configuration for a bucket. To host website on Amazon S3,
+ * you can configure a bucket as website by adding a website configuration. For
+ * more information about hosting websites, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>. </p> <p>This GET operation requires the
+ * <code>S3:GetBucketWebsite</code> permission. By default, only the bucket owner
+ * can read the bucket website configuration. However, bucket owners can allow
+ * other users to read the website configuration by writing a bucket policy
+ * granting them the <code>S3:GetBucketWebsite</code> permission.</p> <p>The
+ * following operations are related to <code>DeleteBucketWebsite</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html">DeleteBucketWebsite</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html">PutBucketWebsite</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsite">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetBucketWebsiteAsync(const Model::GetBucketWebsiteRequest& request, const GetBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Retrieves objects from Amazon S3. To use <code>GET</code>, you must have
+ * <code>READ</code> access to the object. If you grant <code>READ</code> access to
+ * the anonymous user, you can return the object without using an authorization
+ * header.</p> <p>An Amazon S3 bucket has no directory hierarchy such as you would
+ * find in a typical computer file system. You can, however, create a logical
+ * hierarchy by using object key names that imply a folder structure. For example,
+ * instead of naming an object <code>sample.jpg</code>, you can name it
+ * <code>photos/2006/February/sample.jpg</code>.</p> <p>To get an object from such
+ * a logical hierarchy, specify the full key name for the object in the
+ * <code>GET</code> operation. For a virtual hosted-style request example, if you
+ * have the object <code>photos/2006/February/sample.jpg</code>, specify the
+ * resource as <code>/photos/2006/February/sample.jpg</code>. For a path-style
+ * request example, if you have the object
+ * <code>photos/2006/February/sample.jpg</code> in the bucket named
+ * <code>examplebucket</code>, specify the resource as
+ * <code>/examplebucket/photos/2006/February/sample.jpg</code>. For more
+ * information about request types, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket">HTTP
+ * Host Header Bucket Specification</a>.</p> <p>To distribute large files to many
+ * people, you can save bandwidth costs by using BitTorrent. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html">Amazon S3
+ * Torrent</a>. For more information about returning the ACL of an object, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>.</p>
+ * <p>If the object you are retrieving is stored in the S3 Glacier or S3 Glacier
+ * Deep Archive storage class, or S3 Intelligent-Tiering Archive or S3
+ * Intelligent-Tiering Deep Archive tiers, before you can retrieve the object you
+ * must first restore a copy using <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>.
+ * Otherwise, this operation returns an <code>InvalidObjectStateError</code> error.
+ * For information about restoring archived objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html">Restoring
+ * Archived Objects</a>.</p> <p>Encryption request headers, like
+ * <code>x-amz-server-side-encryption</code>, should not be sent for GET requests
+ * if your object uses server-side encryption with CMKs stored in AWS KMS (SSE-KMS)
+ * or server-side encryption with Amazon S3–managed encryption keys (SSE-S3). If
+ * your object does use these types of keys, you’ll get an HTTP 400 BadRequest
+ * error.</p> <p>If you encrypt an object by using server-side encryption with
+ * customer-provided encryption keys (SSE-C) when you store the object in Amazon
+ * S3, then when you GET the object, you must use the following headers:</p> <ul>
+ * <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a>.</p> <p>Assuming you
+ * have permission to read object tags (permission for the
+ * <code>s3:GetObjectVersionTagging</code> action), the response also returns the
+ * <code>x-amz-tagging-count</code> header that provides the count of number of
+ * tags associated with the object. You can use <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * to retrieve the tag set associated with an object.</p> <p> <b>Permissions</b>
+ * </p> <p>You need the <code>s3:GetObject</code> permission for this operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. If the object you request does not exist, the error
+ * Amazon S3 returns depends on whether you also have the
+ * <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the
+ * <code>s3:ListBucket</code> permission on the bucket, Amazon S3 will return an
+ * HTTP status code 404 ("no such key") error.</p> </li> <li> <p>If you don’t have
+ * the <code>s3:ListBucket</code> permission, Amazon S3 will return an HTTP status
+ * code 403 ("access denied") error.</p> </li> </ul> <p> <b>Versioning</b> </p>
+ * <p>By default, the GET operation returns the current version of an object. To
+ * return a different version, use the <code>versionId</code> subresource.</p>
+ * <p>If the current version of the object is a delete marker, Amazon S3
+ * behaves as if the object was deleted and includes <code>x-amz-delete-marker:
+ * true</code> in the response.</p> <p>For more information about
+ * versioning, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html">PutBucketVersioning</a>.
+ * </p> <p> <b>Overriding Response Header Values</b> </p> <p>There are times when
+ * you want to override certain response header values in a GET response. For
+ * example, you might override the Content-Disposition response header value in
+ * your GET request.</p> <p>You can override values for a set of response headers
+ * using the following query parameters. These response header values are sent only
+ * on a successful request, that is, when status code 200 OK is returned. The set
+ * of headers you can override using these parameters is a subset of the headers
+ * that Amazon S3 accepts when you create an object. The response headers that you
+ * can override for the GET response are <code>Content-Type</code>,
+ * <code>Content-Language</code>, <code>Expires</code>, <code>Cache-Control</code>,
+ * <code>Content-Disposition</code>, and <code>Content-Encoding</code>. To override
+ * these header values in the GET response, you use the following request
+ * parameters.</p> <p>You must sign the request, either using an
+ * Authorization header or a presigned URL, when using these parameters. They
+ * cannot be used with an unsigned (anonymous) request.</p> <ul> <li> <p>
+ * <code>response-content-type</code> </p> </li> <li> <p>
+ * <code>response-content-language</code> </p> </li> <li> <p>
+ * <code>response-expires</code> </p> </li> <li> <p>
+ * <code>response-cache-control</code> </p> </li> <li> <p>
+ * <code>response-content-disposition</code> </p> </li> <li> <p>
+ * <code>response-content-encoding</code> </p> </li> </ul> <p> <b>Additional
+ * Considerations about Request Headers</b> </p> <p>If both of the
+ * <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present
+ * in the request as follows: <code>If-Match</code> condition evaluates to
+ * <code>true</code>, and; <code>If-Unmodified-Since</code> condition evaluates to
+ * <code>false</code>; then, S3 returns 200 OK and the data requested. </p> <p>If
+ * both of the <code>If-None-Match</code> and <code>If-Modified-Since</code>
+ * headers are present in the request as follows:<code> If-None-Match</code>
+ * condition evaluates to <code>false</code>, and; <code>If-Modified-Since</code>
+ * condition evaluates to <code>true</code>; then, S3 returns 304 Not Modified
+ * response code.</p> <p>For more information about conditional requests, see <a
+ * href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p> <p>The following
+ * operations are related to <code>GetObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObject">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::GetObjectOutcome GetObject(const Model::GetObjectRequest& request) const;
+
+ /**
+ * <p>Retrieves objects from Amazon S3. To use <code>GET</code>, you must have
+ * <code>READ</code> access to the object. If you grant <code>READ</code> access to
+ * the anonymous user, you can return the object without using an authorization
+ * header.</p> <p>An Amazon S3 bucket has no directory hierarchy such as you would
+ * find in a typical computer file system. You can, however, create a logical
+ * hierarchy by using object key names that imply a folder structure. For example,
+ * instead of naming an object <code>sample.jpg</code>, you can name it
+ * <code>photos/2006/February/sample.jpg</code>.</p> <p>To get an object from such
+ * a logical hierarchy, specify the full key name for the object in the
+ * <code>GET</code> operation. For a virtual hosted-style request example, if you
+ * have the object <code>photos/2006/February/sample.jpg</code>, specify the
+ * resource as <code>/photos/2006/February/sample.jpg</code>. For a path-style
+ * request example, if you have the object
+ * <code>photos/2006/February/sample.jpg</code> in the bucket named
+ * <code>examplebucket</code>, specify the resource as
+ * <code>/examplebucket/photos/2006/February/sample.jpg</code>. For more
+ * information about request types, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket">HTTP
+ * Host Header Bucket Specification</a>.</p> <p>To distribute large files to many
+ * people, you can save bandwidth costs by using BitTorrent. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html">Amazon S3
+ * Torrent</a>. For more information about returning the ACL of an object, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>.</p>
+ * <p>If the object you are retrieving is stored in the S3 Glacier or S3 Glacier
+ * Deep Archive storage class, or S3 Intelligent-Tiering Archive or S3
+ * Intelligent-Tiering Deep Archive tiers, before you can retrieve the object you
+ * must first restore a copy using <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>.
+ * Otherwise, this operation returns an <code>InvalidObjectStateError</code> error.
+ * For information about restoring archived objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html">Restoring
+ * Archived Objects</a>.</p> <p>Encryption request headers, like
+ * <code>x-amz-server-side-encryption</code>, should not be sent for GET requests
+ * if your object uses server-side encryption with CMKs stored in AWS KMS (SSE-KMS)
+ * or server-side encryption with Amazon S3–managed encryption keys (SSE-S3). If
+ * your object does use these types of keys, you’ll get an HTTP 400 BadRequest
+ * error.</p> <p>If you encrypt an object by using server-side encryption with
+ * customer-provided encryption keys (SSE-C) when you store the object in Amazon
+ * S3, then when you GET the object, you must use the following headers:</p> <ul>
+ * <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a>.</p> <p>Assuming you
+ * have permission to read object tags (permission for the
+ * <code>s3:GetObjectVersionTagging</code> action), the response also returns the
+ * <code>x-amz-tagging-count</code> header that provides the count of number of
+ * tags associated with the object. You can use <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * to retrieve the tag set associated with an object.</p> <p> <b>Permissions</b>
+ * </p> <p>You need the <code>s3:GetObject</code> permission for this operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. If the object you request does not exist, the error
+ * Amazon S3 returns depends on whether you also have the
+ * <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the
+ * <code>s3:ListBucket</code> permission on the bucket, Amazon S3 will return an
+ * HTTP status code 404 ("no such key") error.</p> </li> <li> <p>If you don’t have
+ * the <code>s3:ListBucket</code> permission, Amazon S3 will return an HTTP status
+ * code 403 ("access denied") error.</p> </li> </ul> <p> <b>Versioning</b> </p>
+ * <p>By default, the GET operation returns the current version of an object. To
+ * return a different version, use the <code>versionId</code> subresource.</p>
+ * <p>If the current version of the object is a delete marker, Amazon S3
+ * behaves as if the object was deleted and includes <code>x-amz-delete-marker:
+ * true</code> in the response.</p> <p>For more information about
+ * versioning, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html">PutBucketVersioning</a>.
+ * </p> <p> <b>Overriding Response Header Values</b> </p> <p>There are times when
+ * you want to override certain response header values in a GET response. For
+ * example, you might override the Content-Disposition response header value in
+ * your GET request.</p> <p>You can override values for a set of response headers
+ * using the following query parameters. These response header values are sent only
+ * on a successful request, that is, when status code 200 OK is returned. The set
+ * of headers you can override using these parameters is a subset of the headers
+ * that Amazon S3 accepts when you create an object. The response headers that you
+ * can override for the GET response are <code>Content-Type</code>,
+ * <code>Content-Language</code>, <code>Expires</code>, <code>Cache-Control</code>,
+ * <code>Content-Disposition</code>, and <code>Content-Encoding</code>. To override
+ * these header values in the GET response, you use the following request
+ * parameters.</p> <p>You must sign the request, either using an
+ * Authorization header or a presigned URL, when using these parameters. They
+ * cannot be used with an unsigned (anonymous) request.</p> <ul> <li> <p>
+ * <code>response-content-type</code> </p> </li> <li> <p>
+ * <code>response-content-language</code> </p> </li> <li> <p>
+ * <code>response-expires</code> </p> </li> <li> <p>
+ * <code>response-cache-control</code> </p> </li> <li> <p>
+ * <code>response-content-disposition</code> </p> </li> <li> <p>
+ * <code>response-content-encoding</code> </p> </li> </ul> <p> <b>Additional
+ * Considerations about Request Headers</b> </p> <p>If both of the
+ * <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present
+ * in the request as follows: <code>If-Match</code> condition evaluates to
+ * <code>true</code>, and; <code>If-Unmodified-Since</code> condition evaluates to
+ * <code>false</code>; then, S3 returns 200 OK and the data requested. </p> <p>If
+ * both of the <code>If-None-Match</code> and <code>If-Modified-Since</code>
+ * headers are present in the request as follows:<code> If-None-Match</code>
+ * condition evaluates to <code>false</code>, and; <code>If-Modified-Since</code>
+ * condition evaluates to <code>true</code>; then, S3 returns 304 Not Modified
+ * response code.</p> <p>For more information about conditional requests, see <a
+ * href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p> <p>The following
+ * operations are related to <code>GetObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObject">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetObjectOutcomeCallable GetObjectCallable(const Model::GetObjectRequest& request) const;
+
+ /**
+ * <p>Retrieves objects from Amazon S3. To use <code>GET</code>, you must have
+ * <code>READ</code> access to the object. If you grant <code>READ</code> access to
+ * the anonymous user, you can return the object without using an authorization
+ * header.</p> <p>An Amazon S3 bucket has no directory hierarchy such as you would
+ * find in a typical computer file system. You can, however, create a logical
+ * hierarchy by using object key names that imply a folder structure. For example,
+ * instead of naming an object <code>sample.jpg</code>, you can name it
+ * <code>photos/2006/February/sample.jpg</code>.</p> <p>To get an object from such
+ * a logical hierarchy, specify the full key name for the object in the
+ * <code>GET</code> operation. For a virtual hosted-style request example, if you
+ * have the object <code>photos/2006/February/sample.jpg</code>, specify the
+ * resource as <code>/photos/2006/February/sample.jpg</code>. For a path-style
+ * request example, if you have the object
+ * <code>photos/2006/February/sample.jpg</code> in the bucket named
+ * <code>examplebucket</code>, specify the resource as
+ * <code>/examplebucket/photos/2006/February/sample.jpg</code>. For more
+ * information about request types, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket">HTTP
+ * Host Header Bucket Specification</a>.</p> <p>To distribute large files to many
+ * people, you can save bandwidth costs by using BitTorrent. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html">Amazon S3
+ * Torrent</a>. For more information about returning the ACL of an object, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>.</p>
+ * <p>If the object you are retrieving is stored in the S3 Glacier or S3 Glacier
+ * Deep Archive storage class, or S3 Intelligent-Tiering Archive or S3
+ * Intelligent-Tiering Deep Archive tiers, before you can retrieve the object you
+ * must first restore a copy using <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>.
+ * Otherwise, this operation returns an <code>InvalidObjectStateError</code> error.
+ * For information about restoring archived objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html">Restoring
+ * Archived Objects</a>.</p> <p>Encryption request headers, like
+ * <code>x-amz-server-side-encryption</code>, should not be sent for GET requests
+ * if your object uses server-side encryption with CMKs stored in AWS KMS (SSE-KMS)
+ * or server-side encryption with Amazon S3–managed encryption keys (SSE-S3). If
+ * your object does use these types of keys, you’ll get an HTTP 400 BadRequest
+ * error.</p> <p>If you encrypt an object by using server-side encryption with
+ * customer-provided encryption keys (SSE-C) when you store the object in Amazon
+ * S3, then when you GET the object, you must use the following headers:</p> <ul>
+ * <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a>.</p> <p>Assuming you
+ * have permission to read object tags (permission for the
+ * <code>s3:GetObjectVersionTagging</code> action), the response also returns the
+ * <code>x-amz-tagging-count</code> header that provides the count of number of
+ * tags associated with the object. You can use <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * to retrieve the tag set associated with an object.</p> <p> <b>Permissions</b>
+ * </p> <p>You need the <code>s3:GetObject</code> permission for this operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. If the object you request does not exist, the error
+ * Amazon S3 returns depends on whether you also have the
+ * <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the
+ * <code>s3:ListBucket</code> permission on the bucket, Amazon S3 will return an
+ * HTTP status code 404 ("no such key") error.</p> </li> <li> <p>If you don’t have
+ * the <code>s3:ListBucket</code> permission, Amazon S3 will return an HTTP status
+ * code 403 ("access denied") error.</p> </li> </ul> <p> <b>Versioning</b> </p>
+ * <p>By default, the GET operation returns the current version of an object. To
+ * return a different version, use the <code>versionId</code> subresource.</p>
+ * <p>If the current version of the object is a delete marker, Amazon S3
+ * behaves as if the object was deleted and includes <code>x-amz-delete-marker:
+ * true</code> in the response.</p> <p>For more information about
+ * versioning, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html">PutBucketVersioning</a>.
+ * </p> <p> <b>Overriding Response Header Values</b> </p> <p>There are times when
+ * you want to override certain response header values in a GET response. For
+ * example, you might override the Content-Disposition response header value in
+ * your GET request.</p> <p>You can override values for a set of response headers
+ * using the following query parameters. These response header values are sent only
+ * on a successful request, that is, when status code 200 OK is returned. The set
+ * of headers you can override using these parameters is a subset of the headers
+ * that Amazon S3 accepts when you create an object. The response headers that you
+ * can override for the GET response are <code>Content-Type</code>,
+ * <code>Content-Language</code>, <code>Expires</code>, <code>Cache-Control</code>,
+ * <code>Content-Disposition</code>, and <code>Content-Encoding</code>. To override
+ * these header values in the GET response, you use the following request
+ * parameters.</p> <p>You must sign the request, either using an
+ * Authorization header or a presigned URL, when using these parameters. They
+ * cannot be used with an unsigned (anonymous) request.</p> <ul> <li> <p>
+ * <code>response-content-type</code> </p> </li> <li> <p>
+ * <code>response-content-language</code> </p> </li> <li> <p>
+ * <code>response-expires</code> </p> </li> <li> <p>
+ * <code>response-cache-control</code> </p> </li> <li> <p>
+ * <code>response-content-disposition</code> </p> </li> <li> <p>
+ * <code>response-content-encoding</code> </p> </li> </ul> <p> <b>Additional
+ * Considerations about Request Headers</b> </p> <p>If both of the
+ * <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present
+ * in the request as follows: <code>If-Match</code> condition evaluates to
+ * <code>true</code>, and; <code>If-Unmodified-Since</code> condition evaluates to
+ * <code>false</code>; then, S3 returns 200 OK and the data requested. </p> <p>If
+ * both of the <code>If-None-Match</code> and <code>If-Modified-Since</code>
+ * headers are present in the request as follows:<code> If-None-Match</code>
+ * condition evaluates to <code>false</code>, and; <code>If-Modified-Since</code>
+ * condition evaluates to <code>true</code>; then, S3 returns 304 Not Modified
+ * response code.</p> <p>For more information about conditional requests, see <a
+ * href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p> <p>The following
+ * operations are related to <code>GetObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObject">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetObjectAsync(const Model::GetObjectRequest& request, const GetObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the access control list (ACL) of an object. To use this operation,
+ * you must have <code>READ_ACP</code> access to the object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p> <b>Versioning</b> </p> <p>By
+ * default, GET returns ACL information about the current version of an object. To
+ * return ACL information about a different version, use the versionId
+ * subresource.</p> <p>The following operations are related to
+ * <code>GetObjectAcl</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAcl">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::GetObjectAclOutcome GetObjectAcl(const Model::GetObjectAclRequest& request) const;
+
+ /**
+ * <p>Returns the access control list (ACL) of an object. To use this operation,
+ * you must have <code>READ_ACP</code> access to the object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p> <b>Versioning</b> </p> <p>By
+ * default, GET returns ACL information about the current version of an object. To
+ * return ACL information about a different version, use the versionId
+ * subresource.</p> <p>The following operations are related to
+ * <code>GetObjectAcl</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAcl">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetObjectAclOutcomeCallable GetObjectAclCallable(const Model::GetObjectAclRequest& request) const;
+
+ /**
+ * <p>Returns the access control list (ACL) of an object. To use this operation,
+ * you must have <code>READ_ACP</code> access to the object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p> <b>Versioning</b> </p> <p>By
+ * default, GET returns ACL information about the current version of an object. To
+ * return ACL information about a different version, use the versionId
+ * subresource.</p> <p>The following operations are related to
+ * <code>GetObjectAcl</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAcl">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetObjectAclAsync(const Model::GetObjectAclRequest& request, const GetObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Gets an object's current Legal Hold status. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p> <p>This action is not supported by Amazon S3 on
+ * Outposts.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHold">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetObjectLegalHoldOutcome GetObjectLegalHold(const Model::GetObjectLegalHoldRequest& request) const;
+
+ /**
+ * <p>Gets an object's current Legal Hold status. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p> <p>This action is not supported by Amazon S3 on
+ * Outposts.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHold">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetObjectLegalHoldOutcomeCallable GetObjectLegalHoldCallable(const Model::GetObjectLegalHoldRequest& request) const;
+
+ /**
+ * <p>Gets an object's current Legal Hold status. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p> <p>This action is not supported by Amazon S3 on
+ * Outposts.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHold">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetObjectLegalHoldAsync(const Model::GetObjectLegalHoldRequest& request, const GetObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Gets the Object Lock configuration for a bucket. The rule specified in the
+ * Object Lock configuration will be applied by default to every new object placed
+ * in the specified bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetObjectLockConfigurationOutcome GetObjectLockConfiguration(const Model::GetObjectLockConfigurationRequest& request) const;
+
+ /**
+ * <p>Gets the Object Lock configuration for a bucket. The rule specified in the
+ * Object Lock configuration will be applied by default to every new object placed
+ * in the specified bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetObjectLockConfigurationOutcomeCallable GetObjectLockConfigurationCallable(const Model::GetObjectLockConfigurationRequest& request) const;
+
+ /**
+ * <p>Gets the Object Lock configuration for a bucket. The rule specified in the
+ * Object Lock configuration will be applied by default to every new object placed
+ * in the specified bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetObjectLockConfigurationAsync(const Model::GetObjectLockConfigurationRequest& request, const GetObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Retrieves an object's retention settings. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p> <p>This action is not supported by Amazon S3 on
+ * Outposts.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetention">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetObjectRetentionOutcome GetObjectRetention(const Model::GetObjectRetentionRequest& request) const;
+
+ /**
+ * <p>Retrieves an object's retention settings. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p> <p>This action is not supported by Amazon S3 on
+ * Outposts.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetention">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetObjectRetentionOutcomeCallable GetObjectRetentionCallable(const Model::GetObjectRetentionRequest& request) const;
+
+ /**
+ * <p>Retrieves an object's retention settings. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a>.</p> <p>This action is not supported by Amazon S3 on
+ * Outposts.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetention">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetObjectRetentionAsync(const Model::GetObjectRetentionRequest& request, const GetObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns the tag-set of an object. You send the GET request against the
+ * tagging subresource associated with the object.</p> <p>To use this operation,
+ * you must have permission to perform the <code>s3:GetObjectTagging</code> action.
+ * By default, the GET operation returns information about current version of an
+ * object. For a versioned bucket, you can have multiple versions of an object in
+ * your bucket. To retrieve tags of any other version, use the versionId query
+ * parameter. You also need permission for the
+ * <code>s3:GetObjectVersionTagging</code> action.</p> <p> By default, the bucket
+ * owner has this permission and can grant this permission to others.</p> <p> For
+ * information about the Amazon S3 object tagging feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</p> <p>The following operation is related to
+ * <code>GetObjectTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html">PutObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTagging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetObjectTaggingOutcome GetObjectTagging(const Model::GetObjectTaggingRequest& request) const;
+
+ /**
+ * <p>Returns the tag-set of an object. You send the GET request against the
+ * tagging subresource associated with the object.</p> <p>To use this operation,
+ * you must have permission to perform the <code>s3:GetObjectTagging</code> action.
+ * By default, the GET operation returns information about current version of an
+ * object. For a versioned bucket, you can have multiple versions of an object in
+ * your bucket. To retrieve tags of any other version, use the versionId query
+ * parameter. You also need permission for the
+ * <code>s3:GetObjectVersionTagging</code> action.</p> <p> By default, the bucket
+ * owner has this permission and can grant this permission to others.</p> <p> For
+ * information about the Amazon S3 object tagging feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</p> <p>The following operation is related to
+ * <code>GetObjectTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html">PutObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTagging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetObjectTaggingOutcomeCallable GetObjectTaggingCallable(const Model::GetObjectTaggingRequest& request) const;
+
+ /**
+ * <p>Returns the tag-set of an object. You send the GET request against the
+ * tagging subresource associated with the object.</p> <p>To use this operation,
+ * you must have permission to perform the <code>s3:GetObjectTagging</code> action.
+ * By default, the GET operation returns information about current version of an
+ * object. For a versioned bucket, you can have multiple versions of an object in
+ * your bucket. To retrieve tags of any other version, use the versionId query
+ * parameter. You also need permission for the
+ * <code>s3:GetObjectVersionTagging</code> action.</p> <p> By default, the bucket
+ * owner has this permission and can grant this permission to others.</p> <p> For
+ * information about the Amazon S3 object tagging feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</p> <p>The following operation is related to
+ * <code>GetObjectTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html">PutObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTagging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetObjectTaggingAsync(const Model::GetObjectTaggingRequest& request, const GetObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns torrent files from a bucket. BitTorrent can save you bandwidth when
+ * you're distributing large files. For more information about BitTorrent, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html">Using
+ * BitTorrent with Amazon S3</a>.</p> <p>You can get torrent only for
+ * objects that are less than 5 GB in size, and that are not encrypted using
+ * server-side encryption with a customer-provided encryption key.</p>
+ * <p>To use GET, you must have READ access to the object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p>The following operation is
+ * related to <code>GetObjectTorrent</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrent">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetObjectTorrentOutcome GetObjectTorrent(const Model::GetObjectTorrentRequest& request) const;
+
+ /**
+ * <p>Returns torrent files from a bucket. BitTorrent can save you bandwidth when
+ * you're distributing large files. For more information about BitTorrent, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html">Using
+ * BitTorrent with Amazon S3</a>.</p> <p>You can get torrent only for
+ * objects that are less than 5 GB in size, and that are not encrypted using
+ * server-side encryption with a customer-provided encryption key.</p>
+ * <p>To use GET, you must have READ access to the object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p>The following operation is
+ * related to <code>GetObjectTorrent</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrent">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetObjectTorrentOutcomeCallable GetObjectTorrentCallable(const Model::GetObjectTorrentRequest& request) const;
+
+ /**
+ * <p>Returns torrent files from a bucket. BitTorrent can save you bandwidth when
+ * you're distributing large files. For more information about BitTorrent, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html">Using
+ * BitTorrent with Amazon S3</a>.</p> <p>You can get torrent only for
+ * objects that are less than 5 GB in size, and that are not encrypted using
+ * server-side encryption with a customer-provided encryption key.</p>
+ * <p>To use GET, you must have READ access to the object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p>The following operation is
+ * related to <code>GetObjectTorrent</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrent">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetObjectTorrentAsync(const Model::GetObjectTorrentRequest& request, const GetObjectTorrentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Retrieves the <code>PublicAccessBlock</code> configuration for an Amazon S3
+ * bucket. To use this operation, you must have the
+ * <code>s3:GetBucketPublicAccessBlock</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>When Amazon S3 evaluates the
+ * <code>PublicAccessBlock</code> configuration for a bucket or an object, it
+ * checks the <code>PublicAccessBlock</code> configuration for both the bucket (or
+ * the bucket that contains the object) and the bucket owner's account. If the
+ * <code>PublicAccessBlock</code> settings are different between the bucket and the
+ * account, Amazon S3 uses the most restrictive combination of the bucket-level and
+ * account-level settings.</p> <p>For more information about when
+ * Amazon S3 considers a bucket or an object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>.</p> <p>The following operations are related to
+ * <code>GetPublicAccessBlock</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlock">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::GetPublicAccessBlockOutcome GetPublicAccessBlock(const Model::GetPublicAccessBlockRequest& request) const;
+
+ /**
+ * <p>Retrieves the <code>PublicAccessBlock</code> configuration for an Amazon S3
+ * bucket. To use this operation, you must have the
+ * <code>s3:GetBucketPublicAccessBlock</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>When Amazon S3 evaluates the
+ * <code>PublicAccessBlock</code> configuration for a bucket or an object, it
+ * checks the <code>PublicAccessBlock</code> configuration for both the bucket (or
+ * the bucket that contains the object) and the bucket owner's account. If the
+ * <code>PublicAccessBlock</code> settings are different between the bucket and the
+ * account, Amazon S3 uses the most restrictive combination of the bucket-level and
+ * account-level settings.</p> <p>For more information about when
+ * Amazon S3 considers a bucket or an object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>.</p> <p>The following operations are related to
+ * <code>GetPublicAccessBlock</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlock">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::GetPublicAccessBlockOutcomeCallable GetPublicAccessBlockCallable(const Model::GetPublicAccessBlockRequest& request) const;
+
+ /**
+ * <p>Retrieves the <code>PublicAccessBlock</code> configuration for an Amazon S3
+ * bucket. To use this operation, you must have the
+ * <code>s3:GetBucketPublicAccessBlock</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>When Amazon S3 evaluates the
+ * <code>PublicAccessBlock</code> configuration for a bucket or an object, it
+ * checks the <code>PublicAccessBlock</code> configuration for both the bucket (or
+ * the bucket that contains the object) and the bucket owner's account. If the
+ * <code>PublicAccessBlock</code> settings are different between the bucket and the
+ * account, Amazon S3 uses the most restrictive combination of the bucket-level and
+ * account-level settings.</p> <p>For more information about when
+ * Amazon S3 considers a bucket or an object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>.</p> <p>The following operations are related to
+ * <code>GetPublicAccessBlock</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html">PutPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlock">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void GetPublicAccessBlockAsync(const Model::GetPublicAccessBlockRequest& request, const GetPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This operation is useful to determine if a bucket exists and you have
+ * permission to access it. The operation returns a <code>200 OK</code> if the
+ * bucket exists and you have permission to access it. Otherwise, the operation
+ * might return responses such as <code>404 Not Found</code> and <code>403
+ * Forbidden</code>. </p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:ListBucket</code> action. The bucket owner has this
+ * permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucket">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::HeadBucketOutcome HeadBucket(const Model::HeadBucketRequest& request) const;
+
+ /**
+ * <p>This operation is useful to determine if a bucket exists and you have
+ * permission to access it. The operation returns a <code>200 OK</code> if the
+ * bucket exists and you have permission to access it. Otherwise, the operation
+ * might return responses such as <code>404 Not Found</code> and <code>403
+ * Forbidden</code>. </p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:ListBucket</code> action. The bucket owner has this
+ * permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucket">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::HeadBucketOutcomeCallable HeadBucketCallable(const Model::HeadBucketRequest& request) const;
+
+ /**
+ * <p>This operation is useful to determine if a bucket exists and you have
+ * permission to access it. The operation returns a <code>200 OK</code> if the
+ * bucket exists and you have permission to access it. Otherwise, the operation
+ * might return responses such as <code>404 Not Found</code> and <code>403
+ * Forbidden</code>. </p> <p>To use this operation, you must have permissions to
+ * perform the <code>s3:ListBucket</code> action. The bucket owner has this
+ * permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucket">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void HeadBucketAsync(const Model::HeadBucketRequest& request, const HeadBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>The HEAD operation retrieves metadata from an object without returning the
+ * object itself. This operation is useful if you're only interested in an object's
+ * metadata. To use HEAD, you must have READ access to the object.</p> <p>A
+ * <code>HEAD</code> request has the same options as a <code>GET</code> operation
+ * on an object. The response is identical to the <code>GET</code> response except
+ * that there is no response body.</p> <p>If you encrypt an object by using
+ * server-side encryption with customer-provided encryption keys (SSE-C) when you
+ * store the object in Amazon S3, then when you retrieve the metadata from the
+ * object, you must use the following headers:</p> <ul> <li>
+ * <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a>.</p>
+ * <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>,
+ * should not be sent for GET requests if your object uses server-side encryption
+ * with CMKs stored in AWS KMS (SSE-KMS) or server-side encryption with Amazon
+ * S3–managed encryption keys (SSE-S3). If your object does use these types of
+ * keys, you’ll get an HTTP 400 BadRequest error.</p> <p>Request headers
+ * are limited to 8 KB in size. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html">Common
+ * Request Headers</a>.</p> <p>Consider the following when using request
+ * headers:</p> <ul> <li> <p> Consideration 1 – If both of the
+ * <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present
+ * in the request as follows:</p> <ul> <li> <p> <code>If-Match</code> condition
+ * evaluates to <code>true</code>, and;</p> </li> <li> <p>
+ * <code>If-Unmodified-Since</code> condition evaluates to <code>false</code>;</p>
+ * </li> </ul> <p>Then Amazon S3 returns <code>200 OK</code> and the data
+ * requested.</p> </li> <li> <p> Consideration 2 – If both of the
+ * <code>If-None-Match</code> and <code>If-Modified-Since</code> headers are
+ * present in the request as follows:</p> <ul> <li> <p> <code>If-None-Match</code>
+ * condition evaluates to <code>false</code>, and;</p> </li> <li> <p>
+ * <code>If-Modified-Since</code> condition evaluates to <code>true</code>;</p>
+ * </li> </ul> <p>Then Amazon S3 returns the <code>304 Not Modified</code> response
+ * code.</p> </li> </ul> <p>For more information about conditional requests, see <a
+ * href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p> <p>
+ * <b>Permissions</b> </p> <p>You need the <code>s3:GetObject</code> permission for
+ * this operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. If the object you request does not exist, the error
+ * Amazon S3 returns depends on whether you also have the s3:ListBucket
+ * permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code>
+ * permission on the bucket, Amazon S3 returns an HTTP status code 404 ("no such
+ * key") error.</p> </li> <li> <p>If you don’t have the <code>s3:ListBucket</code>
+ * permission, Amazon S3 returns an HTTP status code 403 ("access denied")
+ * error.</p> </li> </ul> <p>The following operation is related to
+ * <code>HeadObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObject">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::HeadObjectOutcome HeadObject(const Model::HeadObjectRequest& request) const;
+
+ /**
+ * <p>The HEAD operation retrieves metadata from an object without returning the
+ * object itself. This operation is useful if you're only interested in an object's
+ * metadata. To use HEAD, you must have READ access to the object.</p> <p>A
+ * <code>HEAD</code> request has the same options as a <code>GET</code> operation
+ * on an object. The response is identical to the <code>GET</code> response except
+ * that there is no response body.</p> <p>If you encrypt an object by using
+ * server-side encryption with customer-provided encryption keys (SSE-C) when you
+ * store the object in Amazon S3, then when you retrieve the metadata from the
+ * object, you must use the following headers:</p> <ul> <li>
+ * <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a>.</p>
+ * <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>,
+ * should not be sent for GET requests if your object uses server-side encryption
+ * with CMKs stored in AWS KMS (SSE-KMS) or server-side encryption with Amazon
+ * S3–managed encryption keys (SSE-S3). If your object does use these types of
+ * keys, you’ll get an HTTP 400 BadRequest error.</p> <p>Request headers
+ * are limited to 8 KB in size. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html">Common
+ * Request Headers</a>.</p> <p>Consider the following when using request
+ * headers:</p> <ul> <li> <p> Consideration 1 – If both of the
+ * <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present
+ * in the request as follows:</p> <ul> <li> <p> <code>If-Match</code> condition
+ * evaluates to <code>true</code>, and;</p> </li> <li> <p>
+ * <code>If-Unmodified-Since</code> condition evaluates to <code>false</code>;</p>
+ * </li> </ul> <p>Then Amazon S3 returns <code>200 OK</code> and the data
+ * requested.</p> </li> <li> <p> Consideration 2 – If both of the
+ * <code>If-None-Match</code> and <code>If-Modified-Since</code> headers are
+ * present in the request as follows:</p> <ul> <li> <p> <code>If-None-Match</code>
+ * condition evaluates to <code>false</code>, and;</p> </li> <li> <p>
+ * <code>If-Modified-Since</code> condition evaluates to <code>true</code>;</p>
+ * </li> </ul> <p>Then Amazon S3 returns the <code>304 Not Modified</code> response
+ * code.</p> </li> </ul> <p>For more information about conditional requests, see <a
+ * href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p> <p>
+ * <b>Permissions</b> </p> <p>You need the <code>s3:GetObject</code> permission for
+ * this operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. If the object you request does not exist, the error
+ * Amazon S3 returns depends on whether you also have the s3:ListBucket
+ * permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code>
+ * permission on the bucket, Amazon S3 returns an HTTP status code 404 ("no such
+ * key") error.</p> </li> <li> <p>If you don’t have the <code>s3:ListBucket</code>
+ * permission, Amazon S3 returns an HTTP status code 403 ("access denied")
+ * error.</p> </li> </ul> <p>The following operation is related to
+ * <code>HeadObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObject">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::HeadObjectOutcomeCallable HeadObjectCallable(const Model::HeadObjectRequest& request) const;
+
+ /**
+ * <p>The HEAD operation retrieves metadata from an object without returning the
+ * object itself. This operation is useful if you're only interested in an object's
+ * metadata. To use HEAD, you must have READ access to the object.</p> <p>A
+ * <code>HEAD</code> request has the same options as a <code>GET</code> operation
+ * on an object. The response is identical to the <code>GET</code> response except
+ * that there is no response body.</p> <p>If you encrypt an object by using
+ * server-side encryption with customer-provided encryption keys (SSE-C) when you
+ * store the object in Amazon S3, then when you retrieve the metadata from the
+ * object, you must use the following headers:</p> <ul> <li>
+ * <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p>For more
+ * information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a>.</p>
+ * <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>,
+ * should not be sent for GET requests if your object uses server-side encryption
+ * with CMKs stored in AWS KMS (SSE-KMS) or server-side encryption with Amazon
+ * S3–managed encryption keys (SSE-S3). If your object does use these types of
+ * keys, you’ll get an HTTP 400 BadRequest error.</p> <p>Request headers
+ * are limited to 8 KB in size. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html">Common
+ * Request Headers</a>.</p> <p>Consider the following when using request
+ * headers:</p> <ul> <li> <p> Consideration 1 – If both of the
+ * <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present
+ * in the request as follows:</p> <ul> <li> <p> <code>If-Match</code> condition
+ * evaluates to <code>true</code>, and;</p> </li> <li> <p>
+ * <code>If-Unmodified-Since</code> condition evaluates to <code>false</code>;</p>
+ * </li> </ul> <p>Then Amazon S3 returns <code>200 OK</code> and the data
+ * requested.</p> </li> <li> <p> Consideration 2 – If both of the
+ * <code>If-None-Match</code> and <code>If-Modified-Since</code> headers are
+ * present in the request as follows:</p> <ul> <li> <p> <code>If-None-Match</code>
+ * condition evaluates to <code>false</code>, and;</p> </li> <li> <p>
+ * <code>If-Modified-Since</code> condition evaluates to <code>true</code>;</p>
+ * </li> </ul> <p>Then Amazon S3 returns the <code>304 Not Modified</code> response
+ * code.</p> </li> </ul> <p>For more information about conditional requests, see <a
+ * href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p> <p>
+ * <b>Permissions</b> </p> <p>You need the <code>s3:GetObject</code> permission for
+ * this operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. If the object you request does not exist, the error
+ * Amazon S3 returns depends on whether you also have the s3:ListBucket
+ * permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code>
+ * permission on the bucket, Amazon S3 returns an HTTP status code 404 ("no such
+ * key") error.</p> </li> <li> <p>If you don’t have the <code>s3:ListBucket</code>
+ * permission, Amazon S3 returns an HTTP status code 403 ("access denied")
+ * error.</p> </li> </ul> <p>The following operation is related to
+ * <code>HeadObject</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObject">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void HeadObjectAsync(const Model::HeadObjectRequest& request, const HeadObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Lists the analytics configurations for the bucket. You can have up to 1,000
+ * analytics configurations per bucket.</p> <p>This operation supports list
+ * pagination and does not return more than 100 configurations at a time. You
+ * should always check the <code>IsTruncated</code> element in the response. If
+ * there are no more configurations to list, <code>IsTruncated</code> is set to
+ * false. If there are more configurations to list, <code>IsTruncated</code> is set
+ * to true, and there will be a value in <code>NextContinuationToken</code>. You
+ * use the <code>NextContinuationToken</code> value to continue the pagination of
+ * the list by passing the value in continuation-token in the request to
+ * <code>GET</code> the next page.</p> <p>To use this operation, you must have
+ * permissions to perform the <code>s3:GetAnalyticsConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * Amazon S3 analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are
+ * related to <code>ListBucketAnalyticsConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurations">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::ListBucketAnalyticsConfigurationsOutcome ListBucketAnalyticsConfigurations(const Model::ListBucketAnalyticsConfigurationsRequest& request) const;
+
+ /**
+ * <p>Lists the analytics configurations for the bucket. You can have up to 1,000
+ * analytics configurations per bucket.</p> <p>This operation supports list
+ * pagination and does not return more than 100 configurations at a time. You
+ * should always check the <code>IsTruncated</code> element in the response. If
+ * there are no more configurations to list, <code>IsTruncated</code> is set to
+ * false. If there are more configurations to list, <code>IsTruncated</code> is set
+ * to true, and there will be a value in <code>NextContinuationToken</code>. You
+ * use the <code>NextContinuationToken</code> value to continue the pagination of
+ * the list by passing the value in continuation-token in the request to
+ * <code>GET</code> the next page.</p> <p>To use this operation, you must have
+ * permissions to perform the <code>s3:GetAnalyticsConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * Amazon S3 analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are
+ * related to <code>ListBucketAnalyticsConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListBucketAnalyticsConfigurationsOutcomeCallable ListBucketAnalyticsConfigurationsCallable(const Model::ListBucketAnalyticsConfigurationsRequest& request) const;
+
+ /**
+ * <p>Lists the analytics configurations for the bucket. You can have up to 1,000
+ * analytics configurations per bucket.</p> <p>This operation supports list
+ * pagination and does not return more than 100 configurations at a time. You
+ * should always check the <code>IsTruncated</code> element in the response. If
+ * there are no more configurations to list, <code>IsTruncated</code> is set to
+ * false. If there are more configurations to list, <code>IsTruncated</code> is set
+ * to true, and there will be a value in <code>NextContinuationToken</code>. You
+ * use the <code>NextContinuationToken</code> value to continue the pagination of
+ * the list by passing the value in continuation-token in the request to
+ * <code>GET</code> the next page.</p> <p>To use this operation, you must have
+ * permissions to perform the <code>s3:GetAnalyticsConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * Amazon S3 analytics feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are
+ * related to <code>ListBucketAnalyticsConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html">PutBucketAnalyticsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListBucketAnalyticsConfigurationsAsync(const Model::ListBucketAnalyticsConfigurationsRequest& request, const ListBucketAnalyticsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Lists the S3 Intelligent-Tiering configuration from the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>ListBucketIntelligentTieringConfigurations</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketIntelligentTieringConfigurations">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::ListBucketIntelligentTieringConfigurationsOutcome ListBucketIntelligentTieringConfigurations(const Model::ListBucketIntelligentTieringConfigurationsRequest& request) const;
+
+ /**
+ * <p>Lists the S3 Intelligent-Tiering configuration from the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>ListBucketIntelligentTieringConfigurations</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketIntelligentTieringConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListBucketIntelligentTieringConfigurationsOutcomeCallable ListBucketIntelligentTieringConfigurationsCallable(const Model::ListBucketIntelligentTieringConfigurationsRequest& request) const;
+
+ /**
+ * <p>Lists the S3 Intelligent-Tiering configuration from the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>ListBucketIntelligentTieringConfigurations</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html">PutBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketIntelligentTieringConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListBucketIntelligentTieringConfigurationsAsync(const Model::ListBucketIntelligentTieringConfigurationsRequest& request, const ListBucketIntelligentTieringConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns a list of inventory configurations for the bucket. You can have up to
+ * 1,000 analytics configurations per bucket.</p> <p>This operation supports list
+ * pagination and does not return more than 100 configurations at a time. Always
+ * check the <code>IsTruncated</code> element in the response. If there are no more
+ * configurations to list, <code>IsTruncated</code> is set to false. If there are
+ * more configurations to list, <code>IsTruncated</code> is set to true, and there
+ * is a value in <code>NextContinuationToken</code>. You use the
+ * <code>NextContinuationToken</code> value to continue the pagination of the list
+ * by passing the value in continuation-token in the request to <code>GET</code>
+ * the next page.</p> <p> To use this operation, you must have permissions to
+ * perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a> </p> <p>The following operations are related to
+ * <code>ListBucketInventoryConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurations">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::ListBucketInventoryConfigurationsOutcome ListBucketInventoryConfigurations(const Model::ListBucketInventoryConfigurationsRequest& request) const;
+
+ /**
+ * <p>Returns a list of inventory configurations for the bucket. You can have up to
+ * 1,000 analytics configurations per bucket.</p> <p>This operation supports list
+ * pagination and does not return more than 100 configurations at a time. Always
+ * check the <code>IsTruncated</code> element in the response. If there are no more
+ * configurations to list, <code>IsTruncated</code> is set to false. If there are
+ * more configurations to list, <code>IsTruncated</code> is set to true, and there
+ * is a value in <code>NextContinuationToken</code>. You use the
+ * <code>NextContinuationToken</code> value to continue the pagination of the list
+ * by passing the value in continuation-token in the request to <code>GET</code>
+ * the next page.</p> <p> To use this operation, you must have permissions to
+ * perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a> </p> <p>The following operations are related to
+ * <code>ListBucketInventoryConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListBucketInventoryConfigurationsOutcomeCallable ListBucketInventoryConfigurationsCallable(const Model::ListBucketInventoryConfigurationsRequest& request) const;
+
+ /**
+ * <p>Returns a list of inventory configurations for the bucket. You can have up to
+ * 1,000 analytics configurations per bucket.</p> <p>This operation supports list
+ * pagination and does not return more than 100 configurations at a time. Always
+ * check the <code>IsTruncated</code> element in the response. If there are no more
+ * configurations to list, <code>IsTruncated</code> is set to false. If there are
+ * more configurations to list, <code>IsTruncated</code> is set to true, and there
+ * is a value in <code>NextContinuationToken</code>. You use the
+ * <code>NextContinuationToken</code> value to continue the pagination of the list
+ * by passing the value in continuation-token in the request to <code>GET</code>
+ * the next page.</p> <p> To use this operation, you must have permissions to
+ * perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner
+ * has this permission by default. The bucket owner can grant this permission to
+ * others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * the Amazon S3 inventory feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a> </p> <p>The following operations are related to
+ * <code>ListBucketInventoryConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html">PutBucketInventoryConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListBucketInventoryConfigurationsAsync(const Model::ListBucketInventoryConfigurationsRequest& request, const ListBucketInventoryConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Lists the metrics configurations for the bucket. The metrics configurations
+ * are only for the request metrics of the bucket and do not provide information on
+ * daily storage metrics. You can have up to 1,000 configurations per bucket.</p>
+ * <p>This operation supports list pagination and does not return more than 100
+ * configurations at a time. Always check the <code>IsTruncated</code> element in
+ * the response. If there are no more configurations to list,
+ * <code>IsTruncated</code> is set to false. If there are more configurations to
+ * list, <code>IsTruncated</code> is set to true, and there is a value in
+ * <code>NextContinuationToken</code>. You use the
+ * <code>NextContinuationToken</code> value to continue the pagination of the list
+ * by passing the value in <code>continuation-token</code> in the request to
+ * <code>GET</code> the next page.</p> <p>To use this operation, you must have
+ * permissions to perform the <code>s3:GetMetricsConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For more information
+ * about metrics configurations and CloudWatch request metrics, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>ListBucketMetricsConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html">GetBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurations">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::ListBucketMetricsConfigurationsOutcome ListBucketMetricsConfigurations(const Model::ListBucketMetricsConfigurationsRequest& request) const;
+
+ /**
+ * <p>Lists the metrics configurations for the bucket. The metrics configurations
+ * are only for the request metrics of the bucket and do not provide information on
+ * daily storage metrics. You can have up to 1,000 configurations per bucket.</p>
+ * <p>This operation supports list pagination and does not return more than 100
+ * configurations at a time. Always check the <code>IsTruncated</code> element in
+ * the response. If there are no more configurations to list,
+ * <code>IsTruncated</code> is set to false. If there are more configurations to
+ * list, <code>IsTruncated</code> is set to true, and there is a value in
+ * <code>NextContinuationToken</code>. You use the
+ * <code>NextContinuationToken</code> value to continue the pagination of the list
+ * by passing the value in <code>continuation-token</code> in the request to
+ * <code>GET</code> the next page.</p> <p>To use this operation, you must have
+ * permissions to perform the <code>s3:GetMetricsConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For more information
+ * about metrics configurations and CloudWatch request metrics, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>ListBucketMetricsConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html">GetBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListBucketMetricsConfigurationsOutcomeCallable ListBucketMetricsConfigurationsCallable(const Model::ListBucketMetricsConfigurationsRequest& request) const;
+
+ /**
+ * <p>Lists the metrics configurations for the bucket. The metrics configurations
+ * are only for the request metrics of the bucket and do not provide information on
+ * daily storage metrics. You can have up to 1,000 configurations per bucket.</p>
+ * <p>This operation supports list pagination and does not return more than 100
+ * configurations at a time. Always check the <code>IsTruncated</code> element in
+ * the response. If there are no more configurations to list,
+ * <code>IsTruncated</code> is set to false. If there are more configurations to
+ * list, <code>IsTruncated</code> is set to true, and there is a value in
+ * <code>NextContinuationToken</code>. You use the
+ * <code>NextContinuationToken</code> value to continue the pagination of the list
+ * by passing the value in <code>continuation-token</code> in the request to
+ * <code>GET</code> the next page.</p> <p>To use this operation, you must have
+ * permissions to perform the <code>s3:GetMetricsConfiguration</code> action. The
+ * bucket owner has this permission by default. The bucket owner can grant this
+ * permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For more information
+ * about metrics configurations and CloudWatch request metrics, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>ListBucketMetricsConfigurations</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html">GetBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurations">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListBucketMetricsConfigurationsAsync(const Model::ListBucketMetricsConfigurationsRequest& request, const ListBucketMetricsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns a list of all buckets owned by the authenticated sender of the
+ * request.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBuckets">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::ListBucketsOutcome ListBuckets() const;
+
+ /**
+ * <p>Returns a list of all buckets owned by the authenticated sender of the
+ * request.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBuckets">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListBucketsOutcomeCallable ListBucketsCallable() const;
+
+ /**
+ * <p>Returns a list of all buckets owned by the authenticated sender of the
+ * request.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBuckets">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListBucketsAsync(const ListBucketsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+ /**
+ * <p>This operation lists in-progress multipart uploads. An in-progress multipart
+ * upload is a multipart upload that has been initiated using the Initiate
+ * Multipart Upload request, but has not yet been completed or aborted.</p> <p>This
+ * operation returns at most 1,000 multipart uploads in the response. 1,000
+ * multipart uploads is the maximum number of uploads a response can include, which
+ * is also the default value. You can further limit the number of uploads in a
+ * response by specifying the <code>max-uploads</code> parameter in the response.
+ * If additional multipart uploads satisfy the list criteria, the response will
+ * contain an <code>IsTruncated</code> element with the value true. To list the
+ * additional multipart uploads, use the <code>key-marker</code> and
+ * <code>upload-id-marker</code> request parameters.</p> <p>In the response, the
+ * uploads are sorted by key. If your application has initiated more than one
+ * multipart upload using the same object key, then uploads in the response are
+ * first sorted by key. Additionally, uploads are sorted in ascending order within
+ * each key by the upload initiation time.</p> <p>For more information on multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information on permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>ListMultipartUploads</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploads">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::ListMultipartUploadsOutcome ListMultipartUploads(const Model::ListMultipartUploadsRequest& request) const;
+
+ /**
+ * <p>This operation lists in-progress multipart uploads. An in-progress multipart
+ * upload is a multipart upload that has been initiated using the Initiate
+ * Multipart Upload request, but has not yet been completed or aborted.</p> <p>This
+ * operation returns at most 1,000 multipart uploads in the response. 1,000
+ * multipart uploads is the maximum number of uploads a response can include, which
+ * is also the default value. You can further limit the number of uploads in a
+ * response by specifying the <code>max-uploads</code> parameter in the response.
+ * If additional multipart uploads satisfy the list criteria, the response will
+ * contain an <code>IsTruncated</code> element with the value true. To list the
+ * additional multipart uploads, use the <code>key-marker</code> and
+ * <code>upload-id-marker</code> request parameters.</p> <p>In the response, the
+ * uploads are sorted by key. If your application has initiated more than one
+ * multipart upload using the same object key, then uploads in the response are
+ * first sorted by key. Additionally, uploads are sorted in ascending order within
+ * each key by the upload initiation time.</p> <p>For more information on multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information on permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>ListMultipartUploads</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploads">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListMultipartUploadsOutcomeCallable ListMultipartUploadsCallable(const Model::ListMultipartUploadsRequest& request) const;
+
+ /**
+ * <p>This operation lists in-progress multipart uploads. An in-progress multipart
+ * upload is a multipart upload that has been initiated using the Initiate
+ * Multipart Upload request, but has not yet been completed or aborted.</p> <p>This
+ * operation returns at most 1,000 multipart uploads in the response. 1,000
+ * multipart uploads is the maximum number of uploads a response can include, which
+ * is also the default value. You can further limit the number of uploads in a
+ * response by specifying the <code>max-uploads</code> parameter in the response.
+ * If additional multipart uploads satisfy the list criteria, the response will
+ * contain an <code>IsTruncated</code> element with the value true. To list the
+ * additional multipart uploads, use the <code>key-marker</code> and
+ * <code>upload-id-marker</code> request parameters.</p> <p>In the response, the
+ * uploads are sorted by key. If your application has initiated more than one
+ * multipart upload using the same object key, then uploads in the response are
+ * first sorted by key. Additionally, uploads are sorted in ascending order within
+ * each key by the upload initiation time.</p> <p>For more information on multipart
+ * uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information on permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>ListMultipartUploads</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploads">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListMultipartUploadsAsync(const Model::ListMultipartUploadsRequest& request, const ListMultipartUploadsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns metadata about all versions of the objects in a bucket. You can also
+ * use request parameters as selection criteria to return metadata about a subset
+ * of all the object versions. </p> <p> A 200 OK response can contain valid
+ * or invalid XML. Make sure to design your application to parse the contents of
+ * the response and handle it appropriately.</p> <p>To use this operation,
+ * you must have READ access to the bucket.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p> <p>The following operations are related to
+ * <code>ListObjectVersions</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersions">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::ListObjectVersionsOutcome ListObjectVersions(const Model::ListObjectVersionsRequest& request) const;
+
+ /**
+ * <p>Returns metadata about all versions of the objects in a bucket. You can also
+ * use request parameters as selection criteria to return metadata about a subset
+ * of all the object versions. </p> <p> A 200 OK response can contain valid
+ * or invalid XML. Make sure to design your application to parse the contents of
+ * the response and handle it appropriately.</p> <p>To use this operation,
+ * you must have READ access to the bucket.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p> <p>The following operations are related to
+ * <code>ListObjectVersions</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersions">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListObjectVersionsOutcomeCallable ListObjectVersionsCallable(const Model::ListObjectVersionsRequest& request) const;
+
+ /**
+ * <p>Returns metadata about all versions of the objects in a bucket. You can also
+ * use request parameters as selection criteria to return metadata about a subset
+ * of all the object versions. </p> <p> A 200 OK response can contain valid
+ * or invalid XML. Make sure to design your application to parse the contents of
+ * the response and handle it appropriately.</p> <p>To use this operation,
+ * you must have READ access to the bucket.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p> <p>The following operations are related to
+ * <code>ListObjectVersions</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersions">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListObjectVersionsAsync(const Model::ListObjectVersionsRequest& request, const ListObjectVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the
+ * request parameters as selection criteria to return a subset of the objects in a
+ * bucket. A 200 OK response can contain valid or invalid XML. Be sure to design
+ * your application to parse the contents of the response and handle it
+ * appropriately.</p> <p>This API has been revised. We recommend that
+ * you use the newer version, <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>,
+ * when developing applications. For backward compatibility, Amazon S3 continues to
+ * support <code>ListObjects</code>.</p> <p>The following operations
+ * are related to <code>ListObjects</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::ListObjectsOutcome ListObjects(const Model::ListObjectsRequest& request) const;
+
+ /**
+ * <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the
+ * request parameters as selection criteria to return a subset of the objects in a
+ * bucket. A 200 OK response can contain valid or invalid XML. Be sure to design
+ * your application to parse the contents of the response and handle it
+ * appropriately.</p> <p>This API has been revised. We recommend that
+ * you use the newer version, <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>,
+ * when developing applications. For backward compatibility, Amazon S3 continues to
+ * support <code>ListObjects</code>.</p> <p>The following operations
+ * are related to <code>ListObjects</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListObjectsOutcomeCallable ListObjectsCallable(const Model::ListObjectsRequest& request) const;
+
+ /**
+ * <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the
+ * request parameters as selection criteria to return a subset of the objects in a
+ * bucket. A 200 OK response can contain valid or invalid XML. Be sure to design
+ * your application to parse the contents of the response and handle it
+ * appropriately.</p> <p>This API has been revised. We recommend that
+ * you use the newer version, <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>,
+ * when developing applications. For backward compatibility, Amazon S3 continues to
+ * support <code>ListObjects</code>.</p> <p>The following operations
+ * are related to <code>ListObjects</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListObjectsAsync(const Model::ListObjectsRequest& request, const ListObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the
+ * request parameters as selection criteria to return a subset of the objects in a
+ * bucket. A <code>200 OK</code> response can contain valid or invalid XML. Make
+ * sure to design your application to parse the contents of the response and handle
+ * it appropriately.</p> <p>To use this operation, you must have READ access to the
+ * bucket.</p> <p>To use this operation in an AWS Identity and Access Management
+ * (IAM) policy, you must have permissions to perform the
+ * <code>s3:ListBucket</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>This
+ * section describes the latest revision of the API. We recommend that you use this
+ * revised API for application development. For backward compatibility, Amazon S3
+ * continues to support the prior version of this API, <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>.</p>
+ * <p>To get a list of your buckets, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>.</p>
+ * <p>The following operations are related to <code>ListObjectsV2</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::ListObjectsV2Outcome ListObjectsV2(const Model::ListObjectsV2Request& request) const;
+
+ /**
+ * <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the
+ * request parameters as selection criteria to return a subset of the objects in a
+ * bucket. A <code>200 OK</code> response can contain valid or invalid XML. Make
+ * sure to design your application to parse the contents of the response and handle
+ * it appropriately.</p> <p>To use this operation, you must have READ access to the
+ * bucket.</p> <p>To use this operation in an AWS Identity and Access Management
+ * (IAM) policy, you must have permissions to perform the
+ * <code>s3:ListBucket</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>This
+ * section describes the latest revision of the API. We recommend that you use this
+ * revised API for application development. For backward compatibility, Amazon S3
+ * continues to support the prior version of this API, <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>.</p>
+ * <p>To get a list of your buckets, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>.</p>
+ * <p>The following operations are related to <code>ListObjectsV2</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListObjectsV2OutcomeCallable ListObjectsV2Callable(const Model::ListObjectsV2Request& request) const;
+
+ /**
+ * <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the
+ * request parameters as selection criteria to return a subset of the objects in a
+ * bucket. A <code>200 OK</code> response can contain valid or invalid XML. Make
+ * sure to design your application to parse the contents of the response and handle
+ * it appropriately.</p> <p>To use this operation, you must have READ access to the
+ * bucket.</p> <p>To use this operation in an AWS Identity and Access Management
+ * (IAM) policy, you must have permissions to perform the
+ * <code>s3:ListBucket</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>This
+ * section describes the latest revision of the API. We recommend that you use this
+ * revised API for application development. For backward compatibility, Amazon S3
+ * continues to support the prior version of this API, <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html">ListObjects</a>.</p>
+ * <p>To get a list of your buckets, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html">ListBuckets</a>.</p>
+ * <p>The following operations are related to <code>ListObjectsV2</code>:</p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListObjectsV2Async(const Model::ListObjectsV2Request& request, const ListObjectsV2ResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Lists the parts that have been uploaded for a specific multipart upload. This
+ * operation must include the upload ID, which you obtain by sending the initiate
+ * multipart upload request (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>).
+ * This request returns a maximum of 1,000 uploaded parts. The default number of
+ * parts returned is 1,000 parts. You can restrict the number of parts returned by
+ * specifying the <code>max-parts</code> request parameter. If your multipart
+ * upload consists of more than 1,000 parts, the response returns an
+ * <code>IsTruncated</code> field with the value of true, and a
+ * <code>NextPartNumberMarker</code> element. In subsequent <code>ListParts</code>
+ * requests you can include the part-number-marker query string parameter and set
+ * its value to the <code>NextPartNumberMarker</code> field value from the previous
+ * response.</p> <p>For more information on multipart uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information on permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>ListParts</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListParts">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::ListPartsOutcome ListParts(const Model::ListPartsRequest& request) const;
+
+ /**
+ * <p>Lists the parts that have been uploaded for a specific multipart upload. This
+ * operation must include the upload ID, which you obtain by sending the initiate
+ * multipart upload request (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>).
+ * This request returns a maximum of 1,000 uploaded parts. The default number of
+ * parts returned is 1,000 parts. You can restrict the number of parts returned by
+ * specifying the <code>max-parts</code> request parameter. If your multipart
+ * upload consists of more than 1,000 parts, the response returns an
+ * <code>IsTruncated</code> field with the value of true, and a
+ * <code>NextPartNumberMarker</code> element. In subsequent <code>ListParts</code>
+ * requests you can include the part-number-marker query string parameter and set
+ * its value to the <code>NextPartNumberMarker</code> field value from the previous
+ * response.</p> <p>For more information on multipart uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information on permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>ListParts</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListParts">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::ListPartsOutcomeCallable ListPartsCallable(const Model::ListPartsRequest& request) const;
+
+ /**
+ * <p>Lists the parts that have been uploaded for a specific multipart upload. This
+ * operation must include the upload ID, which you obtain by sending the initiate
+ * multipart upload request (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>).
+ * This request returns a maximum of 1,000 uploaded parts. The default number of
+ * parts returned is 1,000 parts. You can restrict the number of parts returned by
+ * specifying the <code>max-parts</code> request parameter. If your multipart
+ * upload consists of more than 1,000 parts, the response returns an
+ * <code>IsTruncated</code> field with the value of true, and a
+ * <code>NextPartNumberMarker</code> element. In subsequent <code>ListParts</code>
+ * requests you can include the part-number-marker query string parameter and set
+ * its value to the <code>NextPartNumberMarker</code> field value from the previous
+ * response.</p> <p>For more information on multipart uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a>.</p> <p>For information on permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a>.</p> <p>The following operations are related to
+ * <code>ListParts</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListParts">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void ListPartsAsync(const Model::ListPartsRequest& request, const ListPartsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the accelerate configuration of an existing bucket. Amazon S3 Transfer
+ * Acceleration is a bucket-level feature that enables you to perform faster data
+ * transfers to Amazon S3.</p> <p> To use this operation, you must have permission
+ * to perform the s3:PutAccelerateConfiguration action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> The Transfer
+ * Acceleration state of a bucket can be set to one of the following two
+ * values:</p> <ul> <li> <p> Enabled – Enables accelerated data transfers to the
+ * bucket.</p> </li> <li> <p> Suspended – Disables accelerated data transfers to
+ * the bucket.</p> </li> </ul> <p>The <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html">GetBucketAccelerateConfiguration</a>
+ * operation returns the transfer acceleration state of a bucket.</p> <p>After
+ * setting the Transfer Acceleration state of a bucket to Enabled, it might take up
+ * to thirty minutes before the data transfer rates to the bucket increase.</p> <p>
+ * The name of the bucket used for Transfer Acceleration must be DNS-compliant and
+ * must not contain periods (".").</p> <p> For more information about transfer
+ * acceleration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a>.</p> <p>The following operations are related to
+ * <code>PutBucketAccelerateConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html">GetBucketAccelerateConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketAccelerateConfigurationOutcome PutBucketAccelerateConfiguration(const Model::PutBucketAccelerateConfigurationRequest& request) const;
+
+ /**
+ * <p>Sets the accelerate configuration of an existing bucket. Amazon S3 Transfer
+ * Acceleration is a bucket-level feature that enables you to perform faster data
+ * transfers to Amazon S3.</p> <p> To use this operation, you must have permission
+ * to perform the s3:PutAccelerateConfiguration action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> The Transfer
+ * Acceleration state of a bucket can be set to one of the following two
+ * values:</p> <ul> <li> <p> Enabled – Enables accelerated data transfers to the
+ * bucket.</p> </li> <li> <p> Suspended – Disables accelerated data transfers to
+ * the bucket.</p> </li> </ul> <p>The <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html">GetBucketAccelerateConfiguration</a>
+ * operation returns the transfer acceleration state of a bucket.</p> <p>After
+ * setting the Transfer Acceleration state of a bucket to Enabled, it might take up
+ * to thirty minutes before the data transfer rates to the bucket increase.</p> <p>
+ * The name of the bucket used for Transfer Acceleration must be DNS-compliant and
+ * must not contain periods (".").</p> <p> For more information about transfer
+ * acceleration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a>.</p> <p>The following operations are related to
+ * <code>PutBucketAccelerateConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html">GetBucketAccelerateConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketAccelerateConfigurationOutcomeCallable PutBucketAccelerateConfigurationCallable(const Model::PutBucketAccelerateConfigurationRequest& request) const;
+
+ /**
+ * <p>Sets the accelerate configuration of an existing bucket. Amazon S3 Transfer
+ * Acceleration is a bucket-level feature that enables you to perform faster data
+ * transfers to Amazon S3.</p> <p> To use this operation, you must have permission
+ * to perform the s3:PutAccelerateConfiguration action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> The Transfer
+ * Acceleration state of a bucket can be set to one of the following two
+ * values:</p> <ul> <li> <p> Enabled – Enables accelerated data transfers to the
+ * bucket.</p> </li> <li> <p> Suspended – Disables accelerated data transfers to
+ * the bucket.</p> </li> </ul> <p>The <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html">GetBucketAccelerateConfiguration</a>
+ * operation returns the transfer acceleration state of a bucket.</p> <p>After
+ * setting the Transfer Acceleration state of a bucket to Enabled, it might take up
+ * to thirty minutes before the data transfer rates to the bucket increase.</p> <p>
+ * The name of the bucket used for Transfer Acceleration must be DNS-compliant and
+ * must not contain periods (".").</p> <p> For more information about transfer
+ * acceleration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Transfer
+ * Acceleration</a>.</p> <p>The following operations are related to
+ * <code>PutBucketAccelerateConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html">GetBucketAccelerateConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketAccelerateConfigurationAsync(const Model::PutBucketAccelerateConfigurationRequest& request, const PutBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the permissions on an existing bucket using access control lists (ACL).
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. To set the ACL of a bucket, you must have <code>WRITE_ACP</code>
+ * permission.</p> <p>You can use one of the following two ways to set a bucket's
+ * permissions:</p> <ul> <li> <p>Specify the ACL in the request body</p> </li> <li>
+ * <p>Specify permissions using request headers</p> </li> </ul> <p>You
+ * cannot specify access permission using both the body and the request
+ * headers.</p> <p>Depending on your application needs, you may choose to
+ * set the ACL on a bucket using either the request body or the headers. For
+ * example, if you have an existing application that updates a bucket ACL using the
+ * request body, then you can continue to use that approach.</p> <p> <b>Access
+ * Permissions</b> </p> <p>You can set access permissions using one of the
+ * following methods:</p> <ul> <li> <p>Specify a canned ACL with the
+ * <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined
+ * ACLs, known as <i>canned ACLs</i>. Each canned ACL has a predefined set of
+ * grantees and permissions. Specify the canned ACL name as the value of
+ * <code>x-amz-acl</code>. If you use this header, you cannot use other access
+ * control-specific headers in your request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. When using these headers, you specify explicit access permissions and
+ * grantees (AWS accounts or Amazon S3 groups) who will receive the permission. If
+ * you use these ACL-specific headers, you cannot use the <code>x-amz-acl</code>
+ * header to set a canned ACL. These parameters map to the set of permissions that
+ * Amazon S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-write</code> header grants create,
+ * overwrite, and delete objects permission to LogDelivery group predefined by
+ * Amazon S3 and two AWS accounts identified by their email addresses.</p> <p>
+ * <code>x-amz-grant-write: uri="http://acs.amazonaws.com/groups/s3/LogDelivery",
+ * id="111122223333", id="555566667777" </code> </p> </li> </ul> <p>You can use
+ * either a canned ACL or specify access permissions explicitly. You cannot do
+ * both.</p> <p> <b>Grantee Values</b> </p> <p>You can specify the person (grantee)
+ * to whom you're assigning access rights (using request elements) in the following
+ * ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser. </p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAcl">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::PutBucketAclOutcome PutBucketAcl(const Model::PutBucketAclRequest& request) const;
+
+ /**
+ * <p>Sets the permissions on an existing bucket using access control lists (ACL).
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. To set the ACL of a bucket, you must have <code>WRITE_ACP</code>
+ * permission.</p> <p>You can use one of the following two ways to set a bucket's
+ * permissions:</p> <ul> <li> <p>Specify the ACL in the request body</p> </li> <li>
+ * <p>Specify permissions using request headers</p> </li> </ul> <p>You
+ * cannot specify access permission using both the body and the request
+ * headers.</p> <p>Depending on your application needs, you may choose to
+ * set the ACL on a bucket using either the request body or the headers. For
+ * example, if you have an existing application that updates a bucket ACL using the
+ * request body, then you can continue to use that approach.</p> <p> <b>Access
+ * Permissions</b> </p> <p>You can set access permissions using one of the
+ * following methods:</p> <ul> <li> <p>Specify a canned ACL with the
+ * <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined
+ * ACLs, known as <i>canned ACLs</i>. Each canned ACL has a predefined set of
+ * grantees and permissions. Specify the canned ACL name as the value of
+ * <code>x-amz-acl</code>. If you use this header, you cannot use other access
+ * control-specific headers in your request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. When using these headers, you specify explicit access permissions and
+ * grantees (AWS accounts or Amazon S3 groups) who will receive the permission. If
+ * you use these ACL-specific headers, you cannot use the <code>x-amz-acl</code>
+ * header to set a canned ACL. These parameters map to the set of permissions that
+ * Amazon S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-write</code> header grants create,
+ * overwrite, and delete objects permission to LogDelivery group predefined by
+ * Amazon S3 and two AWS accounts identified by their email addresses.</p> <p>
+ * <code>x-amz-grant-write: uri="http://acs.amazonaws.com/groups/s3/LogDelivery",
+ * id="111122223333", id="555566667777" </code> </p> </li> </ul> <p>You can use
+ * either a canned ACL or specify access permissions explicitly. You cannot do
+ * both.</p> <p> <b>Grantee Values</b> </p> <p>You can specify the person (grantee)
+ * to whom you're assigning access rights (using request elements) in the following
+ * ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser. </p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAcl">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketAclOutcomeCallable PutBucketAclCallable(const Model::PutBucketAclRequest& request) const;
+
+ /**
+ * <p>Sets the permissions on an existing bucket using access control lists (ACL).
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Using
+ * ACLs</a>. To set the ACL of a bucket, you must have <code>WRITE_ACP</code>
+ * permission.</p> <p>You can use one of the following two ways to set a bucket's
+ * permissions:</p> <ul> <li> <p>Specify the ACL in the request body</p> </li> <li>
+ * <p>Specify permissions using request headers</p> </li> </ul> <p>You
+ * cannot specify access permission using both the body and the request
+ * headers.</p> <p>Depending on your application needs, you may choose to
+ * set the ACL on a bucket using either the request body or the headers. For
+ * example, if you have an existing application that updates a bucket ACL using the
+ * request body, then you can continue to use that approach.</p> <p> <b>Access
+ * Permissions</b> </p> <p>You can set access permissions using one of the
+ * following methods:</p> <ul> <li> <p>Specify a canned ACL with the
+ * <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined
+ * ACLs, known as <i>canned ACLs</i>. Each canned ACL has a predefined set of
+ * grantees and permissions. Specify the canned ACL name as the value of
+ * <code>x-amz-acl</code>. If you use this header, you cannot use other access
+ * control-specific headers in your request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. When using these headers, you specify explicit access permissions and
+ * grantees (AWS accounts or Amazon S3 groups) who will receive the permission. If
+ * you use these ACL-specific headers, you cannot use the <code>x-amz-acl</code>
+ * header to set a canned ACL. These parameters map to the set of permissions that
+ * Amazon S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-write</code> header grants create,
+ * overwrite, and delete objects permission to LogDelivery group predefined by
+ * Amazon S3 and two AWS accounts identified by their email addresses.</p> <p>
+ * <code>x-amz-grant-write: uri="http://acs.amazonaws.com/groups/s3/LogDelivery",
+ * id="111122223333", id="555566667777" </code> </p> </li> </ul> <p>You can use
+ * either a canned ACL or specify access permissions explicitly. You cannot do
+ * both.</p> <p> <b>Grantee Values</b> </p> <p>You can specify the person (grantee)
+ * to whom you're assigning access rights (using request elements) in the following
+ * ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser. </p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html">GetObjectAcl</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAcl">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketAclAsync(const Model::PutBucketAclRequest& request, const PutBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets an analytics configuration for the bucket (specified by the analytics
+ * configuration ID). You can have up to 1,000 analytics configurations per
+ * bucket.</p> <p>You can choose to have storage class analysis export analysis
+ * reports sent to a comma-separated values (CSV) flat file. See the
+ * <code>DataExport</code> request element. Reports are updated daily and are based
+ * on the object filters that you configure. When selecting data export, you
+ * specify a destination bucket and an optional destination prefix where the file
+ * is written. You can export the data to a destination bucket in a different
+ * account. However, the destination bucket must be in the same Region as the
+ * bucket that you are making the PUT analytics configuration to. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>You must create a
+ * bucket policy on the destination bucket where the exported file is written to
+ * grant permissions to Amazon S3 to write objects to the bucket. For an example
+ * policy, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9">Granting
+ * Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p>
+ * <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p class="title">
+ * <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>HTTP Error: HTTP 400 Bad
+ * Request</i> </p> </li> <li> <p> <i>Code: InvalidArgument</i> </p> </li> <li> <p>
+ * <i>Cause: Invalid argument.</i> </p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>HTTP Error: HTTP 400 Bad Request</i> </p> </li> <li> <p> <i>Code:
+ * TooManyConfigurations</i> </p> </li> <li> <p> <i>Cause: You are attempting to
+ * create a new configuration but have already reached the 1,000-configuration
+ * limit.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>HTTP Error: HTTP 403
+ * Forbidden</i> </p> </li> <li> <p> <i>Code: AccessDenied</i> </p> </li> <li> <p>
+ * <i>Cause: You are not the owner of the specified bucket, or you do not have the
+ * s3:PutAnalyticsConfiguration bucket permission to set the configuration on the
+ * bucket.</i> </p> </li> </ul> </li> </ul> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketAnalyticsConfigurationOutcome PutBucketAnalyticsConfiguration(const Model::PutBucketAnalyticsConfigurationRequest& request) const;
+
+ /**
+ * <p>Sets an analytics configuration for the bucket (specified by the analytics
+ * configuration ID). You can have up to 1,000 analytics configurations per
+ * bucket.</p> <p>You can choose to have storage class analysis export analysis
+ * reports sent to a comma-separated values (CSV) flat file. See the
+ * <code>DataExport</code> request element. Reports are updated daily and are based
+ * on the object filters that you configure. When selecting data export, you
+ * specify a destination bucket and an optional destination prefix where the file
+ * is written. You can export the data to a destination bucket in a different
+ * account. However, the destination bucket must be in the same Region as the
+ * bucket that you are making the PUT analytics configuration to. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>You must create a
+ * bucket policy on the destination bucket where the exported file is written to
+ * grant permissions to Amazon S3 to write objects to the bucket. For an example
+ * policy, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9">Granting
+ * Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p>
+ * <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p class="title">
+ * <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>HTTP Error: HTTP 400 Bad
+ * Request</i> </p> </li> <li> <p> <i>Code: InvalidArgument</i> </p> </li> <li> <p>
+ * <i>Cause: Invalid argument.</i> </p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>HTTP Error: HTTP 400 Bad Request</i> </p> </li> <li> <p> <i>Code:
+ * TooManyConfigurations</i> </p> </li> <li> <p> <i>Cause: You are attempting to
+ * create a new configuration but have already reached the 1,000-configuration
+ * limit.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>HTTP Error: HTTP 403
+ * Forbidden</i> </p> </li> <li> <p> <i>Code: AccessDenied</i> </p> </li> <li> <p>
+ * <i>Cause: You are not the owner of the specified bucket, or you do not have the
+ * s3:PutAnalyticsConfiguration bucket permission to set the configuration on the
+ * bucket.</i> </p> </li> </ul> </li> </ul> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketAnalyticsConfigurationOutcomeCallable PutBucketAnalyticsConfigurationCallable(const Model::PutBucketAnalyticsConfigurationRequest& request) const;
+
+ /**
+ * <p>Sets an analytics configuration for the bucket (specified by the analytics
+ * configuration ID). You can have up to 1,000 analytics configurations per
+ * bucket.</p> <p>You can choose to have storage class analysis export analysis
+ * reports sent to a comma-separated values (CSV) flat file. See the
+ * <code>DataExport</code> request element. Reports are updated daily and are based
+ * on the object filters that you configure. When selecting data export, you
+ * specify a destination bucket and an optional destination prefix where the file
+ * is written. You can export the data to a destination bucket in a different
+ * account. However, the destination bucket must be in the same Region as the
+ * bucket that you are making the PUT analytics configuration to. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html">Amazon
+ * S3 Analytics – Storage Class Analysis</a>. </p> <p>You must create a
+ * bucket policy on the destination bucket where the exported file is written to
+ * grant permissions to Amazon S3 to write objects to the bucket. For an example
+ * policy, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9">Granting
+ * Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p>
+ * <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p class="title">
+ * <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>HTTP Error: HTTP 400 Bad
+ * Request</i> </p> </li> <li> <p> <i>Code: InvalidArgument</i> </p> </li> <li> <p>
+ * <i>Cause: Invalid argument.</i> </p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>HTTP Error: HTTP 400 Bad Request</i> </p> </li> <li> <p> <i>Code:
+ * TooManyConfigurations</i> </p> </li> <li> <p> <i>Cause: You are attempting to
+ * create a new configuration but have already reached the 1,000-configuration
+ * limit.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>HTTP Error: HTTP 403
+ * Forbidden</i> </p> </li> <li> <p> <i>Code: AccessDenied</i> </p> </li> <li> <p>
+ * <i>Cause: You are not the owner of the specified bucket, or you do not have the
+ * s3:PutAnalyticsConfiguration bucket permission to set the configuration on the
+ * bucket.</i> </p> </li> </ul> </li> </ul> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html">GetBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html">DeleteBucketAnalyticsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html">ListBucketAnalyticsConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketAnalyticsConfigurationAsync(const Model::PutBucketAnalyticsConfigurationRequest& request, const PutBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the <code>cors</code> configuration for your bucket. If the
+ * configuration exists, Amazon S3 replaces it.</p> <p>To use this operation, you
+ * must be allowed to perform the <code>s3:PutBucketCORS</code> action. By default,
+ * the bucket owner has this permission and can grant it to others.</p> <p>You set
+ * this configuration on a bucket so that the bucket can service cross-origin
+ * requests. For example, you might want to enable a request whose origin is
+ * <code>http://www.example.com</code> to access your Amazon S3 bucket at
+ * <code>my.example.bucket.com</code> by using the browser's
+ * <code>XMLHttpRequest</code> capability.</p> <p>To enable cross-origin resource
+ * sharing (CORS) on a bucket, you add the <code>cors</code> subresource to the
+ * bucket. The <code>cors</code> subresource is an XML document in which you
+ * configure rules that identify origins and the HTTP methods that can be executed
+ * on your bucket. The document is limited to 64 KB in size. </p> <p>When Amazon S3
+ * receives a cross-origin request (or a pre-flight OPTIONS request) against a
+ * bucket, it evaluates the <code>cors</code> configuration on the bucket and uses
+ * the first <code>CORSRule</code> rule that matches the incoming browser request
+ * to enable a cross-origin request. For a rule to match, the following conditions
+ * must be met:</p> <ul> <li> <p>The request's <code>Origin</code> header must
+ * match <code>AllowedOrigin</code> elements.</p> </li> <li> <p>The request method
+ * (for example, GET, PUT, HEAD, and so on) or the
+ * <code>Access-Control-Request-Method</code> header in case of a pre-flight
+ * <code>OPTIONS</code> request must be one of the <code>AllowedMethod</code>
+ * elements. </p> </li> <li> <p>Every header specified in the
+ * <code>Access-Control-Request-Headers</code> request header of a pre-flight
+ * request must match an <code>AllowedHeader</code> element. </p> </li> </ul> <p>
+ * For more information about CORS, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p class="title"> <b>Related Resources</b> </p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html">GetBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html">DeleteBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html">RESTOPTIONSobject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCors">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketCorsOutcome PutBucketCors(const Model::PutBucketCorsRequest& request) const;
+
+ /**
+ * <p>Sets the <code>cors</code> configuration for your bucket. If the
+ * configuration exists, Amazon S3 replaces it.</p> <p>To use this operation, you
+ * must be allowed to perform the <code>s3:PutBucketCORS</code> action. By default,
+ * the bucket owner has this permission and can grant it to others.</p> <p>You set
+ * this configuration on a bucket so that the bucket can service cross-origin
+ * requests. For example, you might want to enable a request whose origin is
+ * <code>http://www.example.com</code> to access your Amazon S3 bucket at
+ * <code>my.example.bucket.com</code> by using the browser's
+ * <code>XMLHttpRequest</code> capability.</p> <p>To enable cross-origin resource
+ * sharing (CORS) on a bucket, you add the <code>cors</code> subresource to the
+ * bucket. The <code>cors</code> subresource is an XML document in which you
+ * configure rules that identify origins and the HTTP methods that can be executed
+ * on your bucket. The document is limited to 64 KB in size. </p> <p>When Amazon S3
+ * receives a cross-origin request (or a pre-flight OPTIONS request) against a
+ * bucket, it evaluates the <code>cors</code> configuration on the bucket and uses
+ * the first <code>CORSRule</code> rule that matches the incoming browser request
+ * to enable a cross-origin request. For a rule to match, the following conditions
+ * must be met:</p> <ul> <li> <p>The request's <code>Origin</code> header must
+ * match <code>AllowedOrigin</code> elements.</p> </li> <li> <p>The request method
+ * (for example, GET, PUT, HEAD, and so on) or the
+ * <code>Access-Control-Request-Method</code> header in case of a pre-flight
+ * <code>OPTIONS</code> request must be one of the <code>AllowedMethod</code>
+ * elements. </p> </li> <li> <p>Every header specified in the
+ * <code>Access-Control-Request-Headers</code> request header of a pre-flight
+ * request must match an <code>AllowedHeader</code> element. </p> </li> </ul> <p>
+ * For more information about CORS, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p class="title"> <b>Related Resources</b> </p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html">GetBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html">DeleteBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html">RESTOPTIONSobject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCors">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketCorsOutcomeCallable PutBucketCorsCallable(const Model::PutBucketCorsRequest& request) const;
+
+ /**
+ * <p>Sets the <code>cors</code> configuration for your bucket. If the
+ * configuration exists, Amazon S3 replaces it.</p> <p>To use this operation, you
+ * must be allowed to perform the <code>s3:PutBucketCORS</code> action. By default,
+ * the bucket owner has this permission and can grant it to others.</p> <p>You set
+ * this configuration on a bucket so that the bucket can service cross-origin
+ * requests. For example, you might want to enable a request whose origin is
+ * <code>http://www.example.com</code> to access your Amazon S3 bucket at
+ * <code>my.example.bucket.com</code> by using the browser's
+ * <code>XMLHttpRequest</code> capability.</p> <p>To enable cross-origin resource
+ * sharing (CORS) on a bucket, you add the <code>cors</code> subresource to the
+ * bucket. The <code>cors</code> subresource is an XML document in which you
+ * configure rules that identify origins and the HTTP methods that can be executed
+ * on your bucket. The document is limited to 64 KB in size. </p> <p>When Amazon S3
+ * receives a cross-origin request (or a pre-flight OPTIONS request) against a
+ * bucket, it evaluates the <code>cors</code> configuration on the bucket and uses
+ * the first <code>CORSRule</code> rule that matches the incoming browser request
+ * to enable a cross-origin request. For a rule to match, the following conditions
+ * must be met:</p> <ul> <li> <p>The request's <code>Origin</code> header must
+ * match <code>AllowedOrigin</code> elements.</p> </li> <li> <p>The request method
+ * (for example, GET, PUT, HEAD, and so on) or the
+ * <code>Access-Control-Request-Method</code> header in case of a pre-flight
+ * <code>OPTIONS</code> request must be one of the <code>AllowedMethod</code>
+ * elements. </p> </li> <li> <p>Every header specified in the
+ * <code>Access-Control-Request-Headers</code> request header of a pre-flight
+ * request must match an <code>AllowedHeader</code> element. </p> </li> </ul> <p>
+ * For more information about CORS, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p class="title"> <b>Related Resources</b> </p> <ul>
+ * <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html">GetBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html">DeleteBucketCors</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html">RESTOPTIONSobject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCors">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketCorsAsync(const Model::PutBucketCorsRequest& request, const PutBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This operation uses the <code>encryption</code> subresource to configure
+ * default encryption and Amazon S3 Bucket Key for an existing bucket.</p>
+ * <p>Default encryption for a bucket can use server-side encryption with Amazon
+ * S3-managed keys (SSE-S3) or AWS KMS customer master keys (SSE-KMS). If you
+ * specify default encryption using SSE-KMS, you can also configure Amazon S3
+ * Bucket Key. For information about default encryption, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 default bucket encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>. For more information about S3 Bucket Keys, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p>This operation requires AWS Signature Version 4. For more
+ * information, see <a href="sig-v4-authenticating-requests.html"> Authenticating
+ * Requests (AWS Signature Version 4)</a>. </p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutEncryptionConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the Amazon Simple Storage
+ * Service Developer Guide. </p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html">GetBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html">DeleteBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryption">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketEncryptionOutcome PutBucketEncryption(const Model::PutBucketEncryptionRequest& request) const;
+
+ /**
+ * <p>This operation uses the <code>encryption</code> subresource to configure
+ * default encryption and Amazon S3 Bucket Key for an existing bucket.</p>
+ * <p>Default encryption for a bucket can use server-side encryption with Amazon
+ * S3-managed keys (SSE-S3) or AWS KMS customer master keys (SSE-KMS). If you
+ * specify default encryption using SSE-KMS, you can also configure Amazon S3
+ * Bucket Key. For information about default encryption, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 default bucket encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>. For more information about S3 Bucket Keys, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p>This operation requires AWS Signature Version 4. For more
+ * information, see <a href="sig-v4-authenticating-requests.html"> Authenticating
+ * Requests (AWS Signature Version 4)</a>. </p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutEncryptionConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the Amazon Simple Storage
+ * Service Developer Guide. </p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html">GetBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html">DeleteBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryption">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketEncryptionOutcomeCallable PutBucketEncryptionCallable(const Model::PutBucketEncryptionRequest& request) const;
+
+ /**
+ * <p>This operation uses the <code>encryption</code> subresource to configure
+ * default encryption and Amazon S3 Bucket Key for an existing bucket.</p>
+ * <p>Default encryption for a bucket can use server-side encryption with Amazon
+ * S3-managed keys (SSE-S3) or AWS KMS customer master keys (SSE-KMS). If you
+ * specify default encryption using SSE-KMS, you can also configure Amazon S3
+ * Bucket Key. For information about default encryption, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 default bucket encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>. For more information about S3 Bucket Keys, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p>This operation requires AWS Signature Version 4. For more
+ * information, see <a href="sig-v4-authenticating-requests.html"> Authenticating
+ * Requests (AWS Signature Version 4)</a>. </p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutEncryptionConfiguration</code> action. The bucket owner has this
+ * permission by default. The bucket owner can grant this permission to others. For
+ * more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the Amazon Simple Storage
+ * Service Developer Guide. </p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html">GetBucketEncryption</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html">DeleteBucketEncryption</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryption">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketEncryptionAsync(const Model::PutBucketEncryptionRequest& request, const PutBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Puts a S3 Intelligent-Tiering configuration to the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>PutBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketIntelligentTieringConfigurationOutcome PutBucketIntelligentTieringConfiguration(const Model::PutBucketIntelligentTieringConfigurationRequest& request) const;
+
+ /**
+ * <p>Puts a S3 Intelligent-Tiering configuration to the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>PutBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketIntelligentTieringConfigurationOutcomeCallable PutBucketIntelligentTieringConfigurationCallable(const Model::PutBucketIntelligentTieringConfigurationRequest& request) const;
+
+ /**
+ * <p>Puts a S3 Intelligent-Tiering configuration to the specified bucket.</p>
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead. S3 Intelligent-Tiering delivers
+ * automatic cost savings by moving data between access tiers, when access patterns
+ * change.</p> <p>The S3 Intelligent-Tiering storage class is suitable for objects
+ * larger than 128 KB that you plan to store for at least 30 days. If the size of
+ * an object is less than 128 KB, it is not eligible for auto-tiering. Smaller
+ * objects can be stored, but they are always charged at the frequent access tier
+ * rates in the S3 Intelligent-Tiering storage class. </p> <p>If you delete an
+ * object before the end of the 30-day minimum storage duration period, you are
+ * charged for 30 days. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p> <p>Operations related to
+ * <code>PutBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li>
+ * <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketIntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketIntelligentTieringConfigurationAsync(const Model::PutBucketIntelligentTieringConfigurationRequest& request, const PutBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This implementation of the <code>PUT</code> operation adds an inventory
+ * configuration (identified by the inventory ID) to the bucket. You can have up to
+ * 1,000 inventory configurations per bucket. </p> <p>Amazon S3 inventory generates
+ * inventories of the objects in the bucket on a daily or weekly basis, and the
+ * results are published to a flat file. The bucket that is inventoried is called
+ * the <i>source</i> bucket, and the bucket where the inventory flat file is stored
+ * is called the <i>destination</i> bucket. The <i>destination</i> bucket must be
+ * in the same AWS Region as the <i>source</i> bucket. </p> <p>When you configure
+ * an inventory for a <i>source</i> bucket, you specify the <i>destination</i>
+ * bucket where you want the inventory to be stored, and whether to generate the
+ * inventory daily or weekly. You can also configure what object metadata to
+ * include and whether to inventory all object versions or only current versions.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a> in the Amazon Simple Storage Service Developer Guide.</p>
+ * <p>You must create a bucket policy on the <i>destination</i> bucket
+ * to grant permissions to Amazon S3 to write objects to the bucket in the defined
+ * location. For an example policy, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9">
+ * Granting Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p>
+ * <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this
+ * permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the Amazon Simple Storage
+ * Service Developer Guide.</p> <p class="title"> <b>Special Errors</b> </p> <ul>
+ * <li> <p class="title"> <b>HTTP 400 Bad Request Error</b> </p> <ul> <li> <p>
+ * <i>Code:</i> InvalidArgument</p> </li> <li> <p> <i>Cause:</i> Invalid
+ * Argument</p> </li> </ul> </li> <li> <p class="title"> <b>HTTP 400 Bad Request
+ * Error</b> </p> <ul> <li> <p> <i>Code:</i> TooManyConfigurations</p> </li> <li>
+ * <p> <i>Cause:</i> You are attempting to create a new configuration but have
+ * already reached the 1,000-configuration limit. </p> </li> </ul> </li> <li> <p
+ * class="title"> <b>HTTP 403 Forbidden Error</b> </p> <ul> <li> <p> <i>Code:</i>
+ * AccessDenied</p> </li> <li> <p> <i>Cause:</i> You are not the owner of the
+ * specified bucket, or you do not have the
+ * <code>s3:PutInventoryConfiguration</code> bucket permission to set the
+ * configuration on the bucket. </p> </li> </ul> </li> </ul> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketInventoryConfigurationOutcome PutBucketInventoryConfiguration(const Model::PutBucketInventoryConfigurationRequest& request) const;
+
+ /**
+ * <p>This implementation of the <code>PUT</code> operation adds an inventory
+ * configuration (identified by the inventory ID) to the bucket. You can have up to
+ * 1,000 inventory configurations per bucket. </p> <p>Amazon S3 inventory generates
+ * inventories of the objects in the bucket on a daily or weekly basis, and the
+ * results are published to a flat file. The bucket that is inventoried is called
+ * the <i>source</i> bucket, and the bucket where the inventory flat file is stored
+ * is called the <i>destination</i> bucket. The <i>destination</i> bucket must be
+ * in the same AWS Region as the <i>source</i> bucket. </p> <p>When you configure
+ * an inventory for a <i>source</i> bucket, you specify the <i>destination</i>
+ * bucket where you want the inventory to be stored, and whether to generate the
+ * inventory daily or weekly. You can also configure what object metadata to
+ * include and whether to inventory all object versions or only current versions.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a> in the Amazon Simple Storage Service Developer Guide.</p>
+ * <p>You must create a bucket policy on the <i>destination</i> bucket
+ * to grant permissions to Amazon S3 to write objects to the bucket in the defined
+ * location. For an example policy, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9">
+ * Granting Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p>
+ * <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this
+ * permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the Amazon Simple Storage
+ * Service Developer Guide.</p> <p class="title"> <b>Special Errors</b> </p> <ul>
+ * <li> <p class="title"> <b>HTTP 400 Bad Request Error</b> </p> <ul> <li> <p>
+ * <i>Code:</i> InvalidArgument</p> </li> <li> <p> <i>Cause:</i> Invalid
+ * Argument</p> </li> </ul> </li> <li> <p class="title"> <b>HTTP 400 Bad Request
+ * Error</b> </p> <ul> <li> <p> <i>Code:</i> TooManyConfigurations</p> </li> <li>
+ * <p> <i>Cause:</i> You are attempting to create a new configuration but have
+ * already reached the 1,000-configuration limit. </p> </li> </ul> </li> <li> <p
+ * class="title"> <b>HTTP 403 Forbidden Error</b> </p> <ul> <li> <p> <i>Code:</i>
+ * AccessDenied</p> </li> <li> <p> <i>Cause:</i> You are not the owner of the
+ * specified bucket, or you do not have the
+ * <code>s3:PutInventoryConfiguration</code> bucket permission to set the
+ * configuration on the bucket. </p> </li> </ul> </li> </ul> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketInventoryConfigurationOutcomeCallable PutBucketInventoryConfigurationCallable(const Model::PutBucketInventoryConfigurationRequest& request) const;
+
+ /**
+ * <p>This implementation of the <code>PUT</code> operation adds an inventory
+ * configuration (identified by the inventory ID) to the bucket. You can have up to
+ * 1,000 inventory configurations per bucket. </p> <p>Amazon S3 inventory generates
+ * inventories of the objects in the bucket on a daily or weekly basis, and the
+ * results are published to a flat file. The bucket that is inventoried is called
+ * the <i>source</i> bucket, and the bucket where the inventory flat file is stored
+ * is called the <i>destination</i> bucket. The <i>destination</i> bucket must be
+ * in the same AWS Region as the <i>source</i> bucket. </p> <p>When you configure
+ * an inventory for a <i>source</i> bucket, you specify the <i>destination</i>
+ * bucket where you want the inventory to be stored, and whether to generate the
+ * inventory daily or weekly. You can also configure what object metadata to
+ * include and whether to inventory all object versions or only current versions.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html">Amazon
+ * S3 Inventory</a> in the Amazon Simple Storage Service Developer Guide.</p>
+ * <p>You must create a bucket policy on the <i>destination</i> bucket
+ * to grant permissions to Amazon S3 to write objects to the bucket in the defined
+ * location. For an example policy, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9">
+ * Granting Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p>
+ * <p>To use this operation, you must have permissions to perform the
+ * <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this
+ * permission by default and can grant this permission to others. For more
+ * information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the Amazon Simple Storage
+ * Service Developer Guide.</p> <p class="title"> <b>Special Errors</b> </p> <ul>
+ * <li> <p class="title"> <b>HTTP 400 Bad Request Error</b> </p> <ul> <li> <p>
+ * <i>Code:</i> InvalidArgument</p> </li> <li> <p> <i>Cause:</i> Invalid
+ * Argument</p> </li> </ul> </li> <li> <p class="title"> <b>HTTP 400 Bad Request
+ * Error</b> </p> <ul> <li> <p> <i>Code:</i> TooManyConfigurations</p> </li> <li>
+ * <p> <i>Cause:</i> You are attempting to create a new configuration but have
+ * already reached the 1,000-configuration limit. </p> </li> </ul> </li> <li> <p
+ * class="title"> <b>HTTP 403 Forbidden Error</b> </p> <ul> <li> <p> <i>Code:</i>
+ * AccessDenied</p> </li> <li> <p> <i>Cause:</i> You are not the owner of the
+ * specified bucket, or you do not have the
+ * <code>s3:PutInventoryConfiguration</code> bucket permission to set the
+ * configuration on the bucket. </p> </li> </ul> </li> </ul> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html">GetBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html">DeleteBucketInventoryConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html">ListBucketInventoryConfigurations</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketInventoryConfigurationAsync(const Model::PutBucketInventoryConfigurationRequest& request, const PutBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Creates a new lifecycle configuration for the bucket or replaces an existing
+ * lifecycle configuration. For information about lifecycle configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>Bucket
+ * lifecycle configuration now supports specifying a lifecycle rule using an object
+ * key name prefix, one or more object tags, or a combination of both. Accordingly,
+ * this section describes the latest API. The previous version of the API supported
+ * filtering based only on an object key name prefix, which is supported for
+ * backward compatibility. For the related API description, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>.</p>
+ * <p> <b>Rules</b> </p> <p>You specify the lifecycle configuration in your
+ * request body. The lifecycle configuration is specified as XML consisting of one
+ * or more rules. Each rule consists of the following:</p> <ul> <li> <p>Filter
+ * identifying a subset of objects to which the rule applies. The filter can be
+ * based on a key name prefix, object tags, or a combination of both.</p> </li>
+ * <li> <p>Status whether the rule is in effect.</p> </li> <li> <p>One or more
+ * lifecycle transition and expiration actions that you want Amazon S3 to perform
+ * on the objects identified by the filter. If the state of your bucket is
+ * versioning-enabled or versioning-suspended, you can have many versions of the
+ * same object (one current version and zero or more noncurrent versions). Amazon
+ * S3 provides predefined actions that you can specify for current and noncurrent
+ * object versions.</p> </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html">Lifecycle
+ * Configuration Elements</a>.</p> <p> <b>Permissions</b> </p> <p>By default, all
+ * Amazon S3 resources are private, including buckets, objects, and related
+ * subresources (for example, lifecycle configuration and website configuration).
+ * Only the resource owner (that is, the AWS account that created it) can access
+ * the resource. The resource owner can optionally grant access permissions to
+ * others by writing an access policy. For this operation, a user must get the
+ * s3:PutLifecycleConfiguration permission.</p> <p>You can also explicitly deny
+ * permissions. Explicit deny also supersedes any other permissions. If you want to
+ * block users or accounts from removing or deleting objects from your bucket, you
+ * must deny them permissions for the following actions:</p> <ul> <li>
+ * <p>s3:DeleteObject</p> </li> <li> <p>s3:DeleteObjectVersion</p> </li> <li>
+ * <p>s3:PutLifecycleConfiguration</p> </li> </ul> <p>For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following are
+ * related to <code>PutBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-configuration-examples.html">Examples
+ * of Lifecycle Configuration</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html">DeleteBucketLifecycle</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketLifecycleConfigurationOutcome PutBucketLifecycleConfiguration(const Model::PutBucketLifecycleConfigurationRequest& request) const;
+
+ /**
+ * <p>Creates a new lifecycle configuration for the bucket or replaces an existing
+ * lifecycle configuration. For information about lifecycle configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>Bucket
+ * lifecycle configuration now supports specifying a lifecycle rule using an object
+ * key name prefix, one or more object tags, or a combination of both. Accordingly,
+ * this section describes the latest API. The previous version of the API supported
+ * filtering based only on an object key name prefix, which is supported for
+ * backward compatibility. For the related API description, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>.</p>
+ * <p> <b>Rules</b> </p> <p>You specify the lifecycle configuration in your
+ * request body. The lifecycle configuration is specified as XML consisting of one
+ * or more rules. Each rule consists of the following:</p> <ul> <li> <p>Filter
+ * identifying a subset of objects to which the rule applies. The filter can be
+ * based on a key name prefix, object tags, or a combination of both.</p> </li>
+ * <li> <p>Status whether the rule is in effect.</p> </li> <li> <p>One or more
+ * lifecycle transition and expiration actions that you want Amazon S3 to perform
+ * on the objects identified by the filter. If the state of your bucket is
+ * versioning-enabled or versioning-suspended, you can have many versions of the
+ * same object (one current version and zero or more noncurrent versions). Amazon
+ * S3 provides predefined actions that you can specify for current and noncurrent
+ * object versions.</p> </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html">Lifecycle
+ * Configuration Elements</a>.</p> <p> <b>Permissions</b> </p> <p>By default, all
+ * Amazon S3 resources are private, including buckets, objects, and related
+ * subresources (for example, lifecycle configuration and website configuration).
+ * Only the resource owner (that is, the AWS account that created it) can access
+ * the resource. The resource owner can optionally grant access permissions to
+ * others by writing an access policy. For this operation, a user must get the
+ * s3:PutLifecycleConfiguration permission.</p> <p>You can also explicitly deny
+ * permissions. Explicit deny also supersedes any other permissions. If you want to
+ * block users or accounts from removing or deleting objects from your bucket, you
+ * must deny them permissions for the following actions:</p> <ul> <li>
+ * <p>s3:DeleteObject</p> </li> <li> <p>s3:DeleteObjectVersion</p> </li> <li>
+ * <p>s3:PutLifecycleConfiguration</p> </li> </ul> <p>For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following are
+ * related to <code>PutBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-configuration-examples.html">Examples
+ * of Lifecycle Configuration</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html">DeleteBucketLifecycle</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketLifecycleConfigurationOutcomeCallable PutBucketLifecycleConfigurationCallable(const Model::PutBucketLifecycleConfigurationRequest& request) const;
+
+ /**
+ * <p>Creates a new lifecycle configuration for the bucket or replaces an existing
+ * lifecycle configuration. For information about lifecycle configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>Bucket
+ * lifecycle configuration now supports specifying a lifecycle rule using an object
+ * key name prefix, one or more object tags, or a combination of both. Accordingly,
+ * this section describes the latest API. The previous version of the API supported
+ * filtering based only on an object key name prefix, which is supported for
+ * backward compatibility. For the related API description, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html">PutBucketLifecycle</a>.</p>
+ * <p> <b>Rules</b> </p> <p>You specify the lifecycle configuration in your
+ * request body. The lifecycle configuration is specified as XML consisting of one
+ * or more rules. Each rule consists of the following:</p> <ul> <li> <p>Filter
+ * identifying a subset of objects to which the rule applies. The filter can be
+ * based on a key name prefix, object tags, or a combination of both.</p> </li>
+ * <li> <p>Status whether the rule is in effect.</p> </li> <li> <p>One or more
+ * lifecycle transition and expiration actions that you want Amazon S3 to perform
+ * on the objects identified by the filter. If the state of your bucket is
+ * versioning-enabled or versioning-suspended, you can have many versions of the
+ * same object (one current version and zero or more noncurrent versions). Amazon
+ * S3 provides predefined actions that you can specify for current and noncurrent
+ * object versions.</p> </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html">Lifecycle
+ * Configuration Elements</a>.</p> <p> <b>Permissions</b> </p> <p>By default, all
+ * Amazon S3 resources are private, including buckets, objects, and related
+ * subresources (for example, lifecycle configuration and website configuration).
+ * Only the resource owner (that is, the AWS account that created it) can access
+ * the resource. The resource owner can optionally grant access permissions to
+ * others by writing an access policy. For this operation, a user must get the
+ * s3:PutLifecycleConfiguration permission.</p> <p>You can also explicitly deny
+ * permissions. Explicit deny also supersedes any other permissions. If you want to
+ * block users or accounts from removing or deleting objects from your bucket, you
+ * must deny them permissions for the following actions:</p> <ul> <li>
+ * <p>s3:DeleteObject</p> </li> <li> <p>s3:DeleteObjectVersion</p> </li> <li>
+ * <p>s3:PutLifecycleConfiguration</p> </li> </ul> <p>For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following are
+ * related to <code>PutBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-configuration-examples.html">Examples
+ * of Lifecycle Configuration</a> </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html">DeleteBucketLifecycle</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketLifecycleConfigurationAsync(const Model::PutBucketLifecycleConfigurationRequest& request, const PutBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Set the logging parameters for a bucket and to specify permissions for who
+ * can view and modify the logging parameters. All logs are saved to buckets in the
+ * same AWS Region as the source bucket. To set the logging status of a bucket, you
+ * must be the bucket owner.</p> <p>The bucket owner is automatically granted
+ * FULL_CONTROL to all logs. You use the <code>Grantee</code> request element to
+ * grant access to other people. The <code>Permissions</code> request element
+ * specifies the kind of access the grantee has to the logs.</p> <p> <b>Grantee
+ * Values</b> </p> <p>You can specify the person (grantee) to whom you're assigning
+ * access rights (using request elements) in the following ways:</p> <ul> <li>
+ * <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request.</p> </li> <li> <p>By Email address:</p> <p> <code> &lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;&lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser.</p> </li> <li> <p>By URI:</p>
+ * <p> <code>&lt;Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> </ul> <p>To enable logging, you use LoggingEnabled and its children
+ * request elements. To disable logging, you use an empty BucketLoggingStatus
+ * request element:</p> <p> <code>&lt;BucketLoggingStatus
+ * xmlns="http://doc.s3.amazonaws.com/2006-03-01" /&gt;</code> </p> <p>For more
+ * information about server access logging, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html">Server
+ * Access Logging</a>. </p> <p>For more information about creating a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>.
+ * For more information about returning the logging status of a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html">GetBucketLogging</a>.</p>
+ * <p>The following operations are related to <code>PutBucketLogging</code>:</p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html">GetBucketLogging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLogging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketLoggingOutcome PutBucketLogging(const Model::PutBucketLoggingRequest& request) const;
+
+ /**
+ * <p>Set the logging parameters for a bucket and to specify permissions for who
+ * can view and modify the logging parameters. All logs are saved to buckets in the
+ * same AWS Region as the source bucket. To set the logging status of a bucket, you
+ * must be the bucket owner.</p> <p>The bucket owner is automatically granted
+ * FULL_CONTROL to all logs. You use the <code>Grantee</code> request element to
+ * grant access to other people. The <code>Permissions</code> request element
+ * specifies the kind of access the grantee has to the logs.</p> <p> <b>Grantee
+ * Values</b> </p> <p>You can specify the person (grantee) to whom you're assigning
+ * access rights (using request elements) in the following ways:</p> <ul> <li>
+ * <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request.</p> </li> <li> <p>By Email address:</p> <p> <code> &lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;&lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser.</p> </li> <li> <p>By URI:</p>
+ * <p> <code>&lt;Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> </ul> <p>To enable logging, you use LoggingEnabled and its children
+ * request elements. To disable logging, you use an empty BucketLoggingStatus
+ * request element:</p> <p> <code>&lt;BucketLoggingStatus
+ * xmlns="http://doc.s3.amazonaws.com/2006-03-01" /&gt;</code> </p> <p>For more
+ * information about server access logging, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html">Server
+ * Access Logging</a>. </p> <p>For more information about creating a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>.
+ * For more information about returning the logging status of a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html">GetBucketLogging</a>.</p>
+ * <p>The following operations are related to <code>PutBucketLogging</code>:</p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html">GetBucketLogging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLogging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketLoggingOutcomeCallable PutBucketLoggingCallable(const Model::PutBucketLoggingRequest& request) const;
+
+ /**
+ * <p>Set the logging parameters for a bucket and to specify permissions for who
+ * can view and modify the logging parameters. All logs are saved to buckets in the
+ * same AWS Region as the source bucket. To set the logging status of a bucket, you
+ * must be the bucket owner.</p> <p>The bucket owner is automatically granted
+ * FULL_CONTROL to all logs. You use the <code>Grantee</code> request element to
+ * grant access to other people. The <code>Permissions</code> request element
+ * specifies the kind of access the grantee has to the logs.</p> <p> <b>Grantee
+ * Values</b> </p> <p>You can specify the person (grantee) to whom you're assigning
+ * access rights (using request elements) in the following ways:</p> <ul> <li>
+ * <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request.</p> </li> <li> <p>By Email address:</p> <p> <code> &lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;&lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser.</p> </li> <li> <p>By URI:</p>
+ * <p> <code>&lt;Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> </ul> <p>To enable logging, you use LoggingEnabled and its children
+ * request elements. To disable logging, you use an empty BucketLoggingStatus
+ * request element:</p> <p> <code>&lt;BucketLoggingStatus
+ * xmlns="http://doc.s3.amazonaws.com/2006-03-01" /&gt;</code> </p> <p>For more
+ * information about server access logging, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html">Server
+ * Access Logging</a>. </p> <p>For more information about creating a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>.
+ * For more information about returning the logging status of a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html">GetBucketLogging</a>.</p>
+ * <p>The following operations are related to <code>PutBucketLogging</code>:</p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html">GetBucketLogging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLogging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketLoggingAsync(const Model::PutBucketLoggingRequest& request, const PutBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets a metrics configuration (specified by the metrics configuration ID) for
+ * the bucket. You can have up to 1,000 metrics configurations per bucket. If
+ * you're updating an existing metrics configuration, note that this is a full
+ * replacement of the existing metrics configuration. If you don't include the
+ * elements you want to keep, they are erased.</p> <p>To use this operation, you
+ * must have permissions to perform the <code>s3:PutMetricsConfiguration</code>
+ * action. The bucket owner has this permission by default. The bucket owner can
+ * grant this permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>PutBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> </ul> <p> <code>GetBucketLifecycle</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>TooManyConfigurations</code> </p> <ul>
+ * <li> <p>Description: You are attempting to create a new configuration but have
+ * already reached the 1,000-configuration limit.</p> </li> <li> <p>HTTP Status
+ * Code: HTTP 400 Bad Request</p> </li> </ul> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketMetricsConfigurationOutcome PutBucketMetricsConfiguration(const Model::PutBucketMetricsConfigurationRequest& request) const;
+
+ /**
+ * <p>Sets a metrics configuration (specified by the metrics configuration ID) for
+ * the bucket. You can have up to 1,000 metrics configurations per bucket. If
+ * you're updating an existing metrics configuration, note that this is a full
+ * replacement of the existing metrics configuration. If you don't include the
+ * elements you want to keep, they are erased.</p> <p>To use this operation, you
+ * must have permissions to perform the <code>s3:PutMetricsConfiguration</code>
+ * action. The bucket owner has this permission by default. The bucket owner can
+ * grant this permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>PutBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> </ul> <p> <code>GetBucketLifecycle</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>TooManyConfigurations</code> </p> <ul>
+ * <li> <p>Description: You are attempting to create a new configuration but have
+ * already reached the 1,000-configuration limit.</p> </li> <li> <p>HTTP Status
+ * Code: HTTP 400 Bad Request</p> </li> </ul> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketMetricsConfigurationOutcomeCallable PutBucketMetricsConfigurationCallable(const Model::PutBucketMetricsConfigurationRequest& request) const;
+
+ /**
+ * <p>Sets a metrics configuration (specified by the metrics configuration ID) for
+ * the bucket. You can have up to 1,000 metrics configurations per bucket. If
+ * you're updating an existing metrics configuration, note that this is a full
+ * replacement of the existing metrics configuration. If you don't include the
+ * elements you want to keep, they are erased.</p> <p>To use this operation, you
+ * must have permissions to perform the <code>s3:PutMetricsConfiguration</code>
+ * action. The bucket owner has this permission by default. The bucket owner can
+ * grant this permission to others. For more information about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about
+ * CloudWatch request metrics for Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html">Monitoring
+ * Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related
+ * to <code>PutBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html">DeleteBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html">PutBucketMetricsConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html">ListBucketMetricsConfigurations</a>
+ * </p> </li> </ul> <p> <code>GetBucketLifecycle</code> has the following special
+ * error:</p> <ul> <li> <p>Error code: <code>TooManyConfigurations</code> </p> <ul>
+ * <li> <p>Description: You are attempting to create a new configuration but have
+ * already reached the 1,000-configuration limit.</p> </li> <li> <p>HTTP Status
+ * Code: HTTP 400 Bad Request</p> </li> </ul> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketMetricsConfigurationAsync(const Model::PutBucketMetricsConfigurationRequest& request, const PutBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Enables notifications of specified events for a bucket. For more information
+ * about event notifications, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a>.</p> <p>Using this API, you can replace an existing
+ * notification configuration. The configuration is an XML file that defines the
+ * event types that you want Amazon S3 to publish and the destination where you
+ * want Amazon S3 to publish an event notification when it detects an event of the
+ * specified type.</p> <p>By default, your bucket has no event notifications
+ * configured. That is, the notification configuration will be an empty
+ * <code>NotificationConfiguration</code>.</p> <p>
+ * <code>&lt;NotificationConfiguration&gt;</code> </p> <p>
+ * <code>&lt;/NotificationConfiguration&gt;</code> </p> <p>This operation replaces
+ * the existing notification configuration with the configuration you include in
+ * the request body.</p> <p>After Amazon S3 receives this request, it first
+ * verifies that any Amazon Simple Notification Service (Amazon SNS) or Amazon
+ * Simple Queue Service (Amazon SQS) destination exists, and that the bucket owner
+ * has permission to publish to it by sending a test notification. In the case of
+ * AWS Lambda destinations, Amazon S3 verifies that the Lambda function permissions
+ * grant Amazon S3 permission to invoke the function from the Amazon S3 bucket. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Notifications for Amazon S3 Events</a>.</p> <p>You can disable notifications by
+ * adding the empty NotificationConfiguration element.</p> <p>By default, only the
+ * bucket owner can configure notifications on a bucket. However, bucket owners can
+ * use a bucket policy to grant permission to other users to set this configuration
+ * with <code>s3:PutBucketNotification</code> permission.</p> <p>The PUT
+ * notification is an atomic operation. For example, suppose your notification
+ * configuration includes SNS topic, SQS queue, and Lambda function configurations.
+ * When you send a PUT request with this configuration, Amazon S3 sends test
+ * messages to your SNS topic. If the message fails, the entire PUT operation will
+ * fail, and Amazon S3 will not add the configuration to your bucket.</p>
+ * <p> <b>Responses</b> </p> <p>If the configuration in the request body includes
+ * only one <code>TopicConfiguration</code> specifying only the
+ * <code>s3:ReducedRedundancyLostObject</code> event type, the response will also
+ * include the <code>x-amz-sns-test-message-id</code> header containing the message
+ * ID of the test notification sent to the topic.</p> <p>The following operation is
+ * related to <code>PutBucketNotificationConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html">GetBucketNotificationConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketNotificationConfigurationOutcome PutBucketNotificationConfiguration(const Model::PutBucketNotificationConfigurationRequest& request) const;
+
+ /**
+ * <p>Enables notifications of specified events for a bucket. For more information
+ * about event notifications, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a>.</p> <p>Using this API, you can replace an existing
+ * notification configuration. The configuration is an XML file that defines the
+ * event types that you want Amazon S3 to publish and the destination where you
+ * want Amazon S3 to publish an event notification when it detects an event of the
+ * specified type.</p> <p>By default, your bucket has no event notifications
+ * configured. That is, the notification configuration will be an empty
+ * <code>NotificationConfiguration</code>.</p> <p>
+ * <code>&lt;NotificationConfiguration&gt;</code> </p> <p>
+ * <code>&lt;/NotificationConfiguration&gt;</code> </p> <p>This operation replaces
+ * the existing notification configuration with the configuration you include in
+ * the request body.</p> <p>After Amazon S3 receives this request, it first
+ * verifies that any Amazon Simple Notification Service (Amazon SNS) or Amazon
+ * Simple Queue Service (Amazon SQS) destination exists, and that the bucket owner
+ * has permission to publish to it by sending a test notification. In the case of
+ * AWS Lambda destinations, Amazon S3 verifies that the Lambda function permissions
+ * grant Amazon S3 permission to invoke the function from the Amazon S3 bucket. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Notifications for Amazon S3 Events</a>.</p> <p>You can disable notifications by
+ * adding the empty NotificationConfiguration element.</p> <p>By default, only the
+ * bucket owner can configure notifications on a bucket. However, bucket owners can
+ * use a bucket policy to grant permission to other users to set this configuration
+ * with <code>s3:PutBucketNotification</code> permission.</p> <p>The PUT
+ * notification is an atomic operation. For example, suppose your notification
+ * configuration includes SNS topic, SQS queue, and Lambda function configurations.
+ * When you send a PUT request with this configuration, Amazon S3 sends test
+ * messages to your SNS topic. If the message fails, the entire PUT operation will
+ * fail, and Amazon S3 will not add the configuration to your bucket.</p>
+ * <p> <b>Responses</b> </p> <p>If the configuration in the request body includes
+ * only one <code>TopicConfiguration</code> specifying only the
+ * <code>s3:ReducedRedundancyLostObject</code> event type, the response will also
+ * include the <code>x-amz-sns-test-message-id</code> header containing the message
+ * ID of the test notification sent to the topic.</p> <p>The following operation is
+ * related to <code>PutBucketNotificationConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html">GetBucketNotificationConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketNotificationConfigurationOutcomeCallable PutBucketNotificationConfigurationCallable(const Model::PutBucketNotificationConfigurationRequest& request) const;
+
+ /**
+ * <p>Enables notifications of specified events for a bucket. For more information
+ * about event notifications, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a>.</p> <p>Using this API, you can replace an existing
+ * notification configuration. The configuration is an XML file that defines the
+ * event types that you want Amazon S3 to publish and the destination where you
+ * want Amazon S3 to publish an event notification when it detects an event of the
+ * specified type.</p> <p>By default, your bucket has no event notifications
+ * configured. That is, the notification configuration will be an empty
+ * <code>NotificationConfiguration</code>.</p> <p>
+ * <code>&lt;NotificationConfiguration&gt;</code> </p> <p>
+ * <code>&lt;/NotificationConfiguration&gt;</code> </p> <p>This operation replaces
+ * the existing notification configuration with the configuration you include in
+ * the request body.</p> <p>After Amazon S3 receives this request, it first
+ * verifies that any Amazon Simple Notification Service (Amazon SNS) or Amazon
+ * Simple Queue Service (Amazon SQS) destination exists, and that the bucket owner
+ * has permission to publish to it by sending a test notification. In the case of
+ * AWS Lambda destinations, Amazon S3 verifies that the Lambda function permissions
+ * grant Amazon S3 permission to invoke the function from the Amazon S3 bucket. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Notifications for Amazon S3 Events</a>.</p> <p>You can disable notifications by
+ * adding the empty NotificationConfiguration element.</p> <p>By default, only the
+ * bucket owner can configure notifications on a bucket. However, bucket owners can
+ * use a bucket policy to grant permission to other users to set this configuration
+ * with <code>s3:PutBucketNotification</code> permission.</p> <p>The PUT
+ * notification is an atomic operation. For example, suppose your notification
+ * configuration includes SNS topic, SQS queue, and Lambda function configurations.
+ * When you send a PUT request with this configuration, Amazon S3 sends test
+ * messages to your SNS topic. If the message fails, the entire PUT operation will
+ * fail, and Amazon S3 will not add the configuration to your bucket.</p>
+ * <p> <b>Responses</b> </p> <p>If the configuration in the request body includes
+ * only one <code>TopicConfiguration</code> specifying only the
+ * <code>s3:ReducedRedundancyLostObject</code> event type, the response will also
+ * include the <code>x-amz-sns-test-message-id</code> header containing the message
+ * ID of the test notification sent to the topic.</p> <p>The following operation is
+ * related to <code>PutBucketNotificationConfiguration</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html">GetBucketNotificationConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketNotificationConfigurationAsync(const Model::PutBucketNotificationConfigurationRequest& request, const PutBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Creates or modifies <code>OwnershipControls</code> for an Amazon S3 bucket.
+ * To use this operation, you must have the
+ * <code>s3:PutBucketOwnershipControls</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. </p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>PutBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>GetBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>DeleteBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketOwnershipControlsOutcome PutBucketOwnershipControls(const Model::PutBucketOwnershipControlsRequest& request) const;
+
+ /**
+ * <p>Creates or modifies <code>OwnershipControls</code> for an Amazon S3 bucket.
+ * To use this operation, you must have the
+ * <code>s3:PutBucketOwnershipControls</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. </p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>PutBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>GetBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>DeleteBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketOwnershipControlsOutcomeCallable PutBucketOwnershipControlsCallable(const Model::PutBucketOwnershipControlsRequest& request) const;
+
+ /**
+ * <p>Creates or modifies <code>OwnershipControls</code> for an Amazon S3 bucket.
+ * To use this operation, you must have the
+ * <code>s3:PutBucketOwnershipControls</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>. </p> <p>For information about Amazon S3 Object
+ * Ownership, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html">Using
+ * Object Ownership</a>. </p> <p>The following operations are related to
+ * <code>PutBucketOwnershipControls</code>:</p> <ul> <li> <p>
+ * <a>GetBucketOwnershipControls</a> </p> </li> <li> <p>
+ * <a>DeleteBucketOwnershipControls</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketOwnershipControls">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketOwnershipControlsAsync(const Model::PutBucketOwnershipControlsRequest& request, const PutBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Applies an Amazon S3 bucket policy to an Amazon S3 bucket. If you are using
+ * an identity other than the root user of the AWS account that owns the bucket,
+ * the calling identity must have the <code>PutBucketPolicy</code> permissions on
+ * the specified bucket and belong to the bucket owner's account in order to use
+ * this operation.</p> <p>If you don't have <code>PutBucketPolicy</code>
+ * permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you
+ * have the correct permissions, but you're not using an identity that belongs to
+ * the bucket owner's account, Amazon S3 returns a <code>405 Method Not
+ * Allowed</code> error.</p> <p> As a security precaution, the root
+ * user of the AWS account that owns a bucket can always use this operation, even
+ * if the policy explicitly denies the root user the ability to perform this
+ * action. </p> <p>For more information about bucket policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>The following operations are
+ * related to <code>PutBucketPolicy</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicy">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketPolicyOutcome PutBucketPolicy(const Model::PutBucketPolicyRequest& request) const;
+
+ /**
+ * <p>Applies an Amazon S3 bucket policy to an Amazon S3 bucket. If you are using
+ * an identity other than the root user of the AWS account that owns the bucket,
+ * the calling identity must have the <code>PutBucketPolicy</code> permissions on
+ * the specified bucket and belong to the bucket owner's account in order to use
+ * this operation.</p> <p>If you don't have <code>PutBucketPolicy</code>
+ * permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you
+ * have the correct permissions, but you're not using an identity that belongs to
+ * the bucket owner's account, Amazon S3 returns a <code>405 Method Not
+ * Allowed</code> error.</p> <p> As a security precaution, the root
+ * user of the AWS account that owns a bucket can always use this operation, even
+ * if the policy explicitly denies the root user the ability to perform this
+ * action. </p> <p>For more information about bucket policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>The following operations are
+ * related to <code>PutBucketPolicy</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicy">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketPolicyOutcomeCallable PutBucketPolicyCallable(const Model::PutBucketPolicyRequest& request) const;
+
+ /**
+ * <p>Applies an Amazon S3 bucket policy to an Amazon S3 bucket. If you are using
+ * an identity other than the root user of the AWS account that owns the bucket,
+ * the calling identity must have the <code>PutBucketPolicy</code> permissions on
+ * the specified bucket and belong to the bucket owner's account in order to use
+ * this operation.</p> <p>If you don't have <code>PutBucketPolicy</code>
+ * permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you
+ * have the correct permissions, but you're not using an identity that belongs to
+ * the bucket owner's account, Amazon S3 returns a <code>405 Method Not
+ * Allowed</code> error.</p> <p> As a security precaution, the root
+ * user of the AWS account that owns a bucket can always use this operation, even
+ * if the policy explicitly denies the root user the ability to perform this
+ * action. </p> <p>For more information about bucket policies, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html">Using
+ * Bucket Policies and User Policies</a>.</p> <p>The following operations are
+ * related to <code>PutBucketPolicy</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicy">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketPolicyAsync(const Model::PutBucketPolicyRequest& request, const PutBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p> Creates a replication configuration or replaces an existing one. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon S3 Developer Guide</i>. </p> <p>To perform this
+ * operation, the user or role performing the operation must have the <a
+ * href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html">iam:PassRole</a>
+ * permission.</p> <p>Specify the replication configuration in the request
+ * body. In the replication configuration, you provide the name of the destination
+ * bucket or buckets where you want Amazon S3 to replicate objects, the IAM role
+ * that Amazon S3 can assume to replicate objects on your behalf, and other
+ * relevant information.</p> <p>A replication configuration must include at least
+ * one rule, and can contain a maximum of 1,000. Each rule identifies a subset of
+ * objects to replicate by filtering the objects in the source bucket. To choose
+ * additional subsets of objects to replicate, add a rule for each subset.</p>
+ * <p>To specify a subset of the objects in the source bucket to apply a
+ * replication rule to, add the Filter element as a child of the Rule element. You
+ * can filter objects based on an object key prefix, one or more object tags, or
+ * both. When you add the Filter element in the configuration, you must also add
+ * the following elements: <code>DeleteMarkerReplication</code>,
+ * <code>Status</code>, and <code>Priority</code>.</p> <p>If you are using
+ * an earlier version of the replication configuration, Amazon S3 handles
+ * replication of delete markers differently. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations">Backward
+ * Compatibility</a>.</p> <p>For information about enabling versioning on a
+ * bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html">Using
+ * Versioning</a>.</p> <p>By default, a resource owner, in this case the AWS
+ * account that created the bucket, can perform this operation. The resource owner
+ * can also grant others permissions to perform the operation. For more information
+ * about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <b>Handling
+ * Replication of Encrypted Objects</b> </p> <p>By default, Amazon S3 doesn't
+ * replicate objects that are stored at rest using server-side encryption with CMKs
+ * stored in AWS KMS. To replicate AWS KMS-encrypted objects, add the following:
+ * <code>SourceSelectionCriteria</code>, <code>SseKmsEncryptedObjects</code>,
+ * <code>Status</code>, <code>EncryptionConfiguration</code>, and
+ * <code>ReplicaKmsKeyID</code>. For information about replication configuration,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-config-for-kms-objects.html">Replicating
+ * Objects Created with SSE Using CMKs stored in AWS KMS</a>.</p> <p>For
+ * information on <code>PutBucketReplication</code> errors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList">List
+ * of replication-related error codes</a> </p> <p>The following operations are
+ * related to <code>PutBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html">GetBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html">DeleteBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplication">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketReplicationOutcome PutBucketReplication(const Model::PutBucketReplicationRequest& request) const;
+
+ /**
+ * <p> Creates a replication configuration or replaces an existing one. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon S3 Developer Guide</i>. </p> <p>To perform this
+ * operation, the user or role performing the operation must have the <a
+ * href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html">iam:PassRole</a>
+ * permission.</p> <p>Specify the replication configuration in the request
+ * body. In the replication configuration, you provide the name of the destination
+ * bucket or buckets where you want Amazon S3 to replicate objects, the IAM role
+ * that Amazon S3 can assume to replicate objects on your behalf, and other
+ * relevant information.</p> <p>A replication configuration must include at least
+ * one rule, and can contain a maximum of 1,000. Each rule identifies a subset of
+ * objects to replicate by filtering the objects in the source bucket. To choose
+ * additional subsets of objects to replicate, add a rule for each subset.</p>
+ * <p>To specify a subset of the objects in the source bucket to apply a
+ * replication rule to, add the Filter element as a child of the Rule element. You
+ * can filter objects based on an object key prefix, one or more object tags, or
+ * both. When you add the Filter element in the configuration, you must also add
+ * the following elements: <code>DeleteMarkerReplication</code>,
+ * <code>Status</code>, and <code>Priority</code>.</p> <p>If you are using
+ * an earlier version of the replication configuration, Amazon S3 handles
+ * replication of delete markers differently. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations">Backward
+ * Compatibility</a>.</p> <p>For information about enabling versioning on a
+ * bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html">Using
+ * Versioning</a>.</p> <p>By default, a resource owner, in this case the AWS
+ * account that created the bucket, can perform this operation. The resource owner
+ * can also grant others permissions to perform the operation. For more information
+ * about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <b>Handling
+ * Replication of Encrypted Objects</b> </p> <p>By default, Amazon S3 doesn't
+ * replicate objects that are stored at rest using server-side encryption with CMKs
+ * stored in AWS KMS. To replicate AWS KMS-encrypted objects, add the following:
+ * <code>SourceSelectionCriteria</code>, <code>SseKmsEncryptedObjects</code>,
+ * <code>Status</code>, <code>EncryptionConfiguration</code>, and
+ * <code>ReplicaKmsKeyID</code>. For information about replication configuration,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-config-for-kms-objects.html">Replicating
+ * Objects Created with SSE Using CMKs stored in AWS KMS</a>.</p> <p>For
+ * information on <code>PutBucketReplication</code> errors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList">List
+ * of replication-related error codes</a> </p> <p>The following operations are
+ * related to <code>PutBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html">GetBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html">DeleteBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplication">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketReplicationOutcomeCallable PutBucketReplicationCallable(const Model::PutBucketReplicationRequest& request) const;
+
+ /**
+ * <p> Creates a replication configuration or replaces an existing one. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon S3 Developer Guide</i>. </p> <p>To perform this
+ * operation, the user or role performing the operation must have the <a
+ * href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html">iam:PassRole</a>
+ * permission.</p> <p>Specify the replication configuration in the request
+ * body. In the replication configuration, you provide the name of the destination
+ * bucket or buckets where you want Amazon S3 to replicate objects, the IAM role
+ * that Amazon S3 can assume to replicate objects on your behalf, and other
+ * relevant information.</p> <p>A replication configuration must include at least
+ * one rule, and can contain a maximum of 1,000. Each rule identifies a subset of
+ * objects to replicate by filtering the objects in the source bucket. To choose
+ * additional subsets of objects to replicate, add a rule for each subset.</p>
+ * <p>To specify a subset of the objects in the source bucket to apply a
+ * replication rule to, add the Filter element as a child of the Rule element. You
+ * can filter objects based on an object key prefix, one or more object tags, or
+ * both. When you add the Filter element in the configuration, you must also add
+ * the following elements: <code>DeleteMarkerReplication</code>,
+ * <code>Status</code>, and <code>Priority</code>.</p> <p>If you are using
+ * an earlier version of the replication configuration, Amazon S3 handles
+ * replication of delete markers differently. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations">Backward
+ * Compatibility</a>.</p> <p>For information about enabling versioning on a
+ * bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html">Using
+ * Versioning</a>.</p> <p>By default, a resource owner, in this case the AWS
+ * account that created the bucket, can perform this operation. The resource owner
+ * can also grant others permissions to perform the operation. For more information
+ * about permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <b>Handling
+ * Replication of Encrypted Objects</b> </p> <p>By default, Amazon S3 doesn't
+ * replicate objects that are stored at rest using server-side encryption with CMKs
+ * stored in AWS KMS. To replicate AWS KMS-encrypted objects, add the following:
+ * <code>SourceSelectionCriteria</code>, <code>SseKmsEncryptedObjects</code>,
+ * <code>Status</code>, <code>EncryptionConfiguration</code>, and
+ * <code>ReplicaKmsKeyID</code>. For information about replication configuration,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-config-for-kms-objects.html">Replicating
+ * Objects Created with SSE Using CMKs stored in AWS KMS</a>.</p> <p>For
+ * information on <code>PutBucketReplication</code> errors, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList">List
+ * of replication-related error codes</a> </p> <p>The following operations are
+ * related to <code>PutBucketReplication</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html">GetBucketReplication</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html">DeleteBucketReplication</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplication">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketReplicationAsync(const Model::PutBucketReplicationRequest& request, const PutBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the request payment configuration for a bucket. By default, the bucket
+ * owner pays for downloads from the bucket. This configuration parameter enables
+ * the bucket owner (only) to specify that the person requesting the download will
+ * be charged for the download. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html">Requester
+ * Pays Buckets</a>.</p> <p>The following operations are related to
+ * <code>PutBucketRequestPayment</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html">GetBucketRequestPayment</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPayment">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketRequestPaymentOutcome PutBucketRequestPayment(const Model::PutBucketRequestPaymentRequest& request) const;
+
+ /**
+ * <p>Sets the request payment configuration for a bucket. By default, the bucket
+ * owner pays for downloads from the bucket. This configuration parameter enables
+ * the bucket owner (only) to specify that the person requesting the download will
+ * be charged for the download. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html">Requester
+ * Pays Buckets</a>.</p> <p>The following operations are related to
+ * <code>PutBucketRequestPayment</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html">GetBucketRequestPayment</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPayment">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketRequestPaymentOutcomeCallable PutBucketRequestPaymentCallable(const Model::PutBucketRequestPaymentRequest& request) const;
+
+ /**
+ * <p>Sets the request payment configuration for a bucket. By default, the bucket
+ * owner pays for downloads from the bucket. This configuration parameter enables
+ * the bucket owner (only) to specify that the person requesting the download will
+ * be charged for the download. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html">Requester
+ * Pays Buckets</a>.</p> <p>The following operations are related to
+ * <code>PutBucketRequestPayment</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html">GetBucketRequestPayment</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPayment">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketRequestPaymentAsync(const Model::PutBucketRequestPaymentRequest& request, const PutBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the tags for a bucket.</p> <p>Use tags to organize your AWS bill to
+ * reflect your own cost structure. To do this, sign up to get your AWS account
+ * bill with tag key values included. Then, to see the cost of combined resources,
+ * organize your billing information according to resources with the same tag key
+ * values. For example, you can tag several resources with a specific application
+ * name, and then organize your billing information to see the total cost of that
+ * application across several services. For more information, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html">Cost
+ * Allocation and Tagging</a>.</p> <p>Within a bucket, if you add a tag that
+ * has the same key as an existing tag, the new value overwrites the old value. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CostAllocTagging.html">Using
+ * Cost Allocation in Amazon S3 Bucket Tags</a>.</p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutBucketTagging</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>
+ * <code>PutBucketTagging</code> has the following special errors:</p> <ul> <li>
+ * <p>Error code: <code>InvalidTagError</code> </p> <ul> <li> <p>Description: The
+ * tag provided was not a valid tag. This error can occur if the tag did not pass
+ * input validation. For information about tag restrictions, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html">User-Defined
+ * Tag Restrictions</a> and <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/aws-tag-restrictions.html">AWS-Generated
+ * Cost Allocation Tag Restrictions</a>.</p> </li> </ul> </li> <li> <p>Error code:
+ * <code>MalformedXMLError</code> </p> <ul> <li> <p>Description: The XML provided
+ * does not match the schema.</p> </li> </ul> </li> <li> <p>Error code:
+ * <code>OperationAbortedError </code> </p> <ul> <li> <p>Description: A conflicting
+ * conditional operation is currently in progress against this resource. Please try
+ * again.</p> </li> </ul> </li> <li> <p>Error code: <code>InternalError</code> </p>
+ * <ul> <li> <p>Description: The service was unable to apply the provided tag to
+ * the bucket.</p> </li> </ul> </li> </ul> <p>The following operations are related
+ * to <code>PutBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html">GetBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html">DeleteBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTagging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketTaggingOutcome PutBucketTagging(const Model::PutBucketTaggingRequest& request) const;
+
+ /**
+ * <p>Sets the tags for a bucket.</p> <p>Use tags to organize your AWS bill to
+ * reflect your own cost structure. To do this, sign up to get your AWS account
+ * bill with tag key values included. Then, to see the cost of combined resources,
+ * organize your billing information according to resources with the same tag key
+ * values. For example, you can tag several resources with a specific application
+ * name, and then organize your billing information to see the total cost of that
+ * application across several services. For more information, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html">Cost
+ * Allocation and Tagging</a>.</p> <p>Within a bucket, if you add a tag that
+ * has the same key as an existing tag, the new value overwrites the old value. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CostAllocTagging.html">Using
+ * Cost Allocation in Amazon S3 Bucket Tags</a>.</p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutBucketTagging</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>
+ * <code>PutBucketTagging</code> has the following special errors:</p> <ul> <li>
+ * <p>Error code: <code>InvalidTagError</code> </p> <ul> <li> <p>Description: The
+ * tag provided was not a valid tag. This error can occur if the tag did not pass
+ * input validation. For information about tag restrictions, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html">User-Defined
+ * Tag Restrictions</a> and <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/aws-tag-restrictions.html">AWS-Generated
+ * Cost Allocation Tag Restrictions</a>.</p> </li> </ul> </li> <li> <p>Error code:
+ * <code>MalformedXMLError</code> </p> <ul> <li> <p>Description: The XML provided
+ * does not match the schema.</p> </li> </ul> </li> <li> <p>Error code:
+ * <code>OperationAbortedError </code> </p> <ul> <li> <p>Description: A conflicting
+ * conditional operation is currently in progress against this resource. Please try
+ * again.</p> </li> </ul> </li> <li> <p>Error code: <code>InternalError</code> </p>
+ * <ul> <li> <p>Description: The service was unable to apply the provided tag to
+ * the bucket.</p> </li> </ul> </li> </ul> <p>The following operations are related
+ * to <code>PutBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html">GetBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html">DeleteBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTagging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketTaggingOutcomeCallable PutBucketTaggingCallable(const Model::PutBucketTaggingRequest& request) const;
+
+ /**
+ * <p>Sets the tags for a bucket.</p> <p>Use tags to organize your AWS bill to
+ * reflect your own cost structure. To do this, sign up to get your AWS account
+ * bill with tag key values included. Then, to see the cost of combined resources,
+ * organize your billing information according to resources with the same tag key
+ * values. For example, you can tag several resources with a specific application
+ * name, and then organize your billing information to see the total cost of that
+ * application across several services. For more information, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html">Cost
+ * Allocation and Tagging</a>.</p> <p>Within a bucket, if you add a tag that
+ * has the same key as an existing tag, the new value overwrites the old value. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CostAllocTagging.html">Using
+ * Cost Allocation in Amazon S3 Bucket Tags</a>.</p> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:PutBucketTagging</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a>.</p> <p>
+ * <code>PutBucketTagging</code> has the following special errors:</p> <ul> <li>
+ * <p>Error code: <code>InvalidTagError</code> </p> <ul> <li> <p>Description: The
+ * tag provided was not a valid tag. This error can occur if the tag did not pass
+ * input validation. For information about tag restrictions, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html">User-Defined
+ * Tag Restrictions</a> and <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/aws-tag-restrictions.html">AWS-Generated
+ * Cost Allocation Tag Restrictions</a>.</p> </li> </ul> </li> <li> <p>Error code:
+ * <code>MalformedXMLError</code> </p> <ul> <li> <p>Description: The XML provided
+ * does not match the schema.</p> </li> </ul> </li> <li> <p>Error code:
+ * <code>OperationAbortedError </code> </p> <ul> <li> <p>Description: A conflicting
+ * conditional operation is currently in progress against this resource. Please try
+ * again.</p> </li> </ul> </li> <li> <p>Error code: <code>InternalError</code> </p>
+ * <ul> <li> <p>Description: The service was unable to apply the provided tag to
+ * the bucket.</p> </li> </ul> </li> </ul> <p>The following operations are related
+ * to <code>PutBucketTagging</code>:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html">GetBucketTagging</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html">DeleteBucketTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTagging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketTaggingAsync(const Model::PutBucketTaggingRequest& request, const PutBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the versioning state of an existing bucket. To set the versioning state,
+ * you must be the bucket owner.</p> <p>You can set the versioning state with one
+ * of the following values:</p> <p> <b>Enabled</b>—Enables versioning for the
+ * objects in the bucket. All objects added to the bucket receive a unique version
+ * ID.</p> <p> <b>Suspended</b>—Disables versioning for the objects in the bucket.
+ * All objects added to the bucket receive the version ID null.</p> <p>If the
+ * versioning state has never been set on a bucket, it has no versioning state; a
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>
+ * request does not return a versioning state value.</p> <p>If the bucket owner
+ * enables MFA Delete in the bucket versioning configuration, the bucket owner must
+ * include the <code>x-amz-mfa request</code> header and the <code>Status</code>
+ * and the <code>MfaDelete</code> request elements in a request to set the
+ * versioning state of the bucket.</p> <p>If you have an object
+ * expiration lifecycle policy in your non-versioned bucket and you want to
+ * maintain the same permanent delete behavior when you enable versioning, you must
+ * add a noncurrent expiration policy. The noncurrent expiration lifecycle policy
+ * will manage the deletes of the noncurrent object versions in the version-enabled
+ * bucket. (A version-enabled bucket maintains one current and zero or more
+ * noncurrent object versions.) For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config">Lifecycle
+ * and Versioning</a>.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioning">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketVersioningOutcome PutBucketVersioning(const Model::PutBucketVersioningRequest& request) const;
+
+ /**
+ * <p>Sets the versioning state of an existing bucket. To set the versioning state,
+ * you must be the bucket owner.</p> <p>You can set the versioning state with one
+ * of the following values:</p> <p> <b>Enabled</b>—Enables versioning for the
+ * objects in the bucket. All objects added to the bucket receive a unique version
+ * ID.</p> <p> <b>Suspended</b>—Disables versioning for the objects in the bucket.
+ * All objects added to the bucket receive the version ID null.</p> <p>If the
+ * versioning state has never been set on a bucket, it has no versioning state; a
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>
+ * request does not return a versioning state value.</p> <p>If the bucket owner
+ * enables MFA Delete in the bucket versioning configuration, the bucket owner must
+ * include the <code>x-amz-mfa request</code> header and the <code>Status</code>
+ * and the <code>MfaDelete</code> request elements in a request to set the
+ * versioning state of the bucket.</p> <p>If you have an object
+ * expiration lifecycle policy in your non-versioned bucket and you want to
+ * maintain the same permanent delete behavior when you enable versioning, you must
+ * add a noncurrent expiration policy. The noncurrent expiration lifecycle policy
+ * will manage the deletes of the noncurrent object versions in the version-enabled
+ * bucket. (A version-enabled bucket maintains one current and zero or more
+ * noncurrent object versions.) For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config">Lifecycle
+ * and Versioning</a>.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioning">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketVersioningOutcomeCallable PutBucketVersioningCallable(const Model::PutBucketVersioningRequest& request) const;
+
+ /**
+ * <p>Sets the versioning state of an existing bucket. To set the versioning state,
+ * you must be the bucket owner.</p> <p>You can set the versioning state with one
+ * of the following values:</p> <p> <b>Enabled</b>—Enables versioning for the
+ * objects in the bucket. All objects added to the bucket receive a unique version
+ * ID.</p> <p> <b>Suspended</b>—Disables versioning for the objects in the bucket.
+ * All objects added to the bucket receive the version ID null.</p> <p>If the
+ * versioning state has never been set on a bucket, it has no versioning state; a
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>
+ * request does not return a versioning state value.</p> <p>If the bucket owner
+ * enables MFA Delete in the bucket versioning configuration, the bucket owner must
+ * include the <code>x-amz-mfa request</code> header and the <code>Status</code>
+ * and the <code>MfaDelete</code> request elements in a request to set the
+ * versioning state of the bucket.</p> <p>If you have an object
+ * expiration lifecycle policy in your non-versioned bucket and you want to
+ * maintain the same permanent delete behavior when you enable versioning, you must
+ * add a noncurrent expiration policy. The noncurrent expiration lifecycle policy
+ * will manage the deletes of the noncurrent object versions in the version-enabled
+ * bucket. (A version-enabled bucket maintains one current and zero or more
+ * noncurrent object versions.) For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config">Lifecycle
+ * and Versioning</a>.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html">CreateBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html">DeleteBucket</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioning">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketVersioningAsync(const Model::PutBucketVersioningRequest& request, const PutBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the configuration of the website that is specified in the
+ * <code>website</code> subresource. To configure a bucket as a website, you can
+ * add this subresource on the bucket with website configuration information such
+ * as the file name of the index document and any redirect rules. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>.</p> <p>This PUT operation requires the
+ * <code>S3:PutBucketWebsite</code> permission. By default, only the bucket owner
+ * can configure the website attached to a bucket; however, bucket owners can allow
+ * other users to set the website configuration by writing a bucket policy that
+ * grants them the <code>S3:PutBucketWebsite</code> permission.</p> <p>To redirect
+ * all website requests sent to the bucket's website endpoint, you add a website
+ * configuration with the following elements. Because all requests are sent to
+ * another website, you don't need to provide index document name for the
+ * bucket.</p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li> <p>
+ * <code>RedirectAllRequestsTo</code> </p> </li> <li> <p> <code>HostName</code>
+ * </p> </li> <li> <p> <code>Protocol</code> </p> </li> </ul> <p>If you want
+ * granular control over redirects, you can use the following elements to add
+ * routing rules that describe conditions for redirecting requests and information
+ * about the redirect destination. In this case, the website configuration must
+ * provide an index document for the bucket, because some requests might not be
+ * redirected. </p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li>
+ * <p> <code>IndexDocument</code> </p> </li> <li> <p> <code>Suffix</code> </p>
+ * </li> <li> <p> <code>ErrorDocument</code> </p> </li> <li> <p> <code>Key</code>
+ * </p> </li> <li> <p> <code>RoutingRules</code> </p> </li> <li> <p>
+ * <code>RoutingRule</code> </p> </li> <li> <p> <code>Condition</code> </p> </li>
+ * <li> <p> <code>HttpErrorCodeReturnedEquals</code> </p> </li> <li> <p>
+ * <code>KeyPrefixEquals</code> </p> </li> <li> <p> <code>Redirect</code> </p>
+ * </li> <li> <p> <code>Protocol</code> </p> </li> <li> <p> <code>HostName</code>
+ * </p> </li> <li> <p> <code>ReplaceKeyPrefixWith</code> </p> </li> <li> <p>
+ * <code>ReplaceKeyWith</code> </p> </li> <li> <p> <code>HttpRedirectCode</code>
+ * </p> </li> </ul> <p>Amazon S3 has a limitation of 50 routing rules per website
+ * configuration. If you require more than 50 routing rules, you can use object
+ * redirect. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">Configuring
+ * an Object Redirect</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsite">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutBucketWebsiteOutcome PutBucketWebsite(const Model::PutBucketWebsiteRequest& request) const;
+
+ /**
+ * <p>Sets the configuration of the website that is specified in the
+ * <code>website</code> subresource. To configure a bucket as a website, you can
+ * add this subresource on the bucket with website configuration information such
+ * as the file name of the index document and any redirect rules. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>.</p> <p>This PUT operation requires the
+ * <code>S3:PutBucketWebsite</code> permission. By default, only the bucket owner
+ * can configure the website attached to a bucket; however, bucket owners can allow
+ * other users to set the website configuration by writing a bucket policy that
+ * grants them the <code>S3:PutBucketWebsite</code> permission.</p> <p>To redirect
+ * all website requests sent to the bucket's website endpoint, you add a website
+ * configuration with the following elements. Because all requests are sent to
+ * another website, you don't need to provide index document name for the
+ * bucket.</p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li> <p>
+ * <code>RedirectAllRequestsTo</code> </p> </li> <li> <p> <code>HostName</code>
+ * </p> </li> <li> <p> <code>Protocol</code> </p> </li> </ul> <p>If you want
+ * granular control over redirects, you can use the following elements to add
+ * routing rules that describe conditions for redirecting requests and information
+ * about the redirect destination. In this case, the website configuration must
+ * provide an index document for the bucket, because some requests might not be
+ * redirected. </p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li>
+ * <p> <code>IndexDocument</code> </p> </li> <li> <p> <code>Suffix</code> </p>
+ * </li> <li> <p> <code>ErrorDocument</code> </p> </li> <li> <p> <code>Key</code>
+ * </p> </li> <li> <p> <code>RoutingRules</code> </p> </li> <li> <p>
+ * <code>RoutingRule</code> </p> </li> <li> <p> <code>Condition</code> </p> </li>
+ * <li> <p> <code>HttpErrorCodeReturnedEquals</code> </p> </li> <li> <p>
+ * <code>KeyPrefixEquals</code> </p> </li> <li> <p> <code>Redirect</code> </p>
+ * </li> <li> <p> <code>Protocol</code> </p> </li> <li> <p> <code>HostName</code>
+ * </p> </li> <li> <p> <code>ReplaceKeyPrefixWith</code> </p> </li> <li> <p>
+ * <code>ReplaceKeyWith</code> </p> </li> <li> <p> <code>HttpRedirectCode</code>
+ * </p> </li> </ul> <p>Amazon S3 has a limitation of 50 routing rules per website
+ * configuration. If you require more than 50 routing rules, you can use object
+ * redirect. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">Configuring
+ * an Object Redirect</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsite">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutBucketWebsiteOutcomeCallable PutBucketWebsiteCallable(const Model::PutBucketWebsiteRequest& request) const;
+
+ /**
+ * <p>Sets the configuration of the website that is specified in the
+ * <code>website</code> subresource. To configure a bucket as a website, you can
+ * add this subresource on the bucket with website configuration information such
+ * as the file name of the index document and any redirect rules. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a>.</p> <p>This PUT operation requires the
+ * <code>S3:PutBucketWebsite</code> permission. By default, only the bucket owner
+ * can configure the website attached to a bucket; however, bucket owners can allow
+ * other users to set the website configuration by writing a bucket policy that
+ * grants them the <code>S3:PutBucketWebsite</code> permission.</p> <p>To redirect
+ * all website requests sent to the bucket's website endpoint, you add a website
+ * configuration with the following elements. Because all requests are sent to
+ * another website, you don't need to provide index document name for the
+ * bucket.</p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li> <p>
+ * <code>RedirectAllRequestsTo</code> </p> </li> <li> <p> <code>HostName</code>
+ * </p> </li> <li> <p> <code>Protocol</code> </p> </li> </ul> <p>If you want
+ * granular control over redirects, you can use the following elements to add
+ * routing rules that describe conditions for redirecting requests and information
+ * about the redirect destination. In this case, the website configuration must
+ * provide an index document for the bucket, because some requests might not be
+ * redirected. </p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li>
+ * <p> <code>IndexDocument</code> </p> </li> <li> <p> <code>Suffix</code> </p>
+ * </li> <li> <p> <code>ErrorDocument</code> </p> </li> <li> <p> <code>Key</code>
+ * </p> </li> <li> <p> <code>RoutingRules</code> </p> </li> <li> <p>
+ * <code>RoutingRule</code> </p> </li> <li> <p> <code>Condition</code> </p> </li>
+ * <li> <p> <code>HttpErrorCodeReturnedEquals</code> </p> </li> <li> <p>
+ * <code>KeyPrefixEquals</code> </p> </li> <li> <p> <code>Redirect</code> </p>
+ * </li> <li> <p> <code>Protocol</code> </p> </li> <li> <p> <code>HostName</code>
+ * </p> </li> <li> <p> <code>ReplaceKeyPrefixWith</code> </p> </li> <li> <p>
+ * <code>ReplaceKeyWith</code> </p> </li> <li> <p> <code>HttpRedirectCode</code>
+ * </p> </li> </ul> <p>Amazon S3 has a limitation of 50 routing rules per website
+ * configuration. If you require more than 50 routing rules, you can use object
+ * redirect. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">Configuring
+ * an Object Redirect</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsite">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutBucketWebsiteAsync(const Model::PutBucketWebsiteRequest& request, const PutBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Adds an object to a bucket. You must have WRITE permissions on a bucket to
+ * add an object to it.</p> <p>Amazon S3 never adds partial objects; if you receive
+ * a success response, Amazon S3 added the entire object to the bucket.</p>
+ * <p>Amazon S3 is a distributed system. If it receives multiple write requests for
+ * the same object simultaneously, it overwrites all but the last object written.
+ * Amazon S3 does not provide object locking; if you need this, make sure to build
+ * it into your application layer or use versioning instead.</p> <p>To ensure that
+ * data is not corrupted traversing the network, use the <code>Content-MD5</code>
+ * header. When you use this header, Amazon S3 checks the object against the
+ * provided MD5 value and, if they do not match, returns an error. Additionally,
+ * you can calculate the MD5 while putting an object to Amazon S3 and compare the
+ * returned ETag to the calculated MD5 value.</p> <p> The
+ * <code>Content-MD5</code> header is required for any request to upload an object
+ * with a retention period configured using Amazon S3 Object Lock. For more
+ * information about Amazon S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html">Amazon
+ * S3 Object Lock Overview</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>. </p> <p> <b>Server-side Encryption</b> </p> <p>You can
+ * optionally request server-side encryption. With server-side encryption, Amazon
+ * S3 encrypts your data as it writes it to disks in its data centers and decrypts
+ * the data when you access it. You have the option to provide your own encryption
+ * key or use AWS managed encryption keys (SSE-S3 or SSE-KMS). For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using
+ * Server-Side Encryption</a>.</p> <p>If you request server-side encryption using
+ * AWS Key Management Service (SSE-KMS), you can enable an S3 Bucket Key at the
+ * object-level. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p> <b>Access Control List (ACL)-Specific Request Headers</b> </p> <p>You can
+ * use headers to grant ACL- based permissions. By default, all objects are
+ * private. Only the owner has full access control. When adding a new object, you
+ * can grant permissions to individual AWS accounts or to predefined groups defined
+ * by Amazon S3. These permissions are then added to the ACL on the object. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing
+ * ACLs Using the REST API</a>. </p> <p> <b>Storage Class Options</b> </p> <p>By
+ * default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p> <p>
+ * <b>Versioning</b> </p> <p>If you enable versioning for a bucket, Amazon S3
+ * automatically generates a unique version ID for the object being stored. Amazon
+ * S3 returns this ID in the response. When you enable versioning for a bucket, if
+ * Amazon S3 receives multiple write requests for the same object simultaneously,
+ * it stores all of the objects.</p> <p>For more information about versioning, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/AddingObjectstoVersioningEnabledBuckets.html">Adding
+ * Objects to Versioning Enabled Buckets</a>. For information about returning the
+ * versioning state of a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>.
+ * </p> <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObject">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::PutObjectOutcome PutObject(const Model::PutObjectRequest& request) const;
+
+ /**
+ * <p>Adds an object to a bucket. You must have WRITE permissions on a bucket to
+ * add an object to it.</p> <p>Amazon S3 never adds partial objects; if you receive
+ * a success response, Amazon S3 added the entire object to the bucket.</p>
+ * <p>Amazon S3 is a distributed system. If it receives multiple write requests for
+ * the same object simultaneously, it overwrites all but the last object written.
+ * Amazon S3 does not provide object locking; if you need this, make sure to build
+ * it into your application layer or use versioning instead.</p> <p>To ensure that
+ * data is not corrupted traversing the network, use the <code>Content-MD5</code>
+ * header. When you use this header, Amazon S3 checks the object against the
+ * provided MD5 value and, if they do not match, returns an error. Additionally,
+ * you can calculate the MD5 while putting an object to Amazon S3 and compare the
+ * returned ETag to the calculated MD5 value.</p> <p> The
+ * <code>Content-MD5</code> header is required for any request to upload an object
+ * with a retention period configured using Amazon S3 Object Lock. For more
+ * information about Amazon S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html">Amazon
+ * S3 Object Lock Overview</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>. </p> <p> <b>Server-side Encryption</b> </p> <p>You can
+ * optionally request server-side encryption. With server-side encryption, Amazon
+ * S3 encrypts your data as it writes it to disks in its data centers and decrypts
+ * the data when you access it. You have the option to provide your own encryption
+ * key or use AWS managed encryption keys (SSE-S3 or SSE-KMS). For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using
+ * Server-Side Encryption</a>.</p> <p>If you request server-side encryption using
+ * AWS Key Management Service (SSE-KMS), you can enable an S3 Bucket Key at the
+ * object-level. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p> <b>Access Control List (ACL)-Specific Request Headers</b> </p> <p>You can
+ * use headers to grant ACL- based permissions. By default, all objects are
+ * private. Only the owner has full access control. When adding a new object, you
+ * can grant permissions to individual AWS accounts or to predefined groups defined
+ * by Amazon S3. These permissions are then added to the ACL on the object. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing
+ * ACLs Using the REST API</a>. </p> <p> <b>Storage Class Options</b> </p> <p>By
+ * default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p> <p>
+ * <b>Versioning</b> </p> <p>If you enable versioning for a bucket, Amazon S3
+ * automatically generates a unique version ID for the object being stored. Amazon
+ * S3 returns this ID in the response. When you enable versioning for a bucket, if
+ * Amazon S3 receives multiple write requests for the same object simultaneously,
+ * it stores all of the objects.</p> <p>For more information about versioning, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/AddingObjectstoVersioningEnabledBuckets.html">Adding
+ * Objects to Versioning Enabled Buckets</a>. For information about returning the
+ * versioning state of a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>.
+ * </p> <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObject">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutObjectOutcomeCallable PutObjectCallable(const Model::PutObjectRequest& request) const;
+
+ /**
+ * <p>Adds an object to a bucket. You must have WRITE permissions on a bucket to
+ * add an object to it.</p> <p>Amazon S3 never adds partial objects; if you receive
+ * a success response, Amazon S3 added the entire object to the bucket.</p>
+ * <p>Amazon S3 is a distributed system. If it receives multiple write requests for
+ * the same object simultaneously, it overwrites all but the last object written.
+ * Amazon S3 does not provide object locking; if you need this, make sure to build
+ * it into your application layer or use versioning instead.</p> <p>To ensure that
+ * data is not corrupted traversing the network, use the <code>Content-MD5</code>
+ * header. When you use this header, Amazon S3 checks the object against the
+ * provided MD5 value and, if they do not match, returns an error. Additionally,
+ * you can calculate the MD5 while putting an object to Amazon S3 and compare the
+ * returned ETag to the calculated MD5 value.</p> <p> The
+ * <code>Content-MD5</code> header is required for any request to upload an object
+ * with a retention period configured using Amazon S3 Object Lock. For more
+ * information about Amazon S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html">Amazon
+ * S3 Object Lock Overview</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>. </p> <p> <b>Server-side Encryption</b> </p> <p>You can
+ * optionally request server-side encryption. With server-side encryption, Amazon
+ * S3 encrypts your data as it writes it to disks in its data centers and decrypts
+ * the data when you access it. You have the option to provide your own encryption
+ * key or use AWS managed encryption keys (SSE-S3 or SSE-KMS). For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using
+ * Server-Side Encryption</a>.</p> <p>If you request server-side encryption using
+ * AWS Key Management Service (SSE-KMS), you can enable an S3 Bucket Key at the
+ * object-level. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * <p> <b>Access Control List (ACL)-Specific Request Headers</b> </p> <p>You can
+ * use headers to grant ACL- based permissions. By default, all objects are
+ * private. Only the owner has full access control. When adding a new object, you
+ * can grant permissions to individual AWS accounts or to predefined groups defined
+ * by Amazon S3. These permissions are then added to the ACL on the object. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing
+ * ACLs Using the REST API</a>. </p> <p> <b>Storage Class Options</b> </p> <p>By
+ * default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p> <p>
+ * <b>Versioning</b> </p> <p>If you enable versioning for a bucket, Amazon S3
+ * automatically generates a unique version ID for the object being stored. Amazon
+ * S3 returns this ID in the response. When you enable versioning for a bucket, if
+ * Amazon S3 receives multiple write requests for the same object simultaneously,
+ * it stores all of the objects.</p> <p>For more information about versioning, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/AddingObjectstoVersioningEnabledBuckets.html">Adding
+ * Objects to Versioning Enabled Buckets</a>. For information about returning the
+ * versioning state of a bucket, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html">GetBucketVersioning</a>.
+ * </p> <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html">DeleteObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObject">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutObjectAsync(const Model::PutObjectRequest& request, const PutObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Uses the <code>acl</code> subresource to set the access control list (ACL)
+ * permissions for a new or existing object in an S3 bucket. You must have
+ * <code>WRITE_ACP</code> permission to set the ACL of an object. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#permissions">What
+ * permissions can I grant?</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ * <p>Depending on your application needs, you can choose to set the ACL on an
+ * object using either the request body or the headers. For example, if you have an
+ * existing application that updates a bucket ACL using the request body, you can
+ * continue to use that approach. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> in the <i>Amazon S3 Developer Guide</i>.</p> <p>
+ * <b>Access Permissions</b> </p> <p>You can set access permissions using one of
+ * the following methods:</p> <ul> <li> <p>Specify a canned ACL with the
+ * <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined
+ * ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees and
+ * permissions. Specify the canned ACL name as the value of <code>x-amz-ac</code>l.
+ * If you use this header, you cannot use other access control-specific headers in
+ * your request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. When using these headers, you specify explicit access permissions and
+ * grantees (AWS accounts or Amazon S3 groups) who will receive the permission. If
+ * you use these ACL-specific headers, you cannot use <code>x-amz-acl</code> header
+ * to set a canned ACL. These parameters map to the set of permissions that Amazon
+ * S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants list objects
+ * permission to the two AWS accounts identified by their email addresses.</p> <p>
+ * <code>x-amz-grant-read: emailAddress="xyz@amazon.com",
+ * emailAddress="abc@amazon.com" </code> </p> </li> </ul> <p>You can use either a
+ * canned ACL or specify access permissions explicitly. You cannot do both.</p> <p>
+ * <b>Grantee Values</b> </p> <p>You can specify the person (grantee) to whom
+ * you're assigning access rights (using request elements) in the following
+ * ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request.</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser.</p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>
+ * <b>Versioning</b> </p> <p>The ACL of an object is set at the object version
+ * level. By default, PUT sets the ACL of the current version of an object. To set
+ * the ACL of a different version, use the <code>versionId</code> subresource.</p>
+ * <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAcl">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::PutObjectAclOutcome PutObjectAcl(const Model::PutObjectAclRequest& request) const;
+
+ /**
+ * <p>Uses the <code>acl</code> subresource to set the access control list (ACL)
+ * permissions for a new or existing object in an S3 bucket. You must have
+ * <code>WRITE_ACP</code> permission to set the ACL of an object. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#permissions">What
+ * permissions can I grant?</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ * <p>Depending on your application needs, you can choose to set the ACL on an
+ * object using either the request body or the headers. For example, if you have an
+ * existing application that updates a bucket ACL using the request body, you can
+ * continue to use that approach. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> in the <i>Amazon S3 Developer Guide</i>.</p> <p>
+ * <b>Access Permissions</b> </p> <p>You can set access permissions using one of
+ * the following methods:</p> <ul> <li> <p>Specify a canned ACL with the
+ * <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined
+ * ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees and
+ * permissions. Specify the canned ACL name as the value of <code>x-amz-ac</code>l.
+ * If you use this header, you cannot use other access control-specific headers in
+ * your request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. When using these headers, you specify explicit access permissions and
+ * grantees (AWS accounts or Amazon S3 groups) who will receive the permission. If
+ * you use these ACL-specific headers, you cannot use <code>x-amz-acl</code> header
+ * to set a canned ACL. These parameters map to the set of permissions that Amazon
+ * S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants list objects
+ * permission to the two AWS accounts identified by their email addresses.</p> <p>
+ * <code>x-amz-grant-read: emailAddress="xyz@amazon.com",
+ * emailAddress="abc@amazon.com" </code> </p> </li> </ul> <p>You can use either a
+ * canned ACL or specify access permissions explicitly. You cannot do both.</p> <p>
+ * <b>Grantee Values</b> </p> <p>You can specify the person (grantee) to whom
+ * you're assigning access rights (using request elements) in the following
+ * ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request.</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser.</p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>
+ * <b>Versioning</b> </p> <p>The ACL of an object is set at the object version
+ * level. By default, PUT sets the ACL of the current version of an object. To set
+ * the ACL of a different version, use the <code>versionId</code> subresource.</p>
+ * <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAcl">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutObjectAclOutcomeCallable PutObjectAclCallable(const Model::PutObjectAclRequest& request) const;
+
+ /**
+ * <p>Uses the <code>acl</code> subresource to set the access control list (ACL)
+ * permissions for a new or existing object in an S3 bucket. You must have
+ * <code>WRITE_ACP</code> permission to set the ACL of an object. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#permissions">What
+ * permissions can I grant?</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ * <p>Depending on your application needs, you can choose to set the ACL on an
+ * object using either the request body or the headers. For example, if you have an
+ * existing application that updates a bucket ACL using the request body, you can
+ * continue to use that approach. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a> in the <i>Amazon S3 Developer Guide</i>.</p> <p>
+ * <b>Access Permissions</b> </p> <p>You can set access permissions using one of
+ * the following methods:</p> <ul> <li> <p>Specify a canned ACL with the
+ * <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined
+ * ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees and
+ * permissions. Specify the canned ACL name as the value of <code>x-amz-ac</code>l.
+ * If you use this header, you cannot use other access control-specific headers in
+ * your request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the
+ * <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>,
+ * <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code>
+ * headers. When using these headers, you specify explicit access permissions and
+ * grantees (AWS accounts or Amazon S3 groups) who will receive the permission. If
+ * you use these ACL-specific headers, you cannot use <code>x-amz-acl</code> header
+ * to set a canned ACL. These parameters map to the set of permissions that Amazon
+ * S3 supports in an ACL. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access
+ * Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value
+ * pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code>
+ * – if the value specified is the canonical user ID of an AWS account</p> </li>
+ * <li> <p> <code>uri</code> – if you are granting permissions to a predefined
+ * group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is
+ * the email address of an AWS account</p> <p>Using email addresses to
+ * specify a grantee is only supported in the following AWS Regions: </p> <ul> <li>
+ * <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li>
+ * <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li>
+ * <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li>
+ * <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li>
+ * </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>For
+ * example, the following <code>x-amz-grant-read</code> header grants list objects
+ * permission to the two AWS accounts identified by their email addresses.</p> <p>
+ * <code>x-amz-grant-read: emailAddress="xyz@amazon.com",
+ * emailAddress="abc@amazon.com" </code> </p> </li> </ul> <p>You can use either a
+ * canned ACL or specify access permissions explicitly. You cannot do both.</p> <p>
+ * <b>Grantee Values</b> </p> <p>You can specify the person (grantee) to whom
+ * you're assigning access rights (using request elements) in the following
+ * ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="CanonicalUser"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt;
+ * &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the
+ * request.</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="Group"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code>
+ * </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee
+ * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ * xsi:type="AmazonCustomerByEmail"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code>
+ * </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET
+ * Object acl request, appears as the CanonicalUser.</p> <p>Using email
+ * addresses to specify a grantee is only supported in the following AWS Regions:
+ * </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N.
+ * California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific
+ * (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia
+ * Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South
+ * America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported
+ * Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p> </li> </ul> <p>
+ * <b>Versioning</b> </p> <p>The ACL of an object is set at the object version
+ * level. By default, PUT sets the ACL of the current version of an object. To set
+ * the ACL of a different version, use the <code>versionId</code> subresource.</p>
+ * <p class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAcl">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutObjectAclAsync(const Model::PutObjectAclRequest& request, const PutObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Applies a Legal Hold configuration to the specified object.</p> <p>This
+ * action is not supported by Amazon S3 on Outposts.</p> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHold">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutObjectLegalHoldOutcome PutObjectLegalHold(const Model::PutObjectLegalHoldRequest& request) const;
+
+ /**
+ * <p>Applies a Legal Hold configuration to the specified object.</p> <p>This
+ * action is not supported by Amazon S3 on Outposts.</p> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHold">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutObjectLegalHoldOutcomeCallable PutObjectLegalHoldCallable(const Model::PutObjectLegalHoldRequest& request) const;
+
+ /**
+ * <p>Applies a Legal Hold configuration to the specified object.</p> <p>This
+ * action is not supported by Amazon S3 on Outposts.</p> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHold">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutObjectLegalHoldAsync(const Model::PutObjectLegalHoldRequest& request, const PutObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Places an Object Lock configuration on the specified bucket. The rule
+ * specified in the Object Lock configuration will be applied by default to every
+ * new object placed in the specified bucket.</p> <p>
+ * <code>DefaultRetention</code> requires either Days or Years. You can't specify
+ * both at the same time.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfiguration">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutObjectLockConfigurationOutcome PutObjectLockConfiguration(const Model::PutObjectLockConfigurationRequest& request) const;
+
+ /**
+ * <p>Places an Object Lock configuration on the specified bucket. The rule
+ * specified in the Object Lock configuration will be applied by default to every
+ * new object placed in the specified bucket.</p> <p>
+ * <code>DefaultRetention</code> requires either Days or Years. You can't specify
+ * both at the same time.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutObjectLockConfigurationOutcomeCallable PutObjectLockConfigurationCallable(const Model::PutObjectLockConfigurationRequest& request) const;
+
+ /**
+ * <p>Places an Object Lock configuration on the specified bucket. The rule
+ * specified in the Object Lock configuration will be applied by default to every
+ * new object placed in the specified bucket.</p> <p>
+ * <code>DefaultRetention</code> requires either Days or Years. You can't specify
+ * both at the same time.</p> <p class="title"> <b>Related Resources</b>
+ * </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfiguration">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutObjectLockConfigurationAsync(const Model::PutObjectLockConfigurationRequest& request, const PutObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Places an Object Retention configuration on an object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetention">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutObjectRetentionOutcome PutObjectRetention(const Model::PutObjectRetentionRequest& request) const;
+
+ /**
+ * <p>Places an Object Retention configuration on an object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetention">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutObjectRetentionOutcomeCallable PutObjectRetentionCallable(const Model::PutObjectRetentionRequest& request) const;
+
+ /**
+ * <p>Places an Object Retention configuration on an object.</p> <p>This action is
+ * not supported by Amazon S3 on Outposts.</p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Locking
+ * Objects</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetention">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutObjectRetentionAsync(const Model::PutObjectRetentionRequest& request, const PutObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Sets the supplied tag-set to an object that already exists in a bucket.</p>
+ * <p>A tag is a key-value pair. You can associate tags with an object by sending a
+ * PUT request against the tagging subresource that is associated with the object.
+ * You can retrieve tags by sending a GET request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>.</p>
+ * <p>For tagging-related restrictions related to characters and encodings, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html">Tag
+ * Restrictions</a>. Note that Amazon S3 limits the maximum number of tags to 10
+ * tags per object.</p> <p>To use this operation, you must have permission to
+ * perform the <code>s3:PutObjectTagging</code> action. By default, the bucket
+ * owner has this permission and can grant this permission to others.</p> <p>To put
+ * tags of any other version, use the <code>versionId</code> query parameter. You
+ * also need permission for the <code>s3:PutObjectVersionTagging</code> action.</p>
+ * <p>For information about the Amazon S3 object tagging feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</p> <p class="title"> <b>Special Errors</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code: InvalidTagError </i> </p> </li> <li> <p> <i>Cause: The tag
+ * provided was not a valid tag. This error can occur if the tag did not pass input
+ * validation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * MalformedXMLError </i> </p> </li> <li> <p> <i>Cause: The XML provided does not
+ * match the schema.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * OperationAbortedError </i> </p> </li> <li> <p> <i>Cause: A conflicting
+ * conditional operation is currently in progress against this resource. Please try
+ * again.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code: InternalError</i>
+ * </p> </li> <li> <p> <i>Cause: The service was unable to apply the provided tag
+ * to the object.</i> </p> </li> </ul> </li> </ul> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTagging">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutObjectTaggingOutcome PutObjectTagging(const Model::PutObjectTaggingRequest& request) const;
+
+ /**
+ * <p>Sets the supplied tag-set to an object that already exists in a bucket.</p>
+ * <p>A tag is a key-value pair. You can associate tags with an object by sending a
+ * PUT request against the tagging subresource that is associated with the object.
+ * You can retrieve tags by sending a GET request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>.</p>
+ * <p>For tagging-related restrictions related to characters and encodings, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html">Tag
+ * Restrictions</a>. Note that Amazon S3 limits the maximum number of tags to 10
+ * tags per object.</p> <p>To use this operation, you must have permission to
+ * perform the <code>s3:PutObjectTagging</code> action. By default, the bucket
+ * owner has this permission and can grant this permission to others.</p> <p>To put
+ * tags of any other version, use the <code>versionId</code> query parameter. You
+ * also need permission for the <code>s3:PutObjectVersionTagging</code> action.</p>
+ * <p>For information about the Amazon S3 object tagging feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</p> <p class="title"> <b>Special Errors</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code: InvalidTagError </i> </p> </li> <li> <p> <i>Cause: The tag
+ * provided was not a valid tag. This error can occur if the tag did not pass input
+ * validation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * MalformedXMLError </i> </p> </li> <li> <p> <i>Cause: The XML provided does not
+ * match the schema.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * OperationAbortedError </i> </p> </li> <li> <p> <i>Cause: A conflicting
+ * conditional operation is currently in progress against this resource. Please try
+ * again.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code: InternalError</i>
+ * </p> </li> <li> <p> <i>Cause: The service was unable to apply the provided tag
+ * to the object.</i> </p> </li> </ul> </li> </ul> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTagging">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutObjectTaggingOutcomeCallable PutObjectTaggingCallable(const Model::PutObjectTaggingRequest& request) const;
+
+ /**
+ * <p>Sets the supplied tag-set to an object that already exists in a bucket.</p>
+ * <p>A tag is a key-value pair. You can associate tags with an object by sending a
+ * PUT request against the tagging subresource that is associated with the object.
+ * You can retrieve tags by sending a GET request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>.</p>
+ * <p>For tagging-related restrictions related to characters and encodings, see <a
+ * href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html">Tag
+ * Restrictions</a>. Note that Amazon S3 limits the maximum number of tags to 10
+ * tags per object.</p> <p>To use this operation, you must have permission to
+ * perform the <code>s3:PutObjectTagging</code> action. By default, the bucket
+ * owner has this permission and can grant this permission to others.</p> <p>To put
+ * tags of any other version, use the <code>versionId</code> query parameter. You
+ * also need permission for the <code>s3:PutObjectVersionTagging</code> action.</p>
+ * <p>For information about the Amazon S3 object tagging feature, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</p> <p class="title"> <b>Special Errors</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code: InvalidTagError </i> </p> </li> <li> <p> <i>Cause: The tag
+ * provided was not a valid tag. This error can occur if the tag did not pass input
+ * validation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html">Object
+ * Tagging</a>.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * MalformedXMLError </i> </p> </li> <li> <p> <i>Cause: The XML provided does not
+ * match the schema.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * OperationAbortedError </i> </p> </li> <li> <p> <i>Cause: A conflicting
+ * conditional operation is currently in progress against this resource. Please try
+ * again.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code: InternalError</i>
+ * </p> </li> <li> <p> <i>Cause: The service was unable to apply the provided tag
+ * to the object.</i> </p> </li> </ul> </li> </ul> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTagging">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutObjectTaggingAsync(const Model::PutObjectTaggingRequest& request, const PutObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Creates or modifies the <code>PublicAccessBlock</code> configuration for an
+ * Amazon S3 bucket. To use this operation, you must have the
+ * <code>s3:PutBucketPublicAccessBlock</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>When Amazon S3 evaluates the
+ * <code>PublicAccessBlock</code> configuration for a bucket or an object, it
+ * checks the <code>PublicAccessBlock</code> configuration for both the bucket (or
+ * the bucket that contains the object) and the bucket owner's account. If the
+ * <code>PublicAccessBlock</code> configurations are different between the bucket
+ * and the account, Amazon S3 uses the most restrictive combination of the
+ * bucket-level and account-level settings.</p> <p>For more
+ * information about when Amazon S3 considers a bucket or an object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>.</p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html">GetBucketPolicyStatus</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlock">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::PutPublicAccessBlockOutcome PutPublicAccessBlock(const Model::PutPublicAccessBlockRequest& request) const;
+
+ /**
+ * <p>Creates or modifies the <code>PublicAccessBlock</code> configuration for an
+ * Amazon S3 bucket. To use this operation, you must have the
+ * <code>s3:PutBucketPublicAccessBlock</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>When Amazon S3 evaluates the
+ * <code>PublicAccessBlock</code> configuration for a bucket or an object, it
+ * checks the <code>PublicAccessBlock</code> configuration for both the bucket (or
+ * the bucket that contains the object) and the bucket owner's account. If the
+ * <code>PublicAccessBlock</code> configurations are different between the bucket
+ * and the account, Amazon S3 uses the most restrictive combination of the
+ * bucket-level and account-level settings.</p> <p>For more
+ * information about when Amazon S3 considers a bucket or an object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>.</p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html">GetBucketPolicyStatus</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlock">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::PutPublicAccessBlockOutcomeCallable PutPublicAccessBlockCallable(const Model::PutPublicAccessBlockRequest& request) const;
+
+ /**
+ * <p>Creates or modifies the <code>PublicAccessBlock</code> configuration for an
+ * Amazon S3 bucket. To use this operation, you must have the
+ * <code>s3:PutBucketPublicAccessBlock</code> permission. For more information
+ * about Amazon S3 permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a>.</p> <p>When Amazon S3 evaluates the
+ * <code>PublicAccessBlock</code> configuration for a bucket or an object, it
+ * checks the <code>PublicAccessBlock</code> configuration for both the bucket (or
+ * the bucket that contains the object) and the bucket owner's account. If the
+ * <code>PublicAccessBlock</code> configurations are different between the bucket
+ * and the account, Amazon S3 uses the most restrictive combination of the
+ * bucket-level and account-level settings.</p> <p>For more
+ * information about when Amazon S3 considers a bucket or an object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a>.</p> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html">GetPublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html">DeletePublicAccessBlock</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html">GetBucketPolicyStatus</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">Using
+ * Amazon S3 Block Public Access</a> </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlock">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void PutPublicAccessBlockAsync(const Model::PutPublicAccessBlockRequest& request, const PutPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Restores an archived copy of an object back into Amazon S3</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p> <p>This action performs the
+ * following types of requests: </p> <ul> <li> <p> <code>select</code> - Perform a
+ * select query on an archived object</p> </li> <li> <p> <code>restore an
+ * archive</code> - Restore an archived object</p> </li> </ul> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:RestoreObject</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p> <b>Querying Archives with Select
+ * Requests</b> </p> <p>You use a select type of request to perform SQL queries on
+ * archived objects. The archived objects that are being queried by the select
+ * request must be formatted as uncompressed comma-separated values (CSV) files.
+ * You can run queries and custom analytics on your archived data without having to
+ * restore your data to a hotter Amazon S3 tier. For an overview about select
+ * requests, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html">Querying
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When making a select request, do the following:</p> <ul> <li>
+ * <p>Define an output location for the select query's output. This must be an
+ * Amazon S3 bucket in the same AWS Region as the bucket that contains the archive
+ * object that is being queried. The AWS account that initiates the job must have
+ * permissions to write to the S3 bucket. You can specify the storage class and
+ * encryption for the output objects stored in the bucket. For more information
+ * about output, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html">Querying
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>For more information about the <code>S3</code> structure in
+ * the request body, see the following:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Managing
+ * Access with ACLs</a> in the <i>Amazon Simple Storage Service Developer Guide</i>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i> </p> </li> </ul> </li> <li> <p>Define the SQL expression for
+ * the <code>SELECT</code> type of restoration for your query in the request body's
+ * <code>SelectParameters</code> structure. You can use expressions like the
+ * following examples.</p> <ul> <li> <p>The following expression returns all
+ * records from the specified object.</p> <p> <code>SELECT * FROM Object</code>
+ * </p> </li> <li> <p>Assuming that you are not using any headers for data stored
+ * in the object, you can specify columns with positional headers.</p> <p>
+ * <code>SELECT s._1, s._2 FROM Object s WHERE s._3 &gt; 100</code> </p> </li> <li>
+ * <p>If you have headers and you set the <code>fileHeaderInfo</code> in the
+ * <code>CSV</code> structure in the request body to <code>USE</code>, you can
+ * specify headers in the query. (If you set the <code>fileHeaderInfo</code> field
+ * to <code>IGNORE</code>, the first row is skipped for the query.) You cannot mix
+ * ordinal positions with header column names. </p> <p> <code>SELECT s.Id,
+ * s.FirstName, s.SSN FROM S3Object s</code> </p> </li> </ul> </li> </ul> <p>For
+ * more information about using SQL with S3 Glacier Select restore, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">SQL
+ * Reference for Amazon S3 Select and S3 Glacier Select</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>When making a select request, you
+ * can also do the following:</p> <ul> <li> <p>To expedite your queries, specify
+ * the <code>Expedited</code> tier. For more information about tiers, see
+ * "Restoring Archives," later in this topic.</p> </li> <li> <p>Specify details
+ * about the data serialization format of both the input object that is being
+ * queried and the serialization of the CSV-encoded query results.</p> </li> </ul>
+ * <p>The following are additional important facts about the select feature:</p>
+ * <ul> <li> <p>The output results are new Amazon S3 objects. Unlike archive
+ * retrievals, they are stored until explicitly deleted-manually or through a
+ * lifecycle policy.</p> </li> <li> <p>You can issue more than one select request
+ * on the same Amazon S3 object. Amazon S3 doesn't deduplicate requests, so avoid
+ * issuing duplicate requests.</p> </li> <li> <p> Amazon S3 accepts a select
+ * request even if the object has already been restored. A select request doesn’t
+ * return error response <code>409</code>.</p> </li> </ul> <p> <b>Restoring
+ * objects</b> </p> <p>Objects that you archive to the S3 Glacier or S3 Glacier
+ * Deep Archive storage class, and S3 Intelligent-Tiering Archive or S3
+ * Intelligent-Tiering Deep Archive tiers are not accessible in real time. For
+ * objects in Archive Access or Deep Archive Access tiers you must first initiate a
+ * restore request, and then wait until the object is moved into the Frequent
+ * Access tier. For objects in S3 Glacier or S3 Glacier Deep Archive storage
+ * classes you must first initiate a restore request, and then wait until a
+ * temporary copy of the object is available. To access an archived object, you
+ * must restore the object for the duration (number of days) that you specify.</p>
+ * <p>To restore a specific object version, you can provide a version ID. If you
+ * don't provide a version ID, Amazon S3 restores the current version.</p> <p>When
+ * restoring an archived object (or using a select request), you can specify one of
+ * the following data access tier options in the <code>Tier</code> element of the
+ * request body: </p> <ul> <li> <p> <b> <code>Expedited</code> </b> - Expedited
+ * retrievals allow you to quickly access your data stored in the S3 Glacier
+ * storage class or S3 Intelligent-Tiering Archive tier when occasional urgent
+ * requests for a subset of archives are required. For all but the largest archived
+ * objects (250 MB+), data accessed using Expedited retrievals is typically made
+ * available within 1–5 minutes. Provisioned capacity ensures that retrieval
+ * capacity for Expedited retrievals is available when you need it. Expedited
+ * retrievals and provisioned capacity are not available for objects stored in the
+ * S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive
+ * tier.</p> </li> <li> <p> <b> <code>Standard</code> </b> - Standard retrievals
+ * allow you to access any of your archived objects within several hours. This is
+ * the default option for retrieval requests that do not specify the retrieval
+ * option. Standard retrievals typically finish within 3–5 hours for objects stored
+ * in the S3 Glacier storage class or S3 Intelligent-Tiering Archive tier. They
+ * typically finish within 12 hours for objects stored in the S3 Glacier Deep
+ * Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Standard
+ * retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li> <li>
+ * <p> <b> <code>Bulk</code> </b> - Bulk retrievals are the lowest-cost retrieval
+ * option in S3 Glacier, enabling you to retrieve large amounts, even petabytes, of
+ * data inexpensively. Bulk retrievals typically finish within 5–12 hours for
+ * objects stored in the S3 Glacier storage class or S3 Intelligent-Tiering Archive
+ * tier. They typically finish within 48 hours for objects stored in the S3 Glacier
+ * Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Bulk
+ * retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li>
+ * </ul> <p>For more information about archive retrieval options and provisioned
+ * capacity for <code>Expedited</code> data access, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html">Restoring
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>. </p> <p>You can use Amazon S3 restore speed upgrade to change the
+ * restore speed to a faster speed while it is in progress. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html#restoring-objects-upgrade-tier.title.html">
+ * Upgrading the speed of an in-progress restore</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>To get the status of object
+ * restoration, you can send a <code>HEAD</code> request. Operations return the
+ * <code>x-amz-restore</code> header, which provides information about the
+ * restoration status, in the response. You can use Amazon S3 event notifications
+ * to notify you when a restore is initiated or completed. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Amazon S3 Event Notifications</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p>After restoring an archived object, you can update
+ * the restoration period by reissuing the request with a new period. Amazon S3
+ * updates the restoration period relative to the current time and charges only for
+ * the request-there are no data transfer charges. You cannot update the
+ * restoration period when Amazon S3 is actively processing your current restore
+ * request for the object.</p> <p>If your bucket has a lifecycle configuration with
+ * a rule that includes an expiration action, the object expiration overrides the
+ * life span that you specify in a restore request. For example, if you restore an
+ * object copy for 10 days, but the object is scheduled to expire in 3 days, Amazon
+ * S3 deletes the object in 3 days. For more information about lifecycle
+ * configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a> in <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p> <b>Responses</b> </p> <p>A successful operation returns
+ * either the <code>200 OK</code> or <code>202 Accepted</code> status code. </p>
+ * <ul> <li> <p>If the object is not previously restored, then Amazon S3 returns
+ * <code>202 Accepted</code> in the response. </p> </li> <li> <p>If the object is
+ * previously restored, Amazon S3 returns <code>200 OK</code> in the response. </p>
+ * </li> </ul> <p class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p>
+ * <i>Code: RestoreAlreadyInProgress</i> </p> </li> <li> <p> <i>Cause: Object
+ * restore is already in progress. (This error does not apply to SELECT type
+ * requests.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 409 Conflict</i> </p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i> </p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code: GlacierExpeditedRetrievalNotAvailable</i> </p> </li> <li>
+ * <p> <i>Cause: expedited retrievals are currently not available. Try again later.
+ * (Returned if there is insufficient capacity to process the Expedited request.
+ * This error applies only to Expedited retrievals and not to S3 Standard or Bulk
+ * retrievals.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 503</i> </p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix: N/A</i> </p> </li> </ul> </li> </ul> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html">GetBucketNotificationConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">SQL
+ * Reference for Amazon S3 Select and S3 Glacier Select </a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i> </p> </li> </ul><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObject">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::RestoreObjectOutcome RestoreObject(const Model::RestoreObjectRequest& request) const;
+
+ /**
+ * <p>Restores an archived copy of an object back into Amazon S3</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p> <p>This action performs the
+ * following types of requests: </p> <ul> <li> <p> <code>select</code> - Perform a
+ * select query on an archived object</p> </li> <li> <p> <code>restore an
+ * archive</code> - Restore an archived object</p> </li> </ul> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:RestoreObject</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p> <b>Querying Archives with Select
+ * Requests</b> </p> <p>You use a select type of request to perform SQL queries on
+ * archived objects. The archived objects that are being queried by the select
+ * request must be formatted as uncompressed comma-separated values (CSV) files.
+ * You can run queries and custom analytics on your archived data without having to
+ * restore your data to a hotter Amazon S3 tier. For an overview about select
+ * requests, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html">Querying
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When making a select request, do the following:</p> <ul> <li>
+ * <p>Define an output location for the select query's output. This must be an
+ * Amazon S3 bucket in the same AWS Region as the bucket that contains the archive
+ * object that is being queried. The AWS account that initiates the job must have
+ * permissions to write to the S3 bucket. You can specify the storage class and
+ * encryption for the output objects stored in the bucket. For more information
+ * about output, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html">Querying
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>For more information about the <code>S3</code> structure in
+ * the request body, see the following:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Managing
+ * Access with ACLs</a> in the <i>Amazon Simple Storage Service Developer Guide</i>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i> </p> </li> </ul> </li> <li> <p>Define the SQL expression for
+ * the <code>SELECT</code> type of restoration for your query in the request body's
+ * <code>SelectParameters</code> structure. You can use expressions like the
+ * following examples.</p> <ul> <li> <p>The following expression returns all
+ * records from the specified object.</p> <p> <code>SELECT * FROM Object</code>
+ * </p> </li> <li> <p>Assuming that you are not using any headers for data stored
+ * in the object, you can specify columns with positional headers.</p> <p>
+ * <code>SELECT s._1, s._2 FROM Object s WHERE s._3 &gt; 100</code> </p> </li> <li>
+ * <p>If you have headers and you set the <code>fileHeaderInfo</code> in the
+ * <code>CSV</code> structure in the request body to <code>USE</code>, you can
+ * specify headers in the query. (If you set the <code>fileHeaderInfo</code> field
+ * to <code>IGNORE</code>, the first row is skipped for the query.) You cannot mix
+ * ordinal positions with header column names. </p> <p> <code>SELECT s.Id,
+ * s.FirstName, s.SSN FROM S3Object s</code> </p> </li> </ul> </li> </ul> <p>For
+ * more information about using SQL with S3 Glacier Select restore, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">SQL
+ * Reference for Amazon S3 Select and S3 Glacier Select</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>When making a select request, you
+ * can also do the following:</p> <ul> <li> <p>To expedite your queries, specify
+ * the <code>Expedited</code> tier. For more information about tiers, see
+ * "Restoring Archives," later in this topic.</p> </li> <li> <p>Specify details
+ * about the data serialization format of both the input object that is being
+ * queried and the serialization of the CSV-encoded query results.</p> </li> </ul>
+ * <p>The following are additional important facts about the select feature:</p>
+ * <ul> <li> <p>The output results are new Amazon S3 objects. Unlike archive
+ * retrievals, they are stored until explicitly deleted-manually or through a
+ * lifecycle policy.</p> </li> <li> <p>You can issue more than one select request
+ * on the same Amazon S3 object. Amazon S3 doesn't deduplicate requests, so avoid
+ * issuing duplicate requests.</p> </li> <li> <p> Amazon S3 accepts a select
+ * request even if the object has already been restored. A select request doesn’t
+ * return error response <code>409</code>.</p> </li> </ul> <p> <b>Restoring
+ * objects</b> </p> <p>Objects that you archive to the S3 Glacier or S3 Glacier
+ * Deep Archive storage class, and S3 Intelligent-Tiering Archive or S3
+ * Intelligent-Tiering Deep Archive tiers are not accessible in real time. For
+ * objects in Archive Access or Deep Archive Access tiers you must first initiate a
+ * restore request, and then wait until the object is moved into the Frequent
+ * Access tier. For objects in S3 Glacier or S3 Glacier Deep Archive storage
+ * classes you must first initiate a restore request, and then wait until a
+ * temporary copy of the object is available. To access an archived object, you
+ * must restore the object for the duration (number of days) that you specify.</p>
+ * <p>To restore a specific object version, you can provide a version ID. If you
+ * don't provide a version ID, Amazon S3 restores the current version.</p> <p>When
+ * restoring an archived object (or using a select request), you can specify one of
+ * the following data access tier options in the <code>Tier</code> element of the
+ * request body: </p> <ul> <li> <p> <b> <code>Expedited</code> </b> - Expedited
+ * retrievals allow you to quickly access your data stored in the S3 Glacier
+ * storage class or S3 Intelligent-Tiering Archive tier when occasional urgent
+ * requests for a subset of archives are required. For all but the largest archived
+ * objects (250 MB+), data accessed using Expedited retrievals is typically made
+ * available within 1–5 minutes. Provisioned capacity ensures that retrieval
+ * capacity for Expedited retrievals is available when you need it. Expedited
+ * retrievals and provisioned capacity are not available for objects stored in the
+ * S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive
+ * tier.</p> </li> <li> <p> <b> <code>Standard</code> </b> - Standard retrievals
+ * allow you to access any of your archived objects within several hours. This is
+ * the default option for retrieval requests that do not specify the retrieval
+ * option. Standard retrievals typically finish within 3–5 hours for objects stored
+ * in the S3 Glacier storage class or S3 Intelligent-Tiering Archive tier. They
+ * typically finish within 12 hours for objects stored in the S3 Glacier Deep
+ * Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Standard
+ * retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li> <li>
+ * <p> <b> <code>Bulk</code> </b> - Bulk retrievals are the lowest-cost retrieval
+ * option in S3 Glacier, enabling you to retrieve large amounts, even petabytes, of
+ * data inexpensively. Bulk retrievals typically finish within 5–12 hours for
+ * objects stored in the S3 Glacier storage class or S3 Intelligent-Tiering Archive
+ * tier. They typically finish within 48 hours for objects stored in the S3 Glacier
+ * Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Bulk
+ * retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li>
+ * </ul> <p>For more information about archive retrieval options and provisioned
+ * capacity for <code>Expedited</code> data access, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html">Restoring
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>. </p> <p>You can use Amazon S3 restore speed upgrade to change the
+ * restore speed to a faster speed while it is in progress. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html#restoring-objects-upgrade-tier.title.html">
+ * Upgrading the speed of an in-progress restore</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>To get the status of object
+ * restoration, you can send a <code>HEAD</code> request. Operations return the
+ * <code>x-amz-restore</code> header, which provides information about the
+ * restoration status, in the response. You can use Amazon S3 event notifications
+ * to notify you when a restore is initiated or completed. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Amazon S3 Event Notifications</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p>After restoring an archived object, you can update
+ * the restoration period by reissuing the request with a new period. Amazon S3
+ * updates the restoration period relative to the current time and charges only for
+ * the request-there are no data transfer charges. You cannot update the
+ * restoration period when Amazon S3 is actively processing your current restore
+ * request for the object.</p> <p>If your bucket has a lifecycle configuration with
+ * a rule that includes an expiration action, the object expiration overrides the
+ * life span that you specify in a restore request. For example, if you restore an
+ * object copy for 10 days, but the object is scheduled to expire in 3 days, Amazon
+ * S3 deletes the object in 3 days. For more information about lifecycle
+ * configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a> in <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p> <b>Responses</b> </p> <p>A successful operation returns
+ * either the <code>200 OK</code> or <code>202 Accepted</code> status code. </p>
+ * <ul> <li> <p>If the object is not previously restored, then Amazon S3 returns
+ * <code>202 Accepted</code> in the response. </p> </li> <li> <p>If the object is
+ * previously restored, Amazon S3 returns <code>200 OK</code> in the response. </p>
+ * </li> </ul> <p class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p>
+ * <i>Code: RestoreAlreadyInProgress</i> </p> </li> <li> <p> <i>Cause: Object
+ * restore is already in progress. (This error does not apply to SELECT type
+ * requests.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 409 Conflict</i> </p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i> </p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code: GlacierExpeditedRetrievalNotAvailable</i> </p> </li> <li>
+ * <p> <i>Cause: expedited retrievals are currently not available. Try again later.
+ * (Returned if there is insufficient capacity to process the Expedited request.
+ * This error applies only to Expedited retrievals and not to S3 Standard or Bulk
+ * retrievals.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 503</i> </p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix: N/A</i> </p> </li> </ul> </li> </ul> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html">GetBucketNotificationConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">SQL
+ * Reference for Amazon S3 Select and S3 Glacier Select </a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i> </p> </li> </ul><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObject">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::RestoreObjectOutcomeCallable RestoreObjectCallable(const Model::RestoreObjectRequest& request) const;
+
+ /**
+ * <p>Restores an archived copy of an object back into Amazon S3</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p> <p>This action performs the
+ * following types of requests: </p> <ul> <li> <p> <code>select</code> - Perform a
+ * select query on an archived object</p> </li> <li> <p> <code>restore an
+ * archive</code> - Restore an archived object</p> </li> </ul> <p>To use this
+ * operation, you must have permissions to perform the
+ * <code>s3:RestoreObject</code> action. The bucket owner has this permission by
+ * default and can grant this permission to others. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources">Permissions
+ * Related to Bucket Subresource Operations</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Managing
+ * Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p> <b>Querying Archives with Select
+ * Requests</b> </p> <p>You use a select type of request to perform SQL queries on
+ * archived objects. The archived objects that are being queried by the select
+ * request must be formatted as uncompressed comma-separated values (CSV) files.
+ * You can run queries and custom analytics on your archived data without having to
+ * restore your data to a hotter Amazon S3 tier. For an overview about select
+ * requests, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html">Querying
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When making a select request, do the following:</p> <ul> <li>
+ * <p>Define an output location for the select query's output. This must be an
+ * Amazon S3 bucket in the same AWS Region as the bucket that contains the archive
+ * object that is being queried. The AWS account that initiates the job must have
+ * permissions to write to the S3 bucket. You can specify the storage class and
+ * encryption for the output objects stored in the bucket. For more information
+ * about output, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html">Querying
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>For more information about the <code>S3</code> structure in
+ * the request body, see the following:</p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html">Managing
+ * Access with ACLs</a> in the <i>Amazon Simple Storage Service Developer Guide</i>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i> </p> </li> </ul> </li> <li> <p>Define the SQL expression for
+ * the <code>SELECT</code> type of restoration for your query in the request body's
+ * <code>SelectParameters</code> structure. You can use expressions like the
+ * following examples.</p> <ul> <li> <p>The following expression returns all
+ * records from the specified object.</p> <p> <code>SELECT * FROM Object</code>
+ * </p> </li> <li> <p>Assuming that you are not using any headers for data stored
+ * in the object, you can specify columns with positional headers.</p> <p>
+ * <code>SELECT s._1, s._2 FROM Object s WHERE s._3 &gt; 100</code> </p> </li> <li>
+ * <p>If you have headers and you set the <code>fileHeaderInfo</code> in the
+ * <code>CSV</code> structure in the request body to <code>USE</code>, you can
+ * specify headers in the query. (If you set the <code>fileHeaderInfo</code> field
+ * to <code>IGNORE</code>, the first row is skipped for the query.) You cannot mix
+ * ordinal positions with header column names. </p> <p> <code>SELECT s.Id,
+ * s.FirstName, s.SSN FROM S3Object s</code> </p> </li> </ul> </li> </ul> <p>For
+ * more information about using SQL with S3 Glacier Select restore, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">SQL
+ * Reference for Amazon S3 Select and S3 Glacier Select</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>When making a select request, you
+ * can also do the following:</p> <ul> <li> <p>To expedite your queries, specify
+ * the <code>Expedited</code> tier. For more information about tiers, see
+ * "Restoring Archives," later in this topic.</p> </li> <li> <p>Specify details
+ * about the data serialization format of both the input object that is being
+ * queried and the serialization of the CSV-encoded query results.</p> </li> </ul>
+ * <p>The following are additional important facts about the select feature:</p>
+ * <ul> <li> <p>The output results are new Amazon S3 objects. Unlike archive
+ * retrievals, they are stored until explicitly deleted-manually or through a
+ * lifecycle policy.</p> </li> <li> <p>You can issue more than one select request
+ * on the same Amazon S3 object. Amazon S3 doesn't deduplicate requests, so avoid
+ * issuing duplicate requests.</p> </li> <li> <p> Amazon S3 accepts a select
+ * request even if the object has already been restored. A select request doesn’t
+ * return error response <code>409</code>.</p> </li> </ul> <p> <b>Restoring
+ * objects</b> </p> <p>Objects that you archive to the S3 Glacier or S3 Glacier
+ * Deep Archive storage class, and S3 Intelligent-Tiering Archive or S3
+ * Intelligent-Tiering Deep Archive tiers are not accessible in real time. For
+ * objects in Archive Access or Deep Archive Access tiers you must first initiate a
+ * restore request, and then wait until the object is moved into the Frequent
+ * Access tier. For objects in S3 Glacier or S3 Glacier Deep Archive storage
+ * classes you must first initiate a restore request, and then wait until a
+ * temporary copy of the object is available. To access an archived object, you
+ * must restore the object for the duration (number of days) that you specify.</p>
+ * <p>To restore a specific object version, you can provide a version ID. If you
+ * don't provide a version ID, Amazon S3 restores the current version.</p> <p>When
+ * restoring an archived object (or using a select request), you can specify one of
+ * the following data access tier options in the <code>Tier</code> element of the
+ * request body: </p> <ul> <li> <p> <b> <code>Expedited</code> </b> - Expedited
+ * retrievals allow you to quickly access your data stored in the S3 Glacier
+ * storage class or S3 Intelligent-Tiering Archive tier when occasional urgent
+ * requests for a subset of archives are required. For all but the largest archived
+ * objects (250 MB+), data accessed using Expedited retrievals is typically made
+ * available within 1–5 minutes. Provisioned capacity ensures that retrieval
+ * capacity for Expedited retrievals is available when you need it. Expedited
+ * retrievals and provisioned capacity are not available for objects stored in the
+ * S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive
+ * tier.</p> </li> <li> <p> <b> <code>Standard</code> </b> - Standard retrievals
+ * allow you to access any of your archived objects within several hours. This is
+ * the default option for retrieval requests that do not specify the retrieval
+ * option. Standard retrievals typically finish within 3–5 hours for objects stored
+ * in the S3 Glacier storage class or S3 Intelligent-Tiering Archive tier. They
+ * typically finish within 12 hours for objects stored in the S3 Glacier Deep
+ * Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Standard
+ * retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li> <li>
+ * <p> <b> <code>Bulk</code> </b> - Bulk retrievals are the lowest-cost retrieval
+ * option in S3 Glacier, enabling you to retrieve large amounts, even petabytes, of
+ * data inexpensively. Bulk retrievals typically finish within 5–12 hours for
+ * objects stored in the S3 Glacier storage class or S3 Intelligent-Tiering Archive
+ * tier. They typically finish within 48 hours for objects stored in the S3 Glacier
+ * Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Bulk
+ * retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li>
+ * </ul> <p>For more information about archive retrieval options and provisioned
+ * capacity for <code>Expedited</code> data access, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html">Restoring
+ * Archived Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>. </p> <p>You can use Amazon S3 restore speed upgrade to change the
+ * restore speed to a faster speed while it is in progress. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html#restoring-objects-upgrade-tier.title.html">
+ * Upgrading the speed of an in-progress restore</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>. </p> <p>To get the status of object
+ * restoration, you can send a <code>HEAD</code> request. Operations return the
+ * <code>x-amz-restore</code> header, which provides information about the
+ * restoration status, in the response. You can use Amazon S3 event notifications
+ * to notify you when a restore is initiated or completed. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Amazon S3 Event Notifications</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> <p>After restoring an archived object, you can update
+ * the restoration period by reissuing the request with a new period. Amazon S3
+ * updates the restoration period relative to the current time and charges only for
+ * the request-there are no data transfer charges. You cannot update the
+ * restoration period when Amazon S3 is actively processing your current restore
+ * request for the object.</p> <p>If your bucket has a lifecycle configuration with
+ * a rule that includes an expiration action, the object expiration overrides the
+ * life span that you specify in a restore request. For example, if you restore an
+ * object copy for 10 days, but the object is scheduled to expire in 3 days, Amazon
+ * S3 deletes the object in 3 days. For more information about lifecycle
+ * configuration, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a> in <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p> <b>Responses</b> </p> <p>A successful operation returns
+ * either the <code>200 OK</code> or <code>202 Accepted</code> status code. </p>
+ * <ul> <li> <p>If the object is not previously restored, then Amazon S3 returns
+ * <code>202 Accepted</code> in the response. </p> </li> <li> <p>If the object is
+ * previously restored, Amazon S3 returns <code>200 OK</code> in the response. </p>
+ * </li> </ul> <p class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p>
+ * <i>Code: RestoreAlreadyInProgress</i> </p> </li> <li> <p> <i>Cause: Object
+ * restore is already in progress. (This error does not apply to SELECT type
+ * requests.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 409 Conflict</i> </p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i> </p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code: GlacierExpeditedRetrievalNotAvailable</i> </p> </li> <li>
+ * <p> <i>Cause: expedited retrievals are currently not available. Try again later.
+ * (Returned if there is insufficient capacity to process the Expedited request.
+ * This error applies only to Expedited retrievals and not to S3 Standard or Bulk
+ * retrievals.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 503</i> </p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix: N/A</i> </p> </li> </ul> </li> </ul> <p
+ * class="title"> <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html">GetBucketNotificationConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">SQL
+ * Reference for Amazon S3 Select and S3 Glacier Select </a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i> </p> </li> </ul><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObject">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void RestoreObjectAsync(const Model::RestoreObjectRequest& request, const RestoreObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>This operation filters the contents of an Amazon S3 object based on a simple
+ * structured query language (SQL) statement. In the request, along with the SQL
+ * expression, you must also specify a data serialization format (JSON, CSV, or
+ * Apache Parquet) of the object. Amazon S3 uses this format to parse object data
+ * into records, and returns only records that match the specified SQL expression.
+ * You must also specify the data serialization format for the response.</p>
+ * <p>This action is not supported by Amazon S3 on Outposts.</p> <p>For more
+ * information about Amazon S3 Select, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html">Selecting
+ * Content from Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>For more information about using SQL with Amazon S3 Select,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">
+ * SQL Reference for Amazon S3 Select and S3 Glacier Select</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p> <p/> <p> <b>Permissions</b> </p>
+ * <p>You must have <code>s3:GetObject</code> permission for this operation. Amazon
+ * S3 Select does not support anonymous access. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p/> <p> <i>Object Data Formats</i> </p> <p>You can use Amazon S3
+ * Select to query objects that have the following format properties:</p> <ul> <li>
+ * <p> <i>CSV, JSON, and Parquet</i> - Objects must be in CSV, JSON, or Parquet
+ * format.</p> </li> <li> <p> <i>UTF-8</i> - UTF-8 is the only encoding type Amazon
+ * S3 Select supports.</p> </li> <li> <p> <i>GZIP or BZIP2</i> - CSV and JSON files
+ * can be compressed using GZIP or BZIP2. GZIP and BZIP2 are the only compression
+ * formats that Amazon S3 Select supports for CSV and JSON files. Amazon S3 Select
+ * supports columnar compression for Parquet using GZIP or Snappy. Amazon S3 Select
+ * does not support whole-object compression for Parquet objects.</p> </li> <li>
+ * <p> <i>Server-side encryption</i> - Amazon S3 Select supports querying objects
+ * that are protected with server-side encryption.</p> <p>For objects that are
+ * encrypted with customer-provided encryption keys (SSE-C), you must use HTTPS,
+ * and you must use the headers that are documented in the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>.
+ * For more information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p>For objects that are encrypted with
+ * Amazon S3 managed encryption keys (SSE-S3) and customer master keys (CMKs)
+ * stored in AWS Key Management Service (SSE-KMS), server-side encryption is
+ * handled transparently, so you don't need to specify anything. For more
+ * information about server-side encryption, including SSE-S3 and SSE-KMS, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> </li> </ul> <p> <b>Working with the Response Body</b>
+ * </p> <p>Given the response size is unknown, Amazon S3 Select streams the
+ * response as a series of messages and includes a <code>Transfer-Encoding</code>
+ * header with <code>chunked</code> as its value in the response. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html">Appendix:
+ * SelectObjectContent Response</a> .</p> <p/> <p> <b>GetObject Support</b> </p>
+ * <p>The <code>SelectObjectContent</code> operation does not support the following
+ * <code>GetObject</code> functionality. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>.</p>
+ * <ul> <li> <p> <code>Range</code>: Although you can specify a scan range for an
+ * Amazon S3 Select request (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html#AmazonS3-SelectObjectContent-request-ScanRange">SelectObjectContentRequest
+ * - ScanRange</a> in the request parameters), you cannot specify the range of
+ * bytes of an object to return. </p> </li> <li> <p>GLACIER, DEEP_ARCHIVE and
+ * REDUCED_REDUNDANCY storage classes: You cannot specify the GLACIER,
+ * DEEP_ARCHIVE, or <code>REDUCED_REDUNDANCY</code> storage classes. For more
+ * information, about storage classes see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#storage-class-intro">Storage
+ * Classes</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * </li> </ul> <p/> <p> <b>Special Errors</b> </p> <p>For a list of special errors
+ * for this operation, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList">List
+ * of SELECT Object Content Error Codes</a> </p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContent">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::SelectObjectContentOutcome SelectObjectContent(Model::SelectObjectContentRequest& request) const;
+
+ /**
+ * <p>This operation filters the contents of an Amazon S3 object based on a simple
+ * structured query language (SQL) statement. In the request, along with the SQL
+ * expression, you must also specify a data serialization format (JSON, CSV, or
+ * Apache Parquet) of the object. Amazon S3 uses this format to parse object data
+ * into records, and returns only records that match the specified SQL expression.
+ * You must also specify the data serialization format for the response.</p>
+ * <p>This action is not supported by Amazon S3 on Outposts.</p> <p>For more
+ * information about Amazon S3 Select, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html">Selecting
+ * Content from Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>For more information about using SQL with Amazon S3 Select,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">
+ * SQL Reference for Amazon S3 Select and S3 Glacier Select</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p> <p/> <p> <b>Permissions</b> </p>
+ * <p>You must have <code>s3:GetObject</code> permission for this operation. Amazon
+ * S3 Select does not support anonymous access. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p/> <p> <i>Object Data Formats</i> </p> <p>You can use Amazon S3
+ * Select to query objects that have the following format properties:</p> <ul> <li>
+ * <p> <i>CSV, JSON, and Parquet</i> - Objects must be in CSV, JSON, or Parquet
+ * format.</p> </li> <li> <p> <i>UTF-8</i> - UTF-8 is the only encoding type Amazon
+ * S3 Select supports.</p> </li> <li> <p> <i>GZIP or BZIP2</i> - CSV and JSON files
+ * can be compressed using GZIP or BZIP2. GZIP and BZIP2 are the only compression
+ * formats that Amazon S3 Select supports for CSV and JSON files. Amazon S3 Select
+ * supports columnar compression for Parquet using GZIP or Snappy. Amazon S3 Select
+ * does not support whole-object compression for Parquet objects.</p> </li> <li>
+ * <p> <i>Server-side encryption</i> - Amazon S3 Select supports querying objects
+ * that are protected with server-side encryption.</p> <p>For objects that are
+ * encrypted with customer-provided encryption keys (SSE-C), you must use HTTPS,
+ * and you must use the headers that are documented in the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>.
+ * For more information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p>For objects that are encrypted with
+ * Amazon S3 managed encryption keys (SSE-S3) and customer master keys (CMKs)
+ * stored in AWS Key Management Service (SSE-KMS), server-side encryption is
+ * handled transparently, so you don't need to specify anything. For more
+ * information about server-side encryption, including SSE-S3 and SSE-KMS, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> </li> </ul> <p> <b>Working with the Response Body</b>
+ * </p> <p>Given the response size is unknown, Amazon S3 Select streams the
+ * response as a series of messages and includes a <code>Transfer-Encoding</code>
+ * header with <code>chunked</code> as its value in the response. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html">Appendix:
+ * SelectObjectContent Response</a> .</p> <p/> <p> <b>GetObject Support</b> </p>
+ * <p>The <code>SelectObjectContent</code> operation does not support the following
+ * <code>GetObject</code> functionality. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>.</p>
+ * <ul> <li> <p> <code>Range</code>: Although you can specify a scan range for an
+ * Amazon S3 Select request (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html#AmazonS3-SelectObjectContent-request-ScanRange">SelectObjectContentRequest
+ * - ScanRange</a> in the request parameters), you cannot specify the range of
+ * bytes of an object to return. </p> </li> <li> <p>GLACIER, DEEP_ARCHIVE and
+ * REDUCED_REDUNDANCY storage classes: You cannot specify the GLACIER,
+ * DEEP_ARCHIVE, or <code>REDUCED_REDUNDANCY</code> storage classes. For more
+ * information, about storage classes see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#storage-class-intro">Storage
+ * Classes</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * </li> </ul> <p/> <p> <b>Special Errors</b> </p> <p>For a list of special errors
+ * for this operation, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList">List
+ * of SELECT Object Content Error Codes</a> </p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContent">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::SelectObjectContentOutcomeCallable SelectObjectContentCallable(Model::SelectObjectContentRequest& request) const;
+
+ /**
+ * <p>This operation filters the contents of an Amazon S3 object based on a simple
+ * structured query language (SQL) statement. In the request, along with the SQL
+ * expression, you must also specify a data serialization format (JSON, CSV, or
+ * Apache Parquet) of the object. Amazon S3 uses this format to parse object data
+ * into records, and returns only records that match the specified SQL expression.
+ * You must also specify the data serialization format for the response.</p>
+ * <p>This action is not supported by Amazon S3 on Outposts.</p> <p>For more
+ * information about Amazon S3 Select, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html">Selecting
+ * Content from Objects</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>For more information about using SQL with Amazon S3 Select,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html">
+ * SQL Reference for Amazon S3 Select and S3 Glacier Select</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p> <p/> <p> <b>Permissions</b> </p>
+ * <p>You must have <code>s3:GetObject</code> permission for this operation. Amazon
+ * S3 Select does not support anonymous access. For more information about
+ * permissions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html">Specifying
+ * Permissions in a Policy</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p/> <p> <i>Object Data Formats</i> </p> <p>You can use Amazon S3
+ * Select to query objects that have the following format properties:</p> <ul> <li>
+ * <p> <i>CSV, JSON, and Parquet</i> - Objects must be in CSV, JSON, or Parquet
+ * format.</p> </li> <li> <p> <i>UTF-8</i> - UTF-8 is the only encoding type Amazon
+ * S3 Select supports.</p> </li> <li> <p> <i>GZIP or BZIP2</i> - CSV and JSON files
+ * can be compressed using GZIP or BZIP2. GZIP and BZIP2 are the only compression
+ * formats that Amazon S3 Select supports for CSV and JSON files. Amazon S3 Select
+ * supports columnar compression for Parquet using GZIP or Snappy. Amazon S3 Select
+ * does not support whole-object compression for Parquet objects.</p> </li> <li>
+ * <p> <i>Server-side encryption</i> - Amazon S3 Select supports querying objects
+ * that are protected with server-side encryption.</p> <p>For objects that are
+ * encrypted with customer-provided encryption keys (SSE-C), you must use HTTPS,
+ * and you must use the headers that are documented in the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>.
+ * For more information about SSE-C, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p> <p>For objects that are encrypted with
+ * Amazon S3 managed encryption keys (SSE-S3) and customer master keys (CMKs)
+ * stored in AWS Key Management Service (SSE-KMS), server-side encryption is
+ * handled transparently, so you don't need to specify anything. For more
+ * information about server-side encryption, including SSE-S3 and SSE-KMS, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">Protecting
+ * Data Using Server-Side Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> </li> </ul> <p> <b>Working with the Response Body</b>
+ * </p> <p>Given the response size is unknown, Amazon S3 Select streams the
+ * response as a series of messages and includes a <code>Transfer-Encoding</code>
+ * header with <code>chunked</code> as its value in the response. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html">Appendix:
+ * SelectObjectContent Response</a> .</p> <p/> <p> <b>GetObject Support</b> </p>
+ * <p>The <code>SelectObjectContent</code> operation does not support the following
+ * <code>GetObject</code> functionality. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>.</p>
+ * <ul> <li> <p> <code>Range</code>: Although you can specify a scan range for an
+ * Amazon S3 Select request (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html#AmazonS3-SelectObjectContent-request-ScanRange">SelectObjectContentRequest
+ * - ScanRange</a> in the request parameters), you cannot specify the range of
+ * bytes of an object to return. </p> </li> <li> <p>GLACIER, DEEP_ARCHIVE and
+ * REDUCED_REDUNDANCY storage classes: You cannot specify the GLACIER,
+ * DEEP_ARCHIVE, or <code>REDUCED_REDUNDANCY</code> storage classes. For more
+ * information, about storage classes see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#storage-class-intro">Storage
+ * Classes</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * </li> </ul> <p/> <p> <b>Special Errors</b> </p> <p>For a list of special errors
+ * for this operation, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList">List
+ * of SELECT Object Content Error Codes</a> </p> <p class="title"> <b>Related
+ * Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html">GetBucketLifecycleConfiguration</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContent">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void SelectObjectContentAsync(Model::SelectObjectContentRequest& request, const SelectObjectContentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Uploads a part in a multipart upload.</p> <p>In this operation, you
+ * provide part data in your request. However, you have an option to specify your
+ * existing Amazon S3 object as a data source for the part you are uploading. To
+ * upload a part from an existing object, you use the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>
+ * operation. </p> <p>You must initiate a multipart upload (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>)
+ * before you can upload any part. In response to your initiate request, Amazon S3
+ * returns an upload ID, a unique identifier, that you must include in your upload
+ * part request.</p> <p>Part numbers can be any number from 1 to 10,000, inclusive.
+ * A part number uniquely identifies a part and also defines its position within
+ * the object being created. If you upload a new part using the same part number
+ * that was used with a previous part, the previously uploaded part is overwritten.
+ * Each part must be at least 5 MB in size, except the last part. There is no size
+ * limit on the last part of your multipart upload.</p> <p>To ensure that data is
+ * not corrupted when traversing the network, specify the <code>Content-MD5</code>
+ * header in the upload part request. Amazon S3 checks the part data against the
+ * provided MD5 value. If they do not match, Amazon S3 returns an error. </p> <p>If
+ * the upload request is signed with Signature Version 4, then AWS S3 uses the
+ * <code>x-amz-content-sha256</code> header as a checksum instead of
+ * <code>Content-MD5</code>. For more information see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html">Authenticating
+ * Requests: Using the Authorization Header (AWS Signature Version 4)</a>. </p> <p>
+ * <b>Note:</b> After you initiate multipart upload and upload one or more parts,
+ * you must either complete or abort multipart upload in order to stop getting
+ * charged for storage of the uploaded parts. Only after you either complete or
+ * abort multipart upload, Amazon S3 frees up the parts storage and stops charging
+ * you for the parts storage.</p> <p>For more information on multipart uploads, go
+ * to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html">Multipart
+ * Upload Overview</a> in the <i>Amazon Simple Storage Service Developer Guide
+ * </i>.</p> <p>For information on the permissions required to use the multipart
+ * upload API, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>You can optionally request server-side encryption where Amazon
+ * S3 encrypts your data as it writes it to disks in its data centers and decrypts
+ * it for you when you access it. You have the option of providing your own
+ * encryption key, or you can use the AWS managed encryption keys. If you choose to
+ * provide your own encryption key, the request headers you provide in the request
+ * must match the headers you used in the request to initiate the upload by using
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>.
+ * For more information, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using
+ * Server-Side Encryption</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>Server-side encryption is supported by the S3 Multipart Upload
+ * actions. Unless you are using a customer-provided encryption key, you don't need
+ * to specify the encryption parameters in each UploadPart request. Instead, you
+ * only need to specify the server-side encryption parameters in the initial
+ * Initiate Multipart request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>.</p>
+ * <p>If you requested server-side encryption using a customer-provided encryption
+ * key in your initiate multipart upload request, you must provide identical
+ * encryption information in each part upload using the following headers.</p> <ul>
+ * <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p
+ * class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>Code:
+ * NoSuchUpload</i> </p> </li> <li> <p> <i>Cause: The specified multipart upload
+ * does not exist. The upload ID might be invalid, or the multipart upload might
+ * have been aborted or completed.</i> </p> </li> <li> <p> <i> HTTP Status Code:
+ * 404 Not Found </i> </p> </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i>
+ * </p> </li> </ul> </li> </ul> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPart">AWS API
+ * Reference</a></p>
+ */
+ virtual Model::UploadPartOutcome UploadPart(const Model::UploadPartRequest& request) const;
+
+ /**
+ * <p>Uploads a part in a multipart upload.</p> <p>In this operation, you
+ * provide part data in your request. However, you have an option to specify your
+ * existing Amazon S3 object as a data source for the part you are uploading. To
+ * upload a part from an existing object, you use the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>
+ * operation. </p> <p>You must initiate a multipart upload (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>)
+ * before you can upload any part. In response to your initiate request, Amazon S3
+ * returns an upload ID, a unique identifier, that you must include in your upload
+ * part request.</p> <p>Part numbers can be any number from 1 to 10,000, inclusive.
+ * A part number uniquely identifies a part and also defines its position within
+ * the object being created. If you upload a new part using the same part number
+ * that was used with a previous part, the previously uploaded part is overwritten.
+ * Each part must be at least 5 MB in size, except the last part. There is no size
+ * limit on the last part of your multipart upload.</p> <p>To ensure that data is
+ * not corrupted when traversing the network, specify the <code>Content-MD5</code>
+ * header in the upload part request. Amazon S3 checks the part data against the
+ * provided MD5 value. If they do not match, Amazon S3 returns an error. </p> <p>If
+ * the upload request is signed with Signature Version 4, then AWS S3 uses the
+ * <code>x-amz-content-sha256</code> header as a checksum instead of
+ * <code>Content-MD5</code>. For more information see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html">Authenticating
+ * Requests: Using the Authorization Header (AWS Signature Version 4)</a>. </p> <p>
+ * <b>Note:</b> After you initiate multipart upload and upload one or more parts,
+ * you must either complete or abort multipart upload in order to stop getting
+ * charged for storage of the uploaded parts. Only after you either complete or
+ * abort multipart upload, Amazon S3 frees up the parts storage and stops charging
+ * you for the parts storage.</p> <p>For more information on multipart uploads, go
+ * to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html">Multipart
+ * Upload Overview</a> in the <i>Amazon Simple Storage Service Developer Guide
+ * </i>.</p> <p>For information on the permissions required to use the multipart
+ * upload API, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>You can optionally request server-side encryption where Amazon
+ * S3 encrypts your data as it writes it to disks in its data centers and decrypts
+ * it for you when you access it. You have the option of providing your own
+ * encryption key, or you can use the AWS managed encryption keys. If you choose to
+ * provide your own encryption key, the request headers you provide in the request
+ * must match the headers you used in the request to initiate the upload by using
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>.
+ * For more information, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using
+ * Server-Side Encryption</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>Server-side encryption is supported by the S3 Multipart Upload
+ * actions. Unless you are using a customer-provided encryption key, you don't need
+ * to specify the encryption parameters in each UploadPart request. Instead, you
+ * only need to specify the server-side encryption parameters in the initial
+ * Initiate Multipart request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>.</p>
+ * <p>If you requested server-side encryption using a customer-provided encryption
+ * key in your initiate multipart upload request, you must provide identical
+ * encryption information in each part upload using the following headers.</p> <ul>
+ * <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p
+ * class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>Code:
+ * NoSuchUpload</i> </p> </li> <li> <p> <i>Cause: The specified multipart upload
+ * does not exist. The upload ID might be invalid, or the multipart upload might
+ * have been aborted or completed.</i> </p> </li> <li> <p> <i> HTTP Status Code:
+ * 404 Not Found </i> </p> </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i>
+ * </p> </li> </ul> </li> </ul> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPart">AWS API
+ * Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::UploadPartOutcomeCallable UploadPartCallable(const Model::UploadPartRequest& request) const;
+
+ /**
+ * <p>Uploads a part in a multipart upload.</p> <p>In this operation, you
+ * provide part data in your request. However, you have an option to specify your
+ * existing Amazon S3 object as a data source for the part you are uploading. To
+ * upload a part from an existing object, you use the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>
+ * operation. </p> <p>You must initiate a multipart upload (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>)
+ * before you can upload any part. In response to your initiate request, Amazon S3
+ * returns an upload ID, a unique identifier, that you must include in your upload
+ * part request.</p> <p>Part numbers can be any number from 1 to 10,000, inclusive.
+ * A part number uniquely identifies a part and also defines its position within
+ * the object being created. If you upload a new part using the same part number
+ * that was used with a previous part, the previously uploaded part is overwritten.
+ * Each part must be at least 5 MB in size, except the last part. There is no size
+ * limit on the last part of your multipart upload.</p> <p>To ensure that data is
+ * not corrupted when traversing the network, specify the <code>Content-MD5</code>
+ * header in the upload part request. Amazon S3 checks the part data against the
+ * provided MD5 value. If they do not match, Amazon S3 returns an error. </p> <p>If
+ * the upload request is signed with Signature Version 4, then AWS S3 uses the
+ * <code>x-amz-content-sha256</code> header as a checksum instead of
+ * <code>Content-MD5</code>. For more information see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html">Authenticating
+ * Requests: Using the Authorization Header (AWS Signature Version 4)</a>. </p> <p>
+ * <b>Note:</b> After you initiate multipart upload and upload one or more parts,
+ * you must either complete or abort multipart upload in order to stop getting
+ * charged for storage of the uploaded parts. Only after you either complete or
+ * abort multipart upload, Amazon S3 frees up the parts storage and stops charging
+ * you for the parts storage.</p> <p>For more information on multipart uploads, go
+ * to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html">Multipart
+ * Upload Overview</a> in the <i>Amazon Simple Storage Service Developer Guide
+ * </i>.</p> <p>For information on the permissions required to use the multipart
+ * upload API, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>You can optionally request server-side encryption where Amazon
+ * S3 encrypts your data as it writes it to disks in its data centers and decrypts
+ * it for you when you access it. You have the option of providing your own
+ * encryption key, or you can use the AWS managed encryption keys. If you choose to
+ * provide your own encryption key, the request headers you provide in the request
+ * must match the headers you used in the request to initiate the upload by using
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>.
+ * For more information, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using
+ * Server-Side Encryption</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>Server-side encryption is supported by the S3 Multipart Upload
+ * actions. Unless you are using a customer-provided encryption key, you don't need
+ * to specify the encryption parameters in each UploadPart request. Instead, you
+ * only need to specify the server-side encryption parameters in the initial
+ * Initiate Multipart request. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>.</p>
+ * <p>If you requested server-side encryption using a customer-provided encryption
+ * key in your initiate multipart upload request, you must provide identical
+ * encryption information in each part upload using the following headers.</p> <ul>
+ * <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key</p> </li> <li>
+ * <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p
+ * class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>Code:
+ * NoSuchUpload</i> </p> </li> <li> <p> <i>Cause: The specified multipart upload
+ * does not exist. The upload ID might be invalid, or the multipart upload might
+ * have been aborted or completed.</i> </p> </li> <li> <p> <i> HTTP Status Code:
+ * 404 Not Found </i> </p> </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i>
+ * </p> </li> </ul> </li> </ul> <p class="title"> <b>Related Resources</b> </p>
+ * <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPart">AWS API
+ * Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void UploadPartAsync(const Model::UploadPartRequest& request, const UploadPartResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+ /**
+ * <p>Uploads a part by copying data from an existing object as data source. You
+ * specify the data source by adding the request header
+ * <code>x-amz-copy-source</code> in your request and a byte range by adding the
+ * request header <code>x-amz-copy-source-range</code> in your request. </p> <p>The
+ * minimum allowable part size for a multipart upload is 5 MB. For more information
+ * about multipart upload limits, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html">Quick
+ * Facts</a> in the <i>Amazon Simple Storage Service Developer Guide</i>. </p>
+ * <p>Instead of using an existing object as part data, you might use the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * operation and provide data in your request.</p> <p>You must initiate a
+ * multipart upload before you can upload any part. In response to your initiate
+ * request. Amazon S3 returns a unique identifier, the upload ID, that you must
+ * include in your upload part request.</p> <p>For more information about using the
+ * <code>UploadPartCopy</code> operation, see the following:</p> <ul> <li> <p>For
+ * conceptual information about multipart uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> </li> <li> <p>For information about permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> </li> <li> <p>For information about copying objects using a
+ * single atomic operation vs. the multipart upload, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectOperations.html">Operations
+ * on Objects</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * </li> <li> <p>For information about using server-side encryption with
+ * customer-provided encryption keys with the UploadPartCopy operation, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>.</p>
+ * </li> </ul> <p>Note the following additional considerations about the request
+ * headers <code>x-amz-copy-source-if-match</code>,
+ * <code>x-amz-copy-source-if-none-match</code>,
+ * <code>x-amz-copy-source-if-unmodified-since</code>, and
+ * <code>x-amz-copy-source-if-modified-since</code>:</p> <p> </p> <ul> <li> <p>
+ * <b>Consideration 1</b> - If both of the <code>x-amz-copy-source-if-match</code>
+ * and <code>x-amz-copy-source-if-unmodified-since</code> headers are present in
+ * the request as follows:</p> <p> <code>x-amz-copy-source-if-match</code>
+ * condition evaluates to <code>true</code>, and;</p> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> condition evaluates to
+ * <code>false</code>;</p> <p>Amazon S3 returns <code>200 OK</code> and copies the
+ * data. </p> </li> <li> <p> <b>Consideration 2</b> - If both of the
+ * <code>x-amz-copy-source-if-none-match</code> and
+ * <code>x-amz-copy-source-if-modified-since</code> headers are present in the
+ * request as follows:</p> <p> <code>x-amz-copy-source-if-none-match</code>
+ * condition evaluates to <code>false</code>, and;</p> <p>
+ * <code>x-amz-copy-source-if-modified-since</code> condition evaluates to
+ * <code>true</code>;</p> <p>Amazon S3 returns <code>412 Precondition Failed</code>
+ * response code. </p> </li> </ul> <p> <b>Versioning</b> </p> <p>If your bucket has
+ * versioning enabled, you could have multiple versions of the same object. By
+ * default, <code>x-amz-copy-source</code> identifies the current version of the
+ * object to copy. If the current version is a delete marker and you don't specify
+ * a versionId in the <code>x-amz-copy-source</code>, Amazon S3 returns a 404
+ * error, because the object does not exist. If you specify versionId in the
+ * <code>x-amz-copy-source</code> and the versionId is a delete marker, Amazon S3
+ * returns an HTTP 400 error, because you are not allowed to specify a delete
+ * marker as a version for the <code>x-amz-copy-source</code>. </p> <p>You can
+ * optionally specify a specific version of the source object to copy by adding the
+ * <code>versionId</code> subresource as shown in the following example:</p> <p>
+ * <code>x-amz-copy-source: /bucket/object?versionId=version id</code> </p> <p
+ * class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>Code:
+ * NoSuchUpload</i> </p> </li> <li> <p> <i>Cause: The specified multipart upload
+ * does not exist. The upload ID might be invalid, or the multipart upload might
+ * have been aborted or completed.</i> </p> </li> <li> <p> <i>HTTP Status Code: 404
+ * Not Found</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * InvalidRequest</i> </p> </li> <li> <p> <i>Cause: The specified copy source is
+ * not supported as a byte-range copy source.</i> </p> </li> <li> <p> <i>HTTP
+ * Status Code: 400 Bad Request</i> </p> </li> </ul> </li> </ul> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopy">AWS
+ * API Reference</a></p>
+ */
+ virtual Model::UploadPartCopyOutcome UploadPartCopy(const Model::UploadPartCopyRequest& request) const;
+
+ /**
+ * <p>Uploads a part by copying data from an existing object as data source. You
+ * specify the data source by adding the request header
+ * <code>x-amz-copy-source</code> in your request and a byte range by adding the
+ * request header <code>x-amz-copy-source-range</code> in your request. </p> <p>The
+ * minimum allowable part size for a multipart upload is 5 MB. For more information
+ * about multipart upload limits, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html">Quick
+ * Facts</a> in the <i>Amazon Simple Storage Service Developer Guide</i>. </p>
+ * <p>Instead of using an existing object as part data, you might use the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * operation and provide data in your request.</p> <p>You must initiate a
+ * multipart upload before you can upload any part. In response to your initiate
+ * request. Amazon S3 returns a unique identifier, the upload ID, that you must
+ * include in your upload part request.</p> <p>For more information about using the
+ * <code>UploadPartCopy</code> operation, see the following:</p> <ul> <li> <p>For
+ * conceptual information about multipart uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> </li> <li> <p>For information about permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> </li> <li> <p>For information about copying objects using a
+ * single atomic operation vs. the multipart upload, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectOperations.html">Operations
+ * on Objects</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * </li> <li> <p>For information about using server-side encryption with
+ * customer-provided encryption keys with the UploadPartCopy operation, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>.</p>
+ * </li> </ul> <p>Note the following additional considerations about the request
+ * headers <code>x-amz-copy-source-if-match</code>,
+ * <code>x-amz-copy-source-if-none-match</code>,
+ * <code>x-amz-copy-source-if-unmodified-since</code>, and
+ * <code>x-amz-copy-source-if-modified-since</code>:</p> <p> </p> <ul> <li> <p>
+ * <b>Consideration 1</b> - If both of the <code>x-amz-copy-source-if-match</code>
+ * and <code>x-amz-copy-source-if-unmodified-since</code> headers are present in
+ * the request as follows:</p> <p> <code>x-amz-copy-source-if-match</code>
+ * condition evaluates to <code>true</code>, and;</p> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> condition evaluates to
+ * <code>false</code>;</p> <p>Amazon S3 returns <code>200 OK</code> and copies the
+ * data. </p> </li> <li> <p> <b>Consideration 2</b> - If both of the
+ * <code>x-amz-copy-source-if-none-match</code> and
+ * <code>x-amz-copy-source-if-modified-since</code> headers are present in the
+ * request as follows:</p> <p> <code>x-amz-copy-source-if-none-match</code>
+ * condition evaluates to <code>false</code>, and;</p> <p>
+ * <code>x-amz-copy-source-if-modified-since</code> condition evaluates to
+ * <code>true</code>;</p> <p>Amazon S3 returns <code>412 Precondition Failed</code>
+ * response code. </p> </li> </ul> <p> <b>Versioning</b> </p> <p>If your bucket has
+ * versioning enabled, you could have multiple versions of the same object. By
+ * default, <code>x-amz-copy-source</code> identifies the current version of the
+ * object to copy. If the current version is a delete marker and you don't specify
+ * a versionId in the <code>x-amz-copy-source</code>, Amazon S3 returns a 404
+ * error, because the object does not exist. If you specify versionId in the
+ * <code>x-amz-copy-source</code> and the versionId is a delete marker, Amazon S3
+ * returns an HTTP 400 error, because you are not allowed to specify a delete
+ * marker as a version for the <code>x-amz-copy-source</code>. </p> <p>You can
+ * optionally specify a specific version of the source object to copy by adding the
+ * <code>versionId</code> subresource as shown in the following example:</p> <p>
+ * <code>x-amz-copy-source: /bucket/object?versionId=version id</code> </p> <p
+ * class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>Code:
+ * NoSuchUpload</i> </p> </li> <li> <p> <i>Cause: The specified multipart upload
+ * does not exist. The upload ID might be invalid, or the multipart upload might
+ * have been aborted or completed.</i> </p> </li> <li> <p> <i>HTTP Status Code: 404
+ * Not Found</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * InvalidRequest</i> </p> </li> <li> <p> <i>Cause: The specified copy source is
+ * not supported as a byte-range copy source.</i> </p> </li> <li> <p> <i>HTTP
+ * Status Code: 400 Bad Request</i> </p> </li> </ul> </li> </ul> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopy">AWS
+ * API Reference</a></p>
+ *
+ * returns a future to the operation so that it can be executed in parallel to other requests.
+ */
+ virtual Model::UploadPartCopyOutcomeCallable UploadPartCopyCallable(const Model::UploadPartCopyRequest& request) const;
+
+ /**
+ * <p>Uploads a part by copying data from an existing object as data source. You
+ * specify the data source by adding the request header
+ * <code>x-amz-copy-source</code> in your request and a byte range by adding the
+ * request header <code>x-amz-copy-source-range</code> in your request. </p> <p>The
+ * minimum allowable part size for a multipart upload is 5 MB. For more information
+ * about multipart upload limits, go to <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html">Quick
+ * Facts</a> in the <i>Amazon Simple Storage Service Developer Guide</i>. </p>
+ * <p>Instead of using an existing object as part data, you might use the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * operation and provide data in your request.</p> <p>You must initiate a
+ * multipart upload before you can upload any part. In response to your initiate
+ * request. Amazon S3 returns a unique identifier, the upload ID, that you must
+ * include in your upload part request.</p> <p>For more information about using the
+ * <code>UploadPartCopy</code> operation, see the following:</p> <ul> <li> <p>For
+ * conceptual information about multipart uploads, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html">Uploading
+ * Objects Using Multipart Upload</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p> </li> <li> <p>For information about permissions
+ * required to use the multipart upload API, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html">Multipart
+ * Upload API and Permissions</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> </li> <li> <p>For information about copying objects using a
+ * single atomic operation vs. the multipart upload, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectOperations.html">Operations
+ * on Objects</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ * </li> <li> <p>For information about using server-side encryption with
+ * customer-provided encryption keys with the UploadPartCopy operation, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>
+ * and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>.</p>
+ * </li> </ul> <p>Note the following additional considerations about the request
+ * headers <code>x-amz-copy-source-if-match</code>,
+ * <code>x-amz-copy-source-if-none-match</code>,
+ * <code>x-amz-copy-source-if-unmodified-since</code>, and
+ * <code>x-amz-copy-source-if-modified-since</code>:</p> <p> </p> <ul> <li> <p>
+ * <b>Consideration 1</b> - If both of the <code>x-amz-copy-source-if-match</code>
+ * and <code>x-amz-copy-source-if-unmodified-since</code> headers are present in
+ * the request as follows:</p> <p> <code>x-amz-copy-source-if-match</code>
+ * condition evaluates to <code>true</code>, and;</p> <p>
+ * <code>x-amz-copy-source-if-unmodified-since</code> condition evaluates to
+ * <code>false</code>;</p> <p>Amazon S3 returns <code>200 OK</code> and copies the
+ * data. </p> </li> <li> <p> <b>Consideration 2</b> - If both of the
+ * <code>x-amz-copy-source-if-none-match</code> and
+ * <code>x-amz-copy-source-if-modified-since</code> headers are present in the
+ * request as follows:</p> <p> <code>x-amz-copy-source-if-none-match</code>
+ * condition evaluates to <code>false</code>, and;</p> <p>
+ * <code>x-amz-copy-source-if-modified-since</code> condition evaluates to
+ * <code>true</code>;</p> <p>Amazon S3 returns <code>412 Precondition Failed</code>
+ * response code. </p> </li> </ul> <p> <b>Versioning</b> </p> <p>If your bucket has
+ * versioning enabled, you could have multiple versions of the same object. By
+ * default, <code>x-amz-copy-source</code> identifies the current version of the
+ * object to copy. If the current version is a delete marker and you don't specify
+ * a versionId in the <code>x-amz-copy-source</code>, Amazon S3 returns a 404
+ * error, because the object does not exist. If you specify versionId in the
+ * <code>x-amz-copy-source</code> and the versionId is a delete marker, Amazon S3
+ * returns an HTTP 400 error, because you are not allowed to specify a delete
+ * marker as a version for the <code>x-amz-copy-source</code>. </p> <p>You can
+ * optionally specify a specific version of the source object to copy by adding the
+ * <code>versionId</code> subresource as shown in the following example:</p> <p>
+ * <code>x-amz-copy-source: /bucket/object?versionId=version id</code> </p> <p
+ * class="title"> <b>Special Errors</b> </p> <ul> <li> <ul> <li> <p> <i>Code:
+ * NoSuchUpload</i> </p> </li> <li> <p> <i>Cause: The specified multipart upload
+ * does not exist. The upload ID might be invalid, or the multipart upload might
+ * have been aborted or completed.</i> </p> </li> <li> <p> <i>HTTP Status Code: 404
+ * Not Found</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
+ * InvalidRequest</i> </p> </li> <li> <p> <i>Cause: The specified copy source is
+ * not supported as a byte-range copy source.</i> </p> </li> <li> <p> <i>HTTP
+ * Status Code: 400 Bad Request</i> </p> </li> </ul> </li> </ul> <p class="title">
+ * <b>Related Resources</b> </p> <ul> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a>
+ * </p> </li> <li> <p> <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a>
+ * </p> </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopy">AWS
+ * API Reference</a></p>
+ *
+ * Queues the request into a thread executor and triggers associated callback when operation has finished.
+ */
+ virtual void UploadPartCopyAsync(const Model::UploadPartCopyRequest& request, const UploadPartCopyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
+
+
+ Aws::String GeneratePresignedUrl(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+
+ Aws::String GeneratePresignedUrl(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, const Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+
+ /**
+ * Server Side Encryption Headers and Algorithm
+ * Method Algorithm Required Headers
+ * SSE-S3 AES256 x-amz-server-side-encryption:AES256
+ * SSE-KMS aws:kms x-amz-server-side--encryption:aws:kms, x-amz-server-side-encryption-aws-kms-key-id:<kmsMasterKeyId>
+ * SS3-C AES256 x-amz-server-side-encryption-customer-algorithm:AES256, x-amz-server-side-encryption-customer-key:<base64EncodedKey>, x-amz-server-side-encryption-customer-key-MD5:<Base64EncodedMD5ofNonBase64EncodedKey>
+ */
+ /**
+ * Generate presigned URL with Sever Side Encryption(SSE) and with S3 managed keys.
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html (algo: AES256)
+ */
+ Aws::String GeneratePresignedUrlWithSSES3(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+ /**
+ * Generate presigned URL with Sever Side Encryption(SSE) and with S3 managed keys.
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html (algo: AES256)
+ * Header: "x-amz-server-side-encryption" will be added internally, don't customize it.
+ */
+ Aws::String GeneratePresignedUrlWithSSES3(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, Http::HeaderValueCollection customizedHeaders, long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+
+ /**
+ * Generate presigned URL with Server Side Encryption(SSE) and with KMS master key id.
+ * if kmsMasterKeyId is empty, we will end up use the default one generated by KMS for you. You can find it via AWS IAM console, it's the one aliased as "aws/s3".
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html (algo: aws:kms)
+ */
+ Aws::String GeneratePresignedUrlWithSSEKMS(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, const Aws::String& kmsMasterKeyId = "", long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+ /**
+ * Generate presigned URL with Server Side Encryption(SSE) and with KMS master key id.
+ * if kmsMasterKeyId is empty, we will end up use the default one generated by KMS for you. You can find it via AWS IAM console, it's the one aliased as "aws/s3".
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html (algo: aws:kms)
+ * Headers: "x-amz-server-side-encryption" and "x-amz-server-side-encryption-aws-kms-key-id" will be added internally, don't customize them.
+ */
+ Aws::String GeneratePresignedUrlWithSSEKMS(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, Http::HeaderValueCollection customizedHeaders, const Aws::String& kmsMasterKeyId = "", long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+
+ /**
+ * Generate presigned URL with Sever Side Encryption(SSE) and with customer supplied Key.
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html (algo: AES256)
+ */
+ Aws::String GeneratePresignedUrlWithSSEC(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, const Aws::String& base64EncodedAES256Key, long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+ /**
+ * Generate presigned URL with Sever Side Encryption(SSE) and with customer supplied Key.
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html (algo: AES256)
+ * Headers: "x-amz-server-side-encryption-customer-algorithm","x-amz-server-side-encryption-customer-key" and "x-amz-server-side-encryption-customer-key-MD5" will be added internally, don't customize them.
+ */
+ Aws::String GeneratePresignedUrlWithSSEC(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, Http::HeaderValueCollection customizedHeaders, const Aws::String& base64EncodedAES256Key, long long expirationInSeconds = MAX_EXPIRATION_SECONDS);
+
+
+ virtual bool MultipartUploadSupported() const;
+
+ void OverrideEndpoint(const Aws::String& endpoint);
+
+ private:
+ void init(const Client::ClientConfiguration& clientConfiguration);
+ void LoadS3SpecificConfig(const Aws::String& profile);
+ ComputeEndpointOutcome ComputeEndpointString(const Aws::String& bucket) const;
+ ComputeEndpointOutcome ComputeEndpointString() const;
+
+ void AbortMultipartUploadAsyncHelper(const Model::AbortMultipartUploadRequest& request, const AbortMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void CompleteMultipartUploadAsyncHelper(const Model::CompleteMultipartUploadRequest& request, const CompleteMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void CopyObjectAsyncHelper(const Model::CopyObjectRequest& request, const CopyObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void CreateBucketAsyncHelper(const Model::CreateBucketRequest& request, const CreateBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void CreateMultipartUploadAsyncHelper(const Model::CreateMultipartUploadRequest& request, const CreateMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketAsyncHelper(const Model::DeleteBucketRequest& request, const DeleteBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketAnalyticsConfigurationAsyncHelper(const Model::DeleteBucketAnalyticsConfigurationRequest& request, const DeleteBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketCorsAsyncHelper(const Model::DeleteBucketCorsRequest& request, const DeleteBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketEncryptionAsyncHelper(const Model::DeleteBucketEncryptionRequest& request, const DeleteBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketIntelligentTieringConfigurationAsyncHelper(const Model::DeleteBucketIntelligentTieringConfigurationRequest& request, const DeleteBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketInventoryConfigurationAsyncHelper(const Model::DeleteBucketInventoryConfigurationRequest& request, const DeleteBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketLifecycleAsyncHelper(const Model::DeleteBucketLifecycleRequest& request, const DeleteBucketLifecycleResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketMetricsConfigurationAsyncHelper(const Model::DeleteBucketMetricsConfigurationRequest& request, const DeleteBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketOwnershipControlsAsyncHelper(const Model::DeleteBucketOwnershipControlsRequest& request, const DeleteBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketPolicyAsyncHelper(const Model::DeleteBucketPolicyRequest& request, const DeleteBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketReplicationAsyncHelper(const Model::DeleteBucketReplicationRequest& request, const DeleteBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketTaggingAsyncHelper(const Model::DeleteBucketTaggingRequest& request, const DeleteBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteBucketWebsiteAsyncHelper(const Model::DeleteBucketWebsiteRequest& request, const DeleteBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteObjectAsyncHelper(const Model::DeleteObjectRequest& request, const DeleteObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteObjectTaggingAsyncHelper(const Model::DeleteObjectTaggingRequest& request, const DeleteObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeleteObjectsAsyncHelper(const Model::DeleteObjectsRequest& request, const DeleteObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void DeletePublicAccessBlockAsyncHelper(const Model::DeletePublicAccessBlockRequest& request, const DeletePublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketAccelerateConfigurationAsyncHelper(const Model::GetBucketAccelerateConfigurationRequest& request, const GetBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketAclAsyncHelper(const Model::GetBucketAclRequest& request, const GetBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketAnalyticsConfigurationAsyncHelper(const Model::GetBucketAnalyticsConfigurationRequest& request, const GetBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketCorsAsyncHelper(const Model::GetBucketCorsRequest& request, const GetBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketEncryptionAsyncHelper(const Model::GetBucketEncryptionRequest& request, const GetBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketIntelligentTieringConfigurationAsyncHelper(const Model::GetBucketIntelligentTieringConfigurationRequest& request, const GetBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketInventoryConfigurationAsyncHelper(const Model::GetBucketInventoryConfigurationRequest& request, const GetBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketLifecycleConfigurationAsyncHelper(const Model::GetBucketLifecycleConfigurationRequest& request, const GetBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketLocationAsyncHelper(const Model::GetBucketLocationRequest& request, const GetBucketLocationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketLoggingAsyncHelper(const Model::GetBucketLoggingRequest& request, const GetBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketMetricsConfigurationAsyncHelper(const Model::GetBucketMetricsConfigurationRequest& request, const GetBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketNotificationConfigurationAsyncHelper(const Model::GetBucketNotificationConfigurationRequest& request, const GetBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketOwnershipControlsAsyncHelper(const Model::GetBucketOwnershipControlsRequest& request, const GetBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketPolicyAsyncHelper(const Model::GetBucketPolicyRequest& request, const GetBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketPolicyStatusAsyncHelper(const Model::GetBucketPolicyStatusRequest& request, const GetBucketPolicyStatusResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketReplicationAsyncHelper(const Model::GetBucketReplicationRequest& request, const GetBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketRequestPaymentAsyncHelper(const Model::GetBucketRequestPaymentRequest& request, const GetBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketTaggingAsyncHelper(const Model::GetBucketTaggingRequest& request, const GetBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketVersioningAsyncHelper(const Model::GetBucketVersioningRequest& request, const GetBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetBucketWebsiteAsyncHelper(const Model::GetBucketWebsiteRequest& request, const GetBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetObjectAsyncHelper(const Model::GetObjectRequest& request, const GetObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetObjectAclAsyncHelper(const Model::GetObjectAclRequest& request, const GetObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetObjectLegalHoldAsyncHelper(const Model::GetObjectLegalHoldRequest& request, const GetObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetObjectLockConfigurationAsyncHelper(const Model::GetObjectLockConfigurationRequest& request, const GetObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetObjectRetentionAsyncHelper(const Model::GetObjectRetentionRequest& request, const GetObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetObjectTaggingAsyncHelper(const Model::GetObjectTaggingRequest& request, const GetObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetObjectTorrentAsyncHelper(const Model::GetObjectTorrentRequest& request, const GetObjectTorrentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void GetPublicAccessBlockAsyncHelper(const Model::GetPublicAccessBlockRequest& request, const GetPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void HeadBucketAsyncHelper(const Model::HeadBucketRequest& request, const HeadBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void HeadObjectAsyncHelper(const Model::HeadObjectRequest& request, const HeadObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListBucketAnalyticsConfigurationsAsyncHelper(const Model::ListBucketAnalyticsConfigurationsRequest& request, const ListBucketAnalyticsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListBucketIntelligentTieringConfigurationsAsyncHelper(const Model::ListBucketIntelligentTieringConfigurationsRequest& request, const ListBucketIntelligentTieringConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListBucketInventoryConfigurationsAsyncHelper(const Model::ListBucketInventoryConfigurationsRequest& request, const ListBucketInventoryConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListBucketMetricsConfigurationsAsyncHelper(const Model::ListBucketMetricsConfigurationsRequest& request, const ListBucketMetricsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListBucketsAsyncHelper(const ListBucketsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListMultipartUploadsAsyncHelper(const Model::ListMultipartUploadsRequest& request, const ListMultipartUploadsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListObjectVersionsAsyncHelper(const Model::ListObjectVersionsRequest& request, const ListObjectVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListObjectsAsyncHelper(const Model::ListObjectsRequest& request, const ListObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListObjectsV2AsyncHelper(const Model::ListObjectsV2Request& request, const ListObjectsV2ResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void ListPartsAsyncHelper(const Model::ListPartsRequest& request, const ListPartsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketAccelerateConfigurationAsyncHelper(const Model::PutBucketAccelerateConfigurationRequest& request, const PutBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketAclAsyncHelper(const Model::PutBucketAclRequest& request, const PutBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketAnalyticsConfigurationAsyncHelper(const Model::PutBucketAnalyticsConfigurationRequest& request, const PutBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketCorsAsyncHelper(const Model::PutBucketCorsRequest& request, const PutBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketEncryptionAsyncHelper(const Model::PutBucketEncryptionRequest& request, const PutBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketIntelligentTieringConfigurationAsyncHelper(const Model::PutBucketIntelligentTieringConfigurationRequest& request, const PutBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketInventoryConfigurationAsyncHelper(const Model::PutBucketInventoryConfigurationRequest& request, const PutBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketLifecycleConfigurationAsyncHelper(const Model::PutBucketLifecycleConfigurationRequest& request, const PutBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketLoggingAsyncHelper(const Model::PutBucketLoggingRequest& request, const PutBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketMetricsConfigurationAsyncHelper(const Model::PutBucketMetricsConfigurationRequest& request, const PutBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketNotificationConfigurationAsyncHelper(const Model::PutBucketNotificationConfigurationRequest& request, const PutBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketOwnershipControlsAsyncHelper(const Model::PutBucketOwnershipControlsRequest& request, const PutBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketPolicyAsyncHelper(const Model::PutBucketPolicyRequest& request, const PutBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketReplicationAsyncHelper(const Model::PutBucketReplicationRequest& request, const PutBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketRequestPaymentAsyncHelper(const Model::PutBucketRequestPaymentRequest& request, const PutBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketTaggingAsyncHelper(const Model::PutBucketTaggingRequest& request, const PutBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketVersioningAsyncHelper(const Model::PutBucketVersioningRequest& request, const PutBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutBucketWebsiteAsyncHelper(const Model::PutBucketWebsiteRequest& request, const PutBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutObjectAsyncHelper(const Model::PutObjectRequest& request, const PutObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutObjectAclAsyncHelper(const Model::PutObjectAclRequest& request, const PutObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutObjectLegalHoldAsyncHelper(const Model::PutObjectLegalHoldRequest& request, const PutObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutObjectLockConfigurationAsyncHelper(const Model::PutObjectLockConfigurationRequest& request, const PutObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutObjectRetentionAsyncHelper(const Model::PutObjectRetentionRequest& request, const PutObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutObjectTaggingAsyncHelper(const Model::PutObjectTaggingRequest& request, const PutObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void PutPublicAccessBlockAsyncHelper(const Model::PutPublicAccessBlockRequest& request, const PutPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void RestoreObjectAsyncHelper(const Model::RestoreObjectRequest& request, const RestoreObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void SelectObjectContentAsyncHelper(Model::SelectObjectContentRequest& request, const SelectObjectContentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void UploadPartAsyncHelper(const Model::UploadPartRequest& request, const UploadPartResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+ void UploadPartCopyAsyncHelper(const Model::UploadPartCopyRequest& request, const UploadPartCopyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
+
+ Aws::String m_baseUri;
+ Aws::String m_scheme;
+ Aws::String m_configScheme;
+ std::shared_ptr<Utils::Threading::Executor> m_executor;
+ bool m_useVirtualAddressing;
+ bool m_useDualStack;
+ bool m_useArnRegion;
+ bool m_useCustomEndpoint;
+ Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION m_USEast1RegionalEndpointOption;
+ };
+
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Endpoint.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Endpoint.h
new file mode 100644
index 00000000000..9c415072187
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Endpoint.h
@@ -0,0 +1,43 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/Region.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/S3ARN.h>
+
+namespace Aws
+{
+
+namespace S3
+{
+namespace S3Endpoint
+{
+ /**
+ * Compute endpoint based on region.
+ * @param regionName The AWS region used in the endpoint
+ * @param useDualStack Using dual-stack endpoint if true
+ * @param USEast1UseRegionalEndpoint Using global endpoint for us-east-1 if the value is LEGACY, or using regional endpoint if it's REGIONAL
+ */
+ AWS_S3_API Aws::String ForRegion(const Aws::String& regionName, bool useDualStack = false, bool USEast1UseRegionalEndpoint = false);
+
+ /**
+ * Compute endpoint based on Access Point ARN.
+ * @param arn The S3 Access Point ARN
+ * @param regionNameOverride Override region name in ARN if it's not empty
+ * @param useDualStack Using dual-stack endpoint if true
+ */
+ AWS_S3_API Aws::String ForAccessPointArn(const S3ARN& arn, const Aws::String& regionNameOverride = "", bool useDualStack = false);
+
+ /**
+ * Compute endpoint based on Outposts ARN.
+ * @param arn The S3 Outposts ARN
+ * @param regionNameOverride Override region name in ARN if it's not empty
+ */
+ AWS_S3_API Aws::String ForOutpostsArn(const S3ARN& arn, const Aws::String& regionNameOverride = "");
+} // namespace S3Endpoint
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ErrorMarshaller.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ErrorMarshaller.h
new file mode 100644
index 00000000000..c475a3dc003
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3ErrorMarshaller.h
@@ -0,0 +1,25 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/client/AWSErrorMarshaller.h>
+
+namespace Aws
+{
+namespace Client
+{
+
+class AWS_S3_API S3ErrorMarshaller : public Aws::Client::XmlErrorMarshaller
+{
+public:
+ Aws::Client::AWSError<Aws::Client::CoreErrors> FindErrorByName(const char* exceptionName) const override;
+ virtual Aws::String ExtractRegion(const AWSError<CoreErrors>&) const override;
+ virtual Aws::String ExtractEndpoint(const AWSError<CoreErrors>&) const override;
+};
+
+} // namespace Client
+} // namespace Aws \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Errors.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Errors.h
new file mode 100644
index 00000000000..7b1df8d4322
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Errors.h
@@ -0,0 +1,79 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#include <aws/core/client/AWSError.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace S3
+{
+enum class S3Errors
+{
+ //From Core//
+ //////////////////////////////////////////////////////////////////////////////////////////
+ INCOMPLETE_SIGNATURE = 0,
+ INTERNAL_FAILURE = 1,
+ INVALID_ACTION = 2,
+ INVALID_CLIENT_TOKEN_ID = 3,
+ INVALID_PARAMETER_COMBINATION = 4,
+ INVALID_QUERY_PARAMETER = 5,
+ INVALID_PARAMETER_VALUE = 6,
+ MISSING_ACTION = 7, // SDK should never allow
+ MISSING_AUTHENTICATION_TOKEN = 8, // SDK should never allow
+ MISSING_PARAMETER = 9, // SDK should never allow
+ OPT_IN_REQUIRED = 10,
+ REQUEST_EXPIRED = 11,
+ SERVICE_UNAVAILABLE = 12,
+ THROTTLING = 13,
+ VALIDATION = 14,
+ ACCESS_DENIED = 15,
+ RESOURCE_NOT_FOUND = 16,
+ UNRECOGNIZED_CLIENT = 17,
+ MALFORMED_QUERY_STRING = 18,
+ SLOW_DOWN = 19,
+ REQUEST_TIME_TOO_SKEWED = 20,
+ INVALID_SIGNATURE = 21,
+ SIGNATURE_DOES_NOT_MATCH = 22,
+ INVALID_ACCESS_KEY_ID = 23,
+ REQUEST_TIMEOUT = 24,
+ NETWORK_CONNECTION = 99,
+
+ UNKNOWN = 100,
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ BUCKET_ALREADY_EXISTS= static_cast<int>(Aws::Client::CoreErrors::SERVICE_EXTENSION_START_RANGE) + 1,
+ BUCKET_ALREADY_OWNED_BY_YOU,
+ INVALID_OBJECT_STATE,
+ NO_SUCH_BUCKET,
+ NO_SUCH_KEY,
+ NO_SUCH_UPLOAD,
+ OBJECT_ALREADY_IN_ACTIVE_TIER,
+ OBJECT_NOT_IN_ACTIVE_TIER
+};
+
+class AWS_S3_API S3Error : public Aws::Client::AWSError<S3Errors>
+{
+public:
+ S3Error() {}
+ S3Error(const Aws::Client::AWSError<Aws::Client::CoreErrors>& rhs) : Aws::Client::AWSError<S3Errors>(rhs) {}
+ S3Error(Aws::Client::AWSError<Aws::Client::CoreErrors>&& rhs) : Aws::Client::AWSError<S3Errors>(rhs) {}
+ S3Error(const Aws::Client::AWSError<S3Errors>& rhs) : Aws::Client::AWSError<S3Errors>(rhs) {}
+ S3Error(Aws::Client::AWSError<S3Errors>&& rhs) : Aws::Client::AWSError<S3Errors>(rhs) {}
+
+ template <typename T>
+ T GetModeledError();
+};
+
+namespace S3ErrorMapper
+{
+ AWS_S3_API Aws::Client::AWSError<Aws::Client::CoreErrors> GetErrorForName(const char* errorName);
+}
+
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Request.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Request.h
new file mode 100644
index 00000000000..3747292c2f4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3Request.h
@@ -0,0 +1,44 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/AmazonSerializableWebServiceRequest.h>
+#include <aws/core/utils/UnreferencedParam.h>
+#include <aws/core/http/HttpRequest.h>
+#include <aws/core/AmazonStreamingWebServiceRequest.h>
+
+namespace Aws
+{
+namespace S3
+{
+ class AWS_S3_API S3Request : public Aws::AmazonSerializableWebServiceRequest
+ {
+ public:
+ virtual ~S3Request () {}
+
+ void AddParametersToRequest(Aws::Http::HttpRequest& httpRequest) const { AWS_UNREFERENCED_PARAM(httpRequest); }
+
+ inline Aws::Http::HeaderValueCollection GetHeaders() const override
+ {
+ auto headers = GetRequestSpecificHeaders();
+
+ if(headers.size() == 0 || (headers.size() > 0 && headers.count(Aws::Http::CONTENT_TYPE_HEADER) == 0))
+ {
+ headers.emplace(Aws::Http::HeaderValuePair(Aws::Http::CONTENT_TYPE_HEADER, Aws::AMZN_XML_CONTENT_TYPE ));
+ }
+ headers.emplace(Aws::Http::HeaderValuePair(Aws::Http::API_VERSION_HEADER, "2006-03-01"));
+ return headers;
+ }
+
+ protected:
+ virtual Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const { return Aws::Http::HeaderValueCollection(); }
+
+ };
+
+ typedef Aws::AmazonStreamingWebServiceRequest StreamingS3Request;
+
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3_EXPORTS.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3_EXPORTS.h
new file mode 100644
index 00000000000..efa035e0613
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/S3_EXPORTS.h
@@ -0,0 +1,29 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+
+#ifdef _MSC_VER
+ //disable windows complaining about max template size.
+ #pragma warning (disable : 4503)
+#endif // _MSC_VER
+
+#if defined (USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32)
+ #ifdef _MSC_VER
+ #pragma warning(disable : 4251)
+ #endif // _MSC_VER
+
+ #ifdef USE_IMPORT_EXPORT
+ #ifdef AWS_S3_EXPORTS
+ #define AWS_S3_API __declspec(dllexport)
+ #else
+ #define AWS_S3_API __declspec(dllimport)
+ #endif /* AWS_S3_EXPORTS */
+ #else
+ #define AWS_S3_API
+ #endif // USE_IMPORT_EXPORT
+#else // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (WIN32)
+ #define AWS_S3_API
+#endif // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (WIN32)
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortIncompleteMultipartUpload.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortIncompleteMultipartUpload.h
new file mode 100644
index 00000000000..25112f80a46
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortIncompleteMultipartUpload.h
@@ -0,0 +1,76 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the days since the initiation of an incomplete multipart upload
+ * that Amazon S3 will wait before permanently removing all parts of the upload.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">
+ * Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a> in the
+ * <i>Amazon Simple Storage Service Developer Guide</i>.</p><p><h3>See Also:</h3>
+ * <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortIncompleteMultipartUpload">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AbortIncompleteMultipartUpload
+ {
+ public:
+ AbortIncompleteMultipartUpload();
+ AbortIncompleteMultipartUpload(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AbortIncompleteMultipartUpload& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the number of days after which Amazon S3 aborts an incomplete
+ * multipart upload.</p>
+ */
+ inline int GetDaysAfterInitiation() const{ return m_daysAfterInitiation; }
+
+ /**
+ * <p>Specifies the number of days after which Amazon S3 aborts an incomplete
+ * multipart upload.</p>
+ */
+ inline bool DaysAfterInitiationHasBeenSet() const { return m_daysAfterInitiationHasBeenSet; }
+
+ /**
+ * <p>Specifies the number of days after which Amazon S3 aborts an incomplete
+ * multipart upload.</p>
+ */
+ inline void SetDaysAfterInitiation(int value) { m_daysAfterInitiationHasBeenSet = true; m_daysAfterInitiation = value; }
+
+ /**
+ * <p>Specifies the number of days after which Amazon S3 aborts an incomplete
+ * multipart upload.</p>
+ */
+ inline AbortIncompleteMultipartUpload& WithDaysAfterInitiation(int value) { SetDaysAfterInitiation(value); return *this;}
+
+ private:
+
+ int m_daysAfterInitiation;
+ bool m_daysAfterInitiationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadRequest.h
new file mode 100644
index 00000000000..6fe4cb61f17
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadRequest.h
@@ -0,0 +1,450 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API AbortMultipartUploadRequest : public S3Request
+ {
+ public:
+ AbortMultipartUploadRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "AbortMultipartUpload"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline AbortMultipartUploadRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline AbortMultipartUploadRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name to which the upload was taking place. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline AbortMultipartUploadRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline AbortMultipartUploadRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline AbortMultipartUploadRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline AbortMultipartUploadRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline bool UploadIdHasBeenSet() const { return m_uploadIdHasBeenSet; }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadIdHasBeenSet = true; m_uploadId = value; }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadIdHasBeenSet = true; m_uploadId = std::move(value); }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadIdHasBeenSet = true; m_uploadId.assign(value); }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline AbortMultipartUploadRequest& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline AbortMultipartUploadRequest& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline AbortMultipartUploadRequest& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline AbortMultipartUploadRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline AbortMultipartUploadRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline AbortMultipartUploadRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline AbortMultipartUploadRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline AbortMultipartUploadRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline AbortMultipartUploadRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline AbortMultipartUploadRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline AbortMultipartUploadRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline AbortMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline AbortMultipartUploadRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline AbortMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline AbortMultipartUploadRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline AbortMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline AbortMultipartUploadRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_uploadId;
+ bool m_uploadIdHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadResult.h
new file mode 100644
index 00000000000..003df773b5d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AbortMultipartUploadResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API AbortMultipartUploadResult
+ {
+ public:
+ AbortMultipartUploadResult();
+ AbortMultipartUploadResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ AbortMultipartUploadResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline AbortMultipartUploadResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline AbortMultipartUploadResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccelerateConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccelerateConfiguration.h
new file mode 100644
index 00000000000..924d3f602fc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccelerateConfiguration.h
@@ -0,0 +1,82 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/BucketAccelerateStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Configures the transfer acceleration state for an Amazon S3 bucket. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html">Amazon
+ * S3 Transfer Acceleration</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AccelerateConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AccelerateConfiguration
+ {
+ public:
+ AccelerateConfiguration();
+ AccelerateConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AccelerateConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the transfer acceleration status of the bucket.</p>
+ */
+ inline const BucketAccelerateStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>Specifies the transfer acceleration status of the bucket.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>Specifies the transfer acceleration status of the bucket.</p>
+ */
+ inline void SetStatus(const BucketAccelerateStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>Specifies the transfer acceleration status of the bucket.</p>
+ */
+ inline void SetStatus(BucketAccelerateStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>Specifies the transfer acceleration status of the bucket.</p>
+ */
+ inline AccelerateConfiguration& WithStatus(const BucketAccelerateStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>Specifies the transfer acceleration status of the bucket.</p>
+ */
+ inline AccelerateConfiguration& WithStatus(BucketAccelerateStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ BucketAccelerateStatus m_status;
+ bool m_statusHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlPolicy.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlPolicy.h
new file mode 100644
index 00000000000..1effa4bf55c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlPolicy.h
@@ -0,0 +1,125 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Owner.h>
+#include <aws/s3/model/Grant.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AccessControlPolicy">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AccessControlPolicy
+ {
+ public:
+ AccessControlPolicy();
+ AccessControlPolicy(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AccessControlPolicy& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline const Aws::Vector<Grant>& GetGrants() const{ return m_grants; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline bool GrantsHasBeenSet() const { return m_grantsHasBeenSet; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline void SetGrants(const Aws::Vector<Grant>& value) { m_grantsHasBeenSet = true; m_grants = value; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline void SetGrants(Aws::Vector<Grant>&& value) { m_grantsHasBeenSet = true; m_grants = std::move(value); }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline AccessControlPolicy& WithGrants(const Aws::Vector<Grant>& value) { SetGrants(value); return *this;}
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline AccessControlPolicy& WithGrants(Aws::Vector<Grant>&& value) { SetGrants(std::move(value)); return *this;}
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline AccessControlPolicy& AddGrants(const Grant& value) { m_grantsHasBeenSet = true; m_grants.push_back(value); return *this; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline AccessControlPolicy& AddGrants(Grant&& value) { m_grantsHasBeenSet = true; m_grants.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline bool OwnerHasBeenSet() const { return m_ownerHasBeenSet; }
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline void SetOwner(const Owner& value) { m_ownerHasBeenSet = true; m_owner = value; }
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline void SetOwner(Owner&& value) { m_ownerHasBeenSet = true; m_owner = std::move(value); }
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline AccessControlPolicy& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline AccessControlPolicy& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+ private:
+
+ Aws::Vector<Grant> m_grants;
+ bool m_grantsHasBeenSet;
+
+ Owner m_owner;
+ bool m_ownerHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlTranslation.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlTranslation.h
new file mode 100644
index 00000000000..e8f4845c2e9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AccessControlTranslation.h
@@ -0,0 +1,97 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/OwnerOverride.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for information about access control for replicas.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AccessControlTranslation">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AccessControlTranslation
+ {
+ public:
+ AccessControlTranslation();
+ AccessControlTranslation(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AccessControlTranslation& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the replica ownership. For default and valid values, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * bucket replication</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline const OwnerOverride& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>Specifies the replica ownership. For default and valid values, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * bucket replication</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline bool OwnerHasBeenSet() const { return m_ownerHasBeenSet; }
+
+ /**
+ * <p>Specifies the replica ownership. For default and valid values, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * bucket replication</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline void SetOwner(const OwnerOverride& value) { m_ownerHasBeenSet = true; m_owner = value; }
+
+ /**
+ * <p>Specifies the replica ownership. For default and valid values, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * bucket replication</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline void SetOwner(OwnerOverride&& value) { m_ownerHasBeenSet = true; m_owner = std::move(value); }
+
+ /**
+ * <p>Specifies the replica ownership. For default and valid values, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * bucket replication</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline AccessControlTranslation& WithOwner(const OwnerOverride& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>Specifies the replica ownership. For default and valid values, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * bucket replication</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline AccessControlTranslation& WithOwner(OwnerOverride&& value) { SetOwner(std::move(value)); return *this;}
+
+ private:
+
+ OwnerOverride m_owner;
+ bool m_ownerHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsAndOperator.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsAndOperator.h
new file mode 100644
index 00000000000..760b9111049
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsAndOperator.h
@@ -0,0 +1,145 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates in any
+ * combination, and an object must match all of the predicates for the filter to
+ * apply.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsAndOperator">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AnalyticsAndOperator
+ {
+ public:
+ AnalyticsAndOperator();
+ AnalyticsAndOperator(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AnalyticsAndOperator& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline AnalyticsAndOperator& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline AnalyticsAndOperator& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix to use when evaluating an AND predicate: The prefix that an object
+ * must have to be included in the metrics results.</p>
+ */
+ inline AnalyticsAndOperator& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline const Aws::Vector<Tag>& GetTags() const{ return m_tags; }
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline void SetTags(const Aws::Vector<Tag>& value) { m_tagsHasBeenSet = true; m_tags = value; }
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline void SetTags(Aws::Vector<Tag>&& value) { m_tagsHasBeenSet = true; m_tags = std::move(value); }
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline AnalyticsAndOperator& WithTags(const Aws::Vector<Tag>& value) { SetTags(value); return *this;}
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline AnalyticsAndOperator& WithTags(Aws::Vector<Tag>&& value) { SetTags(std::move(value)); return *this;}
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline AnalyticsAndOperator& AddTags(const Tag& value) { m_tagsHasBeenSet = true; m_tags.push_back(value); return *this; }
+
+ /**
+ * <p>The list of tags to use when evaluating an AND predicate.</p>
+ */
+ inline AnalyticsAndOperator& AddTags(Tag&& value) { m_tagsHasBeenSet = true; m_tags.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::Vector<Tag> m_tags;
+ bool m_tagsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsConfiguration.h
new file mode 100644
index 00000000000..b3b70834bd3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsConfiguration.h
@@ -0,0 +1,177 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/AnalyticsFilter.h>
+#include <aws/s3/model/StorageClassAnalysis.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p> Specifies the configuration and any analyses for the analytics filter of an
+ * Amazon S3 bucket.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AnalyticsConfiguration
+ {
+ public:
+ AnalyticsConfiguration();
+ AnalyticsConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AnalyticsConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline AnalyticsConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline AnalyticsConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline AnalyticsConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The filter used to describe a set of objects for analyses. A filter must have
+ * exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no
+ * filter is provided, all objects will be considered in any analysis.</p>
+ */
+ inline const AnalyticsFilter& GetFilter() const{ return m_filter; }
+
+ /**
+ * <p>The filter used to describe a set of objects for analyses. A filter must have
+ * exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no
+ * filter is provided, all objects will be considered in any analysis.</p>
+ */
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+ /**
+ * <p>The filter used to describe a set of objects for analyses. A filter must have
+ * exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no
+ * filter is provided, all objects will be considered in any analysis.</p>
+ */
+ inline void SetFilter(const AnalyticsFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+ /**
+ * <p>The filter used to describe a set of objects for analyses. A filter must have
+ * exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no
+ * filter is provided, all objects will be considered in any analysis.</p>
+ */
+ inline void SetFilter(AnalyticsFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+ /**
+ * <p>The filter used to describe a set of objects for analyses. A filter must have
+ * exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no
+ * filter is provided, all objects will be considered in any analysis.</p>
+ */
+ inline AnalyticsConfiguration& WithFilter(const AnalyticsFilter& value) { SetFilter(value); return *this;}
+
+ /**
+ * <p>The filter used to describe a set of objects for analyses. A filter must have
+ * exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no
+ * filter is provided, all objects will be considered in any analysis.</p>
+ */
+ inline AnalyticsConfiguration& WithFilter(AnalyticsFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+
+ /**
+ * <p> Contains data related to access patterns to be collected and made available
+ * to analyze the tradeoffs between different storage classes. </p>
+ */
+ inline const StorageClassAnalysis& GetStorageClassAnalysis() const{ return m_storageClassAnalysis; }
+
+ /**
+ * <p> Contains data related to access patterns to be collected and made available
+ * to analyze the tradeoffs between different storage classes. </p>
+ */
+ inline bool StorageClassAnalysisHasBeenSet() const { return m_storageClassAnalysisHasBeenSet; }
+
+ /**
+ * <p> Contains data related to access patterns to be collected and made available
+ * to analyze the tradeoffs between different storage classes. </p>
+ */
+ inline void SetStorageClassAnalysis(const StorageClassAnalysis& value) { m_storageClassAnalysisHasBeenSet = true; m_storageClassAnalysis = value; }
+
+ /**
+ * <p> Contains data related to access patterns to be collected and made available
+ * to analyze the tradeoffs between different storage classes. </p>
+ */
+ inline void SetStorageClassAnalysis(StorageClassAnalysis&& value) { m_storageClassAnalysisHasBeenSet = true; m_storageClassAnalysis = std::move(value); }
+
+ /**
+ * <p> Contains data related to access patterns to be collected and made available
+ * to analyze the tradeoffs between different storage classes. </p>
+ */
+ inline AnalyticsConfiguration& WithStorageClassAnalysis(const StorageClassAnalysis& value) { SetStorageClassAnalysis(value); return *this;}
+
+ /**
+ * <p> Contains data related to access patterns to be collected and made available
+ * to analyze the tradeoffs between different storage classes. </p>
+ */
+ inline AnalyticsConfiguration& WithStorageClassAnalysis(StorageClassAnalysis&& value) { SetStorageClassAnalysis(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ AnalyticsFilter m_filter;
+ bool m_filterHasBeenSet;
+
+ StorageClassAnalysis m_storageClassAnalysis;
+ bool m_storageClassAnalysisHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsExportDestination.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsExportDestination.h
new file mode 100644
index 00000000000..9b7dfb72f0b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsExportDestination.h
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/AnalyticsS3BucketDestination.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Where to publish the analytics results.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsExportDestination">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AnalyticsExportDestination
+ {
+ public:
+ AnalyticsExportDestination();
+ AnalyticsExportDestination(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AnalyticsExportDestination& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A destination signifying output to an S3 bucket.</p>
+ */
+ inline const AnalyticsS3BucketDestination& GetS3BucketDestination() const{ return m_s3BucketDestination; }
+
+ /**
+ * <p>A destination signifying output to an S3 bucket.</p>
+ */
+ inline bool S3BucketDestinationHasBeenSet() const { return m_s3BucketDestinationHasBeenSet; }
+
+ /**
+ * <p>A destination signifying output to an S3 bucket.</p>
+ */
+ inline void SetS3BucketDestination(const AnalyticsS3BucketDestination& value) { m_s3BucketDestinationHasBeenSet = true; m_s3BucketDestination = value; }
+
+ /**
+ * <p>A destination signifying output to an S3 bucket.</p>
+ */
+ inline void SetS3BucketDestination(AnalyticsS3BucketDestination&& value) { m_s3BucketDestinationHasBeenSet = true; m_s3BucketDestination = std::move(value); }
+
+ /**
+ * <p>A destination signifying output to an S3 bucket.</p>
+ */
+ inline AnalyticsExportDestination& WithS3BucketDestination(const AnalyticsS3BucketDestination& value) { SetS3BucketDestination(value); return *this;}
+
+ /**
+ * <p>A destination signifying output to an S3 bucket.</p>
+ */
+ inline AnalyticsExportDestination& WithS3BucketDestination(AnalyticsS3BucketDestination&& value) { SetS3BucketDestination(std::move(value)); return *this;}
+
+ private:
+
+ AnalyticsS3BucketDestination m_s3BucketDestination;
+ bool m_s3BucketDestinationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsFilter.h
new file mode 100644
index 00000000000..1567043a4af
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsFilter.h
@@ -0,0 +1,167 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Tag.h>
+#include <aws/s3/model/AnalyticsAndOperator.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The filter used to describe a set of objects for analyses. A filter must have
+ * exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no
+ * filter is provided, all objects will be considered in any
+ * analysis.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsFilter">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AnalyticsFilter
+ {
+ public:
+ AnalyticsFilter();
+ AnalyticsFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AnalyticsFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline AnalyticsFilter& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline AnalyticsFilter& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix to use when evaluating an analytics filter.</p>
+ */
+ inline AnalyticsFilter& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>The tag to use when evaluating an analytics filter.</p>
+ */
+ inline const Tag& GetTag() const{ return m_tag; }
+
+ /**
+ * <p>The tag to use when evaluating an analytics filter.</p>
+ */
+ inline bool TagHasBeenSet() const { return m_tagHasBeenSet; }
+
+ /**
+ * <p>The tag to use when evaluating an analytics filter.</p>
+ */
+ inline void SetTag(const Tag& value) { m_tagHasBeenSet = true; m_tag = value; }
+
+ /**
+ * <p>The tag to use when evaluating an analytics filter.</p>
+ */
+ inline void SetTag(Tag&& value) { m_tagHasBeenSet = true; m_tag = std::move(value); }
+
+ /**
+ * <p>The tag to use when evaluating an analytics filter.</p>
+ */
+ inline AnalyticsFilter& WithTag(const Tag& value) { SetTag(value); return *this;}
+
+ /**
+ * <p>The tag to use when evaluating an analytics filter.</p>
+ */
+ inline AnalyticsFilter& WithTag(Tag&& value) { SetTag(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating an
+ * analytics filter. The operator must have at least two predicates.</p>
+ */
+ inline const AnalyticsAndOperator& GetAnd() const{ return m_and; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating an
+ * analytics filter. The operator must have at least two predicates.</p>
+ */
+ inline bool AndHasBeenSet() const { return m_andHasBeenSet; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating an
+ * analytics filter. The operator must have at least two predicates.</p>
+ */
+ inline void SetAnd(const AnalyticsAndOperator& value) { m_andHasBeenSet = true; m_and = value; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating an
+ * analytics filter. The operator must have at least two predicates.</p>
+ */
+ inline void SetAnd(AnalyticsAndOperator&& value) { m_andHasBeenSet = true; m_and = std::move(value); }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating an
+ * analytics filter. The operator must have at least two predicates.</p>
+ */
+ inline AnalyticsFilter& WithAnd(const AnalyticsAndOperator& value) { SetAnd(value); return *this;}
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating an
+ * analytics filter. The operator must have at least two predicates.</p>
+ */
+ inline AnalyticsFilter& WithAnd(AnalyticsAndOperator&& value) { SetAnd(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Tag m_tag;
+ bool m_tagHasBeenSet;
+
+ AnalyticsAndOperator m_and;
+ bool m_andHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3BucketDestination.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3BucketDestination.h
new file mode 100644
index 00000000000..69c40eb86d2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3BucketDestination.h
@@ -0,0 +1,244 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/AnalyticsS3ExportFileFormat.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Contains information about where to publish the analytics
+ * results.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsS3BucketDestination">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API AnalyticsS3BucketDestination
+ {
+ public:
+ AnalyticsS3BucketDestination();
+ AnalyticsS3BucketDestination(const Aws::Utils::Xml::XmlNode& xmlNode);
+ AnalyticsS3BucketDestination& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the file format used when exporting data to Amazon S3.</p>
+ */
+ inline const AnalyticsS3ExportFileFormat& GetFormat() const{ return m_format; }
+
+ /**
+ * <p>Specifies the file format used when exporting data to Amazon S3.</p>
+ */
+ inline bool FormatHasBeenSet() const { return m_formatHasBeenSet; }
+
+ /**
+ * <p>Specifies the file format used when exporting data to Amazon S3.</p>
+ */
+ inline void SetFormat(const AnalyticsS3ExportFileFormat& value) { m_formatHasBeenSet = true; m_format = value; }
+
+ /**
+ * <p>Specifies the file format used when exporting data to Amazon S3.</p>
+ */
+ inline void SetFormat(AnalyticsS3ExportFileFormat&& value) { m_formatHasBeenSet = true; m_format = std::move(value); }
+
+ /**
+ * <p>Specifies the file format used when exporting data to Amazon S3.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithFormat(const AnalyticsS3ExportFileFormat& value) { SetFormat(value); return *this;}
+
+ /**
+ * <p>Specifies the file format used when exporting data to Amazon S3.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithFormat(AnalyticsS3ExportFileFormat&& value) { SetFormat(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline const Aws::String& GetBucketAccountId() const{ return m_bucketAccountId; }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline bool BucketAccountIdHasBeenSet() const { return m_bucketAccountIdHasBeenSet; }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline void SetBucketAccountId(const Aws::String& value) { m_bucketAccountIdHasBeenSet = true; m_bucketAccountId = value; }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline void SetBucketAccountId(Aws::String&& value) { m_bucketAccountIdHasBeenSet = true; m_bucketAccountId = std::move(value); }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline void SetBucketAccountId(const char* value) { m_bucketAccountIdHasBeenSet = true; m_bucketAccountId.assign(value); }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline AnalyticsS3BucketDestination& WithBucketAccountId(const Aws::String& value) { SetBucketAccountId(value); return *this;}
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline AnalyticsS3BucketDestination& WithBucketAccountId(Aws::String&& value) { SetBucketAccountId(std::move(value)); return *this;}
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data.</p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline AnalyticsS3BucketDestination& WithBucketAccountId(const char* value) { SetBucketAccountId(value); return *this;}
+
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket to which data is exported.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix to use when exporting data. The prefix is prepended to all
+ * results.</p>
+ */
+ inline AnalyticsS3BucketDestination& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+ private:
+
+ AnalyticsS3ExportFileFormat m_format;
+ bool m_formatHasBeenSet;
+
+ Aws::String m_bucketAccountId;
+ bool m_bucketAccountIdHasBeenSet;
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3ExportFileFormat.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3ExportFileFormat.h
new file mode 100644
index 00000000000..b887163111c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/AnalyticsS3ExportFileFormat.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class AnalyticsS3ExportFileFormat
+ {
+ NOT_SET,
+ CSV
+ };
+
+namespace AnalyticsS3ExportFileFormatMapper
+{
+AWS_S3_API AnalyticsS3ExportFileFormat GetAnalyticsS3ExportFileFormatForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForAnalyticsS3ExportFileFormat(AnalyticsS3ExportFileFormat value);
+} // namespace AnalyticsS3ExportFileFormatMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ArchiveStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ArchiveStatus.h
new file mode 100644
index 00000000000..71b601ca074
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ArchiveStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ArchiveStatus
+ {
+ NOT_SET,
+ ARCHIVE_ACCESS,
+ DEEP_ARCHIVE_ACCESS
+ };
+
+namespace ArchiveStatusMapper
+{
+AWS_S3_API ArchiveStatus GetArchiveStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForArchiveStatus(ArchiveStatus value);
+} // namespace ArchiveStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Bucket.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Bucket.h
new file mode 100644
index 00000000000..ffe7104842c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Bucket.h
@@ -0,0 +1,131 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p> In terms of implementation, a Bucket is a resource. An Amazon S3 bucket name
+ * is globally unique, and the namespace is shared by all AWS accounts.
+ * </p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Bucket">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Bucket
+ {
+ public:
+ Bucket();
+ Bucket(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Bucket& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline const Aws::String& GetName() const{ return m_name; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline bool NameHasBeenSet() const { return m_nameHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetName(const Aws::String& value) { m_nameHasBeenSet = true; m_name = value; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetName(Aws::String&& value) { m_nameHasBeenSet = true; m_name = std::move(value); }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetName(const char* value) { m_nameHasBeenSet = true; m_name.assign(value); }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline Bucket& WithName(const Aws::String& value) { SetName(value); return *this;}
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline Bucket& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline Bucket& WithName(const char* value) { SetName(value); return *this;}
+
+
+ /**
+ * <p>Date the bucket was created. This date can change when making changes to your
+ * bucket, such as editing its bucket policy.</p>
+ */
+ inline const Aws::Utils::DateTime& GetCreationDate() const{ return m_creationDate; }
+
+ /**
+ * <p>Date the bucket was created. This date can change when making changes to your
+ * bucket, such as editing its bucket policy.</p>
+ */
+ inline bool CreationDateHasBeenSet() const { return m_creationDateHasBeenSet; }
+
+ /**
+ * <p>Date the bucket was created. This date can change when making changes to your
+ * bucket, such as editing its bucket policy.</p>
+ */
+ inline void SetCreationDate(const Aws::Utils::DateTime& value) { m_creationDateHasBeenSet = true; m_creationDate = value; }
+
+ /**
+ * <p>Date the bucket was created. This date can change when making changes to your
+ * bucket, such as editing its bucket policy.</p>
+ */
+ inline void SetCreationDate(Aws::Utils::DateTime&& value) { m_creationDateHasBeenSet = true; m_creationDate = std::move(value); }
+
+ /**
+ * <p>Date the bucket was created. This date can change when making changes to your
+ * bucket, such as editing its bucket policy.</p>
+ */
+ inline Bucket& WithCreationDate(const Aws::Utils::DateTime& value) { SetCreationDate(value); return *this;}
+
+ /**
+ * <p>Date the bucket was created. This date can change when making changes to your
+ * bucket, such as editing its bucket policy.</p>
+ */
+ inline Bucket& WithCreationDate(Aws::Utils::DateTime&& value) { SetCreationDate(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_name;
+ bool m_nameHasBeenSet;
+
+ Aws::Utils::DateTime m_creationDate;
+ bool m_creationDateHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketAccelerateStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketAccelerateStatus.h
new file mode 100644
index 00000000000..0e601f75bc4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketAccelerateStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class BucketAccelerateStatus
+ {
+ NOT_SET,
+ Enabled,
+ Suspended
+ };
+
+namespace BucketAccelerateStatusMapper
+{
+AWS_S3_API BucketAccelerateStatus GetBucketAccelerateStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForBucketAccelerateStatus(BucketAccelerateStatus value);
+} // namespace BucketAccelerateStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketCannedACL.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketCannedACL.h
new file mode 100644
index 00000000000..a438a15aa9a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketCannedACL.h
@@ -0,0 +1,33 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class BucketCannedACL
+ {
+ NOT_SET,
+ private_,
+ public_read,
+ public_read_write,
+ authenticated_read
+ };
+
+namespace BucketCannedACLMapper
+{
+AWS_S3_API BucketCannedACL GetBucketCannedACLForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForBucketCannedACL(BucketCannedACL value);
+} // namespace BucketCannedACLMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLifecycleConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLifecycleConfiguration.h
new file mode 100644
index 00000000000..5c16eef4487
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLifecycleConfiguration.h
@@ -0,0 +1,93 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/LifecycleRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the lifecycle configuration for objects in an Amazon S3 bucket. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html">Object
+ * Lifecycle Management</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/BucketLifecycleConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API BucketLifecycleConfiguration
+ {
+ public:
+ BucketLifecycleConfiguration();
+ BucketLifecycleConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ BucketLifecycleConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline const Aws::Vector<LifecycleRule>& GetRules() const{ return m_rules; }
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline bool RulesHasBeenSet() const { return m_rulesHasBeenSet; }
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline void SetRules(const Aws::Vector<LifecycleRule>& value) { m_rulesHasBeenSet = true; m_rules = value; }
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline void SetRules(Aws::Vector<LifecycleRule>&& value) { m_rulesHasBeenSet = true; m_rules = std::move(value); }
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline BucketLifecycleConfiguration& WithRules(const Aws::Vector<LifecycleRule>& value) { SetRules(value); return *this;}
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline BucketLifecycleConfiguration& WithRules(Aws::Vector<LifecycleRule>&& value) { SetRules(std::move(value)); return *this;}
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline BucketLifecycleConfiguration& AddRules(const LifecycleRule& value) { m_rulesHasBeenSet = true; m_rules.push_back(value); return *this; }
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p>
+ */
+ inline BucketLifecycleConfiguration& AddRules(LifecycleRule&& value) { m_rulesHasBeenSet = true; m_rules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<LifecycleRule> m_rules;
+ bool m_rulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLocationConstraint.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLocationConstraint.h
new file mode 100644
index 00000000000..86490ce1fa7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLocationConstraint.h
@@ -0,0 +1,55 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class BucketLocationConstraint
+ {
+ NOT_SET,
+ af_south_1,
+ ap_east_1,
+ ap_northeast_1,
+ ap_northeast_2,
+ ap_northeast_3,
+ ap_south_1,
+ ap_southeast_1,
+ ap_southeast_2,
+ ca_central_1,
+ cn_north_1,
+ cn_northwest_1,
+ EU,
+ eu_central_1,
+ eu_north_1,
+ eu_south_1,
+ eu_west_1,
+ eu_west_2,
+ eu_west_3,
+ me_south_1,
+ sa_east_1,
+ us_east_2,
+ us_gov_east_1,
+ us_gov_west_1,
+ us_west_1,
+ us_west_2,
+ us_east_1
+ };
+
+namespace BucketLocationConstraintMapper
+{
+AWS_S3_API BucketLocationConstraint GetBucketLocationConstraintForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForBucketLocationConstraint(BucketLocationConstraint value);
+} // namespace BucketLocationConstraintMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLoggingStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLoggingStatus.h
new file mode 100644
index 00000000000..36273be8489
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLoggingStatus.h
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/LoggingEnabled.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for logging status information.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/BucketLoggingStatus">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API BucketLoggingStatus
+ {
+ public:
+ BucketLoggingStatus();
+ BucketLoggingStatus(const Aws::Utils::Xml::XmlNode& xmlNode);
+ BucketLoggingStatus& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const LoggingEnabled& GetLoggingEnabled() const{ return m_loggingEnabled; }
+
+
+ inline bool LoggingEnabledHasBeenSet() const { return m_loggingEnabledHasBeenSet; }
+
+
+ inline void SetLoggingEnabled(const LoggingEnabled& value) { m_loggingEnabledHasBeenSet = true; m_loggingEnabled = value; }
+
+
+ inline void SetLoggingEnabled(LoggingEnabled&& value) { m_loggingEnabledHasBeenSet = true; m_loggingEnabled = std::move(value); }
+
+
+ inline BucketLoggingStatus& WithLoggingEnabled(const LoggingEnabled& value) { SetLoggingEnabled(value); return *this;}
+
+
+ inline BucketLoggingStatus& WithLoggingEnabled(LoggingEnabled&& value) { SetLoggingEnabled(std::move(value)); return *this;}
+
+ private:
+
+ LoggingEnabled m_loggingEnabled;
+ bool m_loggingEnabledHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLogsPermission.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLogsPermission.h
new file mode 100644
index 00000000000..dce81afc735
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketLogsPermission.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class BucketLogsPermission
+ {
+ NOT_SET,
+ FULL_CONTROL,
+ READ,
+ WRITE
+ };
+
+namespace BucketLogsPermissionMapper
+{
+AWS_S3_API BucketLogsPermission GetBucketLogsPermissionForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForBucketLogsPermission(BucketLogsPermission value);
+} // namespace BucketLogsPermissionMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketVersioningStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketVersioningStatus.h
new file mode 100644
index 00000000000..e642e2c8be6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/BucketVersioningStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class BucketVersioningStatus
+ {
+ NOT_SET,
+ Enabled,
+ Suspended
+ };
+
+namespace BucketVersioningStatusMapper
+{
+AWS_S3_API BucketVersioningStatus GetBucketVersioningStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForBucketVersioningStatus(BucketVersioningStatus value);
+} // namespace BucketVersioningStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSConfiguration.h
new file mode 100644
index 00000000000..86a8e41c0d9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSConfiguration.h
@@ -0,0 +1,101 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/CORSRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes the cross-origin access configuration for objects in an Amazon S3
+ * bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CORSConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CORSConfiguration
+ {
+ public:
+ CORSConfiguration();
+ CORSConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CORSConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline const Aws::Vector<CORSRule>& GetCORSRules() const{ return m_cORSRules; }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline bool CORSRulesHasBeenSet() const { return m_cORSRulesHasBeenSet; }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline void SetCORSRules(const Aws::Vector<CORSRule>& value) { m_cORSRulesHasBeenSet = true; m_cORSRules = value; }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline void SetCORSRules(Aws::Vector<CORSRule>&& value) { m_cORSRulesHasBeenSet = true; m_cORSRules = std::move(value); }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline CORSConfiguration& WithCORSRules(const Aws::Vector<CORSRule>& value) { SetCORSRules(value); return *this;}
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline CORSConfiguration& WithCORSRules(Aws::Vector<CORSRule>&& value) { SetCORSRules(std::move(value)); return *this;}
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline CORSConfiguration& AddCORSRules(const CORSRule& value) { m_cORSRulesHasBeenSet = true; m_cORSRules.push_back(value); return *this; }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline CORSConfiguration& AddCORSRules(CORSRule&& value) { m_cORSRulesHasBeenSet = true; m_cORSRules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<CORSRule> m_cORSRules;
+ bool m_cORSRulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSRule.h
new file mode 100644
index 00000000000..7c725e26112
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CORSRule.h
@@ -0,0 +1,342 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies a cross-origin access rule for an Amazon S3 bucket.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CORSRule">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API CORSRule
+ {
+ public:
+ CORSRule();
+ CORSRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CORSRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline const Aws::Vector<Aws::String>& GetAllowedHeaders() const{ return m_allowedHeaders; }
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline bool AllowedHeadersHasBeenSet() const { return m_allowedHeadersHasBeenSet; }
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline void SetAllowedHeaders(const Aws::Vector<Aws::String>& value) { m_allowedHeadersHasBeenSet = true; m_allowedHeaders = value; }
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline void SetAllowedHeaders(Aws::Vector<Aws::String>&& value) { m_allowedHeadersHasBeenSet = true; m_allowedHeaders = std::move(value); }
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline CORSRule& WithAllowedHeaders(const Aws::Vector<Aws::String>& value) { SetAllowedHeaders(value); return *this;}
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline CORSRule& WithAllowedHeaders(Aws::Vector<Aws::String>&& value) { SetAllowedHeaders(std::move(value)); return *this;}
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline CORSRule& AddAllowedHeaders(const Aws::String& value) { m_allowedHeadersHasBeenSet = true; m_allowedHeaders.push_back(value); return *this; }
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline CORSRule& AddAllowedHeaders(Aws::String&& value) { m_allowedHeadersHasBeenSet = true; m_allowedHeaders.push_back(std::move(value)); return *this; }
+
+ /**
+ * <p>Headers that are specified in the <code>Access-Control-Request-Headers</code>
+ * header. These headers are allowed in a preflight OPTIONS request. In response to
+ * any preflight OPTIONS request, Amazon S3 returns any requested headers that are
+ * allowed.</p>
+ */
+ inline CORSRule& AddAllowedHeaders(const char* value) { m_allowedHeadersHasBeenSet = true; m_allowedHeaders.push_back(value); return *this; }
+
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline const Aws::Vector<Aws::String>& GetAllowedMethods() const{ return m_allowedMethods; }
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline bool AllowedMethodsHasBeenSet() const { return m_allowedMethodsHasBeenSet; }
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline void SetAllowedMethods(const Aws::Vector<Aws::String>& value) { m_allowedMethodsHasBeenSet = true; m_allowedMethods = value; }
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline void SetAllowedMethods(Aws::Vector<Aws::String>&& value) { m_allowedMethodsHasBeenSet = true; m_allowedMethods = std::move(value); }
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline CORSRule& WithAllowedMethods(const Aws::Vector<Aws::String>& value) { SetAllowedMethods(value); return *this;}
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline CORSRule& WithAllowedMethods(Aws::Vector<Aws::String>&& value) { SetAllowedMethods(std::move(value)); return *this;}
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline CORSRule& AddAllowedMethods(const Aws::String& value) { m_allowedMethodsHasBeenSet = true; m_allowedMethods.push_back(value); return *this; }
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline CORSRule& AddAllowedMethods(Aws::String&& value) { m_allowedMethodsHasBeenSet = true; m_allowedMethods.push_back(std::move(value)); return *this; }
+
+ /**
+ * <p>An HTTP method that you allow the origin to execute. Valid values are
+ * <code>GET</code>, <code>PUT</code>, <code>HEAD</code>, <code>POST</code>, and
+ * <code>DELETE</code>.</p>
+ */
+ inline CORSRule& AddAllowedMethods(const char* value) { m_allowedMethodsHasBeenSet = true; m_allowedMethods.push_back(value); return *this; }
+
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline const Aws::Vector<Aws::String>& GetAllowedOrigins() const{ return m_allowedOrigins; }
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline bool AllowedOriginsHasBeenSet() const { return m_allowedOriginsHasBeenSet; }
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline void SetAllowedOrigins(const Aws::Vector<Aws::String>& value) { m_allowedOriginsHasBeenSet = true; m_allowedOrigins = value; }
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline void SetAllowedOrigins(Aws::Vector<Aws::String>&& value) { m_allowedOriginsHasBeenSet = true; m_allowedOrigins = std::move(value); }
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline CORSRule& WithAllowedOrigins(const Aws::Vector<Aws::String>& value) { SetAllowedOrigins(value); return *this;}
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline CORSRule& WithAllowedOrigins(Aws::Vector<Aws::String>&& value) { SetAllowedOrigins(std::move(value)); return *this;}
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline CORSRule& AddAllowedOrigins(const Aws::String& value) { m_allowedOriginsHasBeenSet = true; m_allowedOrigins.push_back(value); return *this; }
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline CORSRule& AddAllowedOrigins(Aws::String&& value) { m_allowedOriginsHasBeenSet = true; m_allowedOrigins.push_back(std::move(value)); return *this; }
+
+ /**
+ * <p>One or more origins you want customers to be able to access the bucket
+ * from.</p>
+ */
+ inline CORSRule& AddAllowedOrigins(const char* value) { m_allowedOriginsHasBeenSet = true; m_allowedOrigins.push_back(value); return *this; }
+
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline const Aws::Vector<Aws::String>& GetExposeHeaders() const{ return m_exposeHeaders; }
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline bool ExposeHeadersHasBeenSet() const { return m_exposeHeadersHasBeenSet; }
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline void SetExposeHeaders(const Aws::Vector<Aws::String>& value) { m_exposeHeadersHasBeenSet = true; m_exposeHeaders = value; }
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline void SetExposeHeaders(Aws::Vector<Aws::String>&& value) { m_exposeHeadersHasBeenSet = true; m_exposeHeaders = std::move(value); }
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline CORSRule& WithExposeHeaders(const Aws::Vector<Aws::String>& value) { SetExposeHeaders(value); return *this;}
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline CORSRule& WithExposeHeaders(Aws::Vector<Aws::String>&& value) { SetExposeHeaders(std::move(value)); return *this;}
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline CORSRule& AddExposeHeaders(const Aws::String& value) { m_exposeHeadersHasBeenSet = true; m_exposeHeaders.push_back(value); return *this; }
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline CORSRule& AddExposeHeaders(Aws::String&& value) { m_exposeHeadersHasBeenSet = true; m_exposeHeaders.push_back(std::move(value)); return *this; }
+
+ /**
+ * <p>One or more headers in the response that you want customers to be able to
+ * access from their applications (for example, from a JavaScript
+ * <code>XMLHttpRequest</code> object).</p>
+ */
+ inline CORSRule& AddExposeHeaders(const char* value) { m_exposeHeadersHasBeenSet = true; m_exposeHeaders.push_back(value); return *this; }
+
+
+ /**
+ * <p>The time in seconds that your browser is to cache the preflight response for
+ * the specified resource.</p>
+ */
+ inline int GetMaxAgeSeconds() const{ return m_maxAgeSeconds; }
+
+ /**
+ * <p>The time in seconds that your browser is to cache the preflight response for
+ * the specified resource.</p>
+ */
+ inline bool MaxAgeSecondsHasBeenSet() const { return m_maxAgeSecondsHasBeenSet; }
+
+ /**
+ * <p>The time in seconds that your browser is to cache the preflight response for
+ * the specified resource.</p>
+ */
+ inline void SetMaxAgeSeconds(int value) { m_maxAgeSecondsHasBeenSet = true; m_maxAgeSeconds = value; }
+
+ /**
+ * <p>The time in seconds that your browser is to cache the preflight response for
+ * the specified resource.</p>
+ */
+ inline CORSRule& WithMaxAgeSeconds(int value) { SetMaxAgeSeconds(value); return *this;}
+
+ private:
+
+ Aws::Vector<Aws::String> m_allowedHeaders;
+ bool m_allowedHeadersHasBeenSet;
+
+ Aws::Vector<Aws::String> m_allowedMethods;
+ bool m_allowedMethodsHasBeenSet;
+
+ Aws::Vector<Aws::String> m_allowedOrigins;
+ bool m_allowedOriginsHasBeenSet;
+
+ Aws::Vector<Aws::String> m_exposeHeaders;
+ bool m_exposeHeadersHasBeenSet;
+
+ int m_maxAgeSeconds;
+ bool m_maxAgeSecondsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVInput.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVInput.h
new file mode 100644
index 00000000000..ca40bb8ef9b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVInput.h
@@ -0,0 +1,446 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/FileHeaderInfo.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes how an uncompressed comma-separated values (CSV)-formatted input
+ * object is formatted.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CSVInput">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API CSVInput
+ {
+ public:
+ CSVInput();
+ CSVInput(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CSVInput& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Describes the first line of input. Valid values are:</p> <ul> <li> <p>
+ * <code>NONE</code>: First line is not a header.</p> </li> <li> <p>
+ * <code>IGNORE</code>: First line is a header, but you can't use the header values
+ * to indicate the column in an expression. You can use column position (such as
+ * _1, _2, …) to indicate the column (<code>SELECT s._1 FROM OBJECT s</code>).</p>
+ * </li> <li> <p> <code>Use</code>: First line is a header, and you can use the
+ * header value to identify a column in an expression (<code>SELECT "name" FROM
+ * OBJECT</code>). </p> </li> </ul>
+ */
+ inline const FileHeaderInfo& GetFileHeaderInfo() const{ return m_fileHeaderInfo; }
+
+ /**
+ * <p>Describes the first line of input. Valid values are:</p> <ul> <li> <p>
+ * <code>NONE</code>: First line is not a header.</p> </li> <li> <p>
+ * <code>IGNORE</code>: First line is a header, but you can't use the header values
+ * to indicate the column in an expression. You can use column position (such as
+ * _1, _2, …) to indicate the column (<code>SELECT s._1 FROM OBJECT s</code>).</p>
+ * </li> <li> <p> <code>Use</code>: First line is a header, and you can use the
+ * header value to identify a column in an expression (<code>SELECT "name" FROM
+ * OBJECT</code>). </p> </li> </ul>
+ */
+ inline bool FileHeaderInfoHasBeenSet() const { return m_fileHeaderInfoHasBeenSet; }
+
+ /**
+ * <p>Describes the first line of input. Valid values are:</p> <ul> <li> <p>
+ * <code>NONE</code>: First line is not a header.</p> </li> <li> <p>
+ * <code>IGNORE</code>: First line is a header, but you can't use the header values
+ * to indicate the column in an expression. You can use column position (such as
+ * _1, _2, …) to indicate the column (<code>SELECT s._1 FROM OBJECT s</code>).</p>
+ * </li> <li> <p> <code>Use</code>: First line is a header, and you can use the
+ * header value to identify a column in an expression (<code>SELECT "name" FROM
+ * OBJECT</code>). </p> </li> </ul>
+ */
+ inline void SetFileHeaderInfo(const FileHeaderInfo& value) { m_fileHeaderInfoHasBeenSet = true; m_fileHeaderInfo = value; }
+
+ /**
+ * <p>Describes the first line of input. Valid values are:</p> <ul> <li> <p>
+ * <code>NONE</code>: First line is not a header.</p> </li> <li> <p>
+ * <code>IGNORE</code>: First line is a header, but you can't use the header values
+ * to indicate the column in an expression. You can use column position (such as
+ * _1, _2, …) to indicate the column (<code>SELECT s._1 FROM OBJECT s</code>).</p>
+ * </li> <li> <p> <code>Use</code>: First line is a header, and you can use the
+ * header value to identify a column in an expression (<code>SELECT "name" FROM
+ * OBJECT</code>). </p> </li> </ul>
+ */
+ inline void SetFileHeaderInfo(FileHeaderInfo&& value) { m_fileHeaderInfoHasBeenSet = true; m_fileHeaderInfo = std::move(value); }
+
+ /**
+ * <p>Describes the first line of input. Valid values are:</p> <ul> <li> <p>
+ * <code>NONE</code>: First line is not a header.</p> </li> <li> <p>
+ * <code>IGNORE</code>: First line is a header, but you can't use the header values
+ * to indicate the column in an expression. You can use column position (such as
+ * _1, _2, …) to indicate the column (<code>SELECT s._1 FROM OBJECT s</code>).</p>
+ * </li> <li> <p> <code>Use</code>: First line is a header, and you can use the
+ * header value to identify a column in an expression (<code>SELECT "name" FROM
+ * OBJECT</code>). </p> </li> </ul>
+ */
+ inline CSVInput& WithFileHeaderInfo(const FileHeaderInfo& value) { SetFileHeaderInfo(value); return *this;}
+
+ /**
+ * <p>Describes the first line of input. Valid values are:</p> <ul> <li> <p>
+ * <code>NONE</code>: First line is not a header.</p> </li> <li> <p>
+ * <code>IGNORE</code>: First line is a header, but you can't use the header values
+ * to indicate the column in an expression. You can use column position (such as
+ * _1, _2, …) to indicate the column (<code>SELECT s._1 FROM OBJECT s</code>).</p>
+ * </li> <li> <p> <code>Use</code>: First line is a header, and you can use the
+ * header value to identify a column in an expression (<code>SELECT "name" FROM
+ * OBJECT</code>). </p> </li> </ul>
+ */
+ inline CSVInput& WithFileHeaderInfo(FileHeaderInfo&& value) { SetFileHeaderInfo(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline const Aws::String& GetComments() const{ return m_comments; }
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline bool CommentsHasBeenSet() const { return m_commentsHasBeenSet; }
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline void SetComments(const Aws::String& value) { m_commentsHasBeenSet = true; m_comments = value; }
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline void SetComments(Aws::String&& value) { m_commentsHasBeenSet = true; m_comments = std::move(value); }
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline void SetComments(const char* value) { m_commentsHasBeenSet = true; m_comments.assign(value); }
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline CSVInput& WithComments(const Aws::String& value) { SetComments(value); return *this;}
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline CSVInput& WithComments(Aws::String&& value) { SetComments(std::move(value)); return *this;}
+
+ /**
+ * <p>A single character used to indicate that a row should be ignored when the
+ * character is present at the start of that row. You can specify any character to
+ * indicate a comment line.</p>
+ */
+ inline CSVInput& WithComments(const char* value) { SetComments(value); return *this;}
+
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline const Aws::String& GetQuoteEscapeCharacter() const{ return m_quoteEscapeCharacter; }
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline bool QuoteEscapeCharacterHasBeenSet() const { return m_quoteEscapeCharacterHasBeenSet; }
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline void SetQuoteEscapeCharacter(const Aws::String& value) { m_quoteEscapeCharacterHasBeenSet = true; m_quoteEscapeCharacter = value; }
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline void SetQuoteEscapeCharacter(Aws::String&& value) { m_quoteEscapeCharacterHasBeenSet = true; m_quoteEscapeCharacter = std::move(value); }
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline void SetQuoteEscapeCharacter(const char* value) { m_quoteEscapeCharacterHasBeenSet = true; m_quoteEscapeCharacter.assign(value); }
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline CSVInput& WithQuoteEscapeCharacter(const Aws::String& value) { SetQuoteEscapeCharacter(value); return *this;}
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline CSVInput& WithQuoteEscapeCharacter(Aws::String&& value) { SetQuoteEscapeCharacter(std::move(value)); return *this;}
+
+ /**
+ * <p>A single character used for escaping the quotation mark character inside an
+ * already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ * ".</p>
+ */
+ inline CSVInput& WithQuoteEscapeCharacter(const char* value) { SetQuoteEscapeCharacter(value); return *this;}
+
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline const Aws::String& GetRecordDelimiter() const{ return m_recordDelimiter; }
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline bool RecordDelimiterHasBeenSet() const { return m_recordDelimiterHasBeenSet; }
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline void SetRecordDelimiter(const Aws::String& value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter = value; }
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline void SetRecordDelimiter(Aws::String&& value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter = std::move(value); }
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline void SetRecordDelimiter(const char* value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter.assign(value); }
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline CSVInput& WithRecordDelimiter(const Aws::String& value) { SetRecordDelimiter(value); return *this;}
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline CSVInput& WithRecordDelimiter(Aws::String&& value) { SetRecordDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>A single character used to separate individual records in the input. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline CSVInput& WithRecordDelimiter(const char* value) { SetRecordDelimiter(value); return *this;}
+
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline const Aws::String& GetFieldDelimiter() const{ return m_fieldDelimiter; }
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline bool FieldDelimiterHasBeenSet() const { return m_fieldDelimiterHasBeenSet; }
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline void SetFieldDelimiter(const Aws::String& value) { m_fieldDelimiterHasBeenSet = true; m_fieldDelimiter = value; }
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline void SetFieldDelimiter(Aws::String&& value) { m_fieldDelimiterHasBeenSet = true; m_fieldDelimiter = std::move(value); }
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline void SetFieldDelimiter(const char* value) { m_fieldDelimiterHasBeenSet = true; m_fieldDelimiter.assign(value); }
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline CSVInput& WithFieldDelimiter(const Aws::String& value) { SetFieldDelimiter(value); return *this;}
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline CSVInput& WithFieldDelimiter(Aws::String&& value) { SetFieldDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>A single character used to separate individual fields in a record. You can
+ * specify an arbitrary delimiter.</p>
+ */
+ inline CSVInput& WithFieldDelimiter(const char* value) { SetFieldDelimiter(value); return *this;}
+
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline const Aws::String& GetQuoteCharacter() const{ return m_quoteCharacter; }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline bool QuoteCharacterHasBeenSet() const { return m_quoteCharacterHasBeenSet; }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline void SetQuoteCharacter(const Aws::String& value) { m_quoteCharacterHasBeenSet = true; m_quoteCharacter = value; }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline void SetQuoteCharacter(Aws::String&& value) { m_quoteCharacterHasBeenSet = true; m_quoteCharacter = std::move(value); }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline void SetQuoteCharacter(const char* value) { m_quoteCharacterHasBeenSet = true; m_quoteCharacter.assign(value); }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline CSVInput& WithQuoteCharacter(const Aws::String& value) { SetQuoteCharacter(value); return *this;}
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline CSVInput& WithQuoteCharacter(Aws::String&& value) { SetQuoteCharacter(std::move(value)); return *this;}
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p> <p>Type:
+ * String</p> <p>Default: <code>"</code> </p> <p>Ancestors: <code>CSV</code> </p>
+ */
+ inline CSVInput& WithQuoteCharacter(const char* value) { SetQuoteCharacter(value); return *this;}
+
+
+ /**
+ * <p>Specifies that CSV field values may contain quoted record delimiters and such
+ * records should be allowed. Default value is FALSE. Setting this value to TRUE
+ * may lower performance.</p>
+ */
+ inline bool GetAllowQuotedRecordDelimiter() const{ return m_allowQuotedRecordDelimiter; }
+
+ /**
+ * <p>Specifies that CSV field values may contain quoted record delimiters and such
+ * records should be allowed. Default value is FALSE. Setting this value to TRUE
+ * may lower performance.</p>
+ */
+ inline bool AllowQuotedRecordDelimiterHasBeenSet() const { return m_allowQuotedRecordDelimiterHasBeenSet; }
+
+ /**
+ * <p>Specifies that CSV field values may contain quoted record delimiters and such
+ * records should be allowed. Default value is FALSE. Setting this value to TRUE
+ * may lower performance.</p>
+ */
+ inline void SetAllowQuotedRecordDelimiter(bool value) { m_allowQuotedRecordDelimiterHasBeenSet = true; m_allowQuotedRecordDelimiter = value; }
+
+ /**
+ * <p>Specifies that CSV field values may contain quoted record delimiters and such
+ * records should be allowed. Default value is FALSE. Setting this value to TRUE
+ * may lower performance.</p>
+ */
+ inline CSVInput& WithAllowQuotedRecordDelimiter(bool value) { SetAllowQuotedRecordDelimiter(value); return *this;}
+
+ private:
+
+ FileHeaderInfo m_fileHeaderInfo;
+ bool m_fileHeaderInfoHasBeenSet;
+
+ Aws::String m_comments;
+ bool m_commentsHasBeenSet;
+
+ Aws::String m_quoteEscapeCharacter;
+ bool m_quoteEscapeCharacterHasBeenSet;
+
+ Aws::String m_recordDelimiter;
+ bool m_recordDelimiterHasBeenSet;
+
+ Aws::String m_fieldDelimiter;
+ bool m_fieldDelimiterHasBeenSet;
+
+ Aws::String m_quoteCharacter;
+ bool m_quoteCharacterHasBeenSet;
+
+ bool m_allowQuotedRecordDelimiter;
+ bool m_allowQuotedRecordDelimiterHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVOutput.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVOutput.h
new file mode 100644
index 00000000000..d507716d7f7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CSVOutput.h
@@ -0,0 +1,314 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/QuoteFields.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes how uncompressed comma-separated values (CSV)-formatted results are
+ * formatted.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CSVOutput">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API CSVOutput
+ {
+ public:
+ CSVOutput();
+ CSVOutput(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CSVOutput& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Indicates whether to use quotation marks around output fields. </p> <ul> <li>
+ * <p> <code>ALWAYS</code>: Always use quotation marks for output fields.</p> </li>
+ * <li> <p> <code>ASNEEDED</code>: Use quotation marks for output fields when
+ * needed.</p> </li> </ul>
+ */
+ inline const QuoteFields& GetQuoteFields() const{ return m_quoteFields; }
+
+ /**
+ * <p>Indicates whether to use quotation marks around output fields. </p> <ul> <li>
+ * <p> <code>ALWAYS</code>: Always use quotation marks for output fields.</p> </li>
+ * <li> <p> <code>ASNEEDED</code>: Use quotation marks for output fields when
+ * needed.</p> </li> </ul>
+ */
+ inline bool QuoteFieldsHasBeenSet() const { return m_quoteFieldsHasBeenSet; }
+
+ /**
+ * <p>Indicates whether to use quotation marks around output fields. </p> <ul> <li>
+ * <p> <code>ALWAYS</code>: Always use quotation marks for output fields.</p> </li>
+ * <li> <p> <code>ASNEEDED</code>: Use quotation marks for output fields when
+ * needed.</p> </li> </ul>
+ */
+ inline void SetQuoteFields(const QuoteFields& value) { m_quoteFieldsHasBeenSet = true; m_quoteFields = value; }
+
+ /**
+ * <p>Indicates whether to use quotation marks around output fields. </p> <ul> <li>
+ * <p> <code>ALWAYS</code>: Always use quotation marks for output fields.</p> </li>
+ * <li> <p> <code>ASNEEDED</code>: Use quotation marks for output fields when
+ * needed.</p> </li> </ul>
+ */
+ inline void SetQuoteFields(QuoteFields&& value) { m_quoteFieldsHasBeenSet = true; m_quoteFields = std::move(value); }
+
+ /**
+ * <p>Indicates whether to use quotation marks around output fields. </p> <ul> <li>
+ * <p> <code>ALWAYS</code>: Always use quotation marks for output fields.</p> </li>
+ * <li> <p> <code>ASNEEDED</code>: Use quotation marks for output fields when
+ * needed.</p> </li> </ul>
+ */
+ inline CSVOutput& WithQuoteFields(const QuoteFields& value) { SetQuoteFields(value); return *this;}
+
+ /**
+ * <p>Indicates whether to use quotation marks around output fields. </p> <ul> <li>
+ * <p> <code>ALWAYS</code>: Always use quotation marks for output fields.</p> </li>
+ * <li> <p> <code>ASNEEDED</code>: Use quotation marks for output fields when
+ * needed.</p> </li> </ul>
+ */
+ inline CSVOutput& WithQuoteFields(QuoteFields&& value) { SetQuoteFields(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline const Aws::String& GetQuoteEscapeCharacter() const{ return m_quoteEscapeCharacter; }
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline bool QuoteEscapeCharacterHasBeenSet() const { return m_quoteEscapeCharacterHasBeenSet; }
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline void SetQuoteEscapeCharacter(const Aws::String& value) { m_quoteEscapeCharacterHasBeenSet = true; m_quoteEscapeCharacter = value; }
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline void SetQuoteEscapeCharacter(Aws::String&& value) { m_quoteEscapeCharacterHasBeenSet = true; m_quoteEscapeCharacter = std::move(value); }
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline void SetQuoteEscapeCharacter(const char* value) { m_quoteEscapeCharacterHasBeenSet = true; m_quoteEscapeCharacter.assign(value); }
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline CSVOutput& WithQuoteEscapeCharacter(const Aws::String& value) { SetQuoteEscapeCharacter(value); return *this;}
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline CSVOutput& WithQuoteEscapeCharacter(Aws::String&& value) { SetQuoteEscapeCharacter(std::move(value)); return *this;}
+
+ /**
+ * <p>The single character used for escaping the quote character inside an already
+ * escaped value.</p>
+ */
+ inline CSVOutput& WithQuoteEscapeCharacter(const char* value) { SetQuoteEscapeCharacter(value); return *this;}
+
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline const Aws::String& GetRecordDelimiter() const{ return m_recordDelimiter; }
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline bool RecordDelimiterHasBeenSet() const { return m_recordDelimiterHasBeenSet; }
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline void SetRecordDelimiter(const Aws::String& value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter = value; }
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline void SetRecordDelimiter(Aws::String&& value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter = std::move(value); }
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline void SetRecordDelimiter(const char* value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter.assign(value); }
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline CSVOutput& WithRecordDelimiter(const Aws::String& value) { SetRecordDelimiter(value); return *this;}
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline CSVOutput& WithRecordDelimiter(Aws::String&& value) { SetRecordDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>A single character used to separate individual records in the output. Instead
+ * of the default value, you can specify an arbitrary delimiter.</p>
+ */
+ inline CSVOutput& WithRecordDelimiter(const char* value) { SetRecordDelimiter(value); return *this;}
+
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline const Aws::String& GetFieldDelimiter() const{ return m_fieldDelimiter; }
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline bool FieldDelimiterHasBeenSet() const { return m_fieldDelimiterHasBeenSet; }
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline void SetFieldDelimiter(const Aws::String& value) { m_fieldDelimiterHasBeenSet = true; m_fieldDelimiter = value; }
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline void SetFieldDelimiter(Aws::String&& value) { m_fieldDelimiterHasBeenSet = true; m_fieldDelimiter = std::move(value); }
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline void SetFieldDelimiter(const char* value) { m_fieldDelimiterHasBeenSet = true; m_fieldDelimiter.assign(value); }
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline CSVOutput& WithFieldDelimiter(const Aws::String& value) { SetFieldDelimiter(value); return *this;}
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline CSVOutput& WithFieldDelimiter(Aws::String&& value) { SetFieldDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>The value used to separate individual fields in a record. You can specify an
+ * arbitrary delimiter.</p>
+ */
+ inline CSVOutput& WithFieldDelimiter(const char* value) { SetFieldDelimiter(value); return *this;}
+
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline const Aws::String& GetQuoteCharacter() const{ return m_quoteCharacter; }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline bool QuoteCharacterHasBeenSet() const { return m_quoteCharacterHasBeenSet; }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline void SetQuoteCharacter(const Aws::String& value) { m_quoteCharacterHasBeenSet = true; m_quoteCharacter = value; }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline void SetQuoteCharacter(Aws::String&& value) { m_quoteCharacterHasBeenSet = true; m_quoteCharacter = std::move(value); }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline void SetQuoteCharacter(const char* value) { m_quoteCharacterHasBeenSet = true; m_quoteCharacter.assign(value); }
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline CSVOutput& WithQuoteCharacter(const Aws::String& value) { SetQuoteCharacter(value); return *this;}
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline CSVOutput& WithQuoteCharacter(Aws::String&& value) { SetQuoteCharacter(std::move(value)); return *this;}
+
+ /**
+ * <p>A single character used for escaping when the field delimiter is part of the
+ * value. For example, if the value is <code>a, b</code>, Amazon S3 wraps this
+ * field value in quotation marks, as follows: <code>" a , b "</code>.</p>
+ */
+ inline CSVOutput& WithQuoteCharacter(const char* value) { SetQuoteCharacter(value); return *this;}
+
+ private:
+
+ QuoteFields m_quoteFields;
+ bool m_quoteFieldsHasBeenSet;
+
+ Aws::String m_quoteEscapeCharacter;
+ bool m_quoteEscapeCharacterHasBeenSet;
+
+ Aws::String m_recordDelimiter;
+ bool m_recordDelimiterHasBeenSet;
+
+ Aws::String m_fieldDelimiter;
+ bool m_fieldDelimiterHasBeenSet;
+
+ Aws::String m_quoteCharacter;
+ bool m_quoteCharacterHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CloudFunctionConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CloudFunctionConfiguration.h
new file mode 100644
index 00000000000..d85743d470c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CloudFunctionConfiguration.h
@@ -0,0 +1,215 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Event.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for specifying the AWS Lambda notification
+ * configuration.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CloudFunctionConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CloudFunctionConfiguration
+ {
+ public:
+ CloudFunctionConfiguration();
+ CloudFunctionConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CloudFunctionConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const Aws::String& GetId() const{ return m_id; }
+
+
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+
+ inline CloudFunctionConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+
+ inline CloudFunctionConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+
+ inline CloudFunctionConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline const Aws::Vector<Event>& GetEvents() const{ return m_events; }
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline bool EventsHasBeenSet() const { return m_eventsHasBeenSet; }
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline void SetEvents(const Aws::Vector<Event>& value) { m_eventsHasBeenSet = true; m_events = value; }
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline void SetEvents(Aws::Vector<Event>&& value) { m_eventsHasBeenSet = true; m_events = std::move(value); }
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline CloudFunctionConfiguration& WithEvents(const Aws::Vector<Event>& value) { SetEvents(value); return *this;}
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline CloudFunctionConfiguration& WithEvents(Aws::Vector<Event>&& value) { SetEvents(std::move(value)); return *this;}
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline CloudFunctionConfiguration& AddEvents(const Event& value) { m_eventsHasBeenSet = true; m_events.push_back(value); return *this; }
+
+ /**
+ * <p>Bucket events for which to send notifications.</p>
+ */
+ inline CloudFunctionConfiguration& AddEvents(Event&& value) { m_eventsHasBeenSet = true; m_events.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline const Aws::String& GetCloudFunction() const{ return m_cloudFunction; }
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline bool CloudFunctionHasBeenSet() const { return m_cloudFunctionHasBeenSet; }
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline void SetCloudFunction(const Aws::String& value) { m_cloudFunctionHasBeenSet = true; m_cloudFunction = value; }
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline void SetCloudFunction(Aws::String&& value) { m_cloudFunctionHasBeenSet = true; m_cloudFunction = std::move(value); }
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline void SetCloudFunction(const char* value) { m_cloudFunctionHasBeenSet = true; m_cloudFunction.assign(value); }
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline CloudFunctionConfiguration& WithCloudFunction(const Aws::String& value) { SetCloudFunction(value); return *this;}
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline CloudFunctionConfiguration& WithCloudFunction(Aws::String&& value) { SetCloudFunction(std::move(value)); return *this;}
+
+ /**
+ * <p>Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
+ * the specified type.</p>
+ */
+ inline CloudFunctionConfiguration& WithCloudFunction(const char* value) { SetCloudFunction(value); return *this;}
+
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline const Aws::String& GetInvocationRole() const{ return m_invocationRole; }
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline bool InvocationRoleHasBeenSet() const { return m_invocationRoleHasBeenSet; }
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline void SetInvocationRole(const Aws::String& value) { m_invocationRoleHasBeenSet = true; m_invocationRole = value; }
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline void SetInvocationRole(Aws::String&& value) { m_invocationRoleHasBeenSet = true; m_invocationRole = std::move(value); }
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline void SetInvocationRole(const char* value) { m_invocationRoleHasBeenSet = true; m_invocationRole.assign(value); }
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline CloudFunctionConfiguration& WithInvocationRole(const Aws::String& value) { SetInvocationRole(value); return *this;}
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline CloudFunctionConfiguration& WithInvocationRole(Aws::String&& value) { SetInvocationRole(std::move(value)); return *this;}
+
+ /**
+ * <p>The role supporting the invocation of the Lambda function</p>
+ */
+ inline CloudFunctionConfiguration& WithInvocationRole(const char* value) { SetInvocationRole(value); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::Vector<Event> m_events;
+ bool m_eventsHasBeenSet;
+
+ Aws::String m_cloudFunction;
+ bool m_cloudFunctionHasBeenSet;
+
+ Aws::String m_invocationRole;
+ bool m_invocationRoleHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CommonPrefix.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CommonPrefix.h
new file mode 100644
index 00000000000..42fec002982
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CommonPrefix.h
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for all (if there are any) keys between Prefix and the next
+ * occurrence of the string specified by a delimiter. CommonPrefixes lists keys
+ * that act like subdirectories in the directory specified by Prefix. For example,
+ * if the prefix is notes/ and the delimiter is a slash (/) as in
+ * notes/summer/july, the common prefix is notes/summer/. </p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CommonPrefix">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CommonPrefix
+ {
+ public:
+ CommonPrefix();
+ CommonPrefix(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CommonPrefix& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline CommonPrefix& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline CommonPrefix& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for the specified common prefix.</p>
+ */
+ inline CommonPrefix& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadRequest.h
new file mode 100644
index 00000000000..00402979799
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadRequest.h
@@ -0,0 +1,341 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/CompletedMultipartUpload.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API CompleteMultipartUploadRequest : public S3Request
+ {
+ public:
+ CompleteMultipartUploadRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "CompleteMultipartUpload"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The container for the multipart upload request information.</p>
+ */
+ inline const CompletedMultipartUpload& GetMultipartUpload() const{ return m_multipartUpload; }
+
+ /**
+ * <p>The container for the multipart upload request information.</p>
+ */
+ inline bool MultipartUploadHasBeenSet() const { return m_multipartUploadHasBeenSet; }
+
+ /**
+ * <p>The container for the multipart upload request information.</p>
+ */
+ inline void SetMultipartUpload(const CompletedMultipartUpload& value) { m_multipartUploadHasBeenSet = true; m_multipartUpload = value; }
+
+ /**
+ * <p>The container for the multipart upload request information.</p>
+ */
+ inline void SetMultipartUpload(CompletedMultipartUpload&& value) { m_multipartUploadHasBeenSet = true; m_multipartUpload = std::move(value); }
+
+ /**
+ * <p>The container for the multipart upload request information.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithMultipartUpload(const CompletedMultipartUpload& value) { SetMultipartUpload(value); return *this;}
+
+ /**
+ * <p>The container for the multipart upload request information.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithMultipartUpload(CompletedMultipartUpload&& value) { SetMultipartUpload(std::move(value)); return *this;}
+
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline bool UploadIdHasBeenSet() const { return m_uploadIdHasBeenSet; }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadIdHasBeenSet = true; m_uploadId = value; }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadIdHasBeenSet = true; m_uploadId = std::move(value); }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadIdHasBeenSet = true; m_uploadId.assign(value); }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline CompleteMultipartUploadRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline CompleteMultipartUploadRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline CompleteMultipartUploadRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline CompleteMultipartUploadRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline CompleteMultipartUploadRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline CompleteMultipartUploadRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline CompleteMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CompleteMultipartUploadRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CompleteMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline CompleteMultipartUploadRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CompleteMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CompleteMultipartUploadRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ CompletedMultipartUpload m_multipartUpload;
+ bool m_multipartUploadHasBeenSet;
+
+ Aws::String m_uploadId;
+ bool m_uploadIdHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadResult.h
new file mode 100644
index 00000000000..ed995d2ea63
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompleteMultipartUploadResult.h
@@ -0,0 +1,578 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API CompleteMultipartUploadResult
+ {
+ public:
+ CompleteMultipartUploadResult();
+ CompleteMultipartUploadResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ CompleteMultipartUploadResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The URI that identifies the newly created object.</p>
+ */
+ inline const Aws::String& GetLocation() const{ return m_location; }
+
+ /**
+ * <p>The URI that identifies the newly created object.</p>
+ */
+ inline void SetLocation(const Aws::String& value) { m_location = value; }
+
+ /**
+ * <p>The URI that identifies the newly created object.</p>
+ */
+ inline void SetLocation(Aws::String&& value) { m_location = std::move(value); }
+
+ /**
+ * <p>The URI that identifies the newly created object.</p>
+ */
+ inline void SetLocation(const char* value) { m_location.assign(value); }
+
+ /**
+ * <p>The URI that identifies the newly created object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithLocation(const Aws::String& value) { SetLocation(value); return *this;}
+
+ /**
+ * <p>The URI that identifies the newly created object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithLocation(Aws::String&& value) { SetLocation(std::move(value)); return *this;}
+
+ /**
+ * <p>The URI that identifies the newly created object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithLocation(const char* value) { SetLocation(value); return *this;}
+
+
+ /**
+ * <p>The name of the bucket that contains the newly created object.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket that contains the newly created object.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket that contains the newly created object.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket that contains the newly created object.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket that contains the newly created object.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CompleteMultipartUploadResult& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket that contains the newly created object.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CompleteMultipartUploadResult& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket that contains the newly created object.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CompleteMultipartUploadResult& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The object key of the newly created object.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The object key of the newly created object.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_key = value; }
+
+ /**
+ * <p>The object key of the newly created object.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_key = std::move(value); }
+
+ /**
+ * <p>The object key of the newly created object.</p>
+ */
+ inline void SetKey(const char* value) { m_key.assign(value); }
+
+ /**
+ * <p>The object key of the newly created object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The object key of the newly created object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key of the newly created object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>If the object expiration is configured, this will contain the expiration date
+ * (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.</p>
+ */
+ inline const Aws::String& GetExpiration() const{ return m_expiration; }
+
+ /**
+ * <p>If the object expiration is configured, this will contain the expiration date
+ * (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.</p>
+ */
+ inline void SetExpiration(const Aws::String& value) { m_expiration = value; }
+
+ /**
+ * <p>If the object expiration is configured, this will contain the expiration date
+ * (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.</p>
+ */
+ inline void SetExpiration(Aws::String&& value) { m_expiration = std::move(value); }
+
+ /**
+ * <p>If the object expiration is configured, this will contain the expiration date
+ * (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.</p>
+ */
+ inline void SetExpiration(const char* value) { m_expiration.assign(value); }
+
+ /**
+ * <p>If the object expiration is configured, this will contain the expiration date
+ * (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.</p>
+ */
+ inline CompleteMultipartUploadResult& WithExpiration(const Aws::String& value) { SetExpiration(value); return *this;}
+
+ /**
+ * <p>If the object expiration is configured, this will contain the expiration date
+ * (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.</p>
+ */
+ inline CompleteMultipartUploadResult& WithExpiration(Aws::String&& value) { SetExpiration(std::move(value)); return *this;}
+
+ /**
+ * <p>If the object expiration is configured, this will contain the expiration date
+ * (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.</p>
+ */
+ inline CompleteMultipartUploadResult& WithExpiration(const char* value) { SetExpiration(value); return *this;}
+
+
+ /**
+ * <p>Entity tag that identifies the newly created object's data. Objects with
+ * different object data will have different entity tags. The entity tag is an
+ * opaque string. The entity tag may or may not be an MD5 digest of the object
+ * data. If the entity tag is not an MD5 digest of the object data, it will contain
+ * one or more nonhexadecimal characters and/or will consist of less than 32 or
+ * more than 32 hexadecimal digits.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>Entity tag that identifies the newly created object's data. Objects with
+ * different object data will have different entity tags. The entity tag is an
+ * opaque string. The entity tag may or may not be an MD5 digest of the object
+ * data. If the entity tag is not an MD5 digest of the object data, it will contain
+ * one or more nonhexadecimal characters and/or will consist of less than 32 or
+ * more than 32 hexadecimal digits.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTag = value; }
+
+ /**
+ * <p>Entity tag that identifies the newly created object's data. Objects with
+ * different object data will have different entity tags. The entity tag is an
+ * opaque string. The entity tag may or may not be an MD5 digest of the object
+ * data. If the entity tag is not an MD5 digest of the object data, it will contain
+ * one or more nonhexadecimal characters and/or will consist of less than 32 or
+ * more than 32 hexadecimal digits.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTag = std::move(value); }
+
+ /**
+ * <p>Entity tag that identifies the newly created object's data. Objects with
+ * different object data will have different entity tags. The entity tag is an
+ * opaque string. The entity tag may or may not be an MD5 digest of the object
+ * data. If the entity tag is not an MD5 digest of the object data, it will contain
+ * one or more nonhexadecimal characters and/or will consist of less than 32 or
+ * more than 32 hexadecimal digits.</p>
+ */
+ inline void SetETag(const char* value) { m_eTag.assign(value); }
+
+ /**
+ * <p>Entity tag that identifies the newly created object's data. Objects with
+ * different object data will have different entity tags. The entity tag is an
+ * opaque string. The entity tag may or may not be an MD5 digest of the object
+ * data. If the entity tag is not an MD5 digest of the object data, it will contain
+ * one or more nonhexadecimal characters and/or will consist of less than 32 or
+ * more than 32 hexadecimal digits.</p>
+ */
+ inline CompleteMultipartUploadResult& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>Entity tag that identifies the newly created object's data. Objects with
+ * different object data will have different entity tags. The entity tag is an
+ * opaque string. The entity tag may or may not be an MD5 digest of the object
+ * data. If the entity tag is not an MD5 digest of the object data, it will contain
+ * one or more nonhexadecimal characters and/or will consist of less than 32 or
+ * more than 32 hexadecimal digits.</p>
+ */
+ inline CompleteMultipartUploadResult& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>Entity tag that identifies the newly created object's data. Objects with
+ * different object data will have different entity tags. The entity tag is an
+ * opaque string. The entity tag may or may not be an MD5 digest of the object
+ * data. If the entity tag is not an MD5 digest of the object data, it will contain
+ * one or more nonhexadecimal characters and/or will consist of less than 32 or
+ * more than 32 hexadecimal digits.</p>
+ */
+ inline CompleteMultipartUploadResult& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>If you specified server-side encryption either with an Amazon S3-managed
+ * encryption key or an AWS KMS customer master key (CMK) in your initiate
+ * multipart upload request, the response includes this header. It confirms the
+ * encryption algorithm that Amazon S3 used to encrypt the object.</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>If you specified server-side encryption either with an Amazon S3-managed
+ * encryption key or an AWS KMS customer master key (CMK) in your initiate
+ * multipart upload request, the response includes this header. It confirms the
+ * encryption algorithm that Amazon S3 used to encrypt the object.</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>If you specified server-side encryption either with an Amazon S3-managed
+ * encryption key or an AWS KMS customer master key (CMK) in your initiate
+ * multipart upload request, the response includes this header. It confirms the
+ * encryption algorithm that Amazon S3 used to encrypt the object.</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>If you specified server-side encryption either with an Amazon S3-managed
+ * encryption key or an AWS KMS customer master key (CMK) in your initiate
+ * multipart upload request, the response includes this header. It confirms the
+ * encryption algorithm that Amazon S3 used to encrypt the object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>If you specified server-side encryption either with an Amazon S3-managed
+ * encryption key or an AWS KMS customer master key (CMK) in your initiate
+ * multipart upload request, the response includes this header. It confirms the
+ * encryption algorithm that Amazon S3 used to encrypt the object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Version ID of the newly created object, in case the bucket has versioning
+ * turned on.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Version ID of the newly created object, in case the bucket has versioning
+ * turned on.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>Version ID of the newly created object, in case the bucket has versioning
+ * turned on.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>Version ID of the newly created object, in case the bucket has versioning
+ * turned on.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>Version ID of the newly created object, in case the bucket has versioning
+ * turned on.</p>
+ */
+ inline CompleteMultipartUploadResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Version ID of the newly created object, in case the bucket has versioning
+ * turned on.</p>
+ */
+ inline CompleteMultipartUploadResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version ID of the newly created object, in case the bucket has versioning
+ * turned on.</p>
+ */
+ inline CompleteMultipartUploadResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CompleteMultipartUploadResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline CompleteMultipartUploadResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline CompleteMultipartUploadResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline CompleteMultipartUploadResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_location;
+
+ Aws::String m_bucket;
+
+ Aws::String m_key;
+
+ Aws::String m_expiration;
+
+ Aws::String m_eTag;
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::String m_versionId;
+
+ Aws::String m_sSEKMSKeyId;
+
+ bool m_bucketKeyEnabled;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedMultipartUpload.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedMultipartUpload.h
new file mode 100644
index 00000000000..0970651366d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedMultipartUpload.h
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/CompletedPart.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The container for the completed multipart upload details.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompletedMultipartUpload">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CompletedMultipartUpload
+ {
+ public:
+ CompletedMultipartUpload();
+ CompletedMultipartUpload(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CompletedMultipartUpload& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline const Aws::Vector<CompletedPart>& GetParts() const{ return m_parts; }
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline bool PartsHasBeenSet() const { return m_partsHasBeenSet; }
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline void SetParts(const Aws::Vector<CompletedPart>& value) { m_partsHasBeenSet = true; m_parts = value; }
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline void SetParts(Aws::Vector<CompletedPart>&& value) { m_partsHasBeenSet = true; m_parts = std::move(value); }
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline CompletedMultipartUpload& WithParts(const Aws::Vector<CompletedPart>& value) { SetParts(value); return *this;}
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline CompletedMultipartUpload& WithParts(Aws::Vector<CompletedPart>&& value) { SetParts(std::move(value)); return *this;}
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline CompletedMultipartUpload& AddParts(const CompletedPart& value) { m_partsHasBeenSet = true; m_parts.push_back(value); return *this; }
+
+ /**
+ * <p>Array of CompletedPart data types.</p>
+ */
+ inline CompletedMultipartUpload& AddParts(CompletedPart&& value) { m_partsHasBeenSet = true; m_parts.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<CompletedPart> m_parts;
+ bool m_partsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedPart.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedPart.h
new file mode 100644
index 00000000000..5e1507d7624
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompletedPart.h
@@ -0,0 +1,116 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Details of the parts that were uploaded.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompletedPart">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CompletedPart
+ {
+ public:
+ CompletedPart();
+ CompletedPart(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CompletedPart& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline bool ETagHasBeenSet() const { return m_eTagHasBeenSet; }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTagHasBeenSet = true; m_eTag = value; }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTagHasBeenSet = true; m_eTag = std::move(value); }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline void SetETag(const char* value) { m_eTagHasBeenSet = true; m_eTag.assign(value); }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline CompletedPart& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline CompletedPart& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline CompletedPart& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>Part number that identifies the part. This is a positive integer between 1
+ * and 10,000.</p>
+ */
+ inline int GetPartNumber() const{ return m_partNumber; }
+
+ /**
+ * <p>Part number that identifies the part. This is a positive integer between 1
+ * and 10,000.</p>
+ */
+ inline bool PartNumberHasBeenSet() const { return m_partNumberHasBeenSet; }
+
+ /**
+ * <p>Part number that identifies the part. This is a positive integer between 1
+ * and 10,000.</p>
+ */
+ inline void SetPartNumber(int value) { m_partNumberHasBeenSet = true; m_partNumber = value; }
+
+ /**
+ * <p>Part number that identifies the part. This is a positive integer between 1
+ * and 10,000.</p>
+ */
+ inline CompletedPart& WithPartNumber(int value) { SetPartNumber(value); return *this;}
+
+ private:
+
+ Aws::String m_eTag;
+ bool m_eTagHasBeenSet;
+
+ int m_partNumber;
+ bool m_partNumberHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompressionType.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompressionType.h
new file mode 100644
index 00000000000..742edcae75d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CompressionType.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class CompressionType
+ {
+ NOT_SET,
+ NONE,
+ GZIP,
+ BZIP2
+ };
+
+namespace CompressionTypeMapper
+{
+AWS_S3_API CompressionType GetCompressionTypeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForCompressionType(CompressionType value);
+} // namespace CompressionTypeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Condition.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Condition.h
new file mode 100644
index 00000000000..2bfaeccf840
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Condition.h
@@ -0,0 +1,224 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for describing a condition that must be met for the specified
+ * redirect to apply. For example, 1. If request is for pages in the
+ * <code>/docs</code> folder, redirect to the <code>/documents</code> folder. 2. If
+ * request results in HTTP error 4xx, redirect request to another host where you
+ * might process the error.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Condition">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Condition
+ {
+ public:
+ Condition();
+ Condition(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Condition& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline const Aws::String& GetHttpErrorCodeReturnedEquals() const{ return m_httpErrorCodeReturnedEquals; }
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline bool HttpErrorCodeReturnedEqualsHasBeenSet() const { return m_httpErrorCodeReturnedEqualsHasBeenSet; }
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline void SetHttpErrorCodeReturnedEquals(const Aws::String& value) { m_httpErrorCodeReturnedEqualsHasBeenSet = true; m_httpErrorCodeReturnedEquals = value; }
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline void SetHttpErrorCodeReturnedEquals(Aws::String&& value) { m_httpErrorCodeReturnedEqualsHasBeenSet = true; m_httpErrorCodeReturnedEquals = std::move(value); }
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline void SetHttpErrorCodeReturnedEquals(const char* value) { m_httpErrorCodeReturnedEqualsHasBeenSet = true; m_httpErrorCodeReturnedEquals.assign(value); }
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline Condition& WithHttpErrorCodeReturnedEquals(const Aws::String& value) { SetHttpErrorCodeReturnedEquals(value); return *this;}
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline Condition& WithHttpErrorCodeReturnedEquals(Aws::String&& value) { SetHttpErrorCodeReturnedEquals(std::move(value)); return *this;}
+
+ /**
+ * <p>The HTTP error code when the redirect is applied. In the event of an error,
+ * if the error code equals this value, then the specified redirect is applied.
+ * Required when parent element <code>Condition</code> is specified and sibling
+ * <code>KeyPrefixEquals</code> is not specified. If both are specified, then both
+ * must be true for the redirect to be applied.</p>
+ */
+ inline Condition& WithHttpErrorCodeReturnedEquals(const char* value) { SetHttpErrorCodeReturnedEquals(value); return *this;}
+
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline const Aws::String& GetKeyPrefixEquals() const{ return m_keyPrefixEquals; }
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline bool KeyPrefixEqualsHasBeenSet() const { return m_keyPrefixEqualsHasBeenSet; }
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline void SetKeyPrefixEquals(const Aws::String& value) { m_keyPrefixEqualsHasBeenSet = true; m_keyPrefixEquals = value; }
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline void SetKeyPrefixEquals(Aws::String&& value) { m_keyPrefixEqualsHasBeenSet = true; m_keyPrefixEquals = std::move(value); }
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline void SetKeyPrefixEquals(const char* value) { m_keyPrefixEqualsHasBeenSet = true; m_keyPrefixEquals.assign(value); }
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline Condition& WithKeyPrefixEquals(const Aws::String& value) { SetKeyPrefixEquals(value); return *this;}
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline Condition& WithKeyPrefixEquals(Aws::String&& value) { SetKeyPrefixEquals(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key name prefix when the redirect is applied. For example, to
+ * redirect requests for <code>ExamplePage.html</code>, the key prefix will be
+ * <code>ExamplePage.html</code>. To redirect request for all pages with the prefix
+ * <code>docs/</code>, the key prefix will be <code>/docs</code>, which identifies
+ * all objects in the <code>docs/</code> folder. Required when the parent element
+ * <code>Condition</code> is specified and sibling
+ * <code>HttpErrorCodeReturnedEquals</code> is not specified. If both conditions
+ * are specified, both must be true for the redirect to be applied.</p>
+ */
+ inline Condition& WithKeyPrefixEquals(const char* value) { SetKeyPrefixEquals(value); return *this;}
+
+ private:
+
+ Aws::String m_httpErrorCodeReturnedEquals;
+ bool m_httpErrorCodeReturnedEqualsHasBeenSet;
+
+ Aws::String m_keyPrefixEquals;
+ bool m_keyPrefixEqualsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectRequest.h
new file mode 100644
index 00000000000..d704b0708bb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectRequest.h
@@ -0,0 +1,2487 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/s3/model/ObjectCannedACL.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/s3/model/MetadataDirective.h>
+#include <aws/s3/model/TaggingDirective.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/s3/model/ObjectLockMode.h>
+#include <aws/s3/model/ObjectLockLegalHoldStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API CopyObjectRequest : public S3Request
+ {
+ public:
+ CopyObjectRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "CopyObject"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline const ObjectCannedACL& GetACL() const{ return m_aCL; }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline bool ACLHasBeenSet() const { return m_aCLHasBeenSet; }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetACL(const ObjectCannedACL& value) { m_aCLHasBeenSet = true; m_aCL = value; }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetACL(ObjectCannedACL&& value) { m_aCLHasBeenSet = true; m_aCL = std::move(value); }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithACL(const ObjectCannedACL& value) { SetACL(value); return *this;}
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithACL(ObjectCannedACL&& value) { SetACL(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the destination bucket.</p> <p>When using this API with an access
+ * point, you must direct requests to the access point hostname. The access point
+ * hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline const Aws::String& GetCacheControl() const{ return m_cacheControl; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline bool CacheControlHasBeenSet() const { return m_cacheControlHasBeenSet; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const Aws::String& value) { m_cacheControlHasBeenSet = true; m_cacheControl = value; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(Aws::String&& value) { m_cacheControlHasBeenSet = true; m_cacheControl = std::move(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const char* value) { m_cacheControlHasBeenSet = true; m_cacheControl.assign(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline CopyObjectRequest& WithCacheControl(const Aws::String& value) { SetCacheControl(value); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline CopyObjectRequest& WithCacheControl(Aws::String&& value) { SetCacheControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline CopyObjectRequest& WithCacheControl(const char* value) { SetCacheControl(value); return *this;}
+
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline const Aws::String& GetContentDisposition() const{ return m_contentDisposition; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline bool ContentDispositionHasBeenSet() const { return m_contentDispositionHasBeenSet; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const Aws::String& value) { m_contentDispositionHasBeenSet = true; m_contentDisposition = value; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(Aws::String&& value) { m_contentDispositionHasBeenSet = true; m_contentDisposition = std::move(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const char* value) { m_contentDispositionHasBeenSet = true; m_contentDisposition.assign(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline CopyObjectRequest& WithContentDisposition(const Aws::String& value) { SetContentDisposition(value); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline CopyObjectRequest& WithContentDisposition(Aws::String&& value) { SetContentDisposition(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline CopyObjectRequest& WithContentDisposition(const char* value) { SetContentDisposition(value); return *this;}
+
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline const Aws::String& GetContentEncoding() const{ return m_contentEncoding; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline bool ContentEncodingHasBeenSet() const { return m_contentEncodingHasBeenSet; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const Aws::String& value) { m_contentEncodingHasBeenSet = true; m_contentEncoding = value; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(Aws::String&& value) { m_contentEncodingHasBeenSet = true; m_contentEncoding = std::move(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const char* value) { m_contentEncodingHasBeenSet = true; m_contentEncoding.assign(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline CopyObjectRequest& WithContentEncoding(const Aws::String& value) { SetContentEncoding(value); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline CopyObjectRequest& WithContentEncoding(Aws::String&& value) { SetContentEncoding(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline CopyObjectRequest& WithContentEncoding(const char* value) { SetContentEncoding(value); return *this;}
+
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline const Aws::String& GetContentLanguage() const{ return m_contentLanguage; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline bool ContentLanguageHasBeenSet() const { return m_contentLanguageHasBeenSet; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const Aws::String& value) { m_contentLanguageHasBeenSet = true; m_contentLanguage = value; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(Aws::String&& value) { m_contentLanguageHasBeenSet = true; m_contentLanguage = std::move(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const char* value) { m_contentLanguageHasBeenSet = true; m_contentLanguage.assign(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline CopyObjectRequest& WithContentLanguage(const Aws::String& value) { SetContentLanguage(value); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline CopyObjectRequest& WithContentLanguage(Aws::String&& value) { SetContentLanguage(std::move(value)); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline CopyObjectRequest& WithContentLanguage(const char* value) { SetContentLanguage(value); return *this;}
+
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline const Aws::String& GetContentType() const{ return m_contentType; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline bool ContentTypeHasBeenSet() const { return m_contentTypeHasBeenSet; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const Aws::String& value) { m_contentTypeHasBeenSet = true; m_contentType = value; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(Aws::String&& value) { m_contentTypeHasBeenSet = true; m_contentType = std::move(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const char* value) { m_contentTypeHasBeenSet = true; m_contentType.assign(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline CopyObjectRequest& WithContentType(const Aws::String& value) { SetContentType(value); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline CopyObjectRequest& WithContentType(Aws::String&& value) { SetContentType(std::move(value)); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline CopyObjectRequest& WithContentType(const char* value) { SetContentType(value); return *this;}
+
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline const Aws::String& GetCopySource() const{ return m_copySource; }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline bool CopySourceHasBeenSet() const { return m_copySourceHasBeenSet; }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline void SetCopySource(const Aws::String& value) { m_copySourceHasBeenSet = true; m_copySource = value; }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline void SetCopySource(Aws::String&& value) { m_copySourceHasBeenSet = true; m_copySource = std::move(value); }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline void SetCopySource(const char* value) { m_copySourceHasBeenSet = true; m_copySource.assign(value); }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline CopyObjectRequest& WithCopySource(const Aws::String& value) { SetCopySource(value); return *this;}
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline CopyObjectRequest& WithCopySource(Aws::String&& value) { SetCopySource(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and the key of the source object,
+ * separated by a slash (/). For example, to copy the object
+ * <code>reports/january.pdf</code> from the bucket <code>awsexamplebucket</code>,
+ * use <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline CopyObjectRequest& WithCopySource(const char* value) { SetCopySource(value); return *this;}
+
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline const Aws::String& GetCopySourceIfMatch() const{ return m_copySourceIfMatch; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline bool CopySourceIfMatchHasBeenSet() const { return m_copySourceIfMatchHasBeenSet; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline void SetCopySourceIfMatch(const Aws::String& value) { m_copySourceIfMatchHasBeenSet = true; m_copySourceIfMatch = value; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline void SetCopySourceIfMatch(Aws::String&& value) { m_copySourceIfMatchHasBeenSet = true; m_copySourceIfMatch = std::move(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline void SetCopySourceIfMatch(const char* value) { m_copySourceIfMatchHasBeenSet = true; m_copySourceIfMatch.assign(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfMatch(const Aws::String& value) { SetCopySourceIfMatch(value); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfMatch(Aws::String&& value) { SetCopySourceIfMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfMatch(const char* value) { SetCopySourceIfMatch(value); return *this;}
+
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline const Aws::Utils::DateTime& GetCopySourceIfModifiedSince() const{ return m_copySourceIfModifiedSince; }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline bool CopySourceIfModifiedSinceHasBeenSet() const { return m_copySourceIfModifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfModifiedSince(const Aws::Utils::DateTime& value) { m_copySourceIfModifiedSinceHasBeenSet = true; m_copySourceIfModifiedSince = value; }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfModifiedSince(Aws::Utils::DateTime&& value) { m_copySourceIfModifiedSinceHasBeenSet = true; m_copySourceIfModifiedSince = std::move(value); }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfModifiedSince(const Aws::Utils::DateTime& value) { SetCopySourceIfModifiedSince(value); return *this;}
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfModifiedSince(Aws::Utils::DateTime&& value) { SetCopySourceIfModifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline const Aws::String& GetCopySourceIfNoneMatch() const{ return m_copySourceIfNoneMatch; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline bool CopySourceIfNoneMatchHasBeenSet() const { return m_copySourceIfNoneMatchHasBeenSet; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline void SetCopySourceIfNoneMatch(const Aws::String& value) { m_copySourceIfNoneMatchHasBeenSet = true; m_copySourceIfNoneMatch = value; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline void SetCopySourceIfNoneMatch(Aws::String&& value) { m_copySourceIfNoneMatchHasBeenSet = true; m_copySourceIfNoneMatch = std::move(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline void SetCopySourceIfNoneMatch(const char* value) { m_copySourceIfNoneMatchHasBeenSet = true; m_copySourceIfNoneMatch.assign(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfNoneMatch(const Aws::String& value) { SetCopySourceIfNoneMatch(value); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfNoneMatch(Aws::String&& value) { SetCopySourceIfNoneMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfNoneMatch(const char* value) { SetCopySourceIfNoneMatch(value); return *this;}
+
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline const Aws::Utils::DateTime& GetCopySourceIfUnmodifiedSince() const{ return m_copySourceIfUnmodifiedSince; }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline bool CopySourceIfUnmodifiedSinceHasBeenSet() const { return m_copySourceIfUnmodifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfUnmodifiedSince(const Aws::Utils::DateTime& value) { m_copySourceIfUnmodifiedSinceHasBeenSet = true; m_copySourceIfUnmodifiedSince = value; }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfUnmodifiedSince(Aws::Utils::DateTime&& value) { m_copySourceIfUnmodifiedSinceHasBeenSet = true; m_copySourceIfUnmodifiedSince = std::move(value); }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfUnmodifiedSince(const Aws::Utils::DateTime& value) { SetCopySourceIfUnmodifiedSince(value); return *this;}
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceIfUnmodifiedSince(Aws::Utils::DateTime&& value) { SetCopySourceIfUnmodifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline const Aws::Utils::DateTime& GetExpires() const{ return m_expires; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline bool ExpiresHasBeenSet() const { return m_expiresHasBeenSet; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(const Aws::Utils::DateTime& value) { m_expiresHasBeenSet = true; m_expires = value; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(Aws::Utils::DateTime&& value) { m_expiresHasBeenSet = true; m_expires = std::move(value); }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline CopyObjectRequest& WithExpires(const Aws::Utils::DateTime& value) { SetExpires(value); return *this;}
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline CopyObjectRequest& WithExpires(Aws::Utils::DateTime&& value) { SetExpires(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantFullControl() const{ return m_grantFullControl; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantFullControlHasBeenSet() const { return m_grantFullControlHasBeenSet; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const Aws::String& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = value; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(Aws::String&& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = std::move(value); }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const char* value) { m_grantFullControlHasBeenSet = true; m_grantFullControl.assign(value); }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantFullControl(const Aws::String& value) { SetGrantFullControl(value); return *this;}
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantFullControl(Aws::String&& value) { SetGrantFullControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantFullControl(const char* value) { SetGrantFullControl(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantRead() const{ return m_grantRead; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadHasBeenSet() const { return m_grantReadHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const Aws::String& value) { m_grantReadHasBeenSet = true; m_grantRead = value; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(Aws::String&& value) { m_grantReadHasBeenSet = true; m_grantRead = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const char* value) { m_grantReadHasBeenSet = true; m_grantRead.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantRead(const Aws::String& value) { SetGrantRead(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantRead(Aws::String&& value) { SetGrantRead(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantRead(const char* value) { SetGrantRead(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantReadACP() const{ return m_grantReadACP; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadACPHasBeenSet() const { return m_grantReadACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const Aws::String& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = value; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(Aws::String&& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const char* value) { m_grantReadACPHasBeenSet = true; m_grantReadACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantReadACP(const Aws::String& value) { SetGrantReadACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantReadACP(Aws::String&& value) { SetGrantReadACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantReadACP(const char* value) { SetGrantReadACP(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantWriteACP() const{ return m_grantWriteACP; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantWriteACPHasBeenSet() const { return m_grantWriteACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const Aws::String& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = value; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(Aws::String&& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const char* value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantWriteACP(const Aws::String& value) { SetGrantWriteACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantWriteACP(Aws::String&& value) { SetGrantWriteACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CopyObjectRequest& WithGrantWriteACP(const char* value) { SetGrantWriteACP(value); return *this;}
+
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline CopyObjectRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline CopyObjectRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The key of the destination object.</p>
+ */
+ inline CopyObjectRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline const Aws::Map<Aws::String, Aws::String>& GetMetadata() const{ return m_metadata; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline bool MetadataHasBeenSet() const { return m_metadataHasBeenSet; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(const Aws::Map<Aws::String, Aws::String>& value) { m_metadataHasBeenSet = true; m_metadata = value; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(Aws::Map<Aws::String, Aws::String>&& value) { m_metadataHasBeenSet = true; m_metadata = std::move(value); }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& WithMetadata(const Aws::Map<Aws::String, Aws::String>& value) { SetMetadata(value); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& WithMetadata(Aws::Map<Aws::String, Aws::String>&& value) { SetMetadata(std::move(value)); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& AddMetadata(const Aws::String& key, const Aws::String& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& AddMetadata(Aws::String&& key, const Aws::String& value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& AddMetadata(const Aws::String& key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& AddMetadata(Aws::String&& key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& AddMetadata(const char* key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& AddMetadata(Aws::String&& key, const char* value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CopyObjectRequest& AddMetadata(const char* key, const char* value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, value); return *this; }
+
+
+ /**
+ * <p>Specifies whether the metadata is copied from the source object or replaced
+ * with metadata provided in the request.</p>
+ */
+ inline const MetadataDirective& GetMetadataDirective() const{ return m_metadataDirective; }
+
+ /**
+ * <p>Specifies whether the metadata is copied from the source object or replaced
+ * with metadata provided in the request.</p>
+ */
+ inline bool MetadataDirectiveHasBeenSet() const { return m_metadataDirectiveHasBeenSet; }
+
+ /**
+ * <p>Specifies whether the metadata is copied from the source object or replaced
+ * with metadata provided in the request.</p>
+ */
+ inline void SetMetadataDirective(const MetadataDirective& value) { m_metadataDirectiveHasBeenSet = true; m_metadataDirective = value; }
+
+ /**
+ * <p>Specifies whether the metadata is copied from the source object or replaced
+ * with metadata provided in the request.</p>
+ */
+ inline void SetMetadataDirective(MetadataDirective&& value) { m_metadataDirectiveHasBeenSet = true; m_metadataDirective = std::move(value); }
+
+ /**
+ * <p>Specifies whether the metadata is copied from the source object or replaced
+ * with metadata provided in the request.</p>
+ */
+ inline CopyObjectRequest& WithMetadataDirective(const MetadataDirective& value) { SetMetadataDirective(value); return *this;}
+
+ /**
+ * <p>Specifies whether the metadata is copied from the source object or replaced
+ * with metadata provided in the request.</p>
+ */
+ inline CopyObjectRequest& WithMetadataDirective(MetadataDirective&& value) { SetMetadataDirective(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether the object tag-set are copied from the source object or
+ * replaced with tag-set provided in the request.</p>
+ */
+ inline const TaggingDirective& GetTaggingDirective() const{ return m_taggingDirective; }
+
+ /**
+ * <p>Specifies whether the object tag-set are copied from the source object or
+ * replaced with tag-set provided in the request.</p>
+ */
+ inline bool TaggingDirectiveHasBeenSet() const { return m_taggingDirectiveHasBeenSet; }
+
+ /**
+ * <p>Specifies whether the object tag-set are copied from the source object or
+ * replaced with tag-set provided in the request.</p>
+ */
+ inline void SetTaggingDirective(const TaggingDirective& value) { m_taggingDirectiveHasBeenSet = true; m_taggingDirective = value; }
+
+ /**
+ * <p>Specifies whether the object tag-set are copied from the source object or
+ * replaced with tag-set provided in the request.</p>
+ */
+ inline void SetTaggingDirective(TaggingDirective&& value) { m_taggingDirectiveHasBeenSet = true; m_taggingDirective = std::move(value); }
+
+ /**
+ * <p>Specifies whether the object tag-set are copied from the source object or
+ * replaced with tag-set provided in the request.</p>
+ */
+ inline CopyObjectRequest& WithTaggingDirective(const TaggingDirective& value) { SetTaggingDirective(value); return *this;}
+
+ /**
+ * <p>Specifies whether the object tag-set are copied from the source object or
+ * replaced with tag-set provided in the request.</p>
+ */
+ inline CopyObjectRequest& WithTaggingDirective(TaggingDirective&& value) { SetTaggingDirective(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline bool ServerSideEncryptionHasBeenSet() const { return m_serverSideEncryptionHasBeenSet; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CopyObjectRequest& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CopyObjectRequest& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline const Aws::String& GetWebsiteRedirectLocation() const{ return m_websiteRedirectLocation; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline bool WebsiteRedirectLocationHasBeenSet() const { return m_websiteRedirectLocationHasBeenSet; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const Aws::String& value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation = value; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(Aws::String&& value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation = std::move(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const char* value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation.assign(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline CopyObjectRequest& WithWebsiteRedirectLocation(const Aws::String& value) { SetWebsiteRedirectLocation(value); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline CopyObjectRequest& WithWebsiteRedirectLocation(Aws::String&& value) { SetWebsiteRedirectLocation(std::move(value)); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline CopyObjectRequest& WithWebsiteRedirectLocation(const char* value) { SetWebsiteRedirectLocation(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CopyObjectRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline bool SSEKMSKeyIdHasBeenSet() const { return m_sSEKMSKeyIdHasBeenSet; }
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
+ * requests for an object protected by AWS KMS will fail if not made via SSL or
+ * using SigV4. For information about configuring using any of the officially
+ * supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline CopyObjectRequest& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline const Aws::String& GetSSEKMSEncryptionContext() const{ return m_sSEKMSEncryptionContext; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline bool SSEKMSEncryptionContextHasBeenSet() const { return m_sSEKMSEncryptionContextHasBeenSet; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const Aws::String& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = value; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(Aws::String&& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = std::move(value); }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const char* value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext.assign(value); }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline CopyObjectRequest& WithSSEKMSEncryptionContext(const Aws::String& value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline CopyObjectRequest& WithSSEKMSEncryptionContext(Aws::String&& value) { SetSSEKMSEncryptionContext(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline CopyObjectRequest& WithSSEKMSEncryptionContext(const char* value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS. </p> <p>Specifying this header with a COPY operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS. </p> <p>Specifying this header with a COPY operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline bool BucketKeyEnabledHasBeenSet() const { return m_bucketKeyEnabledHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS. </p> <p>Specifying this header with a COPY operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabledHasBeenSet = true; m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS. </p> <p>Specifying this header with a COPY operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline CopyObjectRequest& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline const Aws::String& GetCopySourceSSECustomerAlgorithm() const{ return m_copySourceSSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline bool CopySourceSSECustomerAlgorithmHasBeenSet() const { return m_copySourceSSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline void SetCopySourceSSECustomerAlgorithm(const Aws::String& value) { m_copySourceSSECustomerAlgorithmHasBeenSet = true; m_copySourceSSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline void SetCopySourceSSECustomerAlgorithm(Aws::String&& value) { m_copySourceSSECustomerAlgorithmHasBeenSet = true; m_copySourceSSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline void SetCopySourceSSECustomerAlgorithm(const char* value) { m_copySourceSSECustomerAlgorithmHasBeenSet = true; m_copySourceSSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerAlgorithm(const Aws::String& value) { SetCopySourceSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerAlgorithm(Aws::String&& value) { SetCopySourceSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerAlgorithm(const char* value) { SetCopySourceSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline const Aws::String& GetCopySourceSSECustomerKey() const{ return m_copySourceSSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline bool CopySourceSSECustomerKeyHasBeenSet() const { return m_copySourceSSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline void SetCopySourceSSECustomerKey(const Aws::String& value) { m_copySourceSSECustomerKeyHasBeenSet = true; m_copySourceSSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline void SetCopySourceSSECustomerKey(Aws::String&& value) { m_copySourceSSECustomerKeyHasBeenSet = true; m_copySourceSSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline void SetCopySourceSSECustomerKey(const char* value) { m_copySourceSSECustomerKeyHasBeenSet = true; m_copySourceSSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerKey(const Aws::String& value) { SetCopySourceSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerKey(Aws::String&& value) { SetCopySourceSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerKey(const char* value) { SetCopySourceSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetCopySourceSSECustomerKeyMD5() const{ return m_copySourceSSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool CopySourceSSECustomerKeyMD5HasBeenSet() const { return m_copySourceSSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetCopySourceSSECustomerKeyMD5(const Aws::String& value) { m_copySourceSSECustomerKeyMD5HasBeenSet = true; m_copySourceSSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetCopySourceSSECustomerKeyMD5(Aws::String&& value) { m_copySourceSSECustomerKeyMD5HasBeenSet = true; m_copySourceSSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetCopySourceSSECustomerKeyMD5(const char* value) { m_copySourceSSECustomerKeyMD5HasBeenSet = true; m_copySourceSSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerKeyMD5(const Aws::String& value) { SetCopySourceSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerKeyMD5(Aws::String&& value) { SetCopySourceSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CopyObjectRequest& WithCopySourceSSECustomerKeyMD5(const char* value) { SetCopySourceSSECustomerKeyMD5(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline CopyObjectRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline CopyObjectRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline const Aws::String& GetTagging() const{ return m_tagging; }
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline bool TaggingHasBeenSet() const { return m_taggingHasBeenSet; }
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline void SetTagging(const Aws::String& value) { m_taggingHasBeenSet = true; m_tagging = value; }
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline void SetTagging(Aws::String&& value) { m_taggingHasBeenSet = true; m_tagging = std::move(value); }
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline void SetTagging(const char* value) { m_taggingHasBeenSet = true; m_tagging.assign(value); }
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline CopyObjectRequest& WithTagging(const Aws::String& value) { SetTagging(value); return *this;}
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline CopyObjectRequest& WithTagging(Aws::String&& value) { SetTagging(std::move(value)); return *this;}
+
+ /**
+ * <p>The tag-set for the object destination object this value must be used in
+ * conjunction with the <code>TaggingDirective</code>. The tag-set must be encoded
+ * as URL Query parameters.</p>
+ */
+ inline CopyObjectRequest& WithTagging(const char* value) { SetTagging(value); return *this;}
+
+
+ /**
+ * <p>The Object Lock mode that you want to apply to the copied object.</p>
+ */
+ inline const ObjectLockMode& GetObjectLockMode() const{ return m_objectLockMode; }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to the copied object.</p>
+ */
+ inline bool ObjectLockModeHasBeenSet() const { return m_objectLockModeHasBeenSet; }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to the copied object.</p>
+ */
+ inline void SetObjectLockMode(const ObjectLockMode& value) { m_objectLockModeHasBeenSet = true; m_objectLockMode = value; }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to the copied object.</p>
+ */
+ inline void SetObjectLockMode(ObjectLockMode&& value) { m_objectLockModeHasBeenSet = true; m_objectLockMode = std::move(value); }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to the copied object.</p>
+ */
+ inline CopyObjectRequest& WithObjectLockMode(const ObjectLockMode& value) { SetObjectLockMode(value); return *this;}
+
+ /**
+ * <p>The Object Lock mode that you want to apply to the copied object.</p>
+ */
+ inline CopyObjectRequest& WithObjectLockMode(ObjectLockMode&& value) { SetObjectLockMode(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The date and time when you want the copied object's Object Lock to
+ * expire.</p>
+ */
+ inline const Aws::Utils::DateTime& GetObjectLockRetainUntilDate() const{ return m_objectLockRetainUntilDate; }
+
+ /**
+ * <p>The date and time when you want the copied object's Object Lock to
+ * expire.</p>
+ */
+ inline bool ObjectLockRetainUntilDateHasBeenSet() const { return m_objectLockRetainUntilDateHasBeenSet; }
+
+ /**
+ * <p>The date and time when you want the copied object's Object Lock to
+ * expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { m_objectLockRetainUntilDateHasBeenSet = true; m_objectLockRetainUntilDate = value; }
+
+ /**
+ * <p>The date and time when you want the copied object's Object Lock to
+ * expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { m_objectLockRetainUntilDateHasBeenSet = true; m_objectLockRetainUntilDate = std::move(value); }
+
+ /**
+ * <p>The date and time when you want the copied object's Object Lock to
+ * expire.</p>
+ */
+ inline CopyObjectRequest& WithObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { SetObjectLockRetainUntilDate(value); return *this;}
+
+ /**
+ * <p>The date and time when you want the copied object's Object Lock to
+ * expire.</p>
+ */
+ inline CopyObjectRequest& WithObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { SetObjectLockRetainUntilDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the copied object.</p>
+ */
+ inline const ObjectLockLegalHoldStatus& GetObjectLockLegalHoldStatus() const{ return m_objectLockLegalHoldStatus; }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the copied object.</p>
+ */
+ inline bool ObjectLockLegalHoldStatusHasBeenSet() const { return m_objectLockLegalHoldStatusHasBeenSet; }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the copied object.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { m_objectLockLegalHoldStatusHasBeenSet = true; m_objectLockLegalHoldStatus = value; }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the copied object.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { m_objectLockLegalHoldStatusHasBeenSet = true; m_objectLockLegalHoldStatus = std::move(value); }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the copied object.</p>
+ */
+ inline CopyObjectRequest& WithObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { SetObjectLockLegalHoldStatus(value); return *this;}
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the copied object.</p>
+ */
+ inline CopyObjectRequest& WithObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { SetObjectLockLegalHoldStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline CopyObjectRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline CopyObjectRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline CopyObjectRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedSourceBucketOwner() const{ return m_expectedSourceBucketOwner; }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline bool ExpectedSourceBucketOwnerHasBeenSet() const { return m_expectedSourceBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedSourceBucketOwner(const Aws::String& value) { m_expectedSourceBucketOwnerHasBeenSet = true; m_expectedSourceBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedSourceBucketOwner(Aws::String&& value) { m_expectedSourceBucketOwnerHasBeenSet = true; m_expectedSourceBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedSourceBucketOwner(const char* value) { m_expectedSourceBucketOwnerHasBeenSet = true; m_expectedSourceBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline CopyObjectRequest& WithExpectedSourceBucketOwner(const Aws::String& value) { SetExpectedSourceBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline CopyObjectRequest& WithExpectedSourceBucketOwner(Aws::String&& value) { SetExpectedSourceBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline CopyObjectRequest& WithExpectedSourceBucketOwner(const char* value) { SetExpectedSourceBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline CopyObjectRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline CopyObjectRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline CopyObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline CopyObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CopyObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CopyObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline CopyObjectRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CopyObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CopyObjectRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ ObjectCannedACL m_aCL;
+ bool m_aCLHasBeenSet;
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_cacheControl;
+ bool m_cacheControlHasBeenSet;
+
+ Aws::String m_contentDisposition;
+ bool m_contentDispositionHasBeenSet;
+
+ Aws::String m_contentEncoding;
+ bool m_contentEncodingHasBeenSet;
+
+ Aws::String m_contentLanguage;
+ bool m_contentLanguageHasBeenSet;
+
+ Aws::String m_contentType;
+ bool m_contentTypeHasBeenSet;
+
+ Aws::String m_copySource;
+ bool m_copySourceHasBeenSet;
+
+ Aws::String m_copySourceIfMatch;
+ bool m_copySourceIfMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_copySourceIfModifiedSince;
+ bool m_copySourceIfModifiedSinceHasBeenSet;
+
+ Aws::String m_copySourceIfNoneMatch;
+ bool m_copySourceIfNoneMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_copySourceIfUnmodifiedSince;
+ bool m_copySourceIfUnmodifiedSinceHasBeenSet;
+
+ Aws::Utils::DateTime m_expires;
+ bool m_expiresHasBeenSet;
+
+ Aws::String m_grantFullControl;
+ bool m_grantFullControlHasBeenSet;
+
+ Aws::String m_grantRead;
+ bool m_grantReadHasBeenSet;
+
+ Aws::String m_grantReadACP;
+ bool m_grantReadACPHasBeenSet;
+
+ Aws::String m_grantWriteACP;
+ bool m_grantWriteACPHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_metadata;
+ bool m_metadataHasBeenSet;
+
+ MetadataDirective m_metadataDirective;
+ bool m_metadataDirectiveHasBeenSet;
+
+ TaggingDirective m_taggingDirective;
+ bool m_taggingDirectiveHasBeenSet;
+
+ ServerSideEncryption m_serverSideEncryption;
+ bool m_serverSideEncryptionHasBeenSet;
+
+ StorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ Aws::String m_websiteRedirectLocation;
+ bool m_websiteRedirectLocationHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ Aws::String m_sSEKMSKeyId;
+ bool m_sSEKMSKeyIdHasBeenSet;
+
+ Aws::String m_sSEKMSEncryptionContext;
+ bool m_sSEKMSEncryptionContextHasBeenSet;
+
+ bool m_bucketKeyEnabled;
+ bool m_bucketKeyEnabledHasBeenSet;
+
+ Aws::String m_copySourceSSECustomerAlgorithm;
+ bool m_copySourceSSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_copySourceSSECustomerKey;
+ bool m_copySourceSSECustomerKeyHasBeenSet;
+
+ Aws::String m_copySourceSSECustomerKeyMD5;
+ bool m_copySourceSSECustomerKeyMD5HasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_tagging;
+ bool m_taggingHasBeenSet;
+
+ ObjectLockMode m_objectLockMode;
+ bool m_objectLockModeHasBeenSet;
+
+ Aws::Utils::DateTime m_objectLockRetainUntilDate;
+ bool m_objectLockRetainUntilDateHasBeenSet;
+
+ ObjectLockLegalHoldStatus m_objectLockLegalHoldStatus;
+ bool m_objectLockLegalHoldStatusHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::String m_expectedSourceBucketOwner;
+ bool m_expectedSourceBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResult.h
new file mode 100644
index 00000000000..386f654c306
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResult.h
@@ -0,0 +1,471 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/s3/model/CopyObjectResultDetails.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API CopyObjectResult
+ {
+ public:
+ CopyObjectResult();
+ CopyObjectResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ CopyObjectResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>If the object expiration is configured, the response includes this
+ * header.</p>
+ */
+ inline const Aws::String& GetExpiration() const{ return m_expiration; }
+
+ /**
+ * <p>If the object expiration is configured, the response includes this
+ * header.</p>
+ */
+ inline void SetExpiration(const Aws::String& value) { m_expiration = value; }
+
+ /**
+ * <p>If the object expiration is configured, the response includes this
+ * header.</p>
+ */
+ inline void SetExpiration(Aws::String&& value) { m_expiration = std::move(value); }
+
+ /**
+ * <p>If the object expiration is configured, the response includes this
+ * header.</p>
+ */
+ inline void SetExpiration(const char* value) { m_expiration.assign(value); }
+
+ /**
+ * <p>If the object expiration is configured, the response includes this
+ * header.</p>
+ */
+ inline CopyObjectResult& WithExpiration(const Aws::String& value) { SetExpiration(value); return *this;}
+
+ /**
+ * <p>If the object expiration is configured, the response includes this
+ * header.</p>
+ */
+ inline CopyObjectResult& WithExpiration(Aws::String&& value) { SetExpiration(std::move(value)); return *this;}
+
+ /**
+ * <p>If the object expiration is configured, the response includes this
+ * header.</p>
+ */
+ inline CopyObjectResult& WithExpiration(const char* value) { SetExpiration(value); return *this;}
+
+
+ /**
+ * <p>Version of the copied object in the destination bucket.</p>
+ */
+ inline const Aws::String& GetCopySourceVersionId() const{ return m_copySourceVersionId; }
+
+ /**
+ * <p>Version of the copied object in the destination bucket.</p>
+ */
+ inline void SetCopySourceVersionId(const Aws::String& value) { m_copySourceVersionId = value; }
+
+ /**
+ * <p>Version of the copied object in the destination bucket.</p>
+ */
+ inline void SetCopySourceVersionId(Aws::String&& value) { m_copySourceVersionId = std::move(value); }
+
+ /**
+ * <p>Version of the copied object in the destination bucket.</p>
+ */
+ inline void SetCopySourceVersionId(const char* value) { m_copySourceVersionId.assign(value); }
+
+ /**
+ * <p>Version of the copied object in the destination bucket.</p>
+ */
+ inline CopyObjectResult& WithCopySourceVersionId(const Aws::String& value) { SetCopySourceVersionId(value); return *this;}
+
+ /**
+ * <p>Version of the copied object in the destination bucket.</p>
+ */
+ inline CopyObjectResult& WithCopySourceVersionId(Aws::String&& value) { SetCopySourceVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version of the copied object in the destination bucket.</p>
+ */
+ inline CopyObjectResult& WithCopySourceVersionId(const char* value) { SetCopySourceVersionId(value); return *this;}
+
+
+ /**
+ * <p>Version ID of the newly created copy.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Version ID of the newly created copy.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>Version ID of the newly created copy.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>Version ID of the newly created copy.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>Version ID of the newly created copy.</p>
+ */
+ inline CopyObjectResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Version ID of the newly created copy.</p>
+ */
+ inline CopyObjectResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version ID of the newly created copy.</p>
+ */
+ inline CopyObjectResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CopyObjectResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CopyObjectResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline CopyObjectResult& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline CopyObjectResult& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline CopyObjectResult& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline CopyObjectResult& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline CopyObjectResult& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline CopyObjectResult& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CopyObjectResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CopyObjectResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CopyObjectResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline const Aws::String& GetSSEKMSEncryptionContext() const{ return m_sSEKMSEncryptionContext; }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const Aws::String& value) { m_sSEKMSEncryptionContext = value; }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(Aws::String&& value) { m_sSEKMSEncryptionContext = std::move(value); }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const char* value) { m_sSEKMSEncryptionContext.assign(value); }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline CopyObjectResult& WithSSEKMSEncryptionContext(const Aws::String& value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline CopyObjectResult& WithSSEKMSEncryptionContext(Aws::String&& value) { SetSSEKMSEncryptionContext(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline CopyObjectResult& WithSSEKMSEncryptionContext(const char* value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the copied object uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the copied object uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the copied object uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline CopyObjectResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline CopyObjectResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline CopyObjectResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline const CopyObjectResultDetails& GetCopyObjectResultDetails() const{ return m_copyObjectResultDetails; }
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline void SetCopyObjectResultDetails(const CopyObjectResultDetails& value) { m_copyObjectResultDetails = value; }
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline void SetCopyObjectResultDetails(CopyObjectResultDetails&& value) { m_copyObjectResultDetails = std::move(value); }
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline CopyObjectResult& WithCopyObjectResultDetails(const CopyObjectResultDetails& value) { SetCopyObjectResultDetails(value); return *this;}
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline CopyObjectResult& WithCopyObjectResultDetails(CopyObjectResultDetails&& value) { SetCopyObjectResultDetails(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_expiration;
+
+ Aws::String m_copySourceVersionId;
+
+ Aws::String m_versionId;
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::String m_sSECustomerAlgorithm;
+
+ Aws::String m_sSECustomerKeyMD5;
+
+ Aws::String m_sSEKMSKeyId;
+
+ Aws::String m_sSEKMSEncryptionContext;
+
+ bool m_bucketKeyEnabled;
+
+ RequestCharged m_requestCharged;
+
+ CopyObjectResultDetails m_copyObjectResultDetails;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResultDetails.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResultDetails.h
new file mode 100644
index 00000000000..9c9c0f47dde
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyObjectResultDetails.h
@@ -0,0 +1,139 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for all response elements.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObjectResult">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CopyObjectResultDetails
+ {
+ public:
+ CopyObjectResultDetails();
+ CopyObjectResultDetails(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CopyObjectResultDetails& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline bool ETagHasBeenSet() const { return m_eTagHasBeenSet; }
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTagHasBeenSet = true; m_eTag = value; }
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTagHasBeenSet = true; m_eTag = std::move(value); }
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline void SetETag(const char* value) { m_eTagHasBeenSet = true; m_eTag.assign(value); }
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline CopyObjectResultDetails& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline CopyObjectResultDetails& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>Returns the ETag of the new object. The ETag reflects only changes to the
+ * contents of an object, not its metadata. The source and destination ETag is
+ * identical for a successfully copied object.</p>
+ */
+ inline CopyObjectResultDetails& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>Returns the date that the object was last modified.</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>Returns the date that the object was last modified.</p>
+ */
+ inline bool LastModifiedHasBeenSet() const { return m_lastModifiedHasBeenSet; }
+
+ /**
+ * <p>Returns the date that the object was last modified.</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModifiedHasBeenSet = true; m_lastModified = value; }
+
+ /**
+ * <p>Returns the date that the object was last modified.</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModifiedHasBeenSet = true; m_lastModified = std::move(value); }
+
+ /**
+ * <p>Returns the date that the object was last modified.</p>
+ */
+ inline CopyObjectResultDetails& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>Returns the date that the object was last modified.</p>
+ */
+ inline CopyObjectResultDetails& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_eTag;
+ bool m_eTagHasBeenSet;
+
+ Aws::Utils::DateTime m_lastModified;
+ bool m_lastModifiedHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyPartResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyPartResult.h
new file mode 100644
index 00000000000..d744384ae20
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CopyPartResult.h
@@ -0,0 +1,123 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for all response elements.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyPartResult">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CopyPartResult
+ {
+ public:
+ CopyPartResult();
+ CopyPartResult(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CopyPartResult& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline bool ETagHasBeenSet() const { return m_eTagHasBeenSet; }
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTagHasBeenSet = true; m_eTag = value; }
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTagHasBeenSet = true; m_eTag = std::move(value); }
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline void SetETag(const char* value) { m_eTagHasBeenSet = true; m_eTag.assign(value); }
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline CopyPartResult& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline CopyPartResult& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>Entity tag of the object.</p>
+ */
+ inline CopyPartResult& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>Date and time at which the object was uploaded.</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>Date and time at which the object was uploaded.</p>
+ */
+ inline bool LastModifiedHasBeenSet() const { return m_lastModifiedHasBeenSet; }
+
+ /**
+ * <p>Date and time at which the object was uploaded.</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModifiedHasBeenSet = true; m_lastModified = value; }
+
+ /**
+ * <p>Date and time at which the object was uploaded.</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModifiedHasBeenSet = true; m_lastModified = std::move(value); }
+
+ /**
+ * <p>Date and time at which the object was uploaded.</p>
+ */
+ inline CopyPartResult& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>Date and time at which the object was uploaded.</p>
+ */
+ inline CopyPartResult& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_eTag;
+ bool m_eTagHasBeenSet;
+
+ Aws::Utils::DateTime m_lastModified;
+ bool m_lastModifiedHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketConfiguration.h
new file mode 100644
index 00000000000..b43d6ea94fe
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketConfiguration.h
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/BucketLocationConstraint.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The configuration information for the bucket.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucketConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API CreateBucketConfiguration
+ {
+ public:
+ CreateBucketConfiguration();
+ CreateBucketConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ CreateBucketConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you don't specify a
+ * Region, the bucket is created in the US East (N. Virginia) Region
+ * (us-east-1).</p>
+ */
+ inline const BucketLocationConstraint& GetLocationConstraint() const{ return m_locationConstraint; }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you don't specify a
+ * Region, the bucket is created in the US East (N. Virginia) Region
+ * (us-east-1).</p>
+ */
+ inline bool LocationConstraintHasBeenSet() const { return m_locationConstraintHasBeenSet; }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you don't specify a
+ * Region, the bucket is created in the US East (N. Virginia) Region
+ * (us-east-1).</p>
+ */
+ inline void SetLocationConstraint(const BucketLocationConstraint& value) { m_locationConstraintHasBeenSet = true; m_locationConstraint = value; }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you don't specify a
+ * Region, the bucket is created in the US East (N. Virginia) Region
+ * (us-east-1).</p>
+ */
+ inline void SetLocationConstraint(BucketLocationConstraint&& value) { m_locationConstraintHasBeenSet = true; m_locationConstraint = std::move(value); }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you don't specify a
+ * Region, the bucket is created in the US East (N. Virginia) Region
+ * (us-east-1).</p>
+ */
+ inline CreateBucketConfiguration& WithLocationConstraint(const BucketLocationConstraint& value) { SetLocationConstraint(value); return *this;}
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you don't specify a
+ * Region, the bucket is created in the US East (N. Virginia) Region
+ * (us-east-1).</p>
+ */
+ inline CreateBucketConfiguration& WithLocationConstraint(BucketLocationConstraint&& value) { SetLocationConstraint(std::move(value)); return *this;}
+
+ private:
+
+ BucketLocationConstraint m_locationConstraint;
+ bool m_locationConstraintHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketRequest.h
new file mode 100644
index 00000000000..ab18fd2bb71
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketRequest.h
@@ -0,0 +1,461 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/s3/model/BucketCannedACL.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/CreateBucketConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API CreateBucketRequest : public S3Request
+ {
+ public:
+ CreateBucketRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "CreateBucket"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline const BucketCannedACL& GetACL() const{ return m_aCL; }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline bool ACLHasBeenSet() const { return m_aCLHasBeenSet; }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline void SetACL(const BucketCannedACL& value) { m_aCLHasBeenSet = true; m_aCL = value; }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline void SetACL(BucketCannedACL&& value) { m_aCLHasBeenSet = true; m_aCL = std::move(value); }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline CreateBucketRequest& WithACL(const BucketCannedACL& value) { SetACL(value); return *this;}
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline CreateBucketRequest& WithACL(BucketCannedACL&& value) { SetACL(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline CreateBucketRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline CreateBucketRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to create.</p>
+ */
+ inline CreateBucketRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The configuration information for the bucket.</p>
+ */
+ inline const CreateBucketConfiguration& GetCreateBucketConfiguration() const{ return m_createBucketConfiguration; }
+
+ /**
+ * <p>The configuration information for the bucket.</p>
+ */
+ inline bool CreateBucketConfigurationHasBeenSet() const { return m_createBucketConfigurationHasBeenSet; }
+
+ /**
+ * <p>The configuration information for the bucket.</p>
+ */
+ inline void SetCreateBucketConfiguration(const CreateBucketConfiguration& value) { m_createBucketConfigurationHasBeenSet = true; m_createBucketConfiguration = value; }
+
+ /**
+ * <p>The configuration information for the bucket.</p>
+ */
+ inline void SetCreateBucketConfiguration(CreateBucketConfiguration&& value) { m_createBucketConfigurationHasBeenSet = true; m_createBucketConfiguration = std::move(value); }
+
+ /**
+ * <p>The configuration information for the bucket.</p>
+ */
+ inline CreateBucketRequest& WithCreateBucketConfiguration(const CreateBucketConfiguration& value) { SetCreateBucketConfiguration(value); return *this;}
+
+ /**
+ * <p>The configuration information for the bucket.</p>
+ */
+ inline CreateBucketRequest& WithCreateBucketConfiguration(CreateBucketConfiguration&& value) { SetCreateBucketConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline const Aws::String& GetGrantFullControl() const{ return m_grantFullControl; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline bool GrantFullControlHasBeenSet() const { return m_grantFullControlHasBeenSet; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline void SetGrantFullControl(const Aws::String& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = value; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline void SetGrantFullControl(Aws::String&& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = std::move(value); }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline void SetGrantFullControl(const char* value) { m_grantFullControlHasBeenSet = true; m_grantFullControl.assign(value); }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantFullControl(const Aws::String& value) { SetGrantFullControl(value); return *this;}
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantFullControl(Aws::String&& value) { SetGrantFullControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantFullControl(const char* value) { SetGrantFullControl(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline const Aws::String& GetGrantRead() const{ return m_grantRead; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline bool GrantReadHasBeenSet() const { return m_grantReadHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline void SetGrantRead(const Aws::String& value) { m_grantReadHasBeenSet = true; m_grantRead = value; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline void SetGrantRead(Aws::String&& value) { m_grantReadHasBeenSet = true; m_grantRead = std::move(value); }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline void SetGrantRead(const char* value) { m_grantReadHasBeenSet = true; m_grantRead.assign(value); }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantRead(const Aws::String& value) { SetGrantRead(value); return *this;}
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantRead(Aws::String&& value) { SetGrantRead(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantRead(const char* value) { SetGrantRead(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline const Aws::String& GetGrantReadACP() const{ return m_grantReadACP; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline bool GrantReadACPHasBeenSet() const { return m_grantReadACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline void SetGrantReadACP(const Aws::String& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = value; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline void SetGrantReadACP(Aws::String&& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline void SetGrantReadACP(const char* value) { m_grantReadACPHasBeenSet = true; m_grantReadACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline CreateBucketRequest& WithGrantReadACP(const Aws::String& value) { SetGrantReadACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline CreateBucketRequest& WithGrantReadACP(Aws::String&& value) { SetGrantReadACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline CreateBucketRequest& WithGrantReadACP(const char* value) { SetGrantReadACP(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline const Aws::String& GetGrantWrite() const{ return m_grantWrite; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline bool GrantWriteHasBeenSet() const { return m_grantWriteHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(const Aws::String& value) { m_grantWriteHasBeenSet = true; m_grantWrite = value; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(Aws::String&& value) { m_grantWriteHasBeenSet = true; m_grantWrite = std::move(value); }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(const char* value) { m_grantWriteHasBeenSet = true; m_grantWrite.assign(value); }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantWrite(const Aws::String& value) { SetGrantWrite(value); return *this;}
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantWrite(Aws::String&& value) { SetGrantWrite(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantWrite(const char* value) { SetGrantWrite(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline const Aws::String& GetGrantWriteACP() const{ return m_grantWriteACP; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline bool GrantWriteACPHasBeenSet() const { return m_grantWriteACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline void SetGrantWriteACP(const Aws::String& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = value; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline void SetGrantWriteACP(Aws::String&& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline void SetGrantWriteACP(const char* value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantWriteACP(const Aws::String& value) { SetGrantWriteACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantWriteACP(Aws::String&& value) { SetGrantWriteACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline CreateBucketRequest& WithGrantWriteACP(const char* value) { SetGrantWriteACP(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether you want S3 Object Lock to be enabled for the new
+ * bucket.</p>
+ */
+ inline bool GetObjectLockEnabledForBucket() const{ return m_objectLockEnabledForBucket; }
+
+ /**
+ * <p>Specifies whether you want S3 Object Lock to be enabled for the new
+ * bucket.</p>
+ */
+ inline bool ObjectLockEnabledForBucketHasBeenSet() const { return m_objectLockEnabledForBucketHasBeenSet; }
+
+ /**
+ * <p>Specifies whether you want S3 Object Lock to be enabled for the new
+ * bucket.</p>
+ */
+ inline void SetObjectLockEnabledForBucket(bool value) { m_objectLockEnabledForBucketHasBeenSet = true; m_objectLockEnabledForBucket = value; }
+
+ /**
+ * <p>Specifies whether you want S3 Object Lock to be enabled for the new
+ * bucket.</p>
+ */
+ inline CreateBucketRequest& WithObjectLockEnabledForBucket(bool value) { SetObjectLockEnabledForBucket(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline CreateBucketRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline CreateBucketRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline CreateBucketRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline CreateBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CreateBucketRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CreateBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline CreateBucketRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CreateBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CreateBucketRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ BucketCannedACL m_aCL;
+ bool m_aCLHasBeenSet;
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ CreateBucketConfiguration m_createBucketConfiguration;
+ bool m_createBucketConfigurationHasBeenSet;
+
+ Aws::String m_grantFullControl;
+ bool m_grantFullControlHasBeenSet;
+
+ Aws::String m_grantRead;
+ bool m_grantReadHasBeenSet;
+
+ Aws::String m_grantReadACP;
+ bool m_grantReadACPHasBeenSet;
+
+ Aws::String m_grantWrite;
+ bool m_grantWriteHasBeenSet;
+
+ Aws::String m_grantWriteACP;
+ bool m_grantWriteACPHasBeenSet;
+
+ bool m_objectLockEnabledForBucket;
+ bool m_objectLockEnabledForBucketHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketResult.h
new file mode 100644
index 00000000000..fb295991795
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateBucketResult.h
@@ -0,0 +1,91 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API CreateBucketResult
+ {
+ public:
+ CreateBucketResult();
+ CreateBucketResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ CreateBucketResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you are creating a
+ * bucket on the US East (N. Virginia) Region (us-east-1), you do not need to
+ * specify the location.</p>
+ */
+ inline const Aws::String& GetLocation() const{ return m_location; }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you are creating a
+ * bucket on the US East (N. Virginia) Region (us-east-1), you do not need to
+ * specify the location.</p>
+ */
+ inline void SetLocation(const Aws::String& value) { m_location = value; }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you are creating a
+ * bucket on the US East (N. Virginia) Region (us-east-1), you do not need to
+ * specify the location.</p>
+ */
+ inline void SetLocation(Aws::String&& value) { m_location = std::move(value); }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you are creating a
+ * bucket on the US East (N. Virginia) Region (us-east-1), you do not need to
+ * specify the location.</p>
+ */
+ inline void SetLocation(const char* value) { m_location.assign(value); }
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you are creating a
+ * bucket on the US East (N. Virginia) Region (us-east-1), you do not need to
+ * specify the location.</p>
+ */
+ inline CreateBucketResult& WithLocation(const Aws::String& value) { SetLocation(value); return *this;}
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you are creating a
+ * bucket on the US East (N. Virginia) Region (us-east-1), you do not need to
+ * specify the location.</p>
+ */
+ inline CreateBucketResult& WithLocation(Aws::String&& value) { SetLocation(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the Region where the bucket will be created. If you are creating a
+ * bucket on the US East (N. Virginia) Region (us-east-1), you do not need to
+ * specify the location.</p>
+ */
+ inline CreateBucketResult& WithLocation(const char* value) { SetLocation(value); return *this;}
+
+ private:
+
+ Aws::String m_location;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadRequest.h
new file mode 100644
index 00000000000..0a5608dff50
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadRequest.h
@@ -0,0 +1,1709 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/s3/model/ObjectCannedACL.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/s3/model/ObjectLockMode.h>
+#include <aws/s3/model/ObjectLockLegalHoldStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API CreateMultipartUploadRequest : public S3Request
+ {
+ public:
+ CreateMultipartUploadRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "CreateMultipartUpload"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline const ObjectCannedACL& GetACL() const{ return m_aCL; }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline bool ACLHasBeenSet() const { return m_aCLHasBeenSet; }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetACL(const ObjectCannedACL& value) { m_aCLHasBeenSet = true; m_aCL = value; }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetACL(ObjectCannedACL&& value) { m_aCLHasBeenSet = true; m_aCL = std::move(value); }
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithACL(const ObjectCannedACL& value) { SetACL(value); return *this;}
+
+ /**
+ * <p>The canned ACL to apply to the object.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithACL(ObjectCannedACL&& value) { SetACL(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which to initiate the upload</p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline const Aws::String& GetCacheControl() const{ return m_cacheControl; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline bool CacheControlHasBeenSet() const { return m_cacheControlHasBeenSet; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const Aws::String& value) { m_cacheControlHasBeenSet = true; m_cacheControl = value; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(Aws::String&& value) { m_cacheControlHasBeenSet = true; m_cacheControl = std::move(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const char* value) { m_cacheControlHasBeenSet = true; m_cacheControl.assign(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline CreateMultipartUploadRequest& WithCacheControl(const Aws::String& value) { SetCacheControl(value); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline CreateMultipartUploadRequest& WithCacheControl(Aws::String&& value) { SetCacheControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline CreateMultipartUploadRequest& WithCacheControl(const char* value) { SetCacheControl(value); return *this;}
+
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline const Aws::String& GetContentDisposition() const{ return m_contentDisposition; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline bool ContentDispositionHasBeenSet() const { return m_contentDispositionHasBeenSet; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const Aws::String& value) { m_contentDispositionHasBeenSet = true; m_contentDisposition = value; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(Aws::String&& value) { m_contentDispositionHasBeenSet = true; m_contentDisposition = std::move(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const char* value) { m_contentDispositionHasBeenSet = true; m_contentDisposition.assign(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentDisposition(const Aws::String& value) { SetContentDisposition(value); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentDisposition(Aws::String&& value) { SetContentDisposition(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentDisposition(const char* value) { SetContentDisposition(value); return *this;}
+
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline const Aws::String& GetContentEncoding() const{ return m_contentEncoding; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline bool ContentEncodingHasBeenSet() const { return m_contentEncodingHasBeenSet; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const Aws::String& value) { m_contentEncodingHasBeenSet = true; m_contentEncoding = value; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(Aws::String&& value) { m_contentEncodingHasBeenSet = true; m_contentEncoding = std::move(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const char* value) { m_contentEncodingHasBeenSet = true; m_contentEncoding.assign(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentEncoding(const Aws::String& value) { SetContentEncoding(value); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentEncoding(Aws::String&& value) { SetContentEncoding(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentEncoding(const char* value) { SetContentEncoding(value); return *this;}
+
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline const Aws::String& GetContentLanguage() const{ return m_contentLanguage; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline bool ContentLanguageHasBeenSet() const { return m_contentLanguageHasBeenSet; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const Aws::String& value) { m_contentLanguageHasBeenSet = true; m_contentLanguage = value; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(Aws::String&& value) { m_contentLanguageHasBeenSet = true; m_contentLanguage = std::move(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const char* value) { m_contentLanguageHasBeenSet = true; m_contentLanguage.assign(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentLanguage(const Aws::String& value) { SetContentLanguage(value); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentLanguage(Aws::String&& value) { SetContentLanguage(std::move(value)); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentLanguage(const char* value) { SetContentLanguage(value); return *this;}
+
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline const Aws::String& GetContentType() const{ return m_contentType; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline bool ContentTypeHasBeenSet() const { return m_contentTypeHasBeenSet; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const Aws::String& value) { m_contentTypeHasBeenSet = true; m_contentType = value; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(Aws::String&& value) { m_contentTypeHasBeenSet = true; m_contentType = std::move(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const char* value) { m_contentTypeHasBeenSet = true; m_contentType.assign(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentType(const Aws::String& value) { SetContentType(value); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentType(Aws::String&& value) { SetContentType(std::move(value)); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline CreateMultipartUploadRequest& WithContentType(const char* value) { SetContentType(value); return *this;}
+
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline const Aws::Utils::DateTime& GetExpires() const{ return m_expires; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline bool ExpiresHasBeenSet() const { return m_expiresHasBeenSet; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(const Aws::Utils::DateTime& value) { m_expiresHasBeenSet = true; m_expires = value; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(Aws::Utils::DateTime&& value) { m_expiresHasBeenSet = true; m_expires = std::move(value); }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline CreateMultipartUploadRequest& WithExpires(const Aws::Utils::DateTime& value) { SetExpires(value); return *this;}
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline CreateMultipartUploadRequest& WithExpires(Aws::Utils::DateTime&& value) { SetExpires(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantFullControl() const{ return m_grantFullControl; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantFullControlHasBeenSet() const { return m_grantFullControlHasBeenSet; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const Aws::String& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = value; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(Aws::String&& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = std::move(value); }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const char* value) { m_grantFullControlHasBeenSet = true; m_grantFullControl.assign(value); }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantFullControl(const Aws::String& value) { SetGrantFullControl(value); return *this;}
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantFullControl(Aws::String&& value) { SetGrantFullControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantFullControl(const char* value) { SetGrantFullControl(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantRead() const{ return m_grantRead; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadHasBeenSet() const { return m_grantReadHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const Aws::String& value) { m_grantReadHasBeenSet = true; m_grantRead = value; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(Aws::String&& value) { m_grantReadHasBeenSet = true; m_grantRead = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const char* value) { m_grantReadHasBeenSet = true; m_grantRead.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantRead(const Aws::String& value) { SetGrantRead(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantRead(Aws::String&& value) { SetGrantRead(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantRead(const char* value) { SetGrantRead(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantReadACP() const{ return m_grantReadACP; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadACPHasBeenSet() const { return m_grantReadACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const Aws::String& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = value; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(Aws::String&& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const char* value) { m_grantReadACPHasBeenSet = true; m_grantReadACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantReadACP(const Aws::String& value) { SetGrantReadACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantReadACP(Aws::String&& value) { SetGrantReadACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantReadACP(const char* value) { SetGrantReadACP(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantWriteACP() const{ return m_grantWriteACP; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantWriteACPHasBeenSet() const { return m_grantWriteACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const Aws::String& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = value; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(Aws::String&& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const char* value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantWriteACP(const Aws::String& value) { SetGrantWriteACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantWriteACP(Aws::String&& value) { SetGrantWriteACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline CreateMultipartUploadRequest& WithGrantWriteACP(const char* value) { SetGrantWriteACP(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline CreateMultipartUploadRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline CreateMultipartUploadRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload is to be initiated.</p>
+ */
+ inline CreateMultipartUploadRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline const Aws::Map<Aws::String, Aws::String>& GetMetadata() const{ return m_metadata; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline bool MetadataHasBeenSet() const { return m_metadataHasBeenSet; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(const Aws::Map<Aws::String, Aws::String>& value) { m_metadataHasBeenSet = true; m_metadata = value; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(Aws::Map<Aws::String, Aws::String>&& value) { m_metadataHasBeenSet = true; m_metadata = std::move(value); }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& WithMetadata(const Aws::Map<Aws::String, Aws::String>& value) { SetMetadata(value); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& WithMetadata(Aws::Map<Aws::String, Aws::String>&& value) { SetMetadata(std::move(value)); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& AddMetadata(const Aws::String& key, const Aws::String& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& AddMetadata(Aws::String&& key, const Aws::String& value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& AddMetadata(const Aws::String& key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& AddMetadata(Aws::String&& key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& AddMetadata(const char* key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& AddMetadata(Aws::String&& key, const char* value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline CreateMultipartUploadRequest& AddMetadata(const char* key, const char* value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, value); return *this; }
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline bool ServerSideEncryptionHasBeenSet() const { return m_serverSideEncryptionHasBeenSet; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CreateMultipartUploadRequest& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CreateMultipartUploadRequest& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline const Aws::String& GetWebsiteRedirectLocation() const{ return m_websiteRedirectLocation; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline bool WebsiteRedirectLocationHasBeenSet() const { return m_websiteRedirectLocationHasBeenSet; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const Aws::String& value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation = value; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(Aws::String&& value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation = std::move(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const char* value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation.assign(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline CreateMultipartUploadRequest& WithWebsiteRedirectLocation(const Aws::String& value) { SetWebsiteRedirectLocation(value); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline CreateMultipartUploadRequest& WithWebsiteRedirectLocation(Aws::String&& value) { SetWebsiteRedirectLocation(std::move(value)); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline CreateMultipartUploadRequest& WithWebsiteRedirectLocation(const char* value) { SetWebsiteRedirectLocation(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline bool SSEKMSKeyIdHasBeenSet() const { return m_sSEKMSKeyIdHasBeenSet; }
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the ID of the symmetric customer managed AWS KMS CMK to use for
+ * object encryption. All GET and PUT requests for an object protected by AWS KMS
+ * will fail if not made via SSL or using SigV4. For information about configuring
+ * using any of the officially supported AWS SDKs and AWS CLI, see <a
+ * href="https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version">Specifying
+ * the Signature Version in Request Authentication</a> in the <i>Amazon S3
+ * Developer Guide</i>.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline const Aws::String& GetSSEKMSEncryptionContext() const{ return m_sSEKMSEncryptionContext; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline bool SSEKMSEncryptionContextHasBeenSet() const { return m_sSEKMSEncryptionContextHasBeenSet; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const Aws::String& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = value; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(Aws::String&& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = std::move(value); }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const char* value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext.assign(value); }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSEKMSEncryptionContext(const Aws::String& value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSEKMSEncryptionContext(Aws::String&& value) { SetSSEKMSEncryptionContext(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline CreateMultipartUploadRequest& WithSSEKMSEncryptionContext(const char* value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with an object operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with an object operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline bool BucketKeyEnabledHasBeenSet() const { return m_bucketKeyEnabledHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with an object operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabledHasBeenSet = true; m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with an object operation doesn’t
+ * affect bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline CreateMultipartUploadRequest& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline CreateMultipartUploadRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline CreateMultipartUploadRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline const Aws::String& GetTagging() const{ return m_tagging; }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline bool TaggingHasBeenSet() const { return m_taggingHasBeenSet; }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline void SetTagging(const Aws::String& value) { m_taggingHasBeenSet = true; m_tagging = value; }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline void SetTagging(Aws::String&& value) { m_taggingHasBeenSet = true; m_tagging = std::move(value); }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline void SetTagging(const char* value) { m_taggingHasBeenSet = true; m_tagging.assign(value); }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline CreateMultipartUploadRequest& WithTagging(const Aws::String& value) { SetTagging(value); return *this;}
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline CreateMultipartUploadRequest& WithTagging(Aws::String&& value) { SetTagging(std::move(value)); return *this;}
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters.</p>
+ */
+ inline CreateMultipartUploadRequest& WithTagging(const char* value) { SetTagging(value); return *this;}
+
+
+ /**
+ * <p>Specifies the Object Lock mode that you want to apply to the uploaded
+ * object.</p>
+ */
+ inline const ObjectLockMode& GetObjectLockMode() const{ return m_objectLockMode; }
+
+ /**
+ * <p>Specifies the Object Lock mode that you want to apply to the uploaded
+ * object.</p>
+ */
+ inline bool ObjectLockModeHasBeenSet() const { return m_objectLockModeHasBeenSet; }
+
+ /**
+ * <p>Specifies the Object Lock mode that you want to apply to the uploaded
+ * object.</p>
+ */
+ inline void SetObjectLockMode(const ObjectLockMode& value) { m_objectLockModeHasBeenSet = true; m_objectLockMode = value; }
+
+ /**
+ * <p>Specifies the Object Lock mode that you want to apply to the uploaded
+ * object.</p>
+ */
+ inline void SetObjectLockMode(ObjectLockMode&& value) { m_objectLockModeHasBeenSet = true; m_objectLockMode = std::move(value); }
+
+ /**
+ * <p>Specifies the Object Lock mode that you want to apply to the uploaded
+ * object.</p>
+ */
+ inline CreateMultipartUploadRequest& WithObjectLockMode(const ObjectLockMode& value) { SetObjectLockMode(value); return *this;}
+
+ /**
+ * <p>Specifies the Object Lock mode that you want to apply to the uploaded
+ * object.</p>
+ */
+ inline CreateMultipartUploadRequest& WithObjectLockMode(ObjectLockMode&& value) { SetObjectLockMode(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the date and time when you want the Object Lock to expire.</p>
+ */
+ inline const Aws::Utils::DateTime& GetObjectLockRetainUntilDate() const{ return m_objectLockRetainUntilDate; }
+
+ /**
+ * <p>Specifies the date and time when you want the Object Lock to expire.</p>
+ */
+ inline bool ObjectLockRetainUntilDateHasBeenSet() const { return m_objectLockRetainUntilDateHasBeenSet; }
+
+ /**
+ * <p>Specifies the date and time when you want the Object Lock to expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { m_objectLockRetainUntilDateHasBeenSet = true; m_objectLockRetainUntilDate = value; }
+
+ /**
+ * <p>Specifies the date and time when you want the Object Lock to expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { m_objectLockRetainUntilDateHasBeenSet = true; m_objectLockRetainUntilDate = std::move(value); }
+
+ /**
+ * <p>Specifies the date and time when you want the Object Lock to expire.</p>
+ */
+ inline CreateMultipartUploadRequest& WithObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { SetObjectLockRetainUntilDate(value); return *this;}
+
+ /**
+ * <p>Specifies the date and time when you want the Object Lock to expire.</p>
+ */
+ inline CreateMultipartUploadRequest& WithObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { SetObjectLockRetainUntilDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the uploaded object.</p>
+ */
+ inline const ObjectLockLegalHoldStatus& GetObjectLockLegalHoldStatus() const{ return m_objectLockLegalHoldStatus; }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the uploaded object.</p>
+ */
+ inline bool ObjectLockLegalHoldStatusHasBeenSet() const { return m_objectLockLegalHoldStatusHasBeenSet; }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the uploaded object.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { m_objectLockLegalHoldStatusHasBeenSet = true; m_objectLockLegalHoldStatus = value; }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the uploaded object.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { m_objectLockLegalHoldStatusHasBeenSet = true; m_objectLockLegalHoldStatus = std::move(value); }
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the uploaded object.</p>
+ */
+ inline CreateMultipartUploadRequest& WithObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { SetObjectLockLegalHoldStatus(value); return *this;}
+
+ /**
+ * <p>Specifies whether you want to apply a Legal Hold to the uploaded object.</p>
+ */
+ inline CreateMultipartUploadRequest& WithObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { SetObjectLockLegalHoldStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline CreateMultipartUploadRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline CreateMultipartUploadRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline CreateMultipartUploadRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline CreateMultipartUploadRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline CreateMultipartUploadRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline CreateMultipartUploadRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline CreateMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CreateMultipartUploadRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CreateMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline CreateMultipartUploadRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline CreateMultipartUploadRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline CreateMultipartUploadRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ ObjectCannedACL m_aCL;
+ bool m_aCLHasBeenSet;
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_cacheControl;
+ bool m_cacheControlHasBeenSet;
+
+ Aws::String m_contentDisposition;
+ bool m_contentDispositionHasBeenSet;
+
+ Aws::String m_contentEncoding;
+ bool m_contentEncodingHasBeenSet;
+
+ Aws::String m_contentLanguage;
+ bool m_contentLanguageHasBeenSet;
+
+ Aws::String m_contentType;
+ bool m_contentTypeHasBeenSet;
+
+ Aws::Utils::DateTime m_expires;
+ bool m_expiresHasBeenSet;
+
+ Aws::String m_grantFullControl;
+ bool m_grantFullControlHasBeenSet;
+
+ Aws::String m_grantRead;
+ bool m_grantReadHasBeenSet;
+
+ Aws::String m_grantReadACP;
+ bool m_grantReadACPHasBeenSet;
+
+ Aws::String m_grantWriteACP;
+ bool m_grantWriteACPHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_metadata;
+ bool m_metadataHasBeenSet;
+
+ ServerSideEncryption m_serverSideEncryption;
+ bool m_serverSideEncryptionHasBeenSet;
+
+ StorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ Aws::String m_websiteRedirectLocation;
+ bool m_websiteRedirectLocationHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ Aws::String m_sSEKMSKeyId;
+ bool m_sSEKMSKeyIdHasBeenSet;
+
+ Aws::String m_sSEKMSEncryptionContext;
+ bool m_sSEKMSEncryptionContextHasBeenSet;
+
+ bool m_bucketKeyEnabled;
+ bool m_bucketKeyEnabledHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_tagging;
+ bool m_taggingHasBeenSet;
+
+ ObjectLockMode m_objectLockMode;
+ bool m_objectLockModeHasBeenSet;
+
+ Aws::Utils::DateTime m_objectLockRetainUntilDate;
+ bool m_objectLockRetainUntilDateHasBeenSet;
+
+ ObjectLockLegalHoldStatus m_objectLockLegalHoldStatus;
+ bool m_objectLockLegalHoldStatusHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadResult.h
new file mode 100644
index 00000000000..f4692da0e81
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/CreateMultipartUploadResult.h
@@ -0,0 +1,687 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API CreateMultipartUploadResult
+ {
+ public:
+ CreateMultipartUploadResult();
+ CreateMultipartUploadResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ CreateMultipartUploadResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, the response includes this header. The header
+ * indicates when the initiated multipart upload becomes eligible for an abort
+ * operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">
+ * Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p>
+ * <p>The response also includes the <code>x-amz-abort-rule-id</code> header that
+ * provides the ID of the lifecycle configuration rule that defines this
+ * action.</p>
+ */
+ inline const Aws::Utils::DateTime& GetAbortDate() const{ return m_abortDate; }
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, the response includes this header. The header
+ * indicates when the initiated multipart upload becomes eligible for an abort
+ * operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">
+ * Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p>
+ * <p>The response also includes the <code>x-amz-abort-rule-id</code> header that
+ * provides the ID of the lifecycle configuration rule that defines this
+ * action.</p>
+ */
+ inline void SetAbortDate(const Aws::Utils::DateTime& value) { m_abortDate = value; }
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, the response includes this header. The header
+ * indicates when the initiated multipart upload becomes eligible for an abort
+ * operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">
+ * Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p>
+ * <p>The response also includes the <code>x-amz-abort-rule-id</code> header that
+ * provides the ID of the lifecycle configuration rule that defines this
+ * action.</p>
+ */
+ inline void SetAbortDate(Aws::Utils::DateTime&& value) { m_abortDate = std::move(value); }
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, the response includes this header. The header
+ * indicates when the initiated multipart upload becomes eligible for an abort
+ * operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">
+ * Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p>
+ * <p>The response also includes the <code>x-amz-abort-rule-id</code> header that
+ * provides the ID of the lifecycle configuration rule that defines this
+ * action.</p>
+ */
+ inline CreateMultipartUploadResult& WithAbortDate(const Aws::Utils::DateTime& value) { SetAbortDate(value); return *this;}
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, the response includes this header. The header
+ * indicates when the initiated multipart upload becomes eligible for an abort
+ * operation. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">
+ * Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p>
+ * <p>The response also includes the <code>x-amz-abort-rule-id</code> header that
+ * provides the ID of the lifecycle configuration rule that defines this
+ * action.</p>
+ */
+ inline CreateMultipartUploadResult& WithAbortDate(Aws::Utils::DateTime&& value) { SetAbortDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies the applicable lifecycle configuration rule that defines the
+ * action to abort incomplete multipart uploads.</p>
+ */
+ inline const Aws::String& GetAbortRuleId() const{ return m_abortRuleId; }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies the applicable lifecycle configuration rule that defines the
+ * action to abort incomplete multipart uploads.</p>
+ */
+ inline void SetAbortRuleId(const Aws::String& value) { m_abortRuleId = value; }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies the applicable lifecycle configuration rule that defines the
+ * action to abort incomplete multipart uploads.</p>
+ */
+ inline void SetAbortRuleId(Aws::String&& value) { m_abortRuleId = std::move(value); }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies the applicable lifecycle configuration rule that defines the
+ * action to abort incomplete multipart uploads.</p>
+ */
+ inline void SetAbortRuleId(const char* value) { m_abortRuleId.assign(value); }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies the applicable lifecycle configuration rule that defines the
+ * action to abort incomplete multipart uploads.</p>
+ */
+ inline CreateMultipartUploadResult& WithAbortRuleId(const Aws::String& value) { SetAbortRuleId(value); return *this;}
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies the applicable lifecycle configuration rule that defines the
+ * action to abort incomplete multipart uploads.</p>
+ */
+ inline CreateMultipartUploadResult& WithAbortRuleId(Aws::String&& value) { SetAbortRuleId(std::move(value)); return *this;}
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies the applicable lifecycle configuration rule that defines the
+ * action to abort incomplete multipart uploads.</p>
+ */
+ inline CreateMultipartUploadResult& WithAbortRuleId(const char* value) { SetAbortRuleId(value); return *this;}
+
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CreateMultipartUploadResult& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CreateMultipartUploadResult& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline CreateMultipartUploadResult& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_key = value; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline CreateMultipartUploadResult& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline CreateMultipartUploadResult& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline CreateMultipartUploadResult& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadId = value; }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadId = std::move(value); }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadId.assign(value); }
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline CreateMultipartUploadResult& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline CreateMultipartUploadResult& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>ID for the initiated multipart upload.</p>
+ */
+ inline CreateMultipartUploadResult& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CreateMultipartUploadResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline CreateMultipartUploadResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline const Aws::String& GetSSEKMSEncryptionContext() const{ return m_sSEKMSEncryptionContext; }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const Aws::String& value) { m_sSEKMSEncryptionContext = value; }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(Aws::String&& value) { m_sSEKMSEncryptionContext = std::move(value); }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const char* value) { m_sSEKMSEncryptionContext.assign(value); }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSEKMSEncryptionContext(const Aws::String& value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSEKMSEncryptionContext(Aws::String&& value) { SetSSEKMSEncryptionContext(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline CreateMultipartUploadResult& WithSSEKMSEncryptionContext(const char* value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline CreateMultipartUploadResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline CreateMultipartUploadResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline CreateMultipartUploadResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ Aws::Utils::DateTime m_abortDate;
+
+ Aws::String m_abortRuleId;
+
+ Aws::String m_bucket;
+
+ Aws::String m_key;
+
+ Aws::String m_uploadId;
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::String m_sSECustomerAlgorithm;
+
+ Aws::String m_sSECustomerKeyMD5;
+
+ Aws::String m_sSEKMSKeyId;
+
+ Aws::String m_sSEKMSEncryptionContext;
+
+ bool m_bucketKeyEnabled;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DefaultRetention.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DefaultRetention.h
new file mode 100644
index 00000000000..a8e3c5db657
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DefaultRetention.h
@@ -0,0 +1,142 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectLockRetentionMode.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The container element for specifying the default Object Lock retention
+ * settings for new objects placed in the specified bucket.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DefaultRetention">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API DefaultRetention
+ {
+ public:
+ DefaultRetention();
+ DefaultRetention(const Aws::Utils::Xml::XmlNode& xmlNode);
+ DefaultRetention& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The default Object Lock retention mode you want to apply to new objects
+ * placed in the specified bucket.</p>
+ */
+ inline const ObjectLockRetentionMode& GetMode() const{ return m_mode; }
+
+ /**
+ * <p>The default Object Lock retention mode you want to apply to new objects
+ * placed in the specified bucket.</p>
+ */
+ inline bool ModeHasBeenSet() const { return m_modeHasBeenSet; }
+
+ /**
+ * <p>The default Object Lock retention mode you want to apply to new objects
+ * placed in the specified bucket.</p>
+ */
+ inline void SetMode(const ObjectLockRetentionMode& value) { m_modeHasBeenSet = true; m_mode = value; }
+
+ /**
+ * <p>The default Object Lock retention mode you want to apply to new objects
+ * placed in the specified bucket.</p>
+ */
+ inline void SetMode(ObjectLockRetentionMode&& value) { m_modeHasBeenSet = true; m_mode = std::move(value); }
+
+ /**
+ * <p>The default Object Lock retention mode you want to apply to new objects
+ * placed in the specified bucket.</p>
+ */
+ inline DefaultRetention& WithMode(const ObjectLockRetentionMode& value) { SetMode(value); return *this;}
+
+ /**
+ * <p>The default Object Lock retention mode you want to apply to new objects
+ * placed in the specified bucket.</p>
+ */
+ inline DefaultRetention& WithMode(ObjectLockRetentionMode&& value) { SetMode(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The number of days that you want to specify for the default retention
+ * period.</p>
+ */
+ inline int GetDays() const{ return m_days; }
+
+ /**
+ * <p>The number of days that you want to specify for the default retention
+ * period.</p>
+ */
+ inline bool DaysHasBeenSet() const { return m_daysHasBeenSet; }
+
+ /**
+ * <p>The number of days that you want to specify for the default retention
+ * period.</p>
+ */
+ inline void SetDays(int value) { m_daysHasBeenSet = true; m_days = value; }
+
+ /**
+ * <p>The number of days that you want to specify for the default retention
+ * period.</p>
+ */
+ inline DefaultRetention& WithDays(int value) { SetDays(value); return *this;}
+
+
+ /**
+ * <p>The number of years that you want to specify for the default retention
+ * period.</p>
+ */
+ inline int GetYears() const{ return m_years; }
+
+ /**
+ * <p>The number of years that you want to specify for the default retention
+ * period.</p>
+ */
+ inline bool YearsHasBeenSet() const { return m_yearsHasBeenSet; }
+
+ /**
+ * <p>The number of years that you want to specify for the default retention
+ * period.</p>
+ */
+ inline void SetYears(int value) { m_yearsHasBeenSet = true; m_years = value; }
+
+ /**
+ * <p>The number of years that you want to specify for the default retention
+ * period.</p>
+ */
+ inline DefaultRetention& WithYears(int value) { SetYears(value); return *this;}
+
+ private:
+
+ ObjectLockRetentionMode m_mode;
+ bool m_modeHasBeenSet;
+
+ int m_days;
+ bool m_daysHasBeenSet;
+
+ int m_years;
+ bool m_yearsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Delete.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Delete.h
new file mode 100644
index 00000000000..c40ac3062a9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Delete.h
@@ -0,0 +1,117 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/ObjectIdentifier.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the objects to delete.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Delete">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Delete
+ {
+ public:
+ Delete();
+ Delete(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Delete& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline const Aws::Vector<ObjectIdentifier>& GetObjects() const{ return m_objects; }
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline bool ObjectsHasBeenSet() const { return m_objectsHasBeenSet; }
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline void SetObjects(const Aws::Vector<ObjectIdentifier>& value) { m_objectsHasBeenSet = true; m_objects = value; }
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline void SetObjects(Aws::Vector<ObjectIdentifier>&& value) { m_objectsHasBeenSet = true; m_objects = std::move(value); }
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline Delete& WithObjects(const Aws::Vector<ObjectIdentifier>& value) { SetObjects(value); return *this;}
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline Delete& WithObjects(Aws::Vector<ObjectIdentifier>&& value) { SetObjects(std::move(value)); return *this;}
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline Delete& AddObjects(const ObjectIdentifier& value) { m_objectsHasBeenSet = true; m_objects.push_back(value); return *this; }
+
+ /**
+ * <p>The objects to delete.</p>
+ */
+ inline Delete& AddObjects(ObjectIdentifier&& value) { m_objectsHasBeenSet = true; m_objects.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Element to enable quiet mode for the request. When you add this element, you
+ * must set its value to true.</p>
+ */
+ inline bool GetQuiet() const{ return m_quiet; }
+
+ /**
+ * <p>Element to enable quiet mode for the request. When you add this element, you
+ * must set its value to true.</p>
+ */
+ inline bool QuietHasBeenSet() const { return m_quietHasBeenSet; }
+
+ /**
+ * <p>Element to enable quiet mode for the request. When you add this element, you
+ * must set its value to true.</p>
+ */
+ inline void SetQuiet(bool value) { m_quietHasBeenSet = true; m_quiet = value; }
+
+ /**
+ * <p>Element to enable quiet mode for the request. When you add this element, you
+ * must set its value to true.</p>
+ */
+ inline Delete& WithQuiet(bool value) { SetQuiet(value); return *this;}
+
+ private:
+
+ Aws::Vector<ObjectIdentifier> m_objects;
+ bool m_objectsHasBeenSet;
+
+ bool m_quiet;
+ bool m_quietHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketAnalyticsConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketAnalyticsConfigurationRequest.h
new file mode 100644
index 00000000000..c1c6240f430
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketAnalyticsConfigurationRequest.h
@@ -0,0 +1,239 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketAnalyticsConfigurationRequest : public S3Request
+ {
+ public:
+ DeleteBucketAnalyticsConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketAnalyticsConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is deleted.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketCorsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketCorsRequest.h
new file mode 100644
index 00000000000..6fecd43b08d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketCorsRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketCorsRequest : public S3Request
+ {
+ public:
+ DeleteBucketCorsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketCors"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline DeleteBucketCorsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline DeleteBucketCorsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the bucket whose <code>cors</code> configuration is being
+ * deleted.</p>
+ */
+ inline DeleteBucketCorsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketCorsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketCorsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketCorsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketCorsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketCorsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketCorsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketCorsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketCorsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketCorsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketEncryptionRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketEncryptionRequest.h
new file mode 100644
index 00000000000..38740e4b41b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketEncryptionRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketEncryptionRequest : public S3Request
+ {
+ public:
+ DeleteBucketEncryptionRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketEncryption"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline DeleteBucketEncryptionRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline DeleteBucketEncryptionRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the server-side encryption configuration to
+ * delete.</p>
+ */
+ inline DeleteBucketEncryptionRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketEncryptionRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketEncryptionRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketEncryptionRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketEncryptionRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketEncryptionRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketEncryptionRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketEncryptionRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketEncryptionRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketEncryptionRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketIntelligentTieringConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketIntelligentTieringConfigurationRequest.h
new file mode 100644
index 00000000000..7beaad6ec90
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketIntelligentTieringConfigurationRequest.h
@@ -0,0 +1,185 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketIntelligentTieringConfigurationRequest : public S3Request
+ {
+ public:
+ DeleteBucketIntelligentTieringConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketIntelligentTieringConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketInventoryConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketInventoryConfigurationRequest.h
new file mode 100644
index 00000000000..09d13f4a8b7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketInventoryConfigurationRequest.h
@@ -0,0 +1,239 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketInventoryConfigurationRequest : public S3Request
+ {
+ public:
+ DeleteBucketInventoryConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketInventoryConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to delete.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketInventoryConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketInventoryConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketInventoryConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketLifecycleRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketLifecycleRequest.h
new file mode 100644
index 00000000000..758f5231537
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketLifecycleRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketLifecycleRequest : public S3Request
+ {
+ public:
+ DeleteBucketLifecycleRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketLifecycle"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline DeleteBucketLifecycleRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline DeleteBucketLifecycleRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name of the lifecycle to delete.</p>
+ */
+ inline DeleteBucketLifecycleRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketLifecycleRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketLifecycleRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketLifecycleRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketLifecycleRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketLifecycleRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketLifecycleRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketLifecycleRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketLifecycleRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketLifecycleRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketLifecycleRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketLifecycleRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketLifecycleRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketMetricsConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketMetricsConfigurationRequest.h
new file mode 100644
index 00000000000..18bbf7cdb61
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketMetricsConfigurationRequest.h
@@ -0,0 +1,239 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketMetricsConfigurationRequest : public S3Request
+ {
+ public:
+ DeleteBucketMetricsConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketMetricsConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to delete.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketMetricsConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketMetricsConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketMetricsConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketOwnershipControlsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketOwnershipControlsRequest.h
new file mode 100644
index 00000000000..69f529f94b1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketOwnershipControlsRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketOwnershipControlsRequest : public S3Request
+ {
+ public:
+ DeleteBucketOwnershipControlsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketOwnershipControls"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline DeleteBucketOwnershipControlsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline DeleteBucketOwnershipControlsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>OwnershipControls</code> you want to delete.
+ * </p>
+ */
+ inline DeleteBucketOwnershipControlsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketOwnershipControlsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketOwnershipControlsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketOwnershipControlsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketOwnershipControlsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketOwnershipControlsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketPolicyRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketPolicyRequest.h
new file mode 100644
index 00000000000..3b2dfe59762
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketPolicyRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketPolicyRequest : public S3Request
+ {
+ public:
+ DeleteBucketPolicyRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketPolicy"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline DeleteBucketPolicyRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline DeleteBucketPolicyRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline DeleteBucketPolicyRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketPolicyRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketPolicyRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketPolicyRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketPolicyRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketPolicyRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketPolicyRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketPolicyRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketPolicyRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketPolicyRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketReplicationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketReplicationRequest.h
new file mode 100644
index 00000000000..311a97bdeae
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketReplicationRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketReplicationRequest : public S3Request
+ {
+ public:
+ DeleteBucketReplicationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketReplication"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline DeleteBucketReplicationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline DeleteBucketReplicationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p> The bucket name. </p>
+ */
+ inline DeleteBucketReplicationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketReplicationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketReplicationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketReplicationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketReplicationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketReplicationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketReplicationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketReplicationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketReplicationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketReplicationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketRequest.h
new file mode 100644
index 00000000000..08950393ce7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketRequest : public S3Request
+ {
+ public:
+ DeleteBucketRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucket"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline DeleteBucketRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline DeleteBucketRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the bucket being deleted.</p>
+ */
+ inline DeleteBucketRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketTaggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketTaggingRequest.h
new file mode 100644
index 00000000000..7640c5bac27
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketTaggingRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketTaggingRequest : public S3Request
+ {
+ public:
+ DeleteBucketTaggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketTagging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline DeleteBucketTaggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline DeleteBucketTaggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket that has the tag set to be removed.</p>
+ */
+ inline DeleteBucketTaggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketTaggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketTaggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketTaggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketTaggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketTaggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketTaggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketTaggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketWebsiteRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketWebsiteRequest.h
new file mode 100644
index 00000000000..36e31f18655
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteBucketWebsiteRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteBucketWebsiteRequest : public S3Request
+ {
+ public:
+ DeleteBucketWebsiteRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteBucketWebsite"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline DeleteBucketWebsiteRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline DeleteBucketWebsiteRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name for which you want to remove the website configuration. </p>
+ */
+ inline DeleteBucketWebsiteRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketWebsiteRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketWebsiteRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteBucketWebsiteRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteBucketWebsiteRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteBucketWebsiteRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteBucketWebsiteRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketWebsiteRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteBucketWebsiteRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteBucketWebsiteRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerEntry.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerEntry.h
new file mode 100644
index 00000000000..60ee780db65
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerEntry.h
@@ -0,0 +1,230 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Owner.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Information about the delete marker.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteMarkerEntry">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API DeleteMarkerEntry
+ {
+ public:
+ DeleteMarkerEntry();
+ DeleteMarkerEntry(const Aws::Utils::Xml::XmlNode& xmlNode);
+ DeleteMarkerEntry& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The account that created the delete marker.&gt;</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>The account that created the delete marker.&gt;</p>
+ */
+ inline bool OwnerHasBeenSet() const { return m_ownerHasBeenSet; }
+
+ /**
+ * <p>The account that created the delete marker.&gt;</p>
+ */
+ inline void SetOwner(const Owner& value) { m_ownerHasBeenSet = true; m_owner = value; }
+
+ /**
+ * <p>The account that created the delete marker.&gt;</p>
+ */
+ inline void SetOwner(Owner&& value) { m_ownerHasBeenSet = true; m_owner = std::move(value); }
+
+ /**
+ * <p>The account that created the delete marker.&gt;</p>
+ */
+ inline DeleteMarkerEntry& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>The account that created the delete marker.&gt;</p>
+ */
+ inline DeleteMarkerEntry& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline DeleteMarkerEntry& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline DeleteMarkerEntry& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline DeleteMarkerEntry& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline DeleteMarkerEntry& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline DeleteMarkerEntry& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline DeleteMarkerEntry& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline bool GetIsLatest() const{ return m_isLatest; }
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline bool IsLatestHasBeenSet() const { return m_isLatestHasBeenSet; }
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline void SetIsLatest(bool value) { m_isLatestHasBeenSet = true; m_isLatest = value; }
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline DeleteMarkerEntry& WithIsLatest(bool value) { SetIsLatest(value); return *this;}
+
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline bool LastModifiedHasBeenSet() const { return m_lastModifiedHasBeenSet; }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModifiedHasBeenSet = true; m_lastModified = value; }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModifiedHasBeenSet = true; m_lastModified = std::move(value); }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline DeleteMarkerEntry& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline DeleteMarkerEntry& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+ private:
+
+ Owner m_owner;
+ bool m_ownerHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ bool m_isLatest;
+ bool m_isLatestHasBeenSet;
+
+ Aws::Utils::DateTime m_lastModified;
+ bool m_lastModifiedHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplication.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplication.h
new file mode 100644
index 00000000000..fdaecb83463
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplication.h
@@ -0,0 +1,99 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/DeleteMarkerReplicationStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates delete markers. If you specify a
+ * <code>Filter</code> in your replication configuration, you must also include a
+ * <code>DeleteMarkerReplication</code> element. If your <code>Filter</code>
+ * includes a <code>Tag</code> element, the <code>DeleteMarkerReplication</code>
+ * <code>Status</code> must be set to Disabled, because Amazon S3 does not support
+ * replicating delete markers for tag-based rules. For an example configuration,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-config-min-rule-config">Basic
+ * Rule Configuration</a>. </p> <p>For more information about delete marker
+ * replication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/delete-marker-replication.html">Basic
+ * Rule Configuration</a>. </p> <p>If you are using an earlier version of
+ * the replication configuration, Amazon S3 handles replication of delete markers
+ * differently. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations">Backward
+ * Compatibility</a>.</p> <p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteMarkerReplication">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API DeleteMarkerReplication
+ {
+ public:
+ DeleteMarkerReplication();
+ DeleteMarkerReplication(const Aws::Utils::Xml::XmlNode& xmlNode);
+ DeleteMarkerReplication& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Indicates whether to replicate delete markers.</p> <p>Indicates
+ * whether to replicate delete markers.</p>
+ */
+ inline const DeleteMarkerReplicationStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>Indicates whether to replicate delete markers.</p> <p>Indicates
+ * whether to replicate delete markers.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>Indicates whether to replicate delete markers.</p> <p>Indicates
+ * whether to replicate delete markers.</p>
+ */
+ inline void SetStatus(const DeleteMarkerReplicationStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>Indicates whether to replicate delete markers.</p> <p>Indicates
+ * whether to replicate delete markers.</p>
+ */
+ inline void SetStatus(DeleteMarkerReplicationStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>Indicates whether to replicate delete markers.</p> <p>Indicates
+ * whether to replicate delete markers.</p>
+ */
+ inline DeleteMarkerReplication& WithStatus(const DeleteMarkerReplicationStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>Indicates whether to replicate delete markers.</p> <p>Indicates
+ * whether to replicate delete markers.</p>
+ */
+ inline DeleteMarkerReplication& WithStatus(DeleteMarkerReplicationStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ DeleteMarkerReplicationStatus m_status;
+ bool m_statusHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplicationStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplicationStatus.h
new file mode 100644
index 00000000000..f26f0df2ac5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteMarkerReplicationStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class DeleteMarkerReplicationStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace DeleteMarkerReplicationStatusMapper
+{
+AWS_S3_API DeleteMarkerReplicationStatus GetDeleteMarkerReplicationStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForDeleteMarkerReplicationStatus(DeleteMarkerReplicationStatus value);
+} // namespace DeleteMarkerReplicationStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectRequest.h
new file mode 100644
index 00000000000..fbed182fb6b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectRequest.h
@@ -0,0 +1,546 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteObjectRequest : public S3Request
+ {
+ public:
+ DeleteObjectRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteObject"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name of the bucket containing the object. </p> <p>When using this
+ * API with an access point, you must direct requests to the access point hostname.
+ * The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline DeleteObjectRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline DeleteObjectRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline DeleteObjectRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline const Aws::String& GetMFA() const{ return m_mFA; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline bool MFAHasBeenSet() const { return m_mFAHasBeenSet; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline void SetMFA(const Aws::String& value) { m_mFAHasBeenSet = true; m_mFA = value; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline void SetMFA(Aws::String&& value) { m_mFAHasBeenSet = true; m_mFA = std::move(value); }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline void SetMFA(const char* value) { m_mFAHasBeenSet = true; m_mFA.assign(value); }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline DeleteObjectRequest& WithMFA(const Aws::String& value) { SetMFA(value); return *this;}
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline DeleteObjectRequest& WithMFA(Aws::String&& value) { SetMFA(std::move(value)); return *this;}
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline DeleteObjectRequest& WithMFA(const char* value) { SetMFA(value); return *this;}
+
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline DeleteObjectRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline DeleteObjectRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline DeleteObjectRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline DeleteObjectRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline DeleteObjectRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Indicates whether S3 Object Lock should bypass Governance-mode restrictions
+ * to process this operation.</p>
+ */
+ inline bool GetBypassGovernanceRetention() const{ return m_bypassGovernanceRetention; }
+
+ /**
+ * <p>Indicates whether S3 Object Lock should bypass Governance-mode restrictions
+ * to process this operation.</p>
+ */
+ inline bool BypassGovernanceRetentionHasBeenSet() const { return m_bypassGovernanceRetentionHasBeenSet; }
+
+ /**
+ * <p>Indicates whether S3 Object Lock should bypass Governance-mode restrictions
+ * to process this operation.</p>
+ */
+ inline void SetBypassGovernanceRetention(bool value) { m_bypassGovernanceRetentionHasBeenSet = true; m_bypassGovernanceRetention = value; }
+
+ /**
+ * <p>Indicates whether S3 Object Lock should bypass Governance-mode restrictions
+ * to process this operation.</p>
+ */
+ inline DeleteObjectRequest& WithBypassGovernanceRetention(bool value) { SetBypassGovernanceRetention(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteObjectRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteObjectRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteObjectRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteObjectRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_mFA;
+ bool m_mFAHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ bool m_bypassGovernanceRetention;
+ bool m_bypassGovernanceRetentionHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectResult.h
new file mode 100644
index 00000000000..15a886bf11e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectResult.h
@@ -0,0 +1,124 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API DeleteObjectResult
+ {
+ public:
+ DeleteObjectResult();
+ DeleteObjectResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ DeleteObjectResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies whether the versioned object that was permanently deleted was
+ * (true) or was not (false) a delete marker.</p>
+ */
+ inline bool GetDeleteMarker() const{ return m_deleteMarker; }
+
+ /**
+ * <p>Specifies whether the versioned object that was permanently deleted was
+ * (true) or was not (false) a delete marker.</p>
+ */
+ inline void SetDeleteMarker(bool value) { m_deleteMarker = value; }
+
+ /**
+ * <p>Specifies whether the versioned object that was permanently deleted was
+ * (true) or was not (false) a delete marker.</p>
+ */
+ inline DeleteObjectResult& WithDeleteMarker(bool value) { SetDeleteMarker(value); return *this;}
+
+
+ /**
+ * <p>Returns the version ID of the delete marker created as a result of the DELETE
+ * operation.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Returns the version ID of the delete marker created as a result of the DELETE
+ * operation.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>Returns the version ID of the delete marker created as a result of the DELETE
+ * operation.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>Returns the version ID of the delete marker created as a result of the DELETE
+ * operation.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>Returns the version ID of the delete marker created as a result of the DELETE
+ * operation.</p>
+ */
+ inline DeleteObjectResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Returns the version ID of the delete marker created as a result of the DELETE
+ * operation.</p>
+ */
+ inline DeleteObjectResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Returns the version ID of the delete marker created as a result of the DELETE
+ * operation.</p>
+ */
+ inline DeleteObjectResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline DeleteObjectResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline DeleteObjectResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ bool m_deleteMarker;
+
+ Aws::String m_versionId;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingRequest.h
new file mode 100644
index 00000000000..5122ee920ff
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingRequest.h
@@ -0,0 +1,427 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteObjectTaggingRequest : public S3Request
+ {
+ public:
+ DeleteObjectTaggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteObjectTagging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the objects from which to remove the tags. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The versionId of the object that the tag-set will be removed from.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectTaggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteObjectTaggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteObjectTaggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteObjectTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteObjectTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteObjectTaggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteObjectTaggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingResult.h
new file mode 100644
index 00000000000..103267f2217
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectTaggingResult.h
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API DeleteObjectTaggingResult
+ {
+ public:
+ DeleteObjectTaggingResult();
+ DeleteObjectTaggingResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ DeleteObjectTaggingResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The versionId of the object the tag-set was removed from.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The versionId of the object the tag-set was removed from.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>The versionId of the object the tag-set was removed from.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>The versionId of the object the tag-set was removed from.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>The versionId of the object the tag-set was removed from.</p>
+ */
+ inline DeleteObjectTaggingResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The versionId of the object the tag-set was removed from.</p>
+ */
+ inline DeleteObjectTaggingResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The versionId of the object the tag-set was removed from.</p>
+ */
+ inline DeleteObjectTaggingResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+ private:
+
+ Aws::String m_versionId;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsRequest.h
new file mode 100644
index 00000000000..fa8b812827d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsRequest.h
@@ -0,0 +1,499 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Delete.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeleteObjectsRequest : public S3Request
+ {
+ public:
+ DeleteObjectsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeleteObjects"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the objects to delete. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline DeleteObjectsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline const Delete& GetDelete() const{ return m_delete; }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline bool DeleteHasBeenSet() const { return m_deleteHasBeenSet; }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline void SetDelete(const Delete& value) { m_deleteHasBeenSet = true; m_delete = value; }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline void SetDelete(Delete&& value) { m_deleteHasBeenSet = true; m_delete = std::move(value); }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline DeleteObjectsRequest& WithDelete(const Delete& value) { SetDelete(value); return *this;}
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline DeleteObjectsRequest& WithDelete(Delete&& value) { SetDelete(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline const Aws::String& GetMFA() const{ return m_mFA; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline bool MFAHasBeenSet() const { return m_mFAHasBeenSet; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline void SetMFA(const Aws::String& value) { m_mFAHasBeenSet = true; m_mFA = value; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline void SetMFA(Aws::String&& value) { m_mFAHasBeenSet = true; m_mFA = std::move(value); }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline void SetMFA(const char* value) { m_mFAHasBeenSet = true; m_mFA.assign(value); }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline DeleteObjectsRequest& WithMFA(const Aws::String& value) { SetMFA(value); return *this;}
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline DeleteObjectsRequest& WithMFA(Aws::String&& value) { SetMFA(std::move(value)); return *this;}
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device. Required to
+ * permanently delete a versioned object if versioning is configured with MFA
+ * delete enabled.</p>
+ */
+ inline DeleteObjectsRequest& WithMFA(const char* value) { SetMFA(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline DeleteObjectsRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline DeleteObjectsRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether you want to delete this object even if it has a
+ * Governance-type Object Lock in place. You must have sufficient permissions to
+ * perform this operation.</p>
+ */
+ inline bool GetBypassGovernanceRetention() const{ return m_bypassGovernanceRetention; }
+
+ /**
+ * <p>Specifies whether you want to delete this object even if it has a
+ * Governance-type Object Lock in place. You must have sufficient permissions to
+ * perform this operation.</p>
+ */
+ inline bool BypassGovernanceRetentionHasBeenSet() const { return m_bypassGovernanceRetentionHasBeenSet; }
+
+ /**
+ * <p>Specifies whether you want to delete this object even if it has a
+ * Governance-type Object Lock in place. You must have sufficient permissions to
+ * perform this operation.</p>
+ */
+ inline void SetBypassGovernanceRetention(bool value) { m_bypassGovernanceRetentionHasBeenSet = true; m_bypassGovernanceRetention = value; }
+
+ /**
+ * <p>Specifies whether you want to delete this object even if it has a
+ * Governance-type Object Lock in place. You must have sufficient permissions to
+ * perform this operation.</p>
+ */
+ inline DeleteObjectsRequest& WithBypassGovernanceRetention(bool value) { SetBypassGovernanceRetention(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeleteObjectsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeleteObjectsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeleteObjectsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeleteObjectsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeleteObjectsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteObjectsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteObjectsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeleteObjectsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeleteObjectsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeleteObjectsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Delete m_delete;
+ bool m_deleteHasBeenSet;
+
+ Aws::String m_mFA;
+ bool m_mFAHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ bool m_bypassGovernanceRetention;
+ bool m_bypassGovernanceRetentionHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsResult.h
new file mode 100644
index 00000000000..83c8863f5ec
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeleteObjectsResult.h
@@ -0,0 +1,150 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/s3/model/DeletedObject.h>
+#include <aws/s3/model/Error.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API DeleteObjectsResult
+ {
+ public:
+ DeleteObjectsResult();
+ DeleteObjectsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ DeleteObjectsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Container element for a successful delete. It identifies the object that was
+ * successfully deleted.</p>
+ */
+ inline const Aws::Vector<DeletedObject>& GetDeleted() const{ return m_deleted; }
+
+ /**
+ * <p>Container element for a successful delete. It identifies the object that was
+ * successfully deleted.</p>
+ */
+ inline void SetDeleted(const Aws::Vector<DeletedObject>& value) { m_deleted = value; }
+
+ /**
+ * <p>Container element for a successful delete. It identifies the object that was
+ * successfully deleted.</p>
+ */
+ inline void SetDeleted(Aws::Vector<DeletedObject>&& value) { m_deleted = std::move(value); }
+
+ /**
+ * <p>Container element for a successful delete. It identifies the object that was
+ * successfully deleted.</p>
+ */
+ inline DeleteObjectsResult& WithDeleted(const Aws::Vector<DeletedObject>& value) { SetDeleted(value); return *this;}
+
+ /**
+ * <p>Container element for a successful delete. It identifies the object that was
+ * successfully deleted.</p>
+ */
+ inline DeleteObjectsResult& WithDeleted(Aws::Vector<DeletedObject>&& value) { SetDeleted(std::move(value)); return *this;}
+
+ /**
+ * <p>Container element for a successful delete. It identifies the object that was
+ * successfully deleted.</p>
+ */
+ inline DeleteObjectsResult& AddDeleted(const DeletedObject& value) { m_deleted.push_back(value); return *this; }
+
+ /**
+ * <p>Container element for a successful delete. It identifies the object that was
+ * successfully deleted.</p>
+ */
+ inline DeleteObjectsResult& AddDeleted(DeletedObject&& value) { m_deleted.push_back(std::move(value)); return *this; }
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline DeleteObjectsResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline DeleteObjectsResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Container for a failed delete operation that describes the object that Amazon
+ * S3 attempted to delete and the error it encountered.</p>
+ */
+ inline const Aws::Vector<Error>& GetErrors() const{ return m_errors; }
+
+ /**
+ * <p>Container for a failed delete operation that describes the object that Amazon
+ * S3 attempted to delete and the error it encountered.</p>
+ */
+ inline void SetErrors(const Aws::Vector<Error>& value) { m_errors = value; }
+
+ /**
+ * <p>Container for a failed delete operation that describes the object that Amazon
+ * S3 attempted to delete and the error it encountered.</p>
+ */
+ inline void SetErrors(Aws::Vector<Error>&& value) { m_errors = std::move(value); }
+
+ /**
+ * <p>Container for a failed delete operation that describes the object that Amazon
+ * S3 attempted to delete and the error it encountered.</p>
+ */
+ inline DeleteObjectsResult& WithErrors(const Aws::Vector<Error>& value) { SetErrors(value); return *this;}
+
+ /**
+ * <p>Container for a failed delete operation that describes the object that Amazon
+ * S3 attempted to delete and the error it encountered.</p>
+ */
+ inline DeleteObjectsResult& WithErrors(Aws::Vector<Error>&& value) { SetErrors(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for a failed delete operation that describes the object that Amazon
+ * S3 attempted to delete and the error it encountered.</p>
+ */
+ inline DeleteObjectsResult& AddErrors(const Error& value) { m_errors.push_back(value); return *this; }
+
+ /**
+ * <p>Container for a failed delete operation that describes the object that Amazon
+ * S3 attempted to delete and the error it encountered.</p>
+ */
+ inline DeleteObjectsResult& AddErrors(Error&& value) { m_errors.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<DeletedObject> m_deleted;
+
+ RequestCharged m_requestCharged;
+
+ Aws::Vector<Error> m_errors;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletePublicAccessBlockRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletePublicAccessBlockRequest.h
new file mode 100644
index 00000000000..fd8650c5a1d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletePublicAccessBlockRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API DeletePublicAccessBlockRequest : public S3Request
+ {
+ public:
+ DeletePublicAccessBlockRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "DeletePublicAccessBlock"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline DeletePublicAccessBlockRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline DeletePublicAccessBlockRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket whose <code>PublicAccessBlock</code> configuration you
+ * want to delete. </p>
+ */
+ inline DeletePublicAccessBlockRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeletePublicAccessBlockRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeletePublicAccessBlockRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline DeletePublicAccessBlockRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline DeletePublicAccessBlockRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline DeletePublicAccessBlockRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline DeletePublicAccessBlockRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline DeletePublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeletePublicAccessBlockRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeletePublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline DeletePublicAccessBlockRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline DeletePublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline DeletePublicAccessBlockRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletedObject.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletedObject.h
new file mode 100644
index 00000000000..72f1b97e855
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/DeletedObject.h
@@ -0,0 +1,224 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Information about the deleted object.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletedObject">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API DeletedObject
+ {
+ public:
+ DeletedObject();
+ DeletedObject(const Aws::Utils::Xml::XmlNode& xmlNode);
+ DeletedObject& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline DeletedObject& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline DeletedObject& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the deleted object.</p>
+ */
+ inline DeletedObject& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline DeletedObject& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline DeletedObject& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version ID of the deleted object.</p>
+ */
+ inline DeletedObject& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether the versioned object that was permanently deleted was
+ * (true) or was not (false) a delete marker. In a simple DELETE, this header
+ * indicates whether (true) or not (false) a delete marker was created.</p>
+ */
+ inline bool GetDeleteMarker() const{ return m_deleteMarker; }
+
+ /**
+ * <p>Specifies whether the versioned object that was permanently deleted was
+ * (true) or was not (false) a delete marker. In a simple DELETE, this header
+ * indicates whether (true) or not (false) a delete marker was created.</p>
+ */
+ inline bool DeleteMarkerHasBeenSet() const { return m_deleteMarkerHasBeenSet; }
+
+ /**
+ * <p>Specifies whether the versioned object that was permanently deleted was
+ * (true) or was not (false) a delete marker. In a simple DELETE, this header
+ * indicates whether (true) or not (false) a delete marker was created.</p>
+ */
+ inline void SetDeleteMarker(bool value) { m_deleteMarkerHasBeenSet = true; m_deleteMarker = value; }
+
+ /**
+ * <p>Specifies whether the versioned object that was permanently deleted was
+ * (true) or was not (false) a delete marker. In a simple DELETE, this header
+ * indicates whether (true) or not (false) a delete marker was created.</p>
+ */
+ inline DeletedObject& WithDeleteMarker(bool value) { SetDeleteMarker(value); return *this;}
+
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline const Aws::String& GetDeleteMarkerVersionId() const{ return m_deleteMarkerVersionId; }
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline bool DeleteMarkerVersionIdHasBeenSet() const { return m_deleteMarkerVersionIdHasBeenSet; }
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline void SetDeleteMarkerVersionId(const Aws::String& value) { m_deleteMarkerVersionIdHasBeenSet = true; m_deleteMarkerVersionId = value; }
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline void SetDeleteMarkerVersionId(Aws::String&& value) { m_deleteMarkerVersionIdHasBeenSet = true; m_deleteMarkerVersionId = std::move(value); }
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline void SetDeleteMarkerVersionId(const char* value) { m_deleteMarkerVersionIdHasBeenSet = true; m_deleteMarkerVersionId.assign(value); }
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline DeletedObject& WithDeleteMarkerVersionId(const Aws::String& value) { SetDeleteMarkerVersionId(value); return *this;}
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline DeletedObject& WithDeleteMarkerVersionId(Aws::String&& value) { SetDeleteMarkerVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version ID of the delete marker created as a result of the DELETE
+ * operation. If you delete a specific object version, the value returned by this
+ * header is the version ID of the object version deleted.</p>
+ */
+ inline DeletedObject& WithDeleteMarkerVersionId(const char* value) { SetDeleteMarkerVersionId(value); return *this;}
+
+ private:
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ bool m_deleteMarker;
+ bool m_deleteMarkerHasBeenSet;
+
+ Aws::String m_deleteMarkerVersionId;
+ bool m_deleteMarkerVersionIdHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Destination.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Destination.h
new file mode 100644
index 00000000000..eabf57c69a6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Destination.h
@@ -0,0 +1,469 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/AccessControlTranslation.h>
+#include <aws/s3/model/EncryptionConfiguration.h>
+#include <aws/s3/model/ReplicationTime.h>
+#include <aws/s3/model/Metrics.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies information about where to publish analysis or configuration
+ * results for an Amazon S3 bucket and S3 Replication Time Control (S3
+ * RTC).</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Destination">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Destination
+ {
+ public:
+ Destination();
+ Destination(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Destination& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline Destination& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline Destination& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p> The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to
+ * store the results.</p>
+ */
+ inline Destination& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline const Aws::String& GetAccount() const{ return m_account; }
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline bool AccountHasBeenSet() const { return m_accountHasBeenSet; }
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetAccount(const Aws::String& value) { m_accountHasBeenSet = true; m_account = value; }
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetAccount(Aws::String&& value) { m_accountHasBeenSet = true; m_account = std::move(value); }
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetAccount(const char* value) { m_accountHasBeenSet = true; m_account.assign(value); }
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline Destination& WithAccount(const Aws::String& value) { SetAccount(value); return *this;}
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline Destination& WithAccount(Aws::String&& value) { SetAccount(std::move(value)); return *this;}
+
+ /**
+ * <p>Destination bucket owner account ID. In a cross-account scenario, if you
+ * direct Amazon S3 to change replica ownership to the AWS account that owns the
+ * destination bucket by specifying the <code>AccessControlTranslation</code>
+ * property, this is the account ID of the destination bucket owner. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html">Replication
+ * Additional Configuration: Changing the Replica Owner</a> in the <i>Amazon Simple
+ * Storage Service Developer Guide</i>.</p>
+ */
+ inline Destination& WithAccount(const char* value) { SetAccount(value); return *this;}
+
+
+ /**
+ * <p> The storage class to use when replicating objects, such as S3 Standard or
+ * reduced redundancy. By default, Amazon S3 uses the storage class of the source
+ * object to create the object replica. </p> <p>For valid values, see the
+ * <code>StorageClass</code> element of the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * Bucket replication</a> action in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p> The storage class to use when replicating objects, such as S3 Standard or
+ * reduced redundancy. By default, Amazon S3 uses the storage class of the source
+ * object to create the object replica. </p> <p>For valid values, see the
+ * <code>StorageClass</code> element of the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * Bucket replication</a> action in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p> The storage class to use when replicating objects, such as S3 Standard or
+ * reduced redundancy. By default, Amazon S3 uses the storage class of the source
+ * object to create the object replica. </p> <p>For valid values, see the
+ * <code>StorageClass</code> element of the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * Bucket replication</a> action in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p> The storage class to use when replicating objects, such as S3 Standard or
+ * reduced redundancy. By default, Amazon S3 uses the storage class of the source
+ * object to create the object replica. </p> <p>For valid values, see the
+ * <code>StorageClass</code> element of the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * Bucket replication</a> action in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p> The storage class to use when replicating objects, such as S3 Standard or
+ * reduced redundancy. By default, Amazon S3 uses the storage class of the source
+ * object to create the object replica. </p> <p>For valid values, see the
+ * <code>StorageClass</code> element of the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * Bucket replication</a> action in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline Destination& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p> The storage class to use when replicating objects, such as S3 Standard or
+ * reduced redundancy. By default, Amazon S3 uses the storage class of the source
+ * object to create the object replica. </p> <p>For valid values, see the
+ * <code>StorageClass</code> element of the <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html">PUT
+ * Bucket replication</a> action in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p>
+ */
+ inline Destination& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specify this only in a cross-account scenario (where source and destination
+ * bucket owners are not the same), and you want to change replica ownership to the
+ * AWS account that owns the destination bucket. If this is not specified in the
+ * replication configuration, the replicas are owned by same AWS account that owns
+ * the source object.</p>
+ */
+ inline const AccessControlTranslation& GetAccessControlTranslation() const{ return m_accessControlTranslation; }
+
+ /**
+ * <p>Specify this only in a cross-account scenario (where source and destination
+ * bucket owners are not the same), and you want to change replica ownership to the
+ * AWS account that owns the destination bucket. If this is not specified in the
+ * replication configuration, the replicas are owned by same AWS account that owns
+ * the source object.</p>
+ */
+ inline bool AccessControlTranslationHasBeenSet() const { return m_accessControlTranslationHasBeenSet; }
+
+ /**
+ * <p>Specify this only in a cross-account scenario (where source and destination
+ * bucket owners are not the same), and you want to change replica ownership to the
+ * AWS account that owns the destination bucket. If this is not specified in the
+ * replication configuration, the replicas are owned by same AWS account that owns
+ * the source object.</p>
+ */
+ inline void SetAccessControlTranslation(const AccessControlTranslation& value) { m_accessControlTranslationHasBeenSet = true; m_accessControlTranslation = value; }
+
+ /**
+ * <p>Specify this only in a cross-account scenario (where source and destination
+ * bucket owners are not the same), and you want to change replica ownership to the
+ * AWS account that owns the destination bucket. If this is not specified in the
+ * replication configuration, the replicas are owned by same AWS account that owns
+ * the source object.</p>
+ */
+ inline void SetAccessControlTranslation(AccessControlTranslation&& value) { m_accessControlTranslationHasBeenSet = true; m_accessControlTranslation = std::move(value); }
+
+ /**
+ * <p>Specify this only in a cross-account scenario (where source and destination
+ * bucket owners are not the same), and you want to change replica ownership to the
+ * AWS account that owns the destination bucket. If this is not specified in the
+ * replication configuration, the replicas are owned by same AWS account that owns
+ * the source object.</p>
+ */
+ inline Destination& WithAccessControlTranslation(const AccessControlTranslation& value) { SetAccessControlTranslation(value); return *this;}
+
+ /**
+ * <p>Specify this only in a cross-account scenario (where source and destination
+ * bucket owners are not the same), and you want to change replica ownership to the
+ * AWS account that owns the destination bucket. If this is not specified in the
+ * replication configuration, the replicas are owned by same AWS account that owns
+ * the source object.</p>
+ */
+ inline Destination& WithAccessControlTranslation(AccessControlTranslation&& value) { SetAccessControlTranslation(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A container that provides information about encryption. If
+ * <code>SourceSelectionCriteria</code> is specified, you must specify this
+ * element.</p>
+ */
+ inline const EncryptionConfiguration& GetEncryptionConfiguration() const{ return m_encryptionConfiguration; }
+
+ /**
+ * <p>A container that provides information about encryption. If
+ * <code>SourceSelectionCriteria</code> is specified, you must specify this
+ * element.</p>
+ */
+ inline bool EncryptionConfigurationHasBeenSet() const { return m_encryptionConfigurationHasBeenSet; }
+
+ /**
+ * <p>A container that provides information about encryption. If
+ * <code>SourceSelectionCriteria</code> is specified, you must specify this
+ * element.</p>
+ */
+ inline void SetEncryptionConfiguration(const EncryptionConfiguration& value) { m_encryptionConfigurationHasBeenSet = true; m_encryptionConfiguration = value; }
+
+ /**
+ * <p>A container that provides information about encryption. If
+ * <code>SourceSelectionCriteria</code> is specified, you must specify this
+ * element.</p>
+ */
+ inline void SetEncryptionConfiguration(EncryptionConfiguration&& value) { m_encryptionConfigurationHasBeenSet = true; m_encryptionConfiguration = std::move(value); }
+
+ /**
+ * <p>A container that provides information about encryption. If
+ * <code>SourceSelectionCriteria</code> is specified, you must specify this
+ * element.</p>
+ */
+ inline Destination& WithEncryptionConfiguration(const EncryptionConfiguration& value) { SetEncryptionConfiguration(value); return *this;}
+
+ /**
+ * <p>A container that provides information about encryption. If
+ * <code>SourceSelectionCriteria</code> is specified, you must specify this
+ * element.</p>
+ */
+ inline Destination& WithEncryptionConfiguration(EncryptionConfiguration&& value) { SetEncryptionConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p> A container specifying S3 Replication Time Control (S3 RTC), including
+ * whether S3 RTC is enabled and the time when all objects and operations on
+ * objects must be replicated. Must be specified together with a
+ * <code>Metrics</code> block. </p>
+ */
+ inline const ReplicationTime& GetReplicationTime() const{ return m_replicationTime; }
+
+ /**
+ * <p> A container specifying S3 Replication Time Control (S3 RTC), including
+ * whether S3 RTC is enabled and the time when all objects and operations on
+ * objects must be replicated. Must be specified together with a
+ * <code>Metrics</code> block. </p>
+ */
+ inline bool ReplicationTimeHasBeenSet() const { return m_replicationTimeHasBeenSet; }
+
+ /**
+ * <p> A container specifying S3 Replication Time Control (S3 RTC), including
+ * whether S3 RTC is enabled and the time when all objects and operations on
+ * objects must be replicated. Must be specified together with a
+ * <code>Metrics</code> block. </p>
+ */
+ inline void SetReplicationTime(const ReplicationTime& value) { m_replicationTimeHasBeenSet = true; m_replicationTime = value; }
+
+ /**
+ * <p> A container specifying S3 Replication Time Control (S3 RTC), including
+ * whether S3 RTC is enabled and the time when all objects and operations on
+ * objects must be replicated. Must be specified together with a
+ * <code>Metrics</code> block. </p>
+ */
+ inline void SetReplicationTime(ReplicationTime&& value) { m_replicationTimeHasBeenSet = true; m_replicationTime = std::move(value); }
+
+ /**
+ * <p> A container specifying S3 Replication Time Control (S3 RTC), including
+ * whether S3 RTC is enabled and the time when all objects and operations on
+ * objects must be replicated. Must be specified together with a
+ * <code>Metrics</code> block. </p>
+ */
+ inline Destination& WithReplicationTime(const ReplicationTime& value) { SetReplicationTime(value); return *this;}
+
+ /**
+ * <p> A container specifying S3 Replication Time Control (S3 RTC), including
+ * whether S3 RTC is enabled and the time when all objects and operations on
+ * objects must be replicated. Must be specified together with a
+ * <code>Metrics</code> block. </p>
+ */
+ inline Destination& WithReplicationTime(ReplicationTime&& value) { SetReplicationTime(std::move(value)); return *this;}
+
+
+ /**
+ * <p> A container specifying replication metrics-related settings enabling
+ * replication metrics and events. </p>
+ */
+ inline const Metrics& GetMetrics() const{ return m_metrics; }
+
+ /**
+ * <p> A container specifying replication metrics-related settings enabling
+ * replication metrics and events. </p>
+ */
+ inline bool MetricsHasBeenSet() const { return m_metricsHasBeenSet; }
+
+ /**
+ * <p> A container specifying replication metrics-related settings enabling
+ * replication metrics and events. </p>
+ */
+ inline void SetMetrics(const Metrics& value) { m_metricsHasBeenSet = true; m_metrics = value; }
+
+ /**
+ * <p> A container specifying replication metrics-related settings enabling
+ * replication metrics and events. </p>
+ */
+ inline void SetMetrics(Metrics&& value) { m_metricsHasBeenSet = true; m_metrics = std::move(value); }
+
+ /**
+ * <p> A container specifying replication metrics-related settings enabling
+ * replication metrics and events. </p>
+ */
+ inline Destination& WithMetrics(const Metrics& value) { SetMetrics(value); return *this;}
+
+ /**
+ * <p> A container specifying replication metrics-related settings enabling
+ * replication metrics and events. </p>
+ */
+ inline Destination& WithMetrics(Metrics&& value) { SetMetrics(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_account;
+ bool m_accountHasBeenSet;
+
+ StorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ AccessControlTranslation m_accessControlTranslation;
+ bool m_accessControlTranslationHasBeenSet;
+
+ EncryptionConfiguration m_encryptionConfiguration;
+ bool m_encryptionConfigurationHasBeenSet;
+
+ ReplicationTime m_replicationTime;
+ bool m_replicationTimeHasBeenSet;
+
+ Metrics m_metrics;
+ bool m_metricsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncodingType.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncodingType.h
new file mode 100644
index 00000000000..13dc6281189
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncodingType.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class EncodingType
+ {
+ NOT_SET,
+ url
+ };
+
+namespace EncodingTypeMapper
+{
+AWS_S3_API EncodingType GetEncodingTypeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForEncodingType(EncodingType value);
+} // namespace EncodingTypeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Encryption.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Encryption.h
new file mode 100644
index 00000000000..87937565bb7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Encryption.h
@@ -0,0 +1,229 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Contains the type of server-side encryption used.</p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Encryption">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API Encryption
+ {
+ public:
+ Encryption();
+ Encryption(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Encryption& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing job results in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetEncryptionType() const{ return m_encryptionType; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing job results in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline bool EncryptionTypeHasBeenSet() const { return m_encryptionTypeHasBeenSet; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing job results in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetEncryptionType(const ServerSideEncryption& value) { m_encryptionTypeHasBeenSet = true; m_encryptionType = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing job results in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetEncryptionType(ServerSideEncryption&& value) { m_encryptionTypeHasBeenSet = true; m_encryptionType = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing job results in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline Encryption& WithEncryptionType(const ServerSideEncryption& value) { SetEncryptionType(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing job results in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline Encryption& WithEncryptionType(ServerSideEncryption&& value) { SetEncryptionType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetKMSKeyId() const{ return m_kMSKeyId; }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool KMSKeyIdHasBeenSet() const { return m_kMSKeyIdHasBeenSet; }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKMSKeyId(const Aws::String& value) { m_kMSKeyIdHasBeenSet = true; m_kMSKeyId = value; }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKMSKeyId(Aws::String&& value) { m_kMSKeyIdHasBeenSet = true; m_kMSKeyId = std::move(value); }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKMSKeyId(const char* value) { m_kMSKeyIdHasBeenSet = true; m_kMSKeyId.assign(value); }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline Encryption& WithKMSKeyId(const Aws::String& value) { SetKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline Encryption& WithKMSKeyId(Aws::String&& value) { SetKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value specifies
+ * the ID of the symmetric customer managed AWS KMS CMK to use for encryption of
+ * job results. Amazon S3 only supports symmetric CMKs. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline Encryption& WithKMSKeyId(const char* value) { SetKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline const Aws::String& GetKMSContext() const{ return m_kMSContext; }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline bool KMSContextHasBeenSet() const { return m_kMSContextHasBeenSet; }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline void SetKMSContext(const Aws::String& value) { m_kMSContextHasBeenSet = true; m_kMSContext = value; }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline void SetKMSContext(Aws::String&& value) { m_kMSContextHasBeenSet = true; m_kMSContext = std::move(value); }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline void SetKMSContext(const char* value) { m_kMSContextHasBeenSet = true; m_kMSContext.assign(value); }
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline Encryption& WithKMSContext(const Aws::String& value) { SetKMSContext(value); return *this;}
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline Encryption& WithKMSContext(Aws::String&& value) { SetKMSContext(std::move(value)); return *this;}
+
+ /**
+ * <p>If the encryption type is <code>aws:kms</code>, this optional value can be
+ * used to specify the encryption context for the restore results.</p>
+ */
+ inline Encryption& WithKMSContext(const char* value) { SetKMSContext(value); return *this;}
+
+ private:
+
+ ServerSideEncryption m_encryptionType;
+ bool m_encryptionTypeHasBeenSet;
+
+ Aws::String m_kMSKeyId;
+ bool m_kMSKeyIdHasBeenSet;
+
+ Aws::String m_kMSContext;
+ bool m_kMSContextHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncryptionConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncryptionConfiguration.h
new file mode 100644
index 00000000000..14d86c37676
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/EncryptionConfiguration.h
@@ -0,0 +1,137 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies encryption-related information for an Amazon S3 bucket that is a
+ * destination for replicated objects.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/EncryptionConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API EncryptionConfiguration
+ {
+ public:
+ EncryptionConfiguration();
+ EncryptionConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ EncryptionConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetReplicaKmsKeyID() const{ return m_replicaKmsKeyID; }
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool ReplicaKmsKeyIDHasBeenSet() const { return m_replicaKmsKeyIDHasBeenSet; }
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetReplicaKmsKeyID(const Aws::String& value) { m_replicaKmsKeyIDHasBeenSet = true; m_replicaKmsKeyID = value; }
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetReplicaKmsKeyID(Aws::String&& value) { m_replicaKmsKeyIDHasBeenSet = true; m_replicaKmsKeyID = std::move(value); }
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetReplicaKmsKeyID(const char* value) { m_replicaKmsKeyIDHasBeenSet = true; m_replicaKmsKeyID.assign(value); }
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline EncryptionConfiguration& WithReplicaKmsKeyID(const Aws::String& value) { SetReplicaKmsKeyID(value); return *this;}
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline EncryptionConfiguration& WithReplicaKmsKeyID(Aws::String&& value) { SetReplicaKmsKeyID(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the ID (Key ARN or Alias ARN) of the customer managed customer
+ * master key (CMK) stored in AWS Key Management Service (KMS) for the destination
+ * bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only
+ * supports symmetric customer managed CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline EncryptionConfiguration& WithReplicaKmsKeyID(const char* value) { SetReplicaKmsKeyID(value); return *this;}
+
+ private:
+
+ Aws::String m_replicaKmsKeyID;
+ bool m_replicaKmsKeyIDHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Error.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Error.h
new file mode 100644
index 00000000000..d5fe4d20881
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Error.h
@@ -0,0 +1,3100 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for all error elements.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Error">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Error
+ {
+ public:
+ Error();
+ Error(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Error& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline Error& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline Error& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The error key.</p>
+ */
+ inline Error& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline Error& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline Error& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version ID of the error.</p>
+ */
+ inline Error& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline const Aws::String& GetCode() const{ return m_code; }
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline bool CodeHasBeenSet() const { return m_codeHasBeenSet; }
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline void SetCode(const Aws::String& value) { m_codeHasBeenSet = true; m_code = value; }
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline void SetCode(Aws::String&& value) { m_codeHasBeenSet = true; m_code = std::move(value); }
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline void SetCode(const char* value) { m_codeHasBeenSet = true; m_code.assign(value); }
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline Error& WithCode(const Aws::String& value) { SetCode(value); return *this;}
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline Error& WithCode(Aws::String&& value) { SetCode(std::move(value)); return *this;}
+
+ /**
+ * <p>The error code is a string that uniquely identifies an error condition. It is
+ * meant to be read and understood by programs that detect and handle errors by
+ * type. </p> <p class="title"> <b>Amazon S3 error codes</b> </p> <ul> <li> <ul>
+ * <li> <p> <i>Code:</i> AccessDenied </p> </li> <li> <p> <i>Description:</i>
+ * Access Denied</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AccountProblem</p> </li> <li> <p> <i>Description:</i>
+ * There is a problem with your AWS account that prevents the operation from
+ * completing successfully. Contact AWS Support for further assistance.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * AllAccessDisabled</p> </li> <li> <p> <i>Description:</i> All access to this
+ * Amazon S3 resource has been disabled. Contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> AmbiguousGrantByEmailAddress</p> </li> <li> <p>
+ * <i>Description:</i> The email address you provided is associated with more than
+ * one account.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> AuthorizationHeaderMalformed</p> </li> <li> <p>
+ * <i>Description:</i> The authorization header you provided is invalid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * BadDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you specified
+ * did not match what we received.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> BucketAlreadyExists</p> </li> <li>
+ * <p> <i>Description:</i> The requested bucket name is not available. The bucket
+ * namespace is shared by all users of the system. Please select a different name
+ * and try again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 409 Conflict</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> BucketAlreadyOwnedByYou</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you tried to create already exists, and you own
+ * it. Amazon S3 returns this error in all AWS Regions except in the North Virginia
+ * Region. For legacy compatibility, if you re-create an existing bucket that you
+ * already own in the North Virginia Region, Amazon S3 returns 200 OK and resets
+ * the bucket access control lists (ACLs).</p> </li> <li> <p> <i>Code:</i> 409
+ * Conflict (in all Regions except the North Virginia Region) </p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> BucketNotEmpty</p> </li> <li> <p> <i>Description:</i> The bucket
+ * you tried to delete is not empty.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> CredentialsNotSupported</p> </li>
+ * <li> <p> <i>Description:</i> This request does not support credentials.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> CrossLocationLoggingProhibited</p> </li> <li> <p>
+ * <i>Description:</i> Cross-location logging not allowed. Buckets in one
+ * geographic location cannot log information to a bucket in another location.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> EntityTooSmall</p> </li> <li> <p> <i>Description:</i> Your proposed
+ * upload is smaller than the minimum allowed object size.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * EntityTooLarge</p> </li> <li> <p> <i>Description:</i> Your proposed upload
+ * exceeds the maximum allowed object size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ExpiredToken</p>
+ * </li> <li> <p> <i>Description:</i> The provided token has expired.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> IllegalVersioningConfigurationException </p> </li> <li> <p>
+ * <i>Description:</i> Indicates that the versioning configuration specified in the
+ * request is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncompleteBody</p> </li> <li> <p>
+ * <i>Description:</i> You did not provide the number of bytes specified by the
+ * Content-Length HTTP header</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> IncorrectNumberOfFilesInPostRequest</p>
+ * </li> <li> <p> <i>Description:</i> POST requires exactly one file upload per
+ * request.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InlineDataTooLarge</p> </li> <li> <p> <i>Description:</i>
+ * Inline data exceeds the maximum allowed size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InternalError</p>
+ * </li> <li> <p> <i>Description:</i> We encountered an internal error. Please try
+ * again.</p> </li> <li> <p> <i>HTTP Status Code:</i> 500 Internal Server Error</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidAccessKeyId</p> </li> <li> <p>
+ * <i>Description:</i> The AWS access key ID you provided does not exist in our
+ * records.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidAddressingHeader</p> </li> <li> <p>
+ * <i>Description:</i> You must specify the Anonymous role.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidArgument</p>
+ * </li> <li> <p> <i>Description:</i> Invalid Argument</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidBucketName</p> </li> <li> <p> <i>Description:</i> The specified bucket is
+ * not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidBucketState</p> </li> <li> <p> <i>Description:</i>
+ * The request is not valid with the current state of the bucket.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidDigest</p> </li> <li> <p> <i>Description:</i> The Content-MD5 you
+ * specified is not valid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidEncryptionAlgorithmError</p> </li>
+ * <li> <p> <i>Description:</i> The encryption request you specified is not valid.
+ * The valid value is AES256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidLocationConstraint</p> </li> <li>
+ * <p> <i>Description:</i> The specified location constraint is not valid. For more
+ * information about Regions, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro">How
+ * to Select a Region for Your Buckets</a>. </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidObjectState</p> </li> <li> <p> <i>Description:</i> The operation is not
+ * valid for the current state of the object.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidPart</p>
+ * </li> <li> <p> <i>Description:</i> One or more of the specified parts could not
+ * be found. The part might not have been uploaded, or the specified entity tag
+ * might not have matched the part's entity tag.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidPartOrder</p> </li> <li> <p> <i>Description:</i> The list of parts was
+ * not in ascending order. Parts list must be specified in order by part
+ * number.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPayer</p> </li> <li> <p> <i>Description:</i> All
+ * access to this object has been disabled. Please contact AWS Support for further
+ * assistance.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> InvalidPolicyDocument</p> </li> <li> <p>
+ * <i>Description:</i> The content of the form does not meet the conditions
+ * specified in the policy document.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRange</p> </li> <li>
+ * <p> <i>Description:</i> The requested range cannot be satisfied.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 416 Requested Range Not Satisfiable</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> Please
+ * use AWS4-HMAC-SHA256.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p> <i>Description:</i> SOAP
+ * requests must be made over an HTTPS connection.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with non-DNS compliant names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Acceleration is not supported for buckets with periods (.) in their names.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate endpoint only supports virtual style requests.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li>
+ * <p> <i>Description:</i> Amazon S3 Transfer Accelerate is not configured on this
+ * bucket.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>Code:</i> N/A</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidRequest</p> </li> <li> <p> <i>Description:</i> Amazon S3 Transfer
+ * Accelerate is disabled on this bucket.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration is not supported on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidRequest</p> </li> <li> <p>
+ * <i>Description:</i> Amazon S3 Transfer Acceleration cannot be enabled on this
+ * bucket. Contact AWS Support for more information.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>Code:</i> N/A</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidSecurity</p> </li> <li> <p>
+ * <i>Description:</i> The provided security credentials are not valid.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidSOAPRequest</p> </li> <li> <p> <i>Description:</i> The SOAP request body
+ * is invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> InvalidStorageClass</p> </li> <li> <p>
+ * <i>Description:</i> The storage class you specified is not valid.</p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault
+ * Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidTargetBucketForLogging</p> </li> <li> <p> <i>Description:</i> The target
+ * bucket for logging does not exist, is not owned by you, or does not have the
+ * appropriate grants for the log-delivery group. </p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * InvalidToken</p> </li> <li> <p> <i>Description:</i> The provided token is
+ * malformed or otherwise invalid.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400
+ * Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> InvalidURI</p> </li> <li> <p>
+ * <i>Description:</i> Couldn't parse the specified URI.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * KeyTooLongError</p> </li> <li> <p> <i>Description:</i> Your key is too long.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MalformedACLError</p> </li> <li> <p> <i>Description:</i> The XML
+ * you provided was not well-formed or did not validate against our published
+ * schema.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li>
+ * <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul>
+ * <li> <p> <i>Code:</i> MalformedPOSTRequest </p> </li> <li> <p>
+ * <i>Description:</i> The body of your POST request is not well-formed
+ * multipart/form-data.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MalformedXML</p> </li> <li> <p>
+ * <i>Description:</i> This happens when the user sends malformed XML (XML that
+ * doesn't conform to the published XSD) for the configuration. The error message
+ * is, "The XML you provided was not well-formed or did not validate against our
+ * published schema." </p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MaxMessageLengthExceeded</p> </li> <li>
+ * <p> <i>Description:</i> Your request was too big.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MaxPostPreDataLengthExceededError</p> </li> <li> <p> <i>Description:</i> Your
+ * POST request fields preceding the upload file were too large.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MetadataTooLarge</p> </li> <li> <p> <i>Description:</i> Your metadata headers
+ * exceed the maximum allowed metadata size.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MethodNotAllowed</p> </li> <li> <p> <i>Description:</i> The specified method is
+ * not allowed against this resource.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 405 Method Not Allowed</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingAttachment</p> </li> <li> <p> <i>Description:</i> A SOAP attachment was
+ * expected, but none were found.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * N/A</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> MissingContentLength</p> </li> <li> <p>
+ * <i>Description:</i> You must provide the Content-Length HTTP header.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 411 Length Required</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> MissingRequestBodyError</p> </li> <li> <p> <i>Description:</i> This
+ * happens when the user sends an empty XML document as a request. The error
+ * message is, "Request body is empty." </p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityElement</p> </li> <li> <p> <i>Description:</i> The SOAP 1.1
+ * request is missing a security element.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * MissingSecurityHeader</p> </li> <li> <p> <i>Description:</i> Your request is
+ * missing a required header.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> NoLoggingStatusForKey</p> </li> <li> <p>
+ * <i>Description:</i> There is no such thing as a logging status subresource for a
+ * key.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li>
+ * <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li>
+ * <p> <i>Code:</i> NoSuchBucket</p> </li> <li> <p> <i>Description:</i> The
+ * specified bucket does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404
+ * Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchBucketPolicy</p> </li> <li>
+ * <p> <i>Description:</i> The specified bucket does not have a bucket policy.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> NoSuchKey</p> </li> <li> <p> <i>Description:</i> The specified key
+ * does not exist.</p> </li> <li> <p> <i>HTTP Status Code:</i> 404 Not Found</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li>
+ * <ul> <li> <p> <i>Code:</i> NoSuchLifecycleConfiguration</p> </li> <li> <p>
+ * <i>Description:</i> The lifecycle configuration does not exist. </p> </li> <li>
+ * <p> <i>HTTP Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * NoSuchUpload</p> </li> <li> <p> <i>Description:</i> The specified multipart
+ * upload does not exist. The upload ID might be invalid, or the multipart upload
+ * might have been aborted or completed.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NoSuchVersion </p>
+ * </li> <li> <p> <i>Description:</i> Indicates that the version ID specified in
+ * the request does not match an existing version.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 404 Not Found</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotImplemented</p>
+ * </li> <li> <p> <i>Description:</i> A header you provided implies functionality
+ * that is not implemented.</p> </li> <li> <p> <i>HTTP Status Code:</i> 501 Not
+ * Implemented</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Server</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> NotSignedUp</p> </li> <li> <p>
+ * <i>Description:</i> Your account is not signed up for the Amazon S3 service. You
+ * must sign up before you can use Amazon S3. You can sign up at the following URL:
+ * https://aws.amazon.com/s3</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> OperationAborted</p> </li> <li> <p>
+ * <i>Description:</i> A conflicting conditional operation is currently in progress
+ * against this resource. Try again.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> PermanentRedirect</p> </li> <li> <p>
+ * <i>Description:</i> The bucket you are attempting to access must be addressed
+ * using the specified endpoint. Send all future requests to this endpoint.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 301 Moved Permanently</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> PreconditionFailed</p> </li> <li> <p> <i>Description:</i> At least
+ * one of the preconditions you specified did not hold.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 412 Precondition Failed</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * Redirect</p> </li> <li> <p> <i>Description:</i> Temporary redirect.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RestoreAlreadyInProgress</p> </li> <li> <p> <i>Description:</i>
+ * Object restore is already in progress.</p> </li> <li> <p> <i>HTTP Status
+ * Code:</i> 409 Conflict</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i>
+ * Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestIsNotMultiPartContent</p> </li> <li> <p> <i>Description:</i> Bucket POST
+ * must be of the enclosure-type multipart/form-data.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * RequestTimeout</p> </li> <li> <p> <i>Description:</i> Your socket connection to
+ * the server was not read from or written to within the timeout period.</p> </li>
+ * <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTimeTooSkewed</p> </li> <li> <p> <i>Description:</i> The
+ * difference between the request time and the server's time is too large.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 403 Forbidden</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> RequestTorrentOfBucketError</p> </li> <li> <p> <i>Description:</i>
+ * Requesting the torrent file of a bucket is not permitted.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SignatureDoesNotMatch</p> </li> <li> <p> <i>Description:</i> The request
+ * signature we calculated does not match the signature you provided. Check your
+ * AWS secret access key and signing method. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html">SOAP
+ * Authentication</a> for details.</p> </li> <li> <p> <i>HTTP Status Code:</i> 403
+ * Forbidden</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li>
+ * </ul> </li> <li> <ul> <li> <p> <i>Code:</i> ServiceUnavailable</p> </li> <li>
+ * <p> <i>Description:</i> Reduce your request rate.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 503 Service Unavailable</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * SlowDown</p> </li> <li> <p> <i>Description:</i> Reduce your request rate.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 503 Slow Down</p> </li> <li> <p> <i>SOAP
+ * Fault Code Prefix:</i> Server</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> TemporaryRedirect</p> </li> <li> <p> <i>Description:</i> You are
+ * being redirected to the bucket while DNS updates.</p> </li> <li> <p> <i>HTTP
+ * Status Code:</i> 307 Moved Temporarily</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * TokenRefreshRequired</p> </li> <li> <p> <i>Description:</i> The provided token
+ * must be refreshed.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad
+ * Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul>
+ * </li> <li> <ul> <li> <p> <i>Code:</i> TooManyBuckets</p> </li> <li> <p>
+ * <i>Description:</i> You have attempted to create more buckets than allowed.</p>
+ * </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p>
+ * <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p>
+ * <i>Code:</i> UnexpectedContent</p> </li> <li> <p> <i>Description:</i> This
+ * request does not support content.</p> </li> <li> <p> <i>HTTP Status Code:</i>
+ * 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p>
+ * </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UnresolvableGrantByEmailAddress</p> </li> <li> <p> <i>Description:</i> The email
+ * address you provided does not match any account on record.</p> </li> <li> <p>
+ * <i>HTTP Status Code:</i> 400 Bad Request</p> </li> <li> <p> <i>SOAP Fault Code
+ * Prefix:</i> Client</p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:</i>
+ * UserKeyMustBeSpecified</p> </li> <li> <p> <i>Description:</i> The bucket POST
+ * must contain the specified field name. If it is specified, check the order of
+ * the fields.</p> </li> <li> <p> <i>HTTP Status Code:</i> 400 Bad Request</p>
+ * </li> <li> <p> <i>SOAP Fault Code Prefix:</i> Client</p> </li> </ul> </li> </ul>
+ * <p/>
+ */
+ inline Error& WithCode(const char* value) { SetCode(value); return *this;}
+
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline const Aws::String& GetMessage() const{ return m_message; }
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline bool MessageHasBeenSet() const { return m_messageHasBeenSet; }
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline void SetMessage(const Aws::String& value) { m_messageHasBeenSet = true; m_message = value; }
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline void SetMessage(Aws::String&& value) { m_messageHasBeenSet = true; m_message = std::move(value); }
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline void SetMessage(const char* value) { m_messageHasBeenSet = true; m_message.assign(value); }
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline Error& WithMessage(const Aws::String& value) { SetMessage(value); return *this;}
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline Error& WithMessage(Aws::String&& value) { SetMessage(std::move(value)); return *this;}
+
+ /**
+ * <p>The error message contains a generic description of the error condition in
+ * English. It is intended for a human audience. Simple programs display the
+ * message directly to the end user if they encounter an error condition they don't
+ * know how or don't care to handle. Sophisticated programs with more exhaustive
+ * error handling and proper internationalization are more likely to ignore the
+ * error message.</p>
+ */
+ inline Error& WithMessage(const char* value) { SetMessage(value); return *this;}
+
+ private:
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_code;
+ bool m_codeHasBeenSet;
+
+ Aws::String m_message;
+ bool m_messageHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ErrorDocument.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ErrorDocument.h
new file mode 100644
index 00000000000..610d32187ac
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ErrorDocument.h
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The error information.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ErrorDocument">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ErrorDocument
+ {
+ public:
+ ErrorDocument();
+ ErrorDocument(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ErrorDocument& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline ErrorDocument& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline ErrorDocument& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key name to use when a 4XX class error occurs.</p>
+ */
+ inline ErrorDocument& WithKey(const char* value) { SetKey(value); return *this;}
+
+ private:
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Event.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Event.h
new file mode 100644
index 00000000000..036cc475431
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Event.h
@@ -0,0 +1,46 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class Event
+ {
+ NOT_SET,
+ s3_ReducedRedundancyLostObject,
+ s3_ObjectCreated,
+ s3_ObjectCreated_Put,
+ s3_ObjectCreated_Post,
+ s3_ObjectCreated_Copy,
+ s3_ObjectCreated_CompleteMultipartUpload,
+ s3_ObjectRemoved,
+ s3_ObjectRemoved_Delete,
+ s3_ObjectRemoved_DeleteMarkerCreated,
+ s3_ObjectRestore,
+ s3_ObjectRestore_Post,
+ s3_ObjectRestore_Completed,
+ s3_Replication,
+ s3_Replication_OperationFailedReplication,
+ s3_Replication_OperationNotTracked,
+ s3_Replication_OperationMissedThreshold,
+ s3_Replication_OperationReplicatedAfterThreshold
+ };
+
+namespace EventMapper
+{
+AWS_S3_API Event GetEventForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForEvent(Event value);
+} // namespace EventMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplication.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplication.h
new file mode 100644
index 00000000000..bb9bebd9597
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplication.h
@@ -0,0 +1,82 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ExistingObjectReplicationStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Optional configuration to replicate existing source bucket objects. For more
+ * information, see <a href="
+ * https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-what-is-isnot-replicated.html#existing-object-replication">Replicating
+ * Existing Objects</a> in the <i>Amazon S3 Developer Guide</i>. </p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ExistingObjectReplication">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ExistingObjectReplication
+ {
+ public:
+ ExistingObjectReplication();
+ ExistingObjectReplication(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ExistingObjectReplication& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p/>
+ */
+ inline const ExistingObjectReplicationStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p/>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p/>
+ */
+ inline void SetStatus(const ExistingObjectReplicationStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p/>
+ */
+ inline void SetStatus(ExistingObjectReplicationStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p/>
+ */
+ inline ExistingObjectReplication& WithStatus(const ExistingObjectReplicationStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p/>
+ */
+ inline ExistingObjectReplication& WithStatus(ExistingObjectReplicationStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ ExistingObjectReplicationStatus m_status;
+ bool m_statusHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplicationStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplicationStatus.h
new file mode 100644
index 00000000000..85079898501
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExistingObjectReplicationStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ExistingObjectReplicationStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace ExistingObjectReplicationStatusMapper
+{
+AWS_S3_API ExistingObjectReplicationStatus GetExistingObjectReplicationStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForExistingObjectReplicationStatus(ExistingObjectReplicationStatus value);
+} // namespace ExistingObjectReplicationStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpirationStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpirationStatus.h
new file mode 100644
index 00000000000..5aaa3da84c5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpirationStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ExpirationStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace ExpirationStatusMapper
+{
+AWS_S3_API ExpirationStatus GetExpirationStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForExpirationStatus(ExpirationStatus value);
+} // namespace ExpirationStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpressionType.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpressionType.h
new file mode 100644
index 00000000000..309c0741140
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ExpressionType.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ExpressionType
+ {
+ NOT_SET,
+ SQL
+ };
+
+namespace ExpressionTypeMapper
+{
+AWS_S3_API ExpressionType GetExpressionTypeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForExpressionType(ExpressionType value);
+} // namespace ExpressionTypeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FileHeaderInfo.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FileHeaderInfo.h
new file mode 100644
index 00000000000..227b3c91678
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FileHeaderInfo.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class FileHeaderInfo
+ {
+ NOT_SET,
+ USE,
+ IGNORE,
+ NONE
+ };
+
+namespace FileHeaderInfoMapper
+{
+AWS_S3_API FileHeaderInfo GetFileHeaderInfoForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForFileHeaderInfo(FileHeaderInfo value);
+} // namespace FileHeaderInfoMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRule.h
new file mode 100644
index 00000000000..e63b80e32ca
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRule.h
@@ -0,0 +1,154 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/FilterRuleName.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the Amazon S3 object key name to filter on and whether to filter on
+ * the suffix or prefix of the key name.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/FilterRule">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API FilterRule
+ {
+ public:
+ FilterRule();
+ FilterRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ FilterRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The object key name prefix or suffix identifying one or more objects to which
+ * the filtering rule applies. The maximum length is 1,024 characters. Overlapping
+ * prefixes and suffixes are not supported. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const FilterRuleName& GetName() const{ return m_name; }
+
+ /**
+ * <p>The object key name prefix or suffix identifying one or more objects to which
+ * the filtering rule applies. The maximum length is 1,024 characters. Overlapping
+ * prefixes and suffixes are not supported. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool NameHasBeenSet() const { return m_nameHasBeenSet; }
+
+ /**
+ * <p>The object key name prefix or suffix identifying one or more objects to which
+ * the filtering rule applies. The maximum length is 1,024 characters. Overlapping
+ * prefixes and suffixes are not supported. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetName(const FilterRuleName& value) { m_nameHasBeenSet = true; m_name = value; }
+
+ /**
+ * <p>The object key name prefix or suffix identifying one or more objects to which
+ * the filtering rule applies. The maximum length is 1,024 characters. Overlapping
+ * prefixes and suffixes are not supported. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetName(FilterRuleName&& value) { m_nameHasBeenSet = true; m_name = std::move(value); }
+
+ /**
+ * <p>The object key name prefix or suffix identifying one or more objects to which
+ * the filtering rule applies. The maximum length is 1,024 characters. Overlapping
+ * prefixes and suffixes are not supported. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline FilterRule& WithName(const FilterRuleName& value) { SetName(value); return *this;}
+
+ /**
+ * <p>The object key name prefix or suffix identifying one or more objects to which
+ * the filtering rule applies. The maximum length is 1,024 characters. Overlapping
+ * prefixes and suffixes are not supported. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline FilterRule& WithName(FilterRuleName&& value) { SetName(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline const Aws::String& GetValue() const{ return m_value; }
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline bool ValueHasBeenSet() const { return m_valueHasBeenSet; }
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline void SetValue(const Aws::String& value) { m_valueHasBeenSet = true; m_value = value; }
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline void SetValue(Aws::String&& value) { m_valueHasBeenSet = true; m_value = std::move(value); }
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline void SetValue(const char* value) { m_valueHasBeenSet = true; m_value.assign(value); }
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline FilterRule& WithValue(const Aws::String& value) { SetValue(value); return *this;}
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline FilterRule& WithValue(Aws::String&& value) { SetValue(std::move(value)); return *this;}
+
+ /**
+ * <p>The value that the filter searches for in object key names.</p>
+ */
+ inline FilterRule& WithValue(const char* value) { SetValue(value); return *this;}
+
+ private:
+
+ FilterRuleName m_name;
+ bool m_nameHasBeenSet;
+
+ Aws::String m_value;
+ bool m_valueHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRuleName.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRuleName.h
new file mode 100644
index 00000000000..9642c02e384
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/FilterRuleName.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class FilterRuleName
+ {
+ NOT_SET,
+ prefix,
+ suffix
+ };
+
+namespace FilterRuleNameMapper
+{
+AWS_S3_API FilterRuleName GetFilterRuleNameForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForFilterRuleName(FilterRuleName value);
+} // namespace FilterRuleNameMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationRequest.h
new file mode 100644
index 00000000000..1c1fb18949b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketAccelerateConfigurationRequest : public S3Request
+ {
+ public:
+ GetBucketAccelerateConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketAccelerateConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketAccelerateConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketAccelerateConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketAccelerateConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAccelerateConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAccelerateConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAccelerateConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketAccelerateConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketAccelerateConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationResult.h
new file mode 100644
index 00000000000..7838cbb34d7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAccelerateConfigurationResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/BucketAccelerateStatus.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketAccelerateConfigurationResult
+ {
+ public:
+ GetBucketAccelerateConfigurationResult();
+ GetBucketAccelerateConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketAccelerateConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The accelerate configuration of the bucket.</p>
+ */
+ inline const BucketAccelerateStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>The accelerate configuration of the bucket.</p>
+ */
+ inline void SetStatus(const BucketAccelerateStatus& value) { m_status = value; }
+
+ /**
+ * <p>The accelerate configuration of the bucket.</p>
+ */
+ inline void SetStatus(BucketAccelerateStatus&& value) { m_status = std::move(value); }
+
+ /**
+ * <p>The accelerate configuration of the bucket.</p>
+ */
+ inline GetBucketAccelerateConfigurationResult& WithStatus(const BucketAccelerateStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>The accelerate configuration of the bucket.</p>
+ */
+ inline GetBucketAccelerateConfigurationResult& WithStatus(BucketAccelerateStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ BucketAccelerateStatus m_status;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclRequest.h
new file mode 100644
index 00000000000..90071fcc072
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketAclRequest : public S3Request
+ {
+ public:
+ GetBucketAclRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketAcl"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline GetBucketAclRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline GetBucketAclRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the S3 bucket whose ACL is being requested.</p>
+ */
+ inline GetBucketAclRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAclRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAclRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAclRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketAclRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketAclRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketAclRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketAclRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclResult.h
new file mode 100644
index 00000000000..dc3723c89ce
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAclResult.h
@@ -0,0 +1,107 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Owner.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Grant.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketAclResult
+ {
+ public:
+ GetBucketAclResult();
+ GetBucketAclResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketAclResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline void SetOwner(const Owner& value) { m_owner = value; }
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline void SetOwner(Owner&& value) { m_owner = std::move(value); }
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline GetBucketAclResult& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>Container for the bucket owner's display name and ID.</p>
+ */
+ inline GetBucketAclResult& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline const Aws::Vector<Grant>& GetGrants() const{ return m_grants; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline void SetGrants(const Aws::Vector<Grant>& value) { m_grants = value; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline void SetGrants(Aws::Vector<Grant>&& value) { m_grants = std::move(value); }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetBucketAclResult& WithGrants(const Aws::Vector<Grant>& value) { SetGrants(value); return *this;}
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetBucketAclResult& WithGrants(Aws::Vector<Grant>&& value) { SetGrants(std::move(value)); return *this;}
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetBucketAclResult& AddGrants(const Grant& value) { m_grants.push_back(value); return *this; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetBucketAclResult& AddGrants(Grant&& value) { m_grants.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Owner m_owner;
+
+ Aws::Vector<Grant> m_grants;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationRequest.h
new file mode 100644
index 00000000000..63e6d8c7220
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationRequest.h
@@ -0,0 +1,247 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketAnalyticsConfigurationRequest : public S3Request
+ {
+ public:
+ GetBucketAnalyticsConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketAnalyticsConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket from which an analytics configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketAnalyticsConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketAnalyticsConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationResult.h
new file mode 100644
index 00000000000..d0847a14589
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketAnalyticsConfigurationResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/AnalyticsConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketAnalyticsConfigurationResult
+ {
+ public:
+ GetBucketAnalyticsConfigurationResult();
+ GetBucketAnalyticsConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketAnalyticsConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline const AnalyticsConfiguration& GetAnalyticsConfiguration() const{ return m_analyticsConfiguration; }
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline void SetAnalyticsConfiguration(const AnalyticsConfiguration& value) { m_analyticsConfiguration = value; }
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline void SetAnalyticsConfiguration(AnalyticsConfiguration&& value) { m_analyticsConfiguration = std::move(value); }
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline GetBucketAnalyticsConfigurationResult& WithAnalyticsConfiguration(const AnalyticsConfiguration& value) { SetAnalyticsConfiguration(value); return *this;}
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline GetBucketAnalyticsConfigurationResult& WithAnalyticsConfiguration(AnalyticsConfiguration&& value) { SetAnalyticsConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ AnalyticsConfiguration m_analyticsConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsRequest.h
new file mode 100644
index 00000000000..fabc83b57d9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketCorsRequest : public S3Request
+ {
+ public:
+ GetBucketCorsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketCors"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline GetBucketCorsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline GetBucketCorsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the cors configuration.</p>
+ */
+ inline GetBucketCorsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketCorsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketCorsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketCorsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketCorsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketCorsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketCorsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketCorsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketCorsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketCorsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsResult.h
new file mode 100644
index 00000000000..8e0e34069f9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketCorsResult.h
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/CORSRule.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketCorsResult
+ {
+ public:
+ GetBucketCorsResult();
+ GetBucketCorsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketCorsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline const Aws::Vector<CORSRule>& GetCORSRules() const{ return m_cORSRules; }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline void SetCORSRules(const Aws::Vector<CORSRule>& value) { m_cORSRules = value; }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline void SetCORSRules(Aws::Vector<CORSRule>&& value) { m_cORSRules = std::move(value); }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline GetBucketCorsResult& WithCORSRules(const Aws::Vector<CORSRule>& value) { SetCORSRules(value); return *this;}
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline GetBucketCorsResult& WithCORSRules(Aws::Vector<CORSRule>&& value) { SetCORSRules(std::move(value)); return *this;}
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline GetBucketCorsResult& AddCORSRules(const CORSRule& value) { m_cORSRules.push_back(value); return *this; }
+
+ /**
+ * <p>A set of origins and methods (cross-origin access that you want to allow).
+ * You can add up to 100 rules to the configuration.</p>
+ */
+ inline GetBucketCorsResult& AddCORSRules(CORSRule&& value) { m_cORSRules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<CORSRule> m_cORSRules;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionRequest.h
new file mode 100644
index 00000000000..9d7f2f17a1d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketEncryptionRequest : public S3Request
+ {
+ public:
+ GetBucketEncryptionRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketEncryption"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketEncryptionRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketEncryptionRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket from which the server-side encryption configuration is
+ * retrieved.</p>
+ */
+ inline GetBucketEncryptionRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketEncryptionRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketEncryptionRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketEncryptionRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketEncryptionRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketEncryptionRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketEncryptionRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketEncryptionRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketEncryptionRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketEncryptionRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionResult.h
new file mode 100644
index 00000000000..deab65dbd43
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketEncryptionResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ServerSideEncryptionConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketEncryptionResult
+ {
+ public:
+ GetBucketEncryptionResult();
+ GetBucketEncryptionResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketEncryptionResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const ServerSideEncryptionConfiguration& GetServerSideEncryptionConfiguration() const{ return m_serverSideEncryptionConfiguration; }
+
+
+ inline void SetServerSideEncryptionConfiguration(const ServerSideEncryptionConfiguration& value) { m_serverSideEncryptionConfiguration = value; }
+
+
+ inline void SetServerSideEncryptionConfiguration(ServerSideEncryptionConfiguration&& value) { m_serverSideEncryptionConfiguration = std::move(value); }
+
+
+ inline GetBucketEncryptionResult& WithServerSideEncryptionConfiguration(const ServerSideEncryptionConfiguration& value) { SetServerSideEncryptionConfiguration(value); return *this;}
+
+
+ inline GetBucketEncryptionResult& WithServerSideEncryptionConfiguration(ServerSideEncryptionConfiguration&& value) { SetServerSideEncryptionConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ ServerSideEncryptionConfiguration m_serverSideEncryptionConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationRequest.h
new file mode 100644
index 00000000000..ddba23557e7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationRequest.h
@@ -0,0 +1,185 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketIntelligentTieringConfigurationRequest : public S3Request
+ {
+ public:
+ GetBucketIntelligentTieringConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketIntelligentTieringConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationResult.h
new file mode 100644
index 00000000000..a039bb60be1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketIntelligentTieringConfigurationResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/IntelligentTieringConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketIntelligentTieringConfigurationResult
+ {
+ public:
+ GetBucketIntelligentTieringConfigurationResult();
+ GetBucketIntelligentTieringConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketIntelligentTieringConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline const IntelligentTieringConfiguration& GetIntelligentTieringConfiguration() const{ return m_intelligentTieringConfiguration; }
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetIntelligentTieringConfiguration(const IntelligentTieringConfiguration& value) { m_intelligentTieringConfiguration = value; }
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetIntelligentTieringConfiguration(IntelligentTieringConfiguration&& value) { m_intelligentTieringConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationResult& WithIntelligentTieringConfiguration(const IntelligentTieringConfiguration& value) { SetIntelligentTieringConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline GetBucketIntelligentTieringConfigurationResult& WithIntelligentTieringConfiguration(IntelligentTieringConfiguration&& value) { SetIntelligentTieringConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ IntelligentTieringConfiguration m_intelligentTieringConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationRequest.h
new file mode 100644
index 00000000000..3eb1bb67556
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationRequest.h
@@ -0,0 +1,247 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketInventoryConfigurationRequest : public S3Request
+ {
+ public:
+ GetBucketInventoryConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketInventoryConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the inventory configuration to
+ * retrieve.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketInventoryConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketInventoryConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketInventoryConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationResult.h
new file mode 100644
index 00000000000..034c56c8ef7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketInventoryConfigurationResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/InventoryConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketInventoryConfigurationResult
+ {
+ public:
+ GetBucketInventoryConfigurationResult();
+ GetBucketInventoryConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketInventoryConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline const InventoryConfiguration& GetInventoryConfiguration() const{ return m_inventoryConfiguration; }
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline void SetInventoryConfiguration(const InventoryConfiguration& value) { m_inventoryConfiguration = value; }
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline void SetInventoryConfiguration(InventoryConfiguration&& value) { m_inventoryConfiguration = std::move(value); }
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline GetBucketInventoryConfigurationResult& WithInventoryConfiguration(const InventoryConfiguration& value) { SetInventoryConfiguration(value); return *this;}
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline GetBucketInventoryConfigurationResult& WithInventoryConfiguration(InventoryConfiguration&& value) { SetInventoryConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ InventoryConfiguration m_inventoryConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationRequest.h
new file mode 100644
index 00000000000..8797dbd7d0f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketLifecycleConfigurationRequest : public S3Request
+ {
+ public:
+ GetBucketLifecycleConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketLifecycleConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline GetBucketLifecycleConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline GetBucketLifecycleConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the lifecycle information.</p>
+ */
+ inline GetBucketLifecycleConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLifecycleConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLifecycleConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLifecycleConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketLifecycleConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketLifecycleConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationResult.h
new file mode 100644
index 00000000000..c04c22a758f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLifecycleConfigurationResult.h
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/LifecycleRule.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketLifecycleConfigurationResult
+ {
+ public:
+ GetBucketLifecycleConfigurationResult();
+ GetBucketLifecycleConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketLifecycleConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Container for a lifecycle rule.</p>
+ */
+ inline const Aws::Vector<LifecycleRule>& GetRules() const{ return m_rules; }
+
+ /**
+ * <p>Container for a lifecycle rule.</p>
+ */
+ inline void SetRules(const Aws::Vector<LifecycleRule>& value) { m_rules = value; }
+
+ /**
+ * <p>Container for a lifecycle rule.</p>
+ */
+ inline void SetRules(Aws::Vector<LifecycleRule>&& value) { m_rules = std::move(value); }
+
+ /**
+ * <p>Container for a lifecycle rule.</p>
+ */
+ inline GetBucketLifecycleConfigurationResult& WithRules(const Aws::Vector<LifecycleRule>& value) { SetRules(value); return *this;}
+
+ /**
+ * <p>Container for a lifecycle rule.</p>
+ */
+ inline GetBucketLifecycleConfigurationResult& WithRules(Aws::Vector<LifecycleRule>&& value) { SetRules(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for a lifecycle rule.</p>
+ */
+ inline GetBucketLifecycleConfigurationResult& AddRules(const LifecycleRule& value) { m_rules.push_back(value); return *this; }
+
+ /**
+ * <p>Container for a lifecycle rule.</p>
+ */
+ inline GetBucketLifecycleConfigurationResult& AddRules(LifecycleRule&& value) { m_rules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<LifecycleRule> m_rules;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationRequest.h
new file mode 100644
index 00000000000..777f5521f86
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketLocationRequest : public S3Request
+ {
+ public:
+ GetBucketLocationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketLocation"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline GetBucketLocationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline GetBucketLocationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the location.</p>
+ */
+ inline GetBucketLocationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLocationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLocationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLocationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketLocationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketLocationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketLocationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketLocationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketLocationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketLocationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketLocationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketLocationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketLocationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationResult.h
new file mode 100644
index 00000000000..4f777648cc0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLocationResult.h
@@ -0,0 +1,87 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/BucketLocationConstraint.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketLocationResult
+ {
+ public:
+ GetBucketLocationResult();
+ GetBucketLocationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketLocationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies the Region where the bucket resides. For a list of all the Amazon
+ * S3 supported location constraints by Region, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a>. Buckets in Region <code>us-east-1</code> have a
+ * LocationConstraint of <code>null</code>.</p>
+ */
+ inline const BucketLocationConstraint& GetLocationConstraint() const{ return m_locationConstraint; }
+
+ /**
+ * <p>Specifies the Region where the bucket resides. For a list of all the Amazon
+ * S3 supported location constraints by Region, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a>. Buckets in Region <code>us-east-1</code> have a
+ * LocationConstraint of <code>null</code>.</p>
+ */
+ inline void SetLocationConstraint(const BucketLocationConstraint& value) { m_locationConstraint = value; }
+
+ /**
+ * <p>Specifies the Region where the bucket resides. For a list of all the Amazon
+ * S3 supported location constraints by Region, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a>. Buckets in Region <code>us-east-1</code> have a
+ * LocationConstraint of <code>null</code>.</p>
+ */
+ inline void SetLocationConstraint(BucketLocationConstraint&& value) { m_locationConstraint = std::move(value); }
+
+ /**
+ * <p>Specifies the Region where the bucket resides. For a list of all the Amazon
+ * S3 supported location constraints by Region, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a>. Buckets in Region <code>us-east-1</code> have a
+ * LocationConstraint of <code>null</code>.</p>
+ */
+ inline GetBucketLocationResult& WithLocationConstraint(const BucketLocationConstraint& value) { SetLocationConstraint(value); return *this;}
+
+ /**
+ * <p>Specifies the Region where the bucket resides. For a list of all the Amazon
+ * S3 supported location constraints by Region, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a>. Buckets in Region <code>us-east-1</code> have a
+ * LocationConstraint of <code>null</code>.</p>
+ */
+ inline GetBucketLocationResult& WithLocationConstraint(BucketLocationConstraint&& value) { SetLocationConstraint(std::move(value)); return *this;}
+
+ private:
+
+ BucketLocationConstraint m_locationConstraint;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingRequest.h
new file mode 100644
index 00000000000..f0decdec548
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketLoggingRequest : public S3Request
+ {
+ public:
+ GetBucketLoggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketLogging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline GetBucketLoggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline GetBucketLoggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the logging information.</p>
+ */
+ inline GetBucketLoggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLoggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLoggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketLoggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketLoggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketLoggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketLoggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketLoggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketLoggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketLoggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketLoggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketLoggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketLoggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingResult.h
new file mode 100644
index 00000000000..1495a54ba44
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketLoggingResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/LoggingEnabled.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketLoggingResult
+ {
+ public:
+ GetBucketLoggingResult();
+ GetBucketLoggingResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketLoggingResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const LoggingEnabled& GetLoggingEnabled() const{ return m_loggingEnabled; }
+
+
+ inline void SetLoggingEnabled(const LoggingEnabled& value) { m_loggingEnabled = value; }
+
+
+ inline void SetLoggingEnabled(LoggingEnabled&& value) { m_loggingEnabled = std::move(value); }
+
+
+ inline GetBucketLoggingResult& WithLoggingEnabled(const LoggingEnabled& value) { SetLoggingEnabled(value); return *this;}
+
+
+ inline GetBucketLoggingResult& WithLoggingEnabled(LoggingEnabled&& value) { SetLoggingEnabled(std::move(value)); return *this;}
+
+ private:
+
+ LoggingEnabled m_loggingEnabled;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationRequest.h
new file mode 100644
index 00000000000..d52e987778c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationRequest.h
@@ -0,0 +1,239 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketMetricsConfigurationRequest : public S3Request
+ {
+ public:
+ GetBucketMetricsConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketMetricsConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the metrics configuration to retrieve.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketMetricsConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketMetricsConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketMetricsConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationResult.h
new file mode 100644
index 00000000000..bb60e97dbf5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketMetricsConfigurationResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/MetricsConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketMetricsConfigurationResult
+ {
+ public:
+ GetBucketMetricsConfigurationResult();
+ GetBucketMetricsConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketMetricsConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline const MetricsConfiguration& GetMetricsConfiguration() const{ return m_metricsConfiguration; }
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline void SetMetricsConfiguration(const MetricsConfiguration& value) { m_metricsConfiguration = value; }
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline void SetMetricsConfiguration(MetricsConfiguration&& value) { m_metricsConfiguration = std::move(value); }
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline GetBucketMetricsConfigurationResult& WithMetricsConfiguration(const MetricsConfiguration& value) { SetMetricsConfiguration(value); return *this;}
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline GetBucketMetricsConfigurationResult& WithMetricsConfiguration(MetricsConfiguration&& value) { SetMetricsConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ MetricsConfiguration m_metricsConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationRequest.h
new file mode 100644
index 00000000000..20a671471ad
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketNotificationConfigurationRequest : public S3Request
+ {
+ public:
+ GetBucketNotificationConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketNotificationConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline GetBucketNotificationConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline GetBucketNotificationConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the notification configuration.</p>
+ */
+ inline GetBucketNotificationConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketNotificationConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketNotificationConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketNotificationConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketNotificationConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketNotificationConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationResult.h
new file mode 100644
index 00000000000..a8fe0671cab
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketNotificationConfigurationResult.h
@@ -0,0 +1,184 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/TopicConfiguration.h>
+#include <aws/s3/model/QueueConfiguration.h>
+#include <aws/s3/model/LambdaFunctionConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ /**
+ * <p>A container for specifying the notification configuration of the bucket. If
+ * this element is empty, notifications are turned off for the
+ * bucket.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NotificationConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API GetBucketNotificationConfigurationResult
+ {
+ public:
+ GetBucketNotificationConfigurationResult();
+ GetBucketNotificationConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketNotificationConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline const Aws::Vector<TopicConfiguration>& GetTopicConfigurations() const{ return m_topicConfigurations; }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline void SetTopicConfigurations(const Aws::Vector<TopicConfiguration>& value) { m_topicConfigurations = value; }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline void SetTopicConfigurations(Aws::Vector<TopicConfiguration>&& value) { m_topicConfigurations = std::move(value); }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& WithTopicConfigurations(const Aws::Vector<TopicConfiguration>& value) { SetTopicConfigurations(value); return *this;}
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& WithTopicConfigurations(Aws::Vector<TopicConfiguration>&& value) { SetTopicConfigurations(std::move(value)); return *this;}
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& AddTopicConfigurations(const TopicConfiguration& value) { m_topicConfigurations.push_back(value); return *this; }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& AddTopicConfigurations(TopicConfiguration&& value) { m_topicConfigurations.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline const Aws::Vector<QueueConfiguration>& GetQueueConfigurations() const{ return m_queueConfigurations; }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline void SetQueueConfigurations(const Aws::Vector<QueueConfiguration>& value) { m_queueConfigurations = value; }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline void SetQueueConfigurations(Aws::Vector<QueueConfiguration>&& value) { m_queueConfigurations = std::move(value); }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& WithQueueConfigurations(const Aws::Vector<QueueConfiguration>& value) { SetQueueConfigurations(value); return *this;}
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& WithQueueConfigurations(Aws::Vector<QueueConfiguration>&& value) { SetQueueConfigurations(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& AddQueueConfigurations(const QueueConfiguration& value) { m_queueConfigurations.push_back(value); return *this; }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& AddQueueConfigurations(QueueConfiguration&& value) { m_queueConfigurations.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline const Aws::Vector<LambdaFunctionConfiguration>& GetLambdaFunctionConfigurations() const{ return m_lambdaFunctionConfigurations; }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline void SetLambdaFunctionConfigurations(const Aws::Vector<LambdaFunctionConfiguration>& value) { m_lambdaFunctionConfigurations = value; }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline void SetLambdaFunctionConfigurations(Aws::Vector<LambdaFunctionConfiguration>&& value) { m_lambdaFunctionConfigurations = std::move(value); }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& WithLambdaFunctionConfigurations(const Aws::Vector<LambdaFunctionConfiguration>& value) { SetLambdaFunctionConfigurations(value); return *this;}
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& WithLambdaFunctionConfigurations(Aws::Vector<LambdaFunctionConfiguration>&& value) { SetLambdaFunctionConfigurations(std::move(value)); return *this;}
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& AddLambdaFunctionConfigurations(const LambdaFunctionConfiguration& value) { m_lambdaFunctionConfigurations.push_back(value); return *this; }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline GetBucketNotificationConfigurationResult& AddLambdaFunctionConfigurations(LambdaFunctionConfiguration&& value) { m_lambdaFunctionConfigurations.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<TopicConfiguration> m_topicConfigurations;
+
+ Aws::Vector<QueueConfiguration> m_queueConfigurations;
+
+ Aws::Vector<LambdaFunctionConfiguration> m_lambdaFunctionConfigurations;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsRequest.h
new file mode 100644
index 00000000000..ce8a7de017c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketOwnershipControlsRequest : public S3Request
+ {
+ public:
+ GetBucketOwnershipControlsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketOwnershipControls"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline GetBucketOwnershipControlsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline GetBucketOwnershipControlsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to retrieve. </p>
+ */
+ inline GetBucketOwnershipControlsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketOwnershipControlsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketOwnershipControlsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketOwnershipControlsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketOwnershipControlsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketOwnershipControlsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsResult.h
new file mode 100644
index 00000000000..9c28367889d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketOwnershipControlsResult.h
@@ -0,0 +1,72 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/OwnershipControls.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketOwnershipControlsResult
+ {
+ public:
+ GetBucketOwnershipControlsResult();
+ GetBucketOwnershipControlsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketOwnershipControlsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * currently in effect for this Amazon S3 bucket.</p>
+ */
+ inline const OwnershipControls& GetOwnershipControls() const{ return m_ownershipControls; }
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * currently in effect for this Amazon S3 bucket.</p>
+ */
+ inline void SetOwnershipControls(const OwnershipControls& value) { m_ownershipControls = value; }
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * currently in effect for this Amazon S3 bucket.</p>
+ */
+ inline void SetOwnershipControls(OwnershipControls&& value) { m_ownershipControls = std::move(value); }
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * currently in effect for this Amazon S3 bucket.</p>
+ */
+ inline GetBucketOwnershipControlsResult& WithOwnershipControls(const OwnershipControls& value) { SetOwnershipControls(value); return *this;}
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * currently in effect for this Amazon S3 bucket.</p>
+ */
+ inline GetBucketOwnershipControlsResult& WithOwnershipControls(OwnershipControls&& value) { SetOwnershipControls(std::move(value)); return *this;}
+
+ private:
+
+ OwnershipControls m_ownershipControls;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyRequest.h
new file mode 100644
index 00000000000..a4fa4600ed0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketPolicyRequest : public S3Request
+ {
+ public:
+ GetBucketPolicyRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketPolicy"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline GetBucketPolicyRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline GetBucketPolicyRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the bucket policy.</p>
+ */
+ inline GetBucketPolicyRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketPolicyRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketPolicyRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketPolicyRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketPolicyRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketPolicyRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketPolicyRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketPolicyRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketPolicyRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketPolicyRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyResult.h
new file mode 100644
index 00000000000..80857238c6d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyResult.h
@@ -0,0 +1,56 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketPolicyResult
+ {
+ public:
+ GetBucketPolicyResult();
+ //We have to define these because Microsoft doesn't auto generate them
+ GetBucketPolicyResult(GetBucketPolicyResult&&);
+ GetBucketPolicyResult& operator=(GetBucketPolicyResult&&);
+ //we delete these because Microsoft doesn't handle move generation correctly
+ //and we therefore don't trust them to get it right here either.
+ GetBucketPolicyResult(const GetBucketPolicyResult&) = delete;
+ GetBucketPolicyResult& operator=(const GetBucketPolicyResult&) = delete;
+
+
+ GetBucketPolicyResult(Aws::AmazonWebServiceResult<Aws::Utils::Stream::ResponseStream>&& result);
+ GetBucketPolicyResult& operator=(Aws::AmazonWebServiceResult<Aws::Utils::Stream::ResponseStream>&& result);
+
+
+
+ /**
+ * <p>The bucket policy as a JSON document.</p>
+ */
+ inline Aws::IOStream& GetPolicy() { return m_policy.GetUnderlyingStream(); }
+
+ /**
+ * <p>The bucket policy as a JSON document.</p>
+ */
+ inline void ReplaceBody(Aws::IOStream* body) { m_policy = Aws::Utils::Stream::ResponseStream(body); }
+
+ private:
+
+ Aws::Utils::Stream::ResponseStream m_policy;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusRequest.h
new file mode 100644
index 00000000000..941ce2ee44a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketPolicyStatusRequest : public S3Request
+ {
+ public:
+ GetBucketPolicyStatusRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketPolicyStatus"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline GetBucketPolicyStatusRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline GetBucketPolicyStatusRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose policy status you want to
+ * retrieve.</p>
+ */
+ inline GetBucketPolicyStatusRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketPolicyStatusRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketPolicyStatusRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketPolicyStatusRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketPolicyStatusRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketPolicyStatusRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketPolicyStatusRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketPolicyStatusRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketPolicyStatusRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketPolicyStatusRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketPolicyStatusRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketPolicyStatusRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketPolicyStatusRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusResult.h
new file mode 100644
index 00000000000..d1935f3590a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketPolicyStatusResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/PolicyStatus.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketPolicyStatusResult
+ {
+ public:
+ GetBucketPolicyStatusResult();
+ GetBucketPolicyStatusResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketPolicyStatusResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The policy status for the specified bucket.</p>
+ */
+ inline const PolicyStatus& GetPolicyStatus() const{ return m_policyStatus; }
+
+ /**
+ * <p>The policy status for the specified bucket.</p>
+ */
+ inline void SetPolicyStatus(const PolicyStatus& value) { m_policyStatus = value; }
+
+ /**
+ * <p>The policy status for the specified bucket.</p>
+ */
+ inline void SetPolicyStatus(PolicyStatus&& value) { m_policyStatus = std::move(value); }
+
+ /**
+ * <p>The policy status for the specified bucket.</p>
+ */
+ inline GetBucketPolicyStatusResult& WithPolicyStatus(const PolicyStatus& value) { SetPolicyStatus(value); return *this;}
+
+ /**
+ * <p>The policy status for the specified bucket.</p>
+ */
+ inline GetBucketPolicyStatusResult& WithPolicyStatus(PolicyStatus&& value) { SetPolicyStatus(std::move(value)); return *this;}
+
+ private:
+
+ PolicyStatus m_policyStatus;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationRequest.h
new file mode 100644
index 00000000000..8ee31eefefb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketReplicationRequest : public S3Request
+ {
+ public:
+ GetBucketReplicationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketReplication"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline GetBucketReplicationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline GetBucketReplicationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the replication information.</p>
+ */
+ inline GetBucketReplicationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketReplicationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketReplicationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketReplicationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketReplicationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketReplicationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketReplicationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketReplicationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketReplicationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketReplicationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationResult.h
new file mode 100644
index 00000000000..ff53188ffd1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketReplicationResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ReplicationConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketReplicationResult
+ {
+ public:
+ GetBucketReplicationResult();
+ GetBucketReplicationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketReplicationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const ReplicationConfiguration& GetReplicationConfiguration() const{ return m_replicationConfiguration; }
+
+
+ inline void SetReplicationConfiguration(const ReplicationConfiguration& value) { m_replicationConfiguration = value; }
+
+
+ inline void SetReplicationConfiguration(ReplicationConfiguration&& value) { m_replicationConfiguration = std::move(value); }
+
+
+ inline GetBucketReplicationResult& WithReplicationConfiguration(const ReplicationConfiguration& value) { SetReplicationConfiguration(value); return *this;}
+
+
+ inline GetBucketReplicationResult& WithReplicationConfiguration(ReplicationConfiguration&& value) { SetReplicationConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ ReplicationConfiguration m_replicationConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentRequest.h
new file mode 100644
index 00000000000..6421700b816
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketRequestPaymentRequest : public S3Request
+ {
+ public:
+ GetBucketRequestPaymentRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketRequestPayment"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline GetBucketRequestPaymentRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline GetBucketRequestPaymentRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the payment request configuration</p>
+ */
+ inline GetBucketRequestPaymentRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketRequestPaymentRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketRequestPaymentRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketRequestPaymentRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketRequestPaymentRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketRequestPaymentRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketRequestPaymentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketRequestPaymentRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketRequestPaymentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentResult.h
new file mode 100644
index 00000000000..48b84e3462a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketRequestPaymentResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Payer.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketRequestPaymentResult
+ {
+ public:
+ GetBucketRequestPaymentResult();
+ GetBucketRequestPaymentResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketRequestPaymentResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline const Payer& GetPayer() const{ return m_payer; }
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline void SetPayer(const Payer& value) { m_payer = value; }
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline void SetPayer(Payer&& value) { m_payer = std::move(value); }
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline GetBucketRequestPaymentResult& WithPayer(const Payer& value) { SetPayer(value); return *this;}
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline GetBucketRequestPaymentResult& WithPayer(Payer&& value) { SetPayer(std::move(value)); return *this;}
+
+ private:
+
+ Payer m_payer;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingRequest.h
new file mode 100644
index 00000000000..7b17610bb24
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketTaggingRequest : public S3Request
+ {
+ public:
+ GetBucketTaggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketTagging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline GetBucketTaggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline GetBucketTaggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the tagging information.</p>
+ */
+ inline GetBucketTaggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketTaggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketTaggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketTaggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketTaggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketTaggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketTaggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketTaggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingResult.h
new file mode 100644
index 00000000000..7555a772b4f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketTaggingResult.h
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketTaggingResult
+ {
+ public:
+ GetBucketTaggingResult();
+ GetBucketTaggingResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketTaggingResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline const Aws::Vector<Tag>& GetTagSet() const{ return m_tagSet; }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline void SetTagSet(const Aws::Vector<Tag>& value) { m_tagSet = value; }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline void SetTagSet(Aws::Vector<Tag>&& value) { m_tagSet = std::move(value); }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetBucketTaggingResult& WithTagSet(const Aws::Vector<Tag>& value) { SetTagSet(value); return *this;}
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetBucketTaggingResult& WithTagSet(Aws::Vector<Tag>&& value) { SetTagSet(std::move(value)); return *this;}
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetBucketTaggingResult& AddTagSet(const Tag& value) { m_tagSet.push_back(value); return *this; }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetBucketTaggingResult& AddTagSet(Tag&& value) { m_tagSet.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<Tag> m_tagSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningRequest.h
new file mode 100644
index 00000000000..5edd374cbe8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketVersioningRequest : public S3Request
+ {
+ public:
+ GetBucketVersioningRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketVersioning"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline GetBucketVersioningRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline GetBucketVersioningRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to get the versioning information.</p>
+ */
+ inline GetBucketVersioningRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketVersioningRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketVersioningRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketVersioningRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketVersioningRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketVersioningRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketVersioningRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketVersioningRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketVersioningRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketVersioningRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketVersioningRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketVersioningRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketVersioningRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningResult.h
new file mode 100644
index 00000000000..2e4d7707518
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketVersioningResult.h
@@ -0,0 +1,111 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/BucketVersioningStatus.h>
+#include <aws/s3/model/MFADeleteStatus.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketVersioningResult
+ {
+ public:
+ GetBucketVersioningResult();
+ GetBucketVersioningResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketVersioningResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline const BucketVersioningStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline void SetStatus(const BucketVersioningStatus& value) { m_status = value; }
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline void SetStatus(BucketVersioningStatus&& value) { m_status = std::move(value); }
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline GetBucketVersioningResult& WithStatus(const BucketVersioningStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline GetBucketVersioningResult& WithStatus(BucketVersioningStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline const MFADeleteStatus& GetMFADelete() const{ return m_mFADelete; }
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline void SetMFADelete(const MFADeleteStatus& value) { m_mFADelete = value; }
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline void SetMFADelete(MFADeleteStatus&& value) { m_mFADelete = std::move(value); }
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline GetBucketVersioningResult& WithMFADelete(const MFADeleteStatus& value) { SetMFADelete(value); return *this;}
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline GetBucketVersioningResult& WithMFADelete(MFADeleteStatus&& value) { SetMFADelete(std::move(value)); return *this;}
+
+ private:
+
+ BucketVersioningStatus m_status;
+
+ MFADeleteStatus m_mFADelete;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteRequest.h
new file mode 100644
index 00000000000..198b4d3b9d2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteRequest.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetBucketWebsiteRequest : public S3Request
+ {
+ public:
+ GetBucketWebsiteRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetBucketWebsite"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline GetBucketWebsiteRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline GetBucketWebsiteRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name for which to get the website configuration.</p>
+ */
+ inline GetBucketWebsiteRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketWebsiteRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketWebsiteRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetBucketWebsiteRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetBucketWebsiteRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetBucketWebsiteRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetBucketWebsiteRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketWebsiteRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetBucketWebsiteRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetBucketWebsiteRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteResult.h
new file mode 100644
index 00000000000..f5cb5577b5c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetBucketWebsiteResult.h
@@ -0,0 +1,180 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/RedirectAllRequestsTo.h>
+#include <aws/s3/model/IndexDocument.h>
+#include <aws/s3/model/ErrorDocument.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/RoutingRule.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetBucketWebsiteResult
+ {
+ public:
+ GetBucketWebsiteResult();
+ GetBucketWebsiteResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetBucketWebsiteResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies the redirect behavior of all requests to a website endpoint of an
+ * Amazon S3 bucket.</p>
+ */
+ inline const RedirectAllRequestsTo& GetRedirectAllRequestsTo() const{ return m_redirectAllRequestsTo; }
+
+ /**
+ * <p>Specifies the redirect behavior of all requests to a website endpoint of an
+ * Amazon S3 bucket.</p>
+ */
+ inline void SetRedirectAllRequestsTo(const RedirectAllRequestsTo& value) { m_redirectAllRequestsTo = value; }
+
+ /**
+ * <p>Specifies the redirect behavior of all requests to a website endpoint of an
+ * Amazon S3 bucket.</p>
+ */
+ inline void SetRedirectAllRequestsTo(RedirectAllRequestsTo&& value) { m_redirectAllRequestsTo = std::move(value); }
+
+ /**
+ * <p>Specifies the redirect behavior of all requests to a website endpoint of an
+ * Amazon S3 bucket.</p>
+ */
+ inline GetBucketWebsiteResult& WithRedirectAllRequestsTo(const RedirectAllRequestsTo& value) { SetRedirectAllRequestsTo(value); return *this;}
+
+ /**
+ * <p>Specifies the redirect behavior of all requests to a website endpoint of an
+ * Amazon S3 bucket.</p>
+ */
+ inline GetBucketWebsiteResult& WithRedirectAllRequestsTo(RedirectAllRequestsTo&& value) { SetRedirectAllRequestsTo(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The name of the index document for the website (for example
+ * <code>index.html</code>).</p>
+ */
+ inline const IndexDocument& GetIndexDocument() const{ return m_indexDocument; }
+
+ /**
+ * <p>The name of the index document for the website (for example
+ * <code>index.html</code>).</p>
+ */
+ inline void SetIndexDocument(const IndexDocument& value) { m_indexDocument = value; }
+
+ /**
+ * <p>The name of the index document for the website (for example
+ * <code>index.html</code>).</p>
+ */
+ inline void SetIndexDocument(IndexDocument&& value) { m_indexDocument = std::move(value); }
+
+ /**
+ * <p>The name of the index document for the website (for example
+ * <code>index.html</code>).</p>
+ */
+ inline GetBucketWebsiteResult& WithIndexDocument(const IndexDocument& value) { SetIndexDocument(value); return *this;}
+
+ /**
+ * <p>The name of the index document for the website (for example
+ * <code>index.html</code>).</p>
+ */
+ inline GetBucketWebsiteResult& WithIndexDocument(IndexDocument&& value) { SetIndexDocument(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The object key name of the website error document to use for 4XX class
+ * errors.</p>
+ */
+ inline const ErrorDocument& GetErrorDocument() const{ return m_errorDocument; }
+
+ /**
+ * <p>The object key name of the website error document to use for 4XX class
+ * errors.</p>
+ */
+ inline void SetErrorDocument(const ErrorDocument& value) { m_errorDocument = value; }
+
+ /**
+ * <p>The object key name of the website error document to use for 4XX class
+ * errors.</p>
+ */
+ inline void SetErrorDocument(ErrorDocument&& value) { m_errorDocument = std::move(value); }
+
+ /**
+ * <p>The object key name of the website error document to use for 4XX class
+ * errors.</p>
+ */
+ inline GetBucketWebsiteResult& WithErrorDocument(const ErrorDocument& value) { SetErrorDocument(value); return *this;}
+
+ /**
+ * <p>The object key name of the website error document to use for 4XX class
+ * errors.</p>
+ */
+ inline GetBucketWebsiteResult& WithErrorDocument(ErrorDocument&& value) { SetErrorDocument(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline const Aws::Vector<RoutingRule>& GetRoutingRules() const{ return m_routingRules; }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline void SetRoutingRules(const Aws::Vector<RoutingRule>& value) { m_routingRules = value; }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline void SetRoutingRules(Aws::Vector<RoutingRule>&& value) { m_routingRules = std::move(value); }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline GetBucketWebsiteResult& WithRoutingRules(const Aws::Vector<RoutingRule>& value) { SetRoutingRules(value); return *this;}
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline GetBucketWebsiteResult& WithRoutingRules(Aws::Vector<RoutingRule>&& value) { SetRoutingRules(std::move(value)); return *this;}
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline GetBucketWebsiteResult& AddRoutingRules(const RoutingRule& value) { m_routingRules.push_back(value); return *this; }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline GetBucketWebsiteResult& AddRoutingRules(RoutingRule&& value) { m_routingRules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ RedirectAllRequestsTo m_redirectAllRequestsTo;
+
+ IndexDocument m_indexDocument;
+
+ ErrorDocument m_errorDocument;
+
+ Aws::Vector<RoutingRule> m_routingRules;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclRequest.h
new file mode 100644
index 00000000000..219922f755e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclRequest.h
@@ -0,0 +1,378 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetObjectAclRequest : public S3Request
+ {
+ public:
+ GetObjectAclRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetObjectAcl"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectAclRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectAclRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name that contains the object for which to get the ACL
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectAclRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline GetObjectAclRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline GetObjectAclRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The key of the object for which to get the ACL information.</p>
+ */
+ inline GetObjectAclRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline GetObjectAclRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline GetObjectAclRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline GetObjectAclRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline GetObjectAclRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline GetObjectAclRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectAclRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectAclRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectAclRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetObjectAclRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetObjectAclRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetObjectAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetObjectAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetObjectAclRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectAclRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclResult.h
new file mode 100644
index 00000000000..26f7bae0351
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectAclResult.h
@@ -0,0 +1,126 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Owner.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/s3/model/Grant.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetObjectAclResult
+ {
+ public:
+ GetObjectAclResult();
+ GetObjectAclResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetObjectAclResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p> Container for the bucket owner's display name and ID.</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p> Container for the bucket owner's display name and ID.</p>
+ */
+ inline void SetOwner(const Owner& value) { m_owner = value; }
+
+ /**
+ * <p> Container for the bucket owner's display name and ID.</p>
+ */
+ inline void SetOwner(Owner&& value) { m_owner = std::move(value); }
+
+ /**
+ * <p> Container for the bucket owner's display name and ID.</p>
+ */
+ inline GetObjectAclResult& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p> Container for the bucket owner's display name and ID.</p>
+ */
+ inline GetObjectAclResult& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline const Aws::Vector<Grant>& GetGrants() const{ return m_grants; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline void SetGrants(const Aws::Vector<Grant>& value) { m_grants = value; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline void SetGrants(Aws::Vector<Grant>&& value) { m_grants = std::move(value); }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetObjectAclResult& WithGrants(const Aws::Vector<Grant>& value) { SetGrants(value); return *this;}
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetObjectAclResult& WithGrants(Aws::Vector<Grant>&& value) { SetGrants(std::move(value)); return *this;}
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetObjectAclResult& AddGrants(const Grant& value) { m_grants.push_back(value); return *this; }
+
+ /**
+ * <p>A list of grants.</p>
+ */
+ inline GetObjectAclResult& AddGrants(Grant&& value) { m_grants.push_back(std::move(value)); return *this; }
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline GetObjectAclResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline GetObjectAclResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ Owner m_owner;
+
+ Aws::Vector<Grant> m_grants;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldRequest.h
new file mode 100644
index 00000000000..e6e2801de85
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldRequest.h
@@ -0,0 +1,386 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetObjectLegalHoldRequest : public S3Request
+ {
+ public:
+ GetObjectLegalHoldRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetObjectLegalHold"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the object whose Legal Hold status you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The key name for the object whose Legal Hold status you want to retrieve.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version ID of the object whose Legal Hold status you want to
+ * retrieve.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline GetObjectLegalHoldRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline GetObjectLegalHoldRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectLegalHoldRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetObjectLegalHoldRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetObjectLegalHoldRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetObjectLegalHoldRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetObjectLegalHoldRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectLegalHoldRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectLegalHoldRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetObjectLegalHoldRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectLegalHoldRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectLegalHoldRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldResult.h
new file mode 100644
index 00000000000..c69ac4c2c45
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLegalHoldResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectLockLegalHold.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetObjectLegalHoldResult
+ {
+ public:
+ GetObjectLegalHoldResult();
+ GetObjectLegalHoldResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetObjectLegalHoldResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The current Legal Hold status for the specified object.</p>
+ */
+ inline const ObjectLockLegalHold& GetLegalHold() const{ return m_legalHold; }
+
+ /**
+ * <p>The current Legal Hold status for the specified object.</p>
+ */
+ inline void SetLegalHold(const ObjectLockLegalHold& value) { m_legalHold = value; }
+
+ /**
+ * <p>The current Legal Hold status for the specified object.</p>
+ */
+ inline void SetLegalHold(ObjectLockLegalHold&& value) { m_legalHold = std::move(value); }
+
+ /**
+ * <p>The current Legal Hold status for the specified object.</p>
+ */
+ inline GetObjectLegalHoldResult& WithLegalHold(const ObjectLockLegalHold& value) { SetLegalHold(value); return *this;}
+
+ /**
+ * <p>The current Legal Hold status for the specified object.</p>
+ */
+ inline GetObjectLegalHoldResult& WithLegalHold(ObjectLockLegalHold&& value) { SetLegalHold(std::move(value)); return *this;}
+
+ private:
+
+ ObjectLockLegalHold m_legalHold;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationRequest.h
new file mode 100644
index 00000000000..a99710c72a9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationRequest.h
@@ -0,0 +1,267 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetObjectLockConfigurationRequest : public S3Request
+ {
+ public:
+ GetObjectLockConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetObjectLockConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectLockConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectLockConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to retrieve.</p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectLockConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectLockConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectLockConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectLockConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetObjectLockConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetObjectLockConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetObjectLockConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectLockConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectLockConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationResult.h
new file mode 100644
index 00000000000..8d1a8701abc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectLockConfigurationResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectLockConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetObjectLockConfigurationResult
+ {
+ public:
+ GetObjectLockConfigurationResult();
+ GetObjectLockConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetObjectLockConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The specified bucket's Object Lock configuration.</p>
+ */
+ inline const ObjectLockConfiguration& GetObjectLockConfiguration() const{ return m_objectLockConfiguration; }
+
+ /**
+ * <p>The specified bucket's Object Lock configuration.</p>
+ */
+ inline void SetObjectLockConfiguration(const ObjectLockConfiguration& value) { m_objectLockConfiguration = value; }
+
+ /**
+ * <p>The specified bucket's Object Lock configuration.</p>
+ */
+ inline void SetObjectLockConfiguration(ObjectLockConfiguration&& value) { m_objectLockConfiguration = std::move(value); }
+
+ /**
+ * <p>The specified bucket's Object Lock configuration.</p>
+ */
+ inline GetObjectLockConfigurationResult& WithObjectLockConfiguration(const ObjectLockConfiguration& value) { SetObjectLockConfiguration(value); return *this;}
+
+ /**
+ * <p>The specified bucket's Object Lock configuration.</p>
+ */
+ inline GetObjectLockConfigurationResult& WithObjectLockConfiguration(ObjectLockConfiguration&& value) { SetObjectLockConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ ObjectLockConfiguration m_objectLockConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRequest.h
new file mode 100644
index 00000000000..c26051713d2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRequest.h
@@ -0,0 +1,1185 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetObjectRequest : public S3Request
+ {
+ public:
+ GetObjectRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetObject"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline const Aws::String& GetIfMatch() const{ return m_ifMatch; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline bool IfMatchHasBeenSet() const { return m_ifMatchHasBeenSet; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfMatch(const Aws::String& value) { m_ifMatchHasBeenSet = true; m_ifMatch = value; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfMatch(Aws::String&& value) { m_ifMatchHasBeenSet = true; m_ifMatch = std::move(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfMatch(const char* value) { m_ifMatchHasBeenSet = true; m_ifMatch.assign(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline GetObjectRequest& WithIfMatch(const Aws::String& value) { SetIfMatch(value); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline GetObjectRequest& WithIfMatch(Aws::String&& value) { SetIfMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline GetObjectRequest& WithIfMatch(const char* value) { SetIfMatch(value); return *this;}
+
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline const Aws::Utils::DateTime& GetIfModifiedSince() const{ return m_ifModifiedSince; }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline bool IfModifiedSinceHasBeenSet() const { return m_ifModifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfModifiedSince(const Aws::Utils::DateTime& value) { m_ifModifiedSinceHasBeenSet = true; m_ifModifiedSince = value; }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfModifiedSince(Aws::Utils::DateTime&& value) { m_ifModifiedSinceHasBeenSet = true; m_ifModifiedSince = std::move(value); }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline GetObjectRequest& WithIfModifiedSince(const Aws::Utils::DateTime& value) { SetIfModifiedSince(value); return *this;}
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline GetObjectRequest& WithIfModifiedSince(Aws::Utils::DateTime&& value) { SetIfModifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline const Aws::String& GetIfNoneMatch() const{ return m_ifNoneMatch; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline bool IfNoneMatchHasBeenSet() const { return m_ifNoneMatchHasBeenSet; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfNoneMatch(const Aws::String& value) { m_ifNoneMatchHasBeenSet = true; m_ifNoneMatch = value; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfNoneMatch(Aws::String&& value) { m_ifNoneMatchHasBeenSet = true; m_ifNoneMatch = std::move(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfNoneMatch(const char* value) { m_ifNoneMatchHasBeenSet = true; m_ifNoneMatch.assign(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline GetObjectRequest& WithIfNoneMatch(const Aws::String& value) { SetIfNoneMatch(value); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline GetObjectRequest& WithIfNoneMatch(Aws::String&& value) { SetIfNoneMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline GetObjectRequest& WithIfNoneMatch(const char* value) { SetIfNoneMatch(value); return *this;}
+
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline const Aws::Utils::DateTime& GetIfUnmodifiedSince() const{ return m_ifUnmodifiedSince; }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline bool IfUnmodifiedSinceHasBeenSet() const { return m_ifUnmodifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfUnmodifiedSince(const Aws::Utils::DateTime& value) { m_ifUnmodifiedSinceHasBeenSet = true; m_ifUnmodifiedSince = value; }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfUnmodifiedSince(Aws::Utils::DateTime&& value) { m_ifUnmodifiedSinceHasBeenSet = true; m_ifUnmodifiedSince = std::move(value); }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline GetObjectRequest& WithIfUnmodifiedSince(const Aws::Utils::DateTime& value) { SetIfUnmodifiedSince(value); return *this;}
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline GetObjectRequest& WithIfUnmodifiedSince(Aws::Utils::DateTime&& value) { SetIfUnmodifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline GetObjectRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline GetObjectRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Key of the object to get.</p>
+ */
+ inline GetObjectRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline const Aws::String& GetRange() const{ return m_range; }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline bool RangeHasBeenSet() const { return m_rangeHasBeenSet; }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline void SetRange(const Aws::String& value) { m_rangeHasBeenSet = true; m_range = value; }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline void SetRange(Aws::String&& value) { m_rangeHasBeenSet = true; m_range = std::move(value); }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline void SetRange(const char* value) { m_rangeHasBeenSet = true; m_range.assign(value); }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline GetObjectRequest& WithRange(const Aws::String& value) { SetRange(value); return *this;}
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline GetObjectRequest& WithRange(Aws::String&& value) { SetRange(std::move(value)); return *this;}
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline GetObjectRequest& WithRange(const char* value) { SetRange(value); return *this;}
+
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline const Aws::String& GetResponseCacheControl() const{ return m_responseCacheControl; }
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline bool ResponseCacheControlHasBeenSet() const { return m_responseCacheControlHasBeenSet; }
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline void SetResponseCacheControl(const Aws::String& value) { m_responseCacheControlHasBeenSet = true; m_responseCacheControl = value; }
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline void SetResponseCacheControl(Aws::String&& value) { m_responseCacheControlHasBeenSet = true; m_responseCacheControl = std::move(value); }
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline void SetResponseCacheControl(const char* value) { m_responseCacheControlHasBeenSet = true; m_responseCacheControl.assign(value); }
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseCacheControl(const Aws::String& value) { SetResponseCacheControl(value); return *this;}
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseCacheControl(Aws::String&& value) { SetResponseCacheControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Sets the <code>Cache-Control</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseCacheControl(const char* value) { SetResponseCacheControl(value); return *this;}
+
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline const Aws::String& GetResponseContentDisposition() const{ return m_responseContentDisposition; }
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline bool ResponseContentDispositionHasBeenSet() const { return m_responseContentDispositionHasBeenSet; }
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline void SetResponseContentDisposition(const Aws::String& value) { m_responseContentDispositionHasBeenSet = true; m_responseContentDisposition = value; }
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline void SetResponseContentDisposition(Aws::String&& value) { m_responseContentDispositionHasBeenSet = true; m_responseContentDisposition = std::move(value); }
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline void SetResponseContentDisposition(const char* value) { m_responseContentDispositionHasBeenSet = true; m_responseContentDisposition.assign(value); }
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline GetObjectRequest& WithResponseContentDisposition(const Aws::String& value) { SetResponseContentDisposition(value); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline GetObjectRequest& WithResponseContentDisposition(Aws::String&& value) { SetResponseContentDisposition(std::move(value)); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Disposition</code> header of the response</p>
+ */
+ inline GetObjectRequest& WithResponseContentDisposition(const char* value) { SetResponseContentDisposition(value); return *this;}
+
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline const Aws::String& GetResponseContentEncoding() const{ return m_responseContentEncoding; }
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline bool ResponseContentEncodingHasBeenSet() const { return m_responseContentEncodingHasBeenSet; }
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline void SetResponseContentEncoding(const Aws::String& value) { m_responseContentEncodingHasBeenSet = true; m_responseContentEncoding = value; }
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline void SetResponseContentEncoding(Aws::String&& value) { m_responseContentEncodingHasBeenSet = true; m_responseContentEncoding = std::move(value); }
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline void SetResponseContentEncoding(const char* value) { m_responseContentEncodingHasBeenSet = true; m_responseContentEncoding.assign(value); }
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentEncoding(const Aws::String& value) { SetResponseContentEncoding(value); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentEncoding(Aws::String&& value) { SetResponseContentEncoding(std::move(value)); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Encoding</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentEncoding(const char* value) { SetResponseContentEncoding(value); return *this;}
+
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline const Aws::String& GetResponseContentLanguage() const{ return m_responseContentLanguage; }
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline bool ResponseContentLanguageHasBeenSet() const { return m_responseContentLanguageHasBeenSet; }
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline void SetResponseContentLanguage(const Aws::String& value) { m_responseContentLanguageHasBeenSet = true; m_responseContentLanguage = value; }
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline void SetResponseContentLanguage(Aws::String&& value) { m_responseContentLanguageHasBeenSet = true; m_responseContentLanguage = std::move(value); }
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline void SetResponseContentLanguage(const char* value) { m_responseContentLanguageHasBeenSet = true; m_responseContentLanguage.assign(value); }
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentLanguage(const Aws::String& value) { SetResponseContentLanguage(value); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentLanguage(Aws::String&& value) { SetResponseContentLanguage(std::move(value)); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Language</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentLanguage(const char* value) { SetResponseContentLanguage(value); return *this;}
+
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline const Aws::String& GetResponseContentType() const{ return m_responseContentType; }
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline bool ResponseContentTypeHasBeenSet() const { return m_responseContentTypeHasBeenSet; }
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline void SetResponseContentType(const Aws::String& value) { m_responseContentTypeHasBeenSet = true; m_responseContentType = value; }
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline void SetResponseContentType(Aws::String&& value) { m_responseContentTypeHasBeenSet = true; m_responseContentType = std::move(value); }
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline void SetResponseContentType(const char* value) { m_responseContentTypeHasBeenSet = true; m_responseContentType.assign(value); }
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentType(const Aws::String& value) { SetResponseContentType(value); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentType(Aws::String&& value) { SetResponseContentType(std::move(value)); return *this;}
+
+ /**
+ * <p>Sets the <code>Content-Type</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseContentType(const char* value) { SetResponseContentType(value); return *this;}
+
+
+ /**
+ * <p>Sets the <code>Expires</code> header of the response.</p>
+ */
+ inline const Aws::Utils::DateTime& GetResponseExpires() const{ return m_responseExpires; }
+
+ /**
+ * <p>Sets the <code>Expires</code> header of the response.</p>
+ */
+ inline bool ResponseExpiresHasBeenSet() const { return m_responseExpiresHasBeenSet; }
+
+ /**
+ * <p>Sets the <code>Expires</code> header of the response.</p>
+ */
+ inline void SetResponseExpires(const Aws::Utils::DateTime& value) { m_responseExpiresHasBeenSet = true; m_responseExpires = value; }
+
+ /**
+ * <p>Sets the <code>Expires</code> header of the response.</p>
+ */
+ inline void SetResponseExpires(Aws::Utils::DateTime&& value) { m_responseExpiresHasBeenSet = true; m_responseExpires = std::move(value); }
+
+ /**
+ * <p>Sets the <code>Expires</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseExpires(const Aws::Utils::DateTime& value) { SetResponseExpires(value); return *this;}
+
+ /**
+ * <p>Sets the <code>Expires</code> header of the response.</p>
+ */
+ inline GetObjectRequest& WithResponseExpires(Aws::Utils::DateTime&& value) { SetResponseExpires(std::move(value)); return *this;}
+
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline GetObjectRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline GetObjectRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline GetObjectRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline GetObjectRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline GetObjectRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline GetObjectRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline GetObjectRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline GetObjectRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline GetObjectRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline GetObjectRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline GetObjectRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline GetObjectRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline GetObjectRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline GetObjectRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' GET request for the part specified.
+ * Useful for downloading just a part of an object.</p>
+ */
+ inline int GetPartNumber() const{ return m_partNumber; }
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' GET request for the part specified.
+ * Useful for downloading just a part of an object.</p>
+ */
+ inline bool PartNumberHasBeenSet() const { return m_partNumberHasBeenSet; }
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' GET request for the part specified.
+ * Useful for downloading just a part of an object.</p>
+ */
+ inline void SetPartNumber(int value) { m_partNumberHasBeenSet = true; m_partNumber = value; }
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' GET request for the part specified.
+ * Useful for downloading just a part of an object.</p>
+ */
+ inline GetObjectRequest& WithPartNumber(int value) { SetPartNumber(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetObjectRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetObjectRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetObjectRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_ifMatch;
+ bool m_ifMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_ifModifiedSince;
+ bool m_ifModifiedSinceHasBeenSet;
+
+ Aws::String m_ifNoneMatch;
+ bool m_ifNoneMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_ifUnmodifiedSince;
+ bool m_ifUnmodifiedSinceHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_range;
+ bool m_rangeHasBeenSet;
+
+ Aws::String m_responseCacheControl;
+ bool m_responseCacheControlHasBeenSet;
+
+ Aws::String m_responseContentDisposition;
+ bool m_responseContentDispositionHasBeenSet;
+
+ Aws::String m_responseContentEncoding;
+ bool m_responseContentEncodingHasBeenSet;
+
+ Aws::String m_responseContentLanguage;
+ bool m_responseContentLanguageHasBeenSet;
+
+ Aws::String m_responseContentType;
+ bool m_responseContentTypeHasBeenSet;
+
+ Aws::Utils::DateTime m_responseExpires;
+ bool m_responseExpiresHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ int m_partNumber;
+ bool m_partNumberHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectResult.h
new file mode 100644
index 00000000000..e9eb7bf9ede
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectResult.h
@@ -0,0 +1,1239 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/s3/model/ReplicationStatus.h>
+#include <aws/s3/model/ObjectLockMode.h>
+#include <aws/s3/model/ObjectLockLegalHoldStatus.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetObjectResult
+ {
+ public:
+ GetObjectResult();
+ //We have to define these because Microsoft doesn't auto generate them
+ GetObjectResult(GetObjectResult&&);
+ GetObjectResult& operator=(GetObjectResult&&);
+ //we delete these because Microsoft doesn't handle move generation correctly
+ //and we therefore don't trust them to get it right here either.
+ GetObjectResult(const GetObjectResult&) = delete;
+ GetObjectResult& operator=(const GetObjectResult&) = delete;
+
+
+ GetObjectResult(Aws::AmazonWebServiceResult<Aws::Utils::Stream::ResponseStream>&& result);
+ GetObjectResult& operator=(Aws::AmazonWebServiceResult<Aws::Utils::Stream::ResponseStream>&& result);
+
+
+
+ /**
+ * <p>Object data.</p>
+ */
+ inline Aws::IOStream& GetBody() { return m_body.GetUnderlyingStream(); }
+
+ /**
+ * <p>Object data.</p>
+ */
+ inline void ReplaceBody(Aws::IOStream* body) { m_body = Aws::Utils::Stream::ResponseStream(body); }
+
+
+ /**
+ * <p>Specifies whether the object retrieved was (true) or was not (false) a Delete
+ * Marker. If false, this response header does not appear in the response.</p>
+ */
+ inline bool GetDeleteMarker() const{ return m_deleteMarker; }
+
+ /**
+ * <p>Specifies whether the object retrieved was (true) or was not (false) a Delete
+ * Marker. If false, this response header does not appear in the response.</p>
+ */
+ inline void SetDeleteMarker(bool value) { m_deleteMarker = value; }
+
+ /**
+ * <p>Specifies whether the object retrieved was (true) or was not (false) a Delete
+ * Marker. If false, this response header does not appear in the response.</p>
+ */
+ inline GetObjectResult& WithDeleteMarker(bool value) { SetDeleteMarker(value); return *this;}
+
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline const Aws::String& GetAcceptRanges() const{ return m_acceptRanges; }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline void SetAcceptRanges(const Aws::String& value) { m_acceptRanges = value; }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline void SetAcceptRanges(Aws::String&& value) { m_acceptRanges = std::move(value); }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline void SetAcceptRanges(const char* value) { m_acceptRanges.assign(value); }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline GetObjectResult& WithAcceptRanges(const Aws::String& value) { SetAcceptRanges(value); return *this;}
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline GetObjectResult& WithAcceptRanges(Aws::String&& value) { SetAcceptRanges(std::move(value)); return *this;}
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline GetObjectResult& WithAcceptRanges(const char* value) { SetAcceptRanges(value); return *this;}
+
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline const Aws::String& GetExpiration() const{ return m_expiration; }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline void SetExpiration(const Aws::String& value) { m_expiration = value; }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline void SetExpiration(Aws::String&& value) { m_expiration = std::move(value); }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline void SetExpiration(const char* value) { m_expiration.assign(value); }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline GetObjectResult& WithExpiration(const Aws::String& value) { SetExpiration(value); return *this;}
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline GetObjectResult& WithExpiration(Aws::String&& value) { SetExpiration(std::move(value)); return *this;}
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline GetObjectResult& WithExpiration(const char* value) { SetExpiration(value); return *this;}
+
+
+ /**
+ * <p>Provides information about object restoration operation and expiration time
+ * of the restored object copy.</p>
+ */
+ inline const Aws::String& GetRestore() const{ return m_restore; }
+
+ /**
+ * <p>Provides information about object restoration operation and expiration time
+ * of the restored object copy.</p>
+ */
+ inline void SetRestore(const Aws::String& value) { m_restore = value; }
+
+ /**
+ * <p>Provides information about object restoration operation and expiration time
+ * of the restored object copy.</p>
+ */
+ inline void SetRestore(Aws::String&& value) { m_restore = std::move(value); }
+
+ /**
+ * <p>Provides information about object restoration operation and expiration time
+ * of the restored object copy.</p>
+ */
+ inline void SetRestore(const char* value) { m_restore.assign(value); }
+
+ /**
+ * <p>Provides information about object restoration operation and expiration time
+ * of the restored object copy.</p>
+ */
+ inline GetObjectResult& WithRestore(const Aws::String& value) { SetRestore(value); return *this;}
+
+ /**
+ * <p>Provides information about object restoration operation and expiration time
+ * of the restored object copy.</p>
+ */
+ inline GetObjectResult& WithRestore(Aws::String&& value) { SetRestore(std::move(value)); return *this;}
+
+ /**
+ * <p>Provides information about object restoration operation and expiration time
+ * of the restored object copy.</p>
+ */
+ inline GetObjectResult& WithRestore(const char* value) { SetRestore(value); return *this;}
+
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModified = value; }
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModified = std::move(value); }
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline GetObjectResult& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline GetObjectResult& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Size of the body in bytes.</p>
+ */
+ inline long long GetContentLength() const{ return m_contentLength; }
+
+ /**
+ * <p>Size of the body in bytes.</p>
+ */
+ inline void SetContentLength(long long value) { m_contentLength = value; }
+
+ /**
+ * <p>Size of the body in bytes.</p>
+ */
+ inline GetObjectResult& WithContentLength(long long value) { SetContentLength(value); return *this;}
+
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTag = value; }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTag = std::move(value); }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline void SetETag(const char* value) { m_eTag.assign(value); }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline GetObjectResult& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline GetObjectResult& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline GetObjectResult& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>This is set to the number of metadata entries not returned in
+ * <code>x-amz-meta</code> headers. This can happen if you create metadata using an
+ * API like SOAP that supports more flexible metadata than the REST API. For
+ * example, using SOAP, you can create metadata whose values are not legal HTTP
+ * headers.</p>
+ */
+ inline int GetMissingMeta() const{ return m_missingMeta; }
+
+ /**
+ * <p>This is set to the number of metadata entries not returned in
+ * <code>x-amz-meta</code> headers. This can happen if you create metadata using an
+ * API like SOAP that supports more flexible metadata than the REST API. For
+ * example, using SOAP, you can create metadata whose values are not legal HTTP
+ * headers.</p>
+ */
+ inline void SetMissingMeta(int value) { m_missingMeta = value; }
+
+ /**
+ * <p>This is set to the number of metadata entries not returned in
+ * <code>x-amz-meta</code> headers. This can happen if you create metadata using an
+ * API like SOAP that supports more flexible metadata than the REST API. For
+ * example, using SOAP, you can create metadata whose values are not legal HTTP
+ * headers.</p>
+ */
+ inline GetObjectResult& WithMissingMeta(int value) { SetMissingMeta(value); return *this;}
+
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline GetObjectResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline GetObjectResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline GetObjectResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline const Aws::String& GetCacheControl() const{ return m_cacheControl; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const Aws::String& value) { m_cacheControl = value; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(Aws::String&& value) { m_cacheControl = std::move(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const char* value) { m_cacheControl.assign(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline GetObjectResult& WithCacheControl(const Aws::String& value) { SetCacheControl(value); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline GetObjectResult& WithCacheControl(Aws::String&& value) { SetCacheControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline GetObjectResult& WithCacheControl(const char* value) { SetCacheControl(value); return *this;}
+
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline const Aws::String& GetContentDisposition() const{ return m_contentDisposition; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const Aws::String& value) { m_contentDisposition = value; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(Aws::String&& value) { m_contentDisposition = std::move(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const char* value) { m_contentDisposition.assign(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline GetObjectResult& WithContentDisposition(const Aws::String& value) { SetContentDisposition(value); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline GetObjectResult& WithContentDisposition(Aws::String&& value) { SetContentDisposition(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline GetObjectResult& WithContentDisposition(const char* value) { SetContentDisposition(value); return *this;}
+
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline const Aws::String& GetContentEncoding() const{ return m_contentEncoding; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const Aws::String& value) { m_contentEncoding = value; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(Aws::String&& value) { m_contentEncoding = std::move(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const char* value) { m_contentEncoding.assign(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline GetObjectResult& WithContentEncoding(const Aws::String& value) { SetContentEncoding(value); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline GetObjectResult& WithContentEncoding(Aws::String&& value) { SetContentEncoding(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline GetObjectResult& WithContentEncoding(const char* value) { SetContentEncoding(value); return *this;}
+
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline const Aws::String& GetContentLanguage() const{ return m_contentLanguage; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const Aws::String& value) { m_contentLanguage = value; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(Aws::String&& value) { m_contentLanguage = std::move(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const char* value) { m_contentLanguage.assign(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline GetObjectResult& WithContentLanguage(const Aws::String& value) { SetContentLanguage(value); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline GetObjectResult& WithContentLanguage(Aws::String&& value) { SetContentLanguage(std::move(value)); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline GetObjectResult& WithContentLanguage(const char* value) { SetContentLanguage(value); return *this;}
+
+
+ /**
+ * <p>The portion of the object returned in the response.</p>
+ */
+ inline const Aws::String& GetContentRange() const{ return m_contentRange; }
+
+ /**
+ * <p>The portion of the object returned in the response.</p>
+ */
+ inline void SetContentRange(const Aws::String& value) { m_contentRange = value; }
+
+ /**
+ * <p>The portion of the object returned in the response.</p>
+ */
+ inline void SetContentRange(Aws::String&& value) { m_contentRange = std::move(value); }
+
+ /**
+ * <p>The portion of the object returned in the response.</p>
+ */
+ inline void SetContentRange(const char* value) { m_contentRange.assign(value); }
+
+ /**
+ * <p>The portion of the object returned in the response.</p>
+ */
+ inline GetObjectResult& WithContentRange(const Aws::String& value) { SetContentRange(value); return *this;}
+
+ /**
+ * <p>The portion of the object returned in the response.</p>
+ */
+ inline GetObjectResult& WithContentRange(Aws::String&& value) { SetContentRange(std::move(value)); return *this;}
+
+ /**
+ * <p>The portion of the object returned in the response.</p>
+ */
+ inline GetObjectResult& WithContentRange(const char* value) { SetContentRange(value); return *this;}
+
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline const Aws::String& GetContentType() const{ return m_contentType; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const Aws::String& value) { m_contentType = value; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(Aws::String&& value) { m_contentType = std::move(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const char* value) { m_contentType.assign(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline GetObjectResult& WithContentType(const Aws::String& value) { SetContentType(value); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline GetObjectResult& WithContentType(Aws::String&& value) { SetContentType(std::move(value)); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline GetObjectResult& WithContentType(const char* value) { SetContentType(value); return *this;}
+
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline const Aws::Utils::DateTime& GetExpires() const{ return m_expires; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(const Aws::Utils::DateTime& value) { m_expires = value; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(Aws::Utils::DateTime&& value) { m_expires = std::move(value); }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline GetObjectResult& WithExpires(const Aws::Utils::DateTime& value) { SetExpires(value); return *this;}
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline GetObjectResult& WithExpires(Aws::Utils::DateTime&& value) { SetExpires(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline const Aws::String& GetWebsiteRedirectLocation() const{ return m_websiteRedirectLocation; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const Aws::String& value) { m_websiteRedirectLocation = value; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(Aws::String&& value) { m_websiteRedirectLocation = std::move(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const char* value) { m_websiteRedirectLocation.assign(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline GetObjectResult& WithWebsiteRedirectLocation(const Aws::String& value) { SetWebsiteRedirectLocation(value); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline GetObjectResult& WithWebsiteRedirectLocation(Aws::String&& value) { SetWebsiteRedirectLocation(std::move(value)); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline GetObjectResult& WithWebsiteRedirectLocation(const char* value) { SetWebsiteRedirectLocation(value); return *this;}
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline GetObjectResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline GetObjectResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline const Aws::Map<Aws::String, Aws::String>& GetMetadata() const{ return m_metadata; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(const Aws::Map<Aws::String, Aws::String>& value) { m_metadata = value; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(Aws::Map<Aws::String, Aws::String>&& value) { m_metadata = std::move(value); }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& WithMetadata(const Aws::Map<Aws::String, Aws::String>& value) { SetMetadata(value); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& WithMetadata(Aws::Map<Aws::String, Aws::String>&& value) { SetMetadata(std::move(value)); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& AddMetadata(const Aws::String& key, const Aws::String& value) { m_metadata.emplace(key, value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& AddMetadata(Aws::String&& key, const Aws::String& value) { m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& AddMetadata(const Aws::String& key, Aws::String&& value) { m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& AddMetadata(Aws::String&& key, Aws::String&& value) { m_metadata.emplace(std::move(key), std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& AddMetadata(const char* key, Aws::String&& value) { m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& AddMetadata(Aws::String&& key, const char* value) { m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline GetObjectResult& AddMetadata(const char* key, const char* value) { m_metadata.emplace(key, value); return *this; }
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline GetObjectResult& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline GetObjectResult& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline GetObjectResult& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline GetObjectResult& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline GetObjectResult& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline GetObjectResult& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline GetObjectResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline GetObjectResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline GetObjectResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the object uses an S3 Bucket Key for server-side encryption
+ * with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the object uses an S3 Bucket Key for server-side encryption
+ * with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the object uses an S3 Bucket Key for server-side encryption
+ * with AWS KMS (SSE-KMS).</p>
+ */
+ inline GetObjectResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClass = value; }
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClass = std::move(value); }
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p>
+ */
+ inline GetObjectResult& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p>
+ */
+ inline GetObjectResult& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline GetObjectResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline GetObjectResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Amazon S3 can return this if your request involves a bucket that is either a
+ * source or destination in a replication rule.</p>
+ */
+ inline const ReplicationStatus& GetReplicationStatus() const{ return m_replicationStatus; }
+
+ /**
+ * <p>Amazon S3 can return this if your request involves a bucket that is either a
+ * source or destination in a replication rule.</p>
+ */
+ inline void SetReplicationStatus(const ReplicationStatus& value) { m_replicationStatus = value; }
+
+ /**
+ * <p>Amazon S3 can return this if your request involves a bucket that is either a
+ * source or destination in a replication rule.</p>
+ */
+ inline void SetReplicationStatus(ReplicationStatus&& value) { m_replicationStatus = std::move(value); }
+
+ /**
+ * <p>Amazon S3 can return this if your request involves a bucket that is either a
+ * source or destination in a replication rule.</p>
+ */
+ inline GetObjectResult& WithReplicationStatus(const ReplicationStatus& value) { SetReplicationStatus(value); return *this;}
+
+ /**
+ * <p>Amazon S3 can return this if your request involves a bucket that is either a
+ * source or destination in a replication rule.</p>
+ */
+ inline GetObjectResult& WithReplicationStatus(ReplicationStatus&& value) { SetReplicationStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The count of parts this object has.</p>
+ */
+ inline int GetPartsCount() const{ return m_partsCount; }
+
+ /**
+ * <p>The count of parts this object has.</p>
+ */
+ inline void SetPartsCount(int value) { m_partsCount = value; }
+
+ /**
+ * <p>The count of parts this object has.</p>
+ */
+ inline GetObjectResult& WithPartsCount(int value) { SetPartsCount(value); return *this;}
+
+
+ /**
+ * <p>The number of tags, if any, on the object.</p>
+ */
+ inline int GetTagCount() const{ return m_tagCount; }
+
+ /**
+ * <p>The number of tags, if any, on the object.</p>
+ */
+ inline void SetTagCount(int value) { m_tagCount = value; }
+
+ /**
+ * <p>The number of tags, if any, on the object.</p>
+ */
+ inline GetObjectResult& WithTagCount(int value) { SetTagCount(value); return *this;}
+
+
+ /**
+ * <p>The Object Lock mode currently in place for this object.</p>
+ */
+ inline const ObjectLockMode& GetObjectLockMode() const{ return m_objectLockMode; }
+
+ /**
+ * <p>The Object Lock mode currently in place for this object.</p>
+ */
+ inline void SetObjectLockMode(const ObjectLockMode& value) { m_objectLockMode = value; }
+
+ /**
+ * <p>The Object Lock mode currently in place for this object.</p>
+ */
+ inline void SetObjectLockMode(ObjectLockMode&& value) { m_objectLockMode = std::move(value); }
+
+ /**
+ * <p>The Object Lock mode currently in place for this object.</p>
+ */
+ inline GetObjectResult& WithObjectLockMode(const ObjectLockMode& value) { SetObjectLockMode(value); return *this;}
+
+ /**
+ * <p>The Object Lock mode currently in place for this object.</p>
+ */
+ inline GetObjectResult& WithObjectLockMode(ObjectLockMode&& value) { SetObjectLockMode(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The date and time when this object's Object Lock will expire.</p>
+ */
+ inline const Aws::Utils::DateTime& GetObjectLockRetainUntilDate() const{ return m_objectLockRetainUntilDate; }
+
+ /**
+ * <p>The date and time when this object's Object Lock will expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { m_objectLockRetainUntilDate = value; }
+
+ /**
+ * <p>The date and time when this object's Object Lock will expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { m_objectLockRetainUntilDate = std::move(value); }
+
+ /**
+ * <p>The date and time when this object's Object Lock will expire.</p>
+ */
+ inline GetObjectResult& WithObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { SetObjectLockRetainUntilDate(value); return *this;}
+
+ /**
+ * <p>The date and time when this object's Object Lock will expire.</p>
+ */
+ inline GetObjectResult& WithObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { SetObjectLockRetainUntilDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Indicates whether this object has an active legal hold. This field is only
+ * returned if you have permission to view an object's legal hold status. </p>
+ */
+ inline const ObjectLockLegalHoldStatus& GetObjectLockLegalHoldStatus() const{ return m_objectLockLegalHoldStatus; }
+
+ /**
+ * <p>Indicates whether this object has an active legal hold. This field is only
+ * returned if you have permission to view an object's legal hold status. </p>
+ */
+ inline void SetObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { m_objectLockLegalHoldStatus = value; }
+
+ /**
+ * <p>Indicates whether this object has an active legal hold. This field is only
+ * returned if you have permission to view an object's legal hold status. </p>
+ */
+ inline void SetObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { m_objectLockLegalHoldStatus = std::move(value); }
+
+ /**
+ * <p>Indicates whether this object has an active legal hold. This field is only
+ * returned if you have permission to view an object's legal hold status. </p>
+ */
+ inline GetObjectResult& WithObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { SetObjectLockLegalHoldStatus(value); return *this;}
+
+ /**
+ * <p>Indicates whether this object has an active legal hold. This field is only
+ * returned if you have permission to view an object's legal hold status. </p>
+ */
+ inline GetObjectResult& WithObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { SetObjectLockLegalHoldStatus(std::move(value)); return *this;}
+
+
+
+ inline const Aws::String& GetId2() const{ return m_id2; }
+
+
+ inline void SetId2(const Aws::String& value) { m_id2 = value; }
+
+
+ inline void SetId2(Aws::String&& value) { m_id2 = std::move(value); }
+
+
+ inline void SetId2(const char* value) { m_id2.assign(value); }
+
+
+ inline GetObjectResult& WithId2(const Aws::String& value) { SetId2(value); return *this;}
+
+
+ inline GetObjectResult& WithId2(Aws::String&& value) { SetId2(std::move(value)); return *this;}
+
+
+ inline GetObjectResult& WithId2(const char* value) { SetId2(value); return *this;}
+
+
+
+ inline const Aws::String& GetRequestId() const{ return m_requestId; }
+
+
+ inline void SetRequestId(const Aws::String& value) { m_requestId = value; }
+
+
+ inline void SetRequestId(Aws::String&& value) { m_requestId = std::move(value); }
+
+
+ inline void SetRequestId(const char* value) { m_requestId.assign(value); }
+
+
+ inline GetObjectResult& WithRequestId(const Aws::String& value) { SetRequestId(value); return *this;}
+
+
+ inline GetObjectResult& WithRequestId(Aws::String&& value) { SetRequestId(std::move(value)); return *this;}
+
+
+ inline GetObjectResult& WithRequestId(const char* value) { SetRequestId(value); return *this;}
+
+ private:
+
+ Aws::Utils::Stream::ResponseStream m_body;
+
+ bool m_deleteMarker;
+
+ Aws::String m_acceptRanges;
+
+ Aws::String m_expiration;
+
+ Aws::String m_restore;
+
+ Aws::Utils::DateTime m_lastModified;
+
+ long long m_contentLength;
+
+ Aws::String m_eTag;
+
+ int m_missingMeta;
+
+ Aws::String m_versionId;
+
+ Aws::String m_cacheControl;
+
+ Aws::String m_contentDisposition;
+
+ Aws::String m_contentEncoding;
+
+ Aws::String m_contentLanguage;
+
+ Aws::String m_contentRange;
+
+ Aws::String m_contentType;
+
+ Aws::Utils::DateTime m_expires;
+
+ Aws::String m_websiteRedirectLocation;
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::Map<Aws::String, Aws::String> m_metadata;
+
+ Aws::String m_sSECustomerAlgorithm;
+
+ Aws::String m_sSECustomerKeyMD5;
+
+ Aws::String m_sSEKMSKeyId;
+
+ bool m_bucketKeyEnabled;
+
+ StorageClass m_storageClass;
+
+ RequestCharged m_requestCharged;
+
+ ReplicationStatus m_replicationStatus;
+
+ int m_partsCount;
+
+ int m_tagCount;
+
+ ObjectLockMode m_objectLockMode;
+
+ Aws::Utils::DateTime m_objectLockRetainUntilDate;
+
+ ObjectLockLegalHoldStatus m_objectLockLegalHoldStatus;
+
+ Aws::String m_id2;
+
+ Aws::String m_requestId;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionRequest.h
new file mode 100644
index 00000000000..02153e82520
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionRequest.h
@@ -0,0 +1,394 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetObjectRetentionRequest : public S3Request
+ {
+ public:
+ GetObjectRetentionRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetObjectRetention"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectRetentionRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectRetentionRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the object whose retention settings you want to
+ * retrieve. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectRetentionRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline GetObjectRetentionRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline GetObjectRetentionRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The key name for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline GetObjectRetentionRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline GetObjectRetentionRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline GetObjectRetentionRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version ID for the object whose retention settings you want to
+ * retrieve.</p>
+ */
+ inline GetObjectRetentionRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline GetObjectRetentionRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline GetObjectRetentionRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectRetentionRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectRetentionRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectRetentionRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetObjectRetentionRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetObjectRetentionRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetObjectRetentionRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetObjectRetentionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectRetentionRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectRetentionRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetObjectRetentionRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectRetentionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectRetentionRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionResult.h
new file mode 100644
index 00000000000..13c5e6b25d2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectRetentionResult.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectLockRetention.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetObjectRetentionResult
+ {
+ public:
+ GetObjectRetentionResult();
+ GetObjectRetentionResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetObjectRetentionResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The container element for an object's retention settings.</p>
+ */
+ inline const ObjectLockRetention& GetRetention() const{ return m_retention; }
+
+ /**
+ * <p>The container element for an object's retention settings.</p>
+ */
+ inline void SetRetention(const ObjectLockRetention& value) { m_retention = value; }
+
+ /**
+ * <p>The container element for an object's retention settings.</p>
+ */
+ inline void SetRetention(ObjectLockRetention&& value) { m_retention = std::move(value); }
+
+ /**
+ * <p>The container element for an object's retention settings.</p>
+ */
+ inline GetObjectRetentionResult& WithRetention(const ObjectLockRetention& value) { SetRetention(value); return *this;}
+
+ /**
+ * <p>The container element for an object's retention settings.</p>
+ */
+ inline GetObjectRetentionResult& WithRetention(ObjectLockRetention&& value) { SetRetention(std::move(value)); return *this;}
+
+ private:
+
+ ObjectLockRetention m_retention;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingRequest.h
new file mode 100644
index 00000000000..5fca33c33aa
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingRequest.h
@@ -0,0 +1,427 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetObjectTaggingRequest : public S3Request
+ {
+ public:
+ GetObjectTaggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetObjectTagging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectTaggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectTaggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the object for which to get the tagging
+ * information. </p> <p>When using this API with an access point, you must direct
+ * requests to the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline GetObjectTaggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline GetObjectTaggingRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline GetObjectTaggingRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which to get the tagging information.</p>
+ */
+ inline GetObjectTaggingRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline GetObjectTaggingRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline GetObjectTaggingRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The versionId of the object for which to get the tagging information.</p>
+ */
+ inline GetObjectTaggingRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectTaggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectTaggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectTaggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetObjectTaggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetObjectTaggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetObjectTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetObjectTaggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectTaggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingResult.h
new file mode 100644
index 00000000000..c945f85e611
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTaggingResult.h
@@ -0,0 +1,117 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetObjectTaggingResult
+ {
+ public:
+ GetObjectTaggingResult();
+ GetObjectTaggingResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetObjectTaggingResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The versionId of the object for which you got the tagging information.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The versionId of the object for which you got the tagging information.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>The versionId of the object for which you got the tagging information.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>The versionId of the object for which you got the tagging information.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>The versionId of the object for which you got the tagging information.</p>
+ */
+ inline GetObjectTaggingResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The versionId of the object for which you got the tagging information.</p>
+ */
+ inline GetObjectTaggingResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The versionId of the object for which you got the tagging information.</p>
+ */
+ inline GetObjectTaggingResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline const Aws::Vector<Tag>& GetTagSet() const{ return m_tagSet; }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline void SetTagSet(const Aws::Vector<Tag>& value) { m_tagSet = value; }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline void SetTagSet(Aws::Vector<Tag>&& value) { m_tagSet = std::move(value); }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetObjectTaggingResult& WithTagSet(const Aws::Vector<Tag>& value) { SetTagSet(value); return *this;}
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetObjectTaggingResult& WithTagSet(Aws::Vector<Tag>&& value) { SetTagSet(std::move(value)); return *this;}
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetObjectTaggingResult& AddTagSet(const Tag& value) { m_tagSet.push_back(value); return *this; }
+
+ /**
+ * <p>Contains the tag set.</p>
+ */
+ inline GetObjectTaggingResult& AddTagSet(Tag&& value) { m_tagSet.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_versionId;
+
+ Aws::Vector<Tag> m_tagSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentRequest.h
new file mode 100644
index 00000000000..732e8f7c030
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentRequest.h
@@ -0,0 +1,270 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetObjectTorrentRequest : public S3Request
+ {
+ public:
+ GetObjectTorrentRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetObjectTorrent"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline GetObjectTorrentRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline GetObjectTorrentRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the object for which to get the torrent
+ * files.</p>
+ */
+ inline GetObjectTorrentRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline GetObjectTorrentRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline GetObjectTorrentRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key for which to get the information.</p>
+ */
+ inline GetObjectTorrentRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline GetObjectTorrentRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline GetObjectTorrentRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectTorrentRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectTorrentRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetObjectTorrentRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetObjectTorrentRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetObjectTorrentRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetObjectTorrentRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetObjectTorrentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectTorrentRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectTorrentRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetObjectTorrentRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetObjectTorrentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetObjectTorrentRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentResult.h
new file mode 100644
index 00000000000..97c8b3edf91
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetObjectTorrentResult.h
@@ -0,0 +1,75 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/stream/ResponseStream.h>
+#include <aws/core/utils/Array.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetObjectTorrentResult
+ {
+ public:
+ GetObjectTorrentResult();
+ //We have to define these because Microsoft doesn't auto generate them
+ GetObjectTorrentResult(GetObjectTorrentResult&&);
+ GetObjectTorrentResult& operator=(GetObjectTorrentResult&&);
+ //we delete these because Microsoft doesn't handle move generation correctly
+ //and we therefore don't trust them to get it right here either.
+ GetObjectTorrentResult(const GetObjectTorrentResult&) = delete;
+ GetObjectTorrentResult& operator=(const GetObjectTorrentResult&) = delete;
+
+
+ GetObjectTorrentResult(Aws::AmazonWebServiceResult<Aws::Utils::Stream::ResponseStream>&& result);
+ GetObjectTorrentResult& operator=(Aws::AmazonWebServiceResult<Aws::Utils::Stream::ResponseStream>&& result);
+
+
+
+ /**
+ * <p>A Bencoded dictionary as defined by the BitTorrent specification</p>
+ */
+ inline Aws::IOStream& GetBody() { return m_body.GetUnderlyingStream(); }
+
+ /**
+ * <p>A Bencoded dictionary as defined by the BitTorrent specification</p>
+ */
+ inline void ReplaceBody(Aws::IOStream* body) { m_body = Aws::Utils::Stream::ResponseStream(body); }
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline GetObjectTorrentResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline GetObjectTorrentResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ Aws::Utils::Stream::ResponseStream m_body;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockRequest.h
new file mode 100644
index 00000000000..76c706ec544
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockRequest.h
@@ -0,0 +1,203 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API GetPublicAccessBlockRequest : public S3Request
+ {
+ public:
+ GetPublicAccessBlockRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "GetPublicAccessBlock"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline GetPublicAccessBlockRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline GetPublicAccessBlockRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to retrieve. </p>
+ */
+ inline GetPublicAccessBlockRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetPublicAccessBlockRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetPublicAccessBlockRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline GetPublicAccessBlockRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline GetPublicAccessBlockRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline GetPublicAccessBlockRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline GetPublicAccessBlockRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline GetPublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetPublicAccessBlockRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetPublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline GetPublicAccessBlockRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline GetPublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline GetPublicAccessBlockRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockResult.h
new file mode 100644
index 00000000000..22d40032cb9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GetPublicAccessBlockResult.h
@@ -0,0 +1,72 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/PublicAccessBlockConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API GetPublicAccessBlockResult
+ {
+ public:
+ GetPublicAccessBlockResult();
+ GetPublicAccessBlockResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ GetPublicAccessBlockResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration currently in effect for this
+ * Amazon S3 bucket.</p>
+ */
+ inline const PublicAccessBlockConfiguration& GetPublicAccessBlockConfiguration() const{ return m_publicAccessBlockConfiguration; }
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration currently in effect for this
+ * Amazon S3 bucket.</p>
+ */
+ inline void SetPublicAccessBlockConfiguration(const PublicAccessBlockConfiguration& value) { m_publicAccessBlockConfiguration = value; }
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration currently in effect for this
+ * Amazon S3 bucket.</p>
+ */
+ inline void SetPublicAccessBlockConfiguration(PublicAccessBlockConfiguration&& value) { m_publicAccessBlockConfiguration = std::move(value); }
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration currently in effect for this
+ * Amazon S3 bucket.</p>
+ */
+ inline GetPublicAccessBlockResult& WithPublicAccessBlockConfiguration(const PublicAccessBlockConfiguration& value) { SetPublicAccessBlockConfiguration(value); return *this;}
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration currently in effect for this
+ * Amazon S3 bucket.</p>
+ */
+ inline GetPublicAccessBlockResult& WithPublicAccessBlockConfiguration(PublicAccessBlockConfiguration&& value) { SetPublicAccessBlockConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ PublicAccessBlockConfiguration m_publicAccessBlockConfiguration;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GlacierJobParameters.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GlacierJobParameters.h
new file mode 100644
index 00000000000..d6fcfdaee3c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/GlacierJobParameters.h
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Tier.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for S3 Glacier job parameters.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GlacierJobParameters">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API GlacierJobParameters
+ {
+ public:
+ GlacierJobParameters();
+ GlacierJobParameters(const Aws::Utils::Xml::XmlNode& xmlNode);
+ GlacierJobParameters& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline const Tier& GetTier() const{ return m_tier; }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline bool TierHasBeenSet() const { return m_tierHasBeenSet; }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline void SetTier(const Tier& value) { m_tierHasBeenSet = true; m_tier = value; }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline void SetTier(Tier&& value) { m_tierHasBeenSet = true; m_tier = std::move(value); }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline GlacierJobParameters& WithTier(const Tier& value) { SetTier(value); return *this;}
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline GlacierJobParameters& WithTier(Tier&& value) { SetTier(std::move(value)); return *this;}
+
+ private:
+
+ Tier m_tier;
+ bool m_tierHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grant.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grant.h
new file mode 100644
index 00000000000..392c95090e4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grant.h
@@ -0,0 +1,113 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Grantee.h>
+#include <aws/s3/model/Permission.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for grant information.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Grant">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Grant
+ {
+ public:
+ Grant();
+ Grant(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Grant& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The person being granted permissions.</p>
+ */
+ inline const Grantee& GetGrantee() const{ return m_grantee; }
+
+ /**
+ * <p>The person being granted permissions.</p>
+ */
+ inline bool GranteeHasBeenSet() const { return m_granteeHasBeenSet; }
+
+ /**
+ * <p>The person being granted permissions.</p>
+ */
+ inline void SetGrantee(const Grantee& value) { m_granteeHasBeenSet = true; m_grantee = value; }
+
+ /**
+ * <p>The person being granted permissions.</p>
+ */
+ inline void SetGrantee(Grantee&& value) { m_granteeHasBeenSet = true; m_grantee = std::move(value); }
+
+ /**
+ * <p>The person being granted permissions.</p>
+ */
+ inline Grant& WithGrantee(const Grantee& value) { SetGrantee(value); return *this;}
+
+ /**
+ * <p>The person being granted permissions.</p>
+ */
+ inline Grant& WithGrantee(Grantee&& value) { SetGrantee(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the permission given to the grantee.</p>
+ */
+ inline const Permission& GetPermission() const{ return m_permission; }
+
+ /**
+ * <p>Specifies the permission given to the grantee.</p>
+ */
+ inline bool PermissionHasBeenSet() const { return m_permissionHasBeenSet; }
+
+ /**
+ * <p>Specifies the permission given to the grantee.</p>
+ */
+ inline void SetPermission(const Permission& value) { m_permissionHasBeenSet = true; m_permission = value; }
+
+ /**
+ * <p>Specifies the permission given to the grantee.</p>
+ */
+ inline void SetPermission(Permission&& value) { m_permissionHasBeenSet = true; m_permission = std::move(value); }
+
+ /**
+ * <p>Specifies the permission given to the grantee.</p>
+ */
+ inline Grant& WithPermission(const Permission& value) { SetPermission(value); return *this;}
+
+ /**
+ * <p>Specifies the permission given to the grantee.</p>
+ */
+ inline Grant& WithPermission(Permission&& value) { SetPermission(std::move(value)); return *this;}
+
+ private:
+
+ Grantee m_grantee;
+ bool m_granteeHasBeenSet;
+
+ Permission m_permission;
+ bool m_permissionHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grantee.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grantee.h
new file mode 100644
index 00000000000..a6715e45cd4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Grantee.h
@@ -0,0 +1,319 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Type.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the person being granted permissions.</p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Grantee">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Grantee
+ {
+ public:
+ Grantee();
+ Grantee(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Grantee& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline const Aws::String& GetDisplayName() const{ return m_displayName; }
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline bool DisplayNameHasBeenSet() const { return m_displayNameHasBeenSet; }
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline void SetDisplayName(const Aws::String& value) { m_displayNameHasBeenSet = true; m_displayName = value; }
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline void SetDisplayName(Aws::String&& value) { m_displayNameHasBeenSet = true; m_displayName = std::move(value); }
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline void SetDisplayName(const char* value) { m_displayNameHasBeenSet = true; m_displayName.assign(value); }
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline Grantee& WithDisplayName(const Aws::String& value) { SetDisplayName(value); return *this;}
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline Grantee& WithDisplayName(Aws::String&& value) { SetDisplayName(std::move(value)); return *this;}
+
+ /**
+ * <p>Screen name of the grantee.</p>
+ */
+ inline Grantee& WithDisplayName(const char* value) { SetDisplayName(value); return *this;}
+
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline const Aws::String& GetEmailAddress() const{ return m_emailAddress; }
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline bool EmailAddressHasBeenSet() const { return m_emailAddressHasBeenSet; }
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline void SetEmailAddress(const Aws::String& value) { m_emailAddressHasBeenSet = true; m_emailAddress = value; }
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline void SetEmailAddress(Aws::String&& value) { m_emailAddressHasBeenSet = true; m_emailAddress = std::move(value); }
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline void SetEmailAddress(const char* value) { m_emailAddressHasBeenSet = true; m_emailAddress.assign(value); }
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline Grantee& WithEmailAddress(const Aws::String& value) { SetEmailAddress(value); return *this;}
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline Grantee& WithEmailAddress(Aws::String&& value) { SetEmailAddress(std::move(value)); return *this;}
+
+ /**
+ * <p>Email address of the grantee.</p> <p>Using email addresses to specify
+ * a grantee is only supported in the following AWS Regions: </p> <ul> <li> <p>US
+ * East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p>
+ * US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li>
+ * <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li>
+ * <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul>
+ * <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a
+ * href="https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">Regions
+ * and Endpoints</a> in the AWS General Reference.</p>
+ */
+ inline Grantee& WithEmailAddress(const char* value) { SetEmailAddress(value); return *this;}
+
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline const Aws::String& GetID() const{ return m_iD; }
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline bool IDHasBeenSet() const { return m_iDHasBeenSet; }
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline void SetID(const Aws::String& value) { m_iDHasBeenSet = true; m_iD = value; }
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline void SetID(Aws::String&& value) { m_iDHasBeenSet = true; m_iD = std::move(value); }
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline void SetID(const char* value) { m_iDHasBeenSet = true; m_iD.assign(value); }
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline Grantee& WithID(const Aws::String& value) { SetID(value); return *this;}
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline Grantee& WithID(Aws::String&& value) { SetID(std::move(value)); return *this;}
+
+ /**
+ * <p>The canonical user ID of the grantee.</p>
+ */
+ inline Grantee& WithID(const char* value) { SetID(value); return *this;}
+
+
+ /**
+ * <p>Type of grantee</p>
+ */
+ inline const Type& GetType() const{ return m_type; }
+
+ /**
+ * <p>Type of grantee</p>
+ */
+ inline bool TypeHasBeenSet() const { return m_typeHasBeenSet; }
+
+ /**
+ * <p>Type of grantee</p>
+ */
+ inline void SetType(const Type& value) { m_typeHasBeenSet = true; m_type = value; }
+
+ /**
+ * <p>Type of grantee</p>
+ */
+ inline void SetType(Type&& value) { m_typeHasBeenSet = true; m_type = std::move(value); }
+
+ /**
+ * <p>Type of grantee</p>
+ */
+ inline Grantee& WithType(const Type& value) { SetType(value); return *this;}
+
+ /**
+ * <p>Type of grantee</p>
+ */
+ inline Grantee& WithType(Type&& value) { SetType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline const Aws::String& GetURI() const{ return m_uRI; }
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline bool URIHasBeenSet() const { return m_uRIHasBeenSet; }
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline void SetURI(const Aws::String& value) { m_uRIHasBeenSet = true; m_uRI = value; }
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline void SetURI(Aws::String&& value) { m_uRIHasBeenSet = true; m_uRI = std::move(value); }
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline void SetURI(const char* value) { m_uRIHasBeenSet = true; m_uRI.assign(value); }
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline Grantee& WithURI(const Aws::String& value) { SetURI(value); return *this;}
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline Grantee& WithURI(Aws::String&& value) { SetURI(std::move(value)); return *this;}
+
+ /**
+ * <p>URI of the grantee group.</p>
+ */
+ inline Grantee& WithURI(const char* value) { SetURI(value); return *this;}
+
+ private:
+
+ Aws::String m_displayName;
+ bool m_displayNameHasBeenSet;
+
+ Aws::String m_emailAddress;
+ bool m_emailAddressHasBeenSet;
+
+ Aws::String m_iD;
+ bool m_iDHasBeenSet;
+
+ Type m_type;
+ bool m_typeHasBeenSet;
+
+ Aws::String m_uRI;
+ bool m_uRIHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadBucketRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadBucketRequest.h
new file mode 100644
index 00000000000..dbef92bdf92
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadBucketRequest.h
@@ -0,0 +1,339 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API HeadBucketRequest : public S3Request
+ {
+ public:
+ HeadBucketRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "HeadBucket"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline HeadBucketRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline HeadBucketRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline HeadBucketRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline HeadBucketRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline HeadBucketRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline HeadBucketRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline HeadBucketRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline HeadBucketRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline HeadBucketRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline HeadBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline HeadBucketRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline HeadBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline HeadBucketRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline HeadBucketRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline HeadBucketRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectRequest.h
new file mode 100644
index 00000000000..d7de0c5ab2f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectRequest.h
@@ -0,0 +1,935 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API HeadObjectRequest : public S3Request
+ {
+ public:
+ HeadObjectRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "HeadObject"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline HeadObjectRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline HeadObjectRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the object.</p> <p>When using this API with
+ * an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline HeadObjectRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline const Aws::String& GetIfMatch() const{ return m_ifMatch; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline bool IfMatchHasBeenSet() const { return m_ifMatchHasBeenSet; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfMatch(const Aws::String& value) { m_ifMatchHasBeenSet = true; m_ifMatch = value; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfMatch(Aws::String&& value) { m_ifMatchHasBeenSet = true; m_ifMatch = std::move(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfMatch(const char* value) { m_ifMatchHasBeenSet = true; m_ifMatch.assign(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline HeadObjectRequest& WithIfMatch(const Aws::String& value) { SetIfMatch(value); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline HeadObjectRequest& WithIfMatch(Aws::String&& value) { SetIfMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is the same as the one
+ * specified, otherwise return a 412 (precondition failed).</p>
+ */
+ inline HeadObjectRequest& WithIfMatch(const char* value) { SetIfMatch(value); return *this;}
+
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline const Aws::Utils::DateTime& GetIfModifiedSince() const{ return m_ifModifiedSince; }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline bool IfModifiedSinceHasBeenSet() const { return m_ifModifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfModifiedSince(const Aws::Utils::DateTime& value) { m_ifModifiedSinceHasBeenSet = true; m_ifModifiedSince = value; }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfModifiedSince(Aws::Utils::DateTime&& value) { m_ifModifiedSinceHasBeenSet = true; m_ifModifiedSince = std::move(value); }
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline HeadObjectRequest& WithIfModifiedSince(const Aws::Utils::DateTime& value) { SetIfModifiedSince(value); return *this;}
+
+ /**
+ * <p>Return the object only if it has been modified since the specified time,
+ * otherwise return a 304 (not modified).</p>
+ */
+ inline HeadObjectRequest& WithIfModifiedSince(Aws::Utils::DateTime&& value) { SetIfModifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline const Aws::String& GetIfNoneMatch() const{ return m_ifNoneMatch; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline bool IfNoneMatchHasBeenSet() const { return m_ifNoneMatchHasBeenSet; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfNoneMatch(const Aws::String& value) { m_ifNoneMatchHasBeenSet = true; m_ifNoneMatch = value; }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfNoneMatch(Aws::String&& value) { m_ifNoneMatchHasBeenSet = true; m_ifNoneMatch = std::move(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline void SetIfNoneMatch(const char* value) { m_ifNoneMatchHasBeenSet = true; m_ifNoneMatch.assign(value); }
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline HeadObjectRequest& WithIfNoneMatch(const Aws::String& value) { SetIfNoneMatch(value); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline HeadObjectRequest& WithIfNoneMatch(Aws::String&& value) { SetIfNoneMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Return the object only if its entity tag (ETag) is different from the one
+ * specified, otherwise return a 304 (not modified).</p>
+ */
+ inline HeadObjectRequest& WithIfNoneMatch(const char* value) { SetIfNoneMatch(value); return *this;}
+
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline const Aws::Utils::DateTime& GetIfUnmodifiedSince() const{ return m_ifUnmodifiedSince; }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline bool IfUnmodifiedSinceHasBeenSet() const { return m_ifUnmodifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfUnmodifiedSince(const Aws::Utils::DateTime& value) { m_ifUnmodifiedSinceHasBeenSet = true; m_ifUnmodifiedSince = value; }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline void SetIfUnmodifiedSince(Aws::Utils::DateTime&& value) { m_ifUnmodifiedSinceHasBeenSet = true; m_ifUnmodifiedSince = std::move(value); }
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline HeadObjectRequest& WithIfUnmodifiedSince(const Aws::Utils::DateTime& value) { SetIfUnmodifiedSince(value); return *this;}
+
+ /**
+ * <p>Return the object only if it has not been modified since the specified time,
+ * otherwise return a 412 (precondition failed).</p>
+ */
+ inline HeadObjectRequest& WithIfUnmodifiedSince(Aws::Utils::DateTime&& value) { SetIfUnmodifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline HeadObjectRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline HeadObjectRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline HeadObjectRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline const Aws::String& GetRange() const{ return m_range; }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline bool RangeHasBeenSet() const { return m_rangeHasBeenSet; }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline void SetRange(const Aws::String& value) { m_rangeHasBeenSet = true; m_range = value; }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline void SetRange(Aws::String&& value) { m_rangeHasBeenSet = true; m_range = std::move(value); }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline void SetRange(const char* value) { m_rangeHasBeenSet = true; m_range.assign(value); }
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline HeadObjectRequest& WithRange(const Aws::String& value) { SetRange(value); return *this;}
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline HeadObjectRequest& WithRange(Aws::String&& value) { SetRange(std::move(value)); return *this;}
+
+ /**
+ * <p>Downloads the specified range bytes of an object. For more information about
+ * the HTTP Range header, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35</a>.</p>
+ * <p>Amazon S3 doesn't support retrieving multiple ranges of data per
+ * <code>GET</code> request.</p>
+ */
+ inline HeadObjectRequest& WithRange(const char* value) { SetRange(value); return *this;}
+
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline HeadObjectRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline HeadObjectRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline HeadObjectRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline HeadObjectRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline HeadObjectRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline HeadObjectRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' HEAD request for the part specified.
+ * Useful querying about the size of the part and the number of parts in this
+ * object.</p>
+ */
+ inline int GetPartNumber() const{ return m_partNumber; }
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' HEAD request for the part specified.
+ * Useful querying about the size of the part and the number of parts in this
+ * object.</p>
+ */
+ inline bool PartNumberHasBeenSet() const { return m_partNumberHasBeenSet; }
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' HEAD request for the part specified.
+ * Useful querying about the size of the part and the number of parts in this
+ * object.</p>
+ */
+ inline void SetPartNumber(int value) { m_partNumberHasBeenSet = true; m_partNumber = value; }
+
+ /**
+ * <p>Part number of the object being read. This is a positive integer between 1
+ * and 10,000. Effectively performs a 'ranged' HEAD request for the part specified.
+ * Useful querying about the size of the part and the number of parts in this
+ * object.</p>
+ */
+ inline HeadObjectRequest& WithPartNumber(int value) { SetPartNumber(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline HeadObjectRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline HeadObjectRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline HeadObjectRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline HeadObjectRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline HeadObjectRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline HeadObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline HeadObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline HeadObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline HeadObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline HeadObjectRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline HeadObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline HeadObjectRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_ifMatch;
+ bool m_ifMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_ifModifiedSince;
+ bool m_ifModifiedSinceHasBeenSet;
+
+ Aws::String m_ifNoneMatch;
+ bool m_ifNoneMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_ifUnmodifiedSince;
+ bool m_ifUnmodifiedSinceHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_range;
+ bool m_rangeHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ int m_partNumber;
+ bool m_partNumberHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectResult.h
new file mode 100644
index 00000000000..7004c0a8254
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/HeadObjectResult.h
@@ -0,0 +1,1433 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ArchiveStatus.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/s3/model/ReplicationStatus.h>
+#include <aws/s3/model/ObjectLockMode.h>
+#include <aws/s3/model/ObjectLockLegalHoldStatus.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API HeadObjectResult
+ {
+ public:
+ HeadObjectResult();
+ HeadObjectResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ HeadObjectResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Specifies whether the object retrieved was (true) or was not (false) a Delete
+ * Marker. If false, this response header does not appear in the response.</p>
+ */
+ inline bool GetDeleteMarker() const{ return m_deleteMarker; }
+
+ /**
+ * <p>Specifies whether the object retrieved was (true) or was not (false) a Delete
+ * Marker. If false, this response header does not appear in the response.</p>
+ */
+ inline void SetDeleteMarker(bool value) { m_deleteMarker = value; }
+
+ /**
+ * <p>Specifies whether the object retrieved was (true) or was not (false) a Delete
+ * Marker. If false, this response header does not appear in the response.</p>
+ */
+ inline HeadObjectResult& WithDeleteMarker(bool value) { SetDeleteMarker(value); return *this;}
+
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline const Aws::String& GetAcceptRanges() const{ return m_acceptRanges; }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline void SetAcceptRanges(const Aws::String& value) { m_acceptRanges = value; }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline void SetAcceptRanges(Aws::String&& value) { m_acceptRanges = std::move(value); }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline void SetAcceptRanges(const char* value) { m_acceptRanges.assign(value); }
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline HeadObjectResult& WithAcceptRanges(const Aws::String& value) { SetAcceptRanges(value); return *this;}
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline HeadObjectResult& WithAcceptRanges(Aws::String&& value) { SetAcceptRanges(std::move(value)); return *this;}
+
+ /**
+ * <p>Indicates that a range of bytes was specified.</p>
+ */
+ inline HeadObjectResult& WithAcceptRanges(const char* value) { SetAcceptRanges(value); return *this;}
+
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline const Aws::String& GetExpiration() const{ return m_expiration; }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline void SetExpiration(const Aws::String& value) { m_expiration = value; }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline void SetExpiration(Aws::String&& value) { m_expiration = std::move(value); }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline void SetExpiration(const char* value) { m_expiration.assign(value); }
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline HeadObjectResult& WithExpiration(const Aws::String& value) { SetExpiration(value); return *this;}
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline HeadObjectResult& WithExpiration(Aws::String&& value) { SetExpiration(std::move(value)); return *this;}
+
+ /**
+ * <p>If the object expiration is configured (see PUT Bucket lifecycle), the
+ * response includes this header. It includes the expiry-date and rule-id key-value
+ * pairs providing object expiration information. The value of the rule-id is URL
+ * encoded.</p>
+ */
+ inline HeadObjectResult& WithExpiration(const char* value) { SetExpiration(value); return *this;}
+
+
+ /**
+ * <p>If the object is an archived object (an object whose storage class is
+ * GLACIER), the response includes this header if either the archive restoration is
+ * in progress (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>
+ * or an archive copy is already restored.</p> <p> If an archive copy is already
+ * restored, the header value indicates when Amazon S3 is scheduled to delete the
+ * object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request="false",
+ * expiry-date="Fri, 23 Dec 2012 00:00:00 GMT"</code> </p> <p>If the object
+ * restoration is in progress, the header returns the value
+ * <code>ongoing-request="true"</code>.</p> <p>For more information about archiving
+ * objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations">Transitioning
+ * Objects: General Considerations</a>.</p>
+ */
+ inline const Aws::String& GetRestore() const{ return m_restore; }
+
+ /**
+ * <p>If the object is an archived object (an object whose storage class is
+ * GLACIER), the response includes this header if either the archive restoration is
+ * in progress (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>
+ * or an archive copy is already restored.</p> <p> If an archive copy is already
+ * restored, the header value indicates when Amazon S3 is scheduled to delete the
+ * object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request="false",
+ * expiry-date="Fri, 23 Dec 2012 00:00:00 GMT"</code> </p> <p>If the object
+ * restoration is in progress, the header returns the value
+ * <code>ongoing-request="true"</code>.</p> <p>For more information about archiving
+ * objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations">Transitioning
+ * Objects: General Considerations</a>.</p>
+ */
+ inline void SetRestore(const Aws::String& value) { m_restore = value; }
+
+ /**
+ * <p>If the object is an archived object (an object whose storage class is
+ * GLACIER), the response includes this header if either the archive restoration is
+ * in progress (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>
+ * or an archive copy is already restored.</p> <p> If an archive copy is already
+ * restored, the header value indicates when Amazon S3 is scheduled to delete the
+ * object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request="false",
+ * expiry-date="Fri, 23 Dec 2012 00:00:00 GMT"</code> </p> <p>If the object
+ * restoration is in progress, the header returns the value
+ * <code>ongoing-request="true"</code>.</p> <p>For more information about archiving
+ * objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations">Transitioning
+ * Objects: General Considerations</a>.</p>
+ */
+ inline void SetRestore(Aws::String&& value) { m_restore = std::move(value); }
+
+ /**
+ * <p>If the object is an archived object (an object whose storage class is
+ * GLACIER), the response includes this header if either the archive restoration is
+ * in progress (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>
+ * or an archive copy is already restored.</p> <p> If an archive copy is already
+ * restored, the header value indicates when Amazon S3 is scheduled to delete the
+ * object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request="false",
+ * expiry-date="Fri, 23 Dec 2012 00:00:00 GMT"</code> </p> <p>If the object
+ * restoration is in progress, the header returns the value
+ * <code>ongoing-request="true"</code>.</p> <p>For more information about archiving
+ * objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations">Transitioning
+ * Objects: General Considerations</a>.</p>
+ */
+ inline void SetRestore(const char* value) { m_restore.assign(value); }
+
+ /**
+ * <p>If the object is an archived object (an object whose storage class is
+ * GLACIER), the response includes this header if either the archive restoration is
+ * in progress (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>
+ * or an archive copy is already restored.</p> <p> If an archive copy is already
+ * restored, the header value indicates when Amazon S3 is scheduled to delete the
+ * object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request="false",
+ * expiry-date="Fri, 23 Dec 2012 00:00:00 GMT"</code> </p> <p>If the object
+ * restoration is in progress, the header returns the value
+ * <code>ongoing-request="true"</code>.</p> <p>For more information about archiving
+ * objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations">Transitioning
+ * Objects: General Considerations</a>.</p>
+ */
+ inline HeadObjectResult& WithRestore(const Aws::String& value) { SetRestore(value); return *this;}
+
+ /**
+ * <p>If the object is an archived object (an object whose storage class is
+ * GLACIER), the response includes this header if either the archive restoration is
+ * in progress (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>
+ * or an archive copy is already restored.</p> <p> If an archive copy is already
+ * restored, the header value indicates when Amazon S3 is scheduled to delete the
+ * object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request="false",
+ * expiry-date="Fri, 23 Dec 2012 00:00:00 GMT"</code> </p> <p>If the object
+ * restoration is in progress, the header returns the value
+ * <code>ongoing-request="true"</code>.</p> <p>For more information about archiving
+ * objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations">Transitioning
+ * Objects: General Considerations</a>.</p>
+ */
+ inline HeadObjectResult& WithRestore(Aws::String&& value) { SetRestore(std::move(value)); return *this;}
+
+ /**
+ * <p>If the object is an archived object (an object whose storage class is
+ * GLACIER), the response includes this header if either the archive restoration is
+ * in progress (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html">RestoreObject</a>
+ * or an archive copy is already restored.</p> <p> If an archive copy is already
+ * restored, the header value indicates when Amazon S3 is scheduled to delete the
+ * object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request="false",
+ * expiry-date="Fri, 23 Dec 2012 00:00:00 GMT"</code> </p> <p>If the object
+ * restoration is in progress, the header returns the value
+ * <code>ongoing-request="true"</code>.</p> <p>For more information about archiving
+ * objects, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations">Transitioning
+ * Objects: General Considerations</a>.</p>
+ */
+ inline HeadObjectResult& WithRestore(const char* value) { SetRestore(value); return *this;}
+
+
+ /**
+ * <p>The archive state of the head object.</p>
+ */
+ inline const ArchiveStatus& GetArchiveStatus() const{ return m_archiveStatus; }
+
+ /**
+ * <p>The archive state of the head object.</p>
+ */
+ inline void SetArchiveStatus(const ArchiveStatus& value) { m_archiveStatus = value; }
+
+ /**
+ * <p>The archive state of the head object.</p>
+ */
+ inline void SetArchiveStatus(ArchiveStatus&& value) { m_archiveStatus = std::move(value); }
+
+ /**
+ * <p>The archive state of the head object.</p>
+ */
+ inline HeadObjectResult& WithArchiveStatus(const ArchiveStatus& value) { SetArchiveStatus(value); return *this;}
+
+ /**
+ * <p>The archive state of the head object.</p>
+ */
+ inline HeadObjectResult& WithArchiveStatus(ArchiveStatus&& value) { SetArchiveStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModified = value; }
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModified = std::move(value); }
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline HeadObjectResult& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>Last modified date of the object</p>
+ */
+ inline HeadObjectResult& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Size of the body in bytes.</p>
+ */
+ inline long long GetContentLength() const{ return m_contentLength; }
+
+ /**
+ * <p>Size of the body in bytes.</p>
+ */
+ inline void SetContentLength(long long value) { m_contentLength = value; }
+
+ /**
+ * <p>Size of the body in bytes.</p>
+ */
+ inline HeadObjectResult& WithContentLength(long long value) { SetContentLength(value); return *this;}
+
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTag = value; }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTag = std::move(value); }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline void SetETag(const char* value) { m_eTag.assign(value); }
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline HeadObjectResult& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline HeadObjectResult& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>An ETag is an opaque identifier assigned by a web server to a specific
+ * version of a resource found at a URL.</p>
+ */
+ inline HeadObjectResult& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>This is set to the number of metadata entries not returned in
+ * <code>x-amz-meta</code> headers. This can happen if you create metadata using an
+ * API like SOAP that supports more flexible metadata than the REST API. For
+ * example, using SOAP, you can create metadata whose values are not legal HTTP
+ * headers.</p>
+ */
+ inline int GetMissingMeta() const{ return m_missingMeta; }
+
+ /**
+ * <p>This is set to the number of metadata entries not returned in
+ * <code>x-amz-meta</code> headers. This can happen if you create metadata using an
+ * API like SOAP that supports more flexible metadata than the REST API. For
+ * example, using SOAP, you can create metadata whose values are not legal HTTP
+ * headers.</p>
+ */
+ inline void SetMissingMeta(int value) { m_missingMeta = value; }
+
+ /**
+ * <p>This is set to the number of metadata entries not returned in
+ * <code>x-amz-meta</code> headers. This can happen if you create metadata using an
+ * API like SOAP that supports more flexible metadata than the REST API. For
+ * example, using SOAP, you can create metadata whose values are not legal HTTP
+ * headers.</p>
+ */
+ inline HeadObjectResult& WithMissingMeta(int value) { SetMissingMeta(value); return *this;}
+
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline HeadObjectResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline HeadObjectResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline HeadObjectResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline const Aws::String& GetCacheControl() const{ return m_cacheControl; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const Aws::String& value) { m_cacheControl = value; }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(Aws::String&& value) { m_cacheControl = std::move(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline void SetCacheControl(const char* value) { m_cacheControl.assign(value); }
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline HeadObjectResult& WithCacheControl(const Aws::String& value) { SetCacheControl(value); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline HeadObjectResult& WithCacheControl(Aws::String&& value) { SetCacheControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies caching behavior along the request/reply chain.</p>
+ */
+ inline HeadObjectResult& WithCacheControl(const char* value) { SetCacheControl(value); return *this;}
+
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline const Aws::String& GetContentDisposition() const{ return m_contentDisposition; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const Aws::String& value) { m_contentDisposition = value; }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(Aws::String&& value) { m_contentDisposition = std::move(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline void SetContentDisposition(const char* value) { m_contentDisposition.assign(value); }
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline HeadObjectResult& WithContentDisposition(const Aws::String& value) { SetContentDisposition(value); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline HeadObjectResult& WithContentDisposition(Aws::String&& value) { SetContentDisposition(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object.</p>
+ */
+ inline HeadObjectResult& WithContentDisposition(const char* value) { SetContentDisposition(value); return *this;}
+
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline const Aws::String& GetContentEncoding() const{ return m_contentEncoding; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const Aws::String& value) { m_contentEncoding = value; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(Aws::String&& value) { m_contentEncoding = std::move(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline void SetContentEncoding(const char* value) { m_contentEncoding.assign(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline HeadObjectResult& WithContentEncoding(const Aws::String& value) { SetContentEncoding(value); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline HeadObjectResult& WithContentEncoding(Aws::String&& value) { SetContentEncoding(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field.</p>
+ */
+ inline HeadObjectResult& WithContentEncoding(const char* value) { SetContentEncoding(value); return *this;}
+
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline const Aws::String& GetContentLanguage() const{ return m_contentLanguage; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const Aws::String& value) { m_contentLanguage = value; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(Aws::String&& value) { m_contentLanguage = std::move(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const char* value) { m_contentLanguage.assign(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline HeadObjectResult& WithContentLanguage(const Aws::String& value) { SetContentLanguage(value); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline HeadObjectResult& WithContentLanguage(Aws::String&& value) { SetContentLanguage(std::move(value)); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline HeadObjectResult& WithContentLanguage(const char* value) { SetContentLanguage(value); return *this;}
+
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline const Aws::String& GetContentType() const{ return m_contentType; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const Aws::String& value) { m_contentType = value; }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(Aws::String&& value) { m_contentType = std::move(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline void SetContentType(const char* value) { m_contentType.assign(value); }
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline HeadObjectResult& WithContentType(const Aws::String& value) { SetContentType(value); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline HeadObjectResult& WithContentType(Aws::String&& value) { SetContentType(std::move(value)); return *this;}
+
+ /**
+ * <p>A standard MIME type describing the format of the object data.</p>
+ */
+ inline HeadObjectResult& WithContentType(const char* value) { SetContentType(value); return *this;}
+
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline const Aws::Utils::DateTime& GetExpires() const{ return m_expires; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(const Aws::Utils::DateTime& value) { m_expires = value; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline void SetExpires(Aws::Utils::DateTime&& value) { m_expires = std::move(value); }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline HeadObjectResult& WithExpires(const Aws::Utils::DateTime& value) { SetExpires(value); return *this;}
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable.</p>
+ */
+ inline HeadObjectResult& WithExpires(Aws::Utils::DateTime&& value) { SetExpires(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline const Aws::String& GetWebsiteRedirectLocation() const{ return m_websiteRedirectLocation; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const Aws::String& value) { m_websiteRedirectLocation = value; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(Aws::String&& value) { m_websiteRedirectLocation = std::move(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline void SetWebsiteRedirectLocation(const char* value) { m_websiteRedirectLocation.assign(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline HeadObjectResult& WithWebsiteRedirectLocation(const Aws::String& value) { SetWebsiteRedirectLocation(value); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline HeadObjectResult& WithWebsiteRedirectLocation(Aws::String&& value) { SetWebsiteRedirectLocation(std::move(value)); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata.</p>
+ */
+ inline HeadObjectResult& WithWebsiteRedirectLocation(const char* value) { SetWebsiteRedirectLocation(value); return *this;}
+
+
+ /**
+ * <p>If the object is stored using server-side encryption either with an AWS KMS
+ * customer master key (CMK) or an Amazon S3-managed encryption key, the response
+ * includes this header with the value of the server-side encryption algorithm used
+ * when storing this object in Amazon S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>If the object is stored using server-side encryption either with an AWS KMS
+ * customer master key (CMK) or an Amazon S3-managed encryption key, the response
+ * includes this header with the value of the server-side encryption algorithm used
+ * when storing this object in Amazon S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>If the object is stored using server-side encryption either with an AWS KMS
+ * customer master key (CMK) or an Amazon S3-managed encryption key, the response
+ * includes this header with the value of the server-side encryption algorithm used
+ * when storing this object in Amazon S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>If the object is stored using server-side encryption either with an AWS KMS
+ * customer master key (CMK) or an Amazon S3-managed encryption key, the response
+ * includes this header with the value of the server-side encryption algorithm used
+ * when storing this object in Amazon S3 (for example, AES256, aws:kms).</p>
+ */
+ inline HeadObjectResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>If the object is stored using server-side encryption either with an AWS KMS
+ * customer master key (CMK) or an Amazon S3-managed encryption key, the response
+ * includes this header with the value of the server-side encryption algorithm used
+ * when storing this object in Amazon S3 (for example, AES256, aws:kms).</p>
+ */
+ inline HeadObjectResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline const Aws::Map<Aws::String, Aws::String>& GetMetadata() const{ return m_metadata; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(const Aws::Map<Aws::String, Aws::String>& value) { m_metadata = value; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(Aws::Map<Aws::String, Aws::String>&& value) { m_metadata = std::move(value); }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& WithMetadata(const Aws::Map<Aws::String, Aws::String>& value) { SetMetadata(value); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& WithMetadata(Aws::Map<Aws::String, Aws::String>&& value) { SetMetadata(std::move(value)); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& AddMetadata(const Aws::String& key, const Aws::String& value) { m_metadata.emplace(key, value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& AddMetadata(Aws::String&& key, const Aws::String& value) { m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& AddMetadata(const Aws::String& key, Aws::String&& value) { m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& AddMetadata(Aws::String&& key, Aws::String&& value) { m_metadata.emplace(std::move(key), std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& AddMetadata(const char* key, Aws::String&& value) { m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& AddMetadata(Aws::String&& key, const char* value) { m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline HeadObjectResult& AddMetadata(const char* key, const char* value) { m_metadata.emplace(key, value); return *this; }
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline HeadObjectResult& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline HeadObjectResult& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline HeadObjectResult& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline HeadObjectResult& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline HeadObjectResult& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline HeadObjectResult& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline HeadObjectResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline HeadObjectResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline HeadObjectResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the object uses an S3 Bucket Key for server-side encryption
+ * with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the object uses an S3 Bucket Key for server-side encryption
+ * with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the object uses an S3 Bucket Key for server-side encryption
+ * with AWS KMS (SSE-KMS).</p>
+ */
+ inline HeadObjectResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p> <p>For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a>.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p> <p>For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a>.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClass = value; }
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p> <p>For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a>.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClass = std::move(value); }
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p> <p>For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a>.</p>
+ */
+ inline HeadObjectResult& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>Provides storage class information of the object. Amazon S3 returns this
+ * header for all objects except for S3 Standard storage class objects.</p> <p>For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a>.</p>
+ */
+ inline HeadObjectResult& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline HeadObjectResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline HeadObjectResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Amazon S3 can return this header if your request involves a bucket that is
+ * either a source or a destination in a replication rule.</p> <p>In replication,
+ * you have a source bucket on which you configure replication and destination
+ * bucket or buckets where Amazon S3 stores object replicas. When you request an
+ * object (<code>GetObject</code>) or object metadata (<code>HeadObject</code>)
+ * from these buckets, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header in the response as follows:</p>
+ * <ul> <li> <p>If requesting an object from the source bucket — Amazon S3 will
+ * return the <code>x-amz-replication-status</code> header if the object in your
+ * request is eligible for replication.</p> <p> For example, suppose that in your
+ * replication configuration, you specify object prefix <code>TaxDocs</code>
+ * requesting Amazon S3 to replicate objects with key prefix <code>TaxDocs</code>.
+ * Any objects you upload with this key name prefix, for example
+ * <code>TaxDocs/document1.pdf</code>, are eligible for replication. For any object
+ * request with this key name prefix, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value PENDING, COMPLETED or
+ * FAILED indicating object replication status.</p> </li> <li> <p>If requesting an
+ * object from a destination bucket — Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value REPLICA if the object in
+ * your request is a replica that Amazon S3 created and there is no replica
+ * modification replication in progress.</p> </li> <li> <p>When replicating objects
+ * to multiple destination buckets the <code>x-amz-replication-status</code> header
+ * acts differently. The header of the source object will only return a value of
+ * COMPLETED when replication is successful to all destinations. The header will
+ * remain at value PENDING until replication has completed for all destinations. If
+ * one or more destinations fails replication the header will return FAILED. </p>
+ * </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Replication</a>.</p>
+ */
+ inline const ReplicationStatus& GetReplicationStatus() const{ return m_replicationStatus; }
+
+ /**
+ * <p>Amazon S3 can return this header if your request involves a bucket that is
+ * either a source or a destination in a replication rule.</p> <p>In replication,
+ * you have a source bucket on which you configure replication and destination
+ * bucket or buckets where Amazon S3 stores object replicas. When you request an
+ * object (<code>GetObject</code>) or object metadata (<code>HeadObject</code>)
+ * from these buckets, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header in the response as follows:</p>
+ * <ul> <li> <p>If requesting an object from the source bucket — Amazon S3 will
+ * return the <code>x-amz-replication-status</code> header if the object in your
+ * request is eligible for replication.</p> <p> For example, suppose that in your
+ * replication configuration, you specify object prefix <code>TaxDocs</code>
+ * requesting Amazon S3 to replicate objects with key prefix <code>TaxDocs</code>.
+ * Any objects you upload with this key name prefix, for example
+ * <code>TaxDocs/document1.pdf</code>, are eligible for replication. For any object
+ * request with this key name prefix, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value PENDING, COMPLETED or
+ * FAILED indicating object replication status.</p> </li> <li> <p>If requesting an
+ * object from a destination bucket — Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value REPLICA if the object in
+ * your request is a replica that Amazon S3 created and there is no replica
+ * modification replication in progress.</p> </li> <li> <p>When replicating objects
+ * to multiple destination buckets the <code>x-amz-replication-status</code> header
+ * acts differently. The header of the source object will only return a value of
+ * COMPLETED when replication is successful to all destinations. The header will
+ * remain at value PENDING until replication has completed for all destinations. If
+ * one or more destinations fails replication the header will return FAILED. </p>
+ * </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Replication</a>.</p>
+ */
+ inline void SetReplicationStatus(const ReplicationStatus& value) { m_replicationStatus = value; }
+
+ /**
+ * <p>Amazon S3 can return this header if your request involves a bucket that is
+ * either a source or a destination in a replication rule.</p> <p>In replication,
+ * you have a source bucket on which you configure replication and destination
+ * bucket or buckets where Amazon S3 stores object replicas. When you request an
+ * object (<code>GetObject</code>) or object metadata (<code>HeadObject</code>)
+ * from these buckets, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header in the response as follows:</p>
+ * <ul> <li> <p>If requesting an object from the source bucket — Amazon S3 will
+ * return the <code>x-amz-replication-status</code> header if the object in your
+ * request is eligible for replication.</p> <p> For example, suppose that in your
+ * replication configuration, you specify object prefix <code>TaxDocs</code>
+ * requesting Amazon S3 to replicate objects with key prefix <code>TaxDocs</code>.
+ * Any objects you upload with this key name prefix, for example
+ * <code>TaxDocs/document1.pdf</code>, are eligible for replication. For any object
+ * request with this key name prefix, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value PENDING, COMPLETED or
+ * FAILED indicating object replication status.</p> </li> <li> <p>If requesting an
+ * object from a destination bucket — Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value REPLICA if the object in
+ * your request is a replica that Amazon S3 created and there is no replica
+ * modification replication in progress.</p> </li> <li> <p>When replicating objects
+ * to multiple destination buckets the <code>x-amz-replication-status</code> header
+ * acts differently. The header of the source object will only return a value of
+ * COMPLETED when replication is successful to all destinations. The header will
+ * remain at value PENDING until replication has completed for all destinations. If
+ * one or more destinations fails replication the header will return FAILED. </p>
+ * </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Replication</a>.</p>
+ */
+ inline void SetReplicationStatus(ReplicationStatus&& value) { m_replicationStatus = std::move(value); }
+
+ /**
+ * <p>Amazon S3 can return this header if your request involves a bucket that is
+ * either a source or a destination in a replication rule.</p> <p>In replication,
+ * you have a source bucket on which you configure replication and destination
+ * bucket or buckets where Amazon S3 stores object replicas. When you request an
+ * object (<code>GetObject</code>) or object metadata (<code>HeadObject</code>)
+ * from these buckets, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header in the response as follows:</p>
+ * <ul> <li> <p>If requesting an object from the source bucket — Amazon S3 will
+ * return the <code>x-amz-replication-status</code> header if the object in your
+ * request is eligible for replication.</p> <p> For example, suppose that in your
+ * replication configuration, you specify object prefix <code>TaxDocs</code>
+ * requesting Amazon S3 to replicate objects with key prefix <code>TaxDocs</code>.
+ * Any objects you upload with this key name prefix, for example
+ * <code>TaxDocs/document1.pdf</code>, are eligible for replication. For any object
+ * request with this key name prefix, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value PENDING, COMPLETED or
+ * FAILED indicating object replication status.</p> </li> <li> <p>If requesting an
+ * object from a destination bucket — Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value REPLICA if the object in
+ * your request is a replica that Amazon S3 created and there is no replica
+ * modification replication in progress.</p> </li> <li> <p>When replicating objects
+ * to multiple destination buckets the <code>x-amz-replication-status</code> header
+ * acts differently. The header of the source object will only return a value of
+ * COMPLETED when replication is successful to all destinations. The header will
+ * remain at value PENDING until replication has completed for all destinations. If
+ * one or more destinations fails replication the header will return FAILED. </p>
+ * </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Replication</a>.</p>
+ */
+ inline HeadObjectResult& WithReplicationStatus(const ReplicationStatus& value) { SetReplicationStatus(value); return *this;}
+
+ /**
+ * <p>Amazon S3 can return this header if your request involves a bucket that is
+ * either a source or a destination in a replication rule.</p> <p>In replication,
+ * you have a source bucket on which you configure replication and destination
+ * bucket or buckets where Amazon S3 stores object replicas. When you request an
+ * object (<code>GetObject</code>) or object metadata (<code>HeadObject</code>)
+ * from these buckets, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header in the response as follows:</p>
+ * <ul> <li> <p>If requesting an object from the source bucket — Amazon S3 will
+ * return the <code>x-amz-replication-status</code> header if the object in your
+ * request is eligible for replication.</p> <p> For example, suppose that in your
+ * replication configuration, you specify object prefix <code>TaxDocs</code>
+ * requesting Amazon S3 to replicate objects with key prefix <code>TaxDocs</code>.
+ * Any objects you upload with this key name prefix, for example
+ * <code>TaxDocs/document1.pdf</code>, are eligible for replication. For any object
+ * request with this key name prefix, Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value PENDING, COMPLETED or
+ * FAILED indicating object replication status.</p> </li> <li> <p>If requesting an
+ * object from a destination bucket — Amazon S3 will return the
+ * <code>x-amz-replication-status</code> header with value REPLICA if the object in
+ * your request is a replica that Amazon S3 created and there is no replica
+ * modification replication in progress.</p> </li> <li> <p>When replicating objects
+ * to multiple destination buckets the <code>x-amz-replication-status</code> header
+ * acts differently. The header of the source object will only return a value of
+ * COMPLETED when replication is successful to all destinations. The header will
+ * remain at value PENDING until replication has completed for all destinations. If
+ * one or more destinations fails replication the header will return FAILED. </p>
+ * </li> </ul> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Replication</a>.</p>
+ */
+ inline HeadObjectResult& WithReplicationStatus(ReplicationStatus&& value) { SetReplicationStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The count of parts this object has.</p>
+ */
+ inline int GetPartsCount() const{ return m_partsCount; }
+
+ /**
+ * <p>The count of parts this object has.</p>
+ */
+ inline void SetPartsCount(int value) { m_partsCount = value; }
+
+ /**
+ * <p>The count of parts this object has.</p>
+ */
+ inline HeadObjectResult& WithPartsCount(int value) { SetPartsCount(value); return *this;}
+
+
+ /**
+ * <p>The Object Lock mode, if any, that's in effect for this object. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission. For more information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>. </p>
+ */
+ inline const ObjectLockMode& GetObjectLockMode() const{ return m_objectLockMode; }
+
+ /**
+ * <p>The Object Lock mode, if any, that's in effect for this object. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission. For more information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>. </p>
+ */
+ inline void SetObjectLockMode(const ObjectLockMode& value) { m_objectLockMode = value; }
+
+ /**
+ * <p>The Object Lock mode, if any, that's in effect for this object. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission. For more information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>. </p>
+ */
+ inline void SetObjectLockMode(ObjectLockMode&& value) { m_objectLockMode = std::move(value); }
+
+ /**
+ * <p>The Object Lock mode, if any, that's in effect for this object. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission. For more information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>. </p>
+ */
+ inline HeadObjectResult& WithObjectLockMode(const ObjectLockMode& value) { SetObjectLockMode(value); return *this;}
+
+ /**
+ * <p>The Object Lock mode, if any, that's in effect for this object. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission. For more information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>. </p>
+ */
+ inline HeadObjectResult& WithObjectLockMode(ObjectLockMode&& value) { SetObjectLockMode(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The date and time when the Object Lock retention period expires. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission.</p>
+ */
+ inline const Aws::Utils::DateTime& GetObjectLockRetainUntilDate() const{ return m_objectLockRetainUntilDate; }
+
+ /**
+ * <p>The date and time when the Object Lock retention period expires. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { m_objectLockRetainUntilDate = value; }
+
+ /**
+ * <p>The date and time when the Object Lock retention period expires. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { m_objectLockRetainUntilDate = std::move(value); }
+
+ /**
+ * <p>The date and time when the Object Lock retention period expires. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission.</p>
+ */
+ inline HeadObjectResult& WithObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { SetObjectLockRetainUntilDate(value); return *this;}
+
+ /**
+ * <p>The date and time when the Object Lock retention period expires. This header
+ * is only returned if the requester has the <code>s3:GetObjectRetention</code>
+ * permission.</p>
+ */
+ inline HeadObjectResult& WithObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { SetObjectLockRetainUntilDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether a legal hold is in effect for this object. This header is
+ * only returned if the requester has the <code>s3:GetObjectLegalHold</code>
+ * permission. This header is not returned if the specified version of this object
+ * has never had a legal hold applied. For more information about S3 Object Lock,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline const ObjectLockLegalHoldStatus& GetObjectLockLegalHoldStatus() const{ return m_objectLockLegalHoldStatus; }
+
+ /**
+ * <p>Specifies whether a legal hold is in effect for this object. This header is
+ * only returned if the requester has the <code>s3:GetObjectLegalHold</code>
+ * permission. This header is not returned if the specified version of this object
+ * has never had a legal hold applied. For more information about S3 Object Lock,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { m_objectLockLegalHoldStatus = value; }
+
+ /**
+ * <p>Specifies whether a legal hold is in effect for this object. This header is
+ * only returned if the requester has the <code>s3:GetObjectLegalHold</code>
+ * permission. This header is not returned if the specified version of this object
+ * has never had a legal hold applied. For more information about S3 Object Lock,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { m_objectLockLegalHoldStatus = std::move(value); }
+
+ /**
+ * <p>Specifies whether a legal hold is in effect for this object. This header is
+ * only returned if the requester has the <code>s3:GetObjectLegalHold</code>
+ * permission. This header is not returned if the specified version of this object
+ * has never had a legal hold applied. For more information about S3 Object Lock,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline HeadObjectResult& WithObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { SetObjectLockLegalHoldStatus(value); return *this;}
+
+ /**
+ * <p>Specifies whether a legal hold is in effect for this object. This header is
+ * only returned if the requester has the <code>s3:GetObjectLegalHold</code>
+ * permission. This header is not returned if the specified version of this object
+ * has never had a legal hold applied. For more information about S3 Object Lock,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline HeadObjectResult& WithObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { SetObjectLockLegalHoldStatus(std::move(value)); return *this;}
+
+ private:
+
+ bool m_deleteMarker;
+
+ Aws::String m_acceptRanges;
+
+ Aws::String m_expiration;
+
+ Aws::String m_restore;
+
+ ArchiveStatus m_archiveStatus;
+
+ Aws::Utils::DateTime m_lastModified;
+
+ long long m_contentLength;
+
+ Aws::String m_eTag;
+
+ int m_missingMeta;
+
+ Aws::String m_versionId;
+
+ Aws::String m_cacheControl;
+
+ Aws::String m_contentDisposition;
+
+ Aws::String m_contentEncoding;
+
+ Aws::String m_contentLanguage;
+
+ Aws::String m_contentType;
+
+ Aws::Utils::DateTime m_expires;
+
+ Aws::String m_websiteRedirectLocation;
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::Map<Aws::String, Aws::String> m_metadata;
+
+ Aws::String m_sSECustomerAlgorithm;
+
+ Aws::String m_sSECustomerKeyMD5;
+
+ Aws::String m_sSEKMSKeyId;
+
+ bool m_bucketKeyEnabled;
+
+ StorageClass m_storageClass;
+
+ RequestCharged m_requestCharged;
+
+ ReplicationStatus m_replicationStatus;
+
+ int m_partsCount;
+
+ ObjectLockMode m_objectLockMode;
+
+ Aws::Utils::DateTime m_objectLockRetainUntilDate;
+
+ ObjectLockLegalHoldStatus m_objectLockLegalHoldStatus;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IndexDocument.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IndexDocument.h
new file mode 100644
index 00000000000..1bd88410c6f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IndexDocument.h
@@ -0,0 +1,120 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the <code>Suffix</code> element.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/IndexDocument">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API IndexDocument
+ {
+ public:
+ IndexDocument();
+ IndexDocument(const Aws::Utils::Xml::XmlNode& xmlNode);
+ IndexDocument& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline const Aws::String& GetSuffix() const{ return m_suffix; }
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline bool SuffixHasBeenSet() const { return m_suffixHasBeenSet; }
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline void SetSuffix(const Aws::String& value) { m_suffixHasBeenSet = true; m_suffix = value; }
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline void SetSuffix(Aws::String&& value) { m_suffixHasBeenSet = true; m_suffix = std::move(value); }
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline void SetSuffix(const char* value) { m_suffixHasBeenSet = true; m_suffix.assign(value); }
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline IndexDocument& WithSuffix(const Aws::String& value) { SetSuffix(value); return *this;}
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline IndexDocument& WithSuffix(Aws::String&& value) { SetSuffix(std::move(value)); return *this;}
+
+ /**
+ * <p>A suffix that is appended to a request that is for a directory on the website
+ * endpoint (for example,if the suffix is index.html and you make a request to
+ * samplebucket/images/ the data that is returned will be for the object with the
+ * key name images/index.html) The suffix must not be empty and must not include a
+ * slash character.</p>
+ */
+ inline IndexDocument& WithSuffix(const char* value) { SetSuffix(value); return *this;}
+
+ private:
+
+ Aws::String m_suffix;
+ bool m_suffixHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Initiator.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Initiator.h
new file mode 100644
index 00000000000..7e831b799d9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Initiator.h
@@ -0,0 +1,141 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container element that identifies who initiated the multipart upload.
+ * </p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Initiator">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Initiator
+ {
+ public:
+ Initiator();
+ Initiator(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Initiator& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline const Aws::String& GetID() const{ return m_iD; }
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline bool IDHasBeenSet() const { return m_iDHasBeenSet; }
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline void SetID(const Aws::String& value) { m_iDHasBeenSet = true; m_iD = value; }
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline void SetID(Aws::String&& value) { m_iDHasBeenSet = true; m_iD = std::move(value); }
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline void SetID(const char* value) { m_iDHasBeenSet = true; m_iD.assign(value); }
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline Initiator& WithID(const Aws::String& value) { SetID(value); return *this;}
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline Initiator& WithID(Aws::String&& value) { SetID(std::move(value)); return *this;}
+
+ /**
+ * <p>If the principal is an AWS account, it provides the Canonical User ID. If the
+ * principal is an IAM User, it provides a user ARN value.</p>
+ */
+ inline Initiator& WithID(const char* value) { SetID(value); return *this;}
+
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline const Aws::String& GetDisplayName() const{ return m_displayName; }
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline bool DisplayNameHasBeenSet() const { return m_displayNameHasBeenSet; }
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline void SetDisplayName(const Aws::String& value) { m_displayNameHasBeenSet = true; m_displayName = value; }
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline void SetDisplayName(Aws::String&& value) { m_displayNameHasBeenSet = true; m_displayName = std::move(value); }
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline void SetDisplayName(const char* value) { m_displayNameHasBeenSet = true; m_displayName.assign(value); }
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline Initiator& WithDisplayName(const Aws::String& value) { SetDisplayName(value); return *this;}
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline Initiator& WithDisplayName(Aws::String&& value) { SetDisplayName(std::move(value)); return *this;}
+
+ /**
+ * <p>Name of the Principal.</p>
+ */
+ inline Initiator& WithDisplayName(const char* value) { SetDisplayName(value); return *this;}
+
+ private:
+
+ Aws::String m_iD;
+ bool m_iDHasBeenSet;
+
+ Aws::String m_displayName;
+ bool m_displayNameHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InputSerialization.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InputSerialization.h
new file mode 100644
index 00000000000..332b4ec21de
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InputSerialization.h
@@ -0,0 +1,190 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/CSVInput.h>
+#include <aws/s3/model/CompressionType.h>
+#include <aws/s3/model/JSONInput.h>
+#include <aws/s3/model/ParquetInput.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes the serialization format of the object.</p><p><h3>See Also:</h3>
+ * <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InputSerialization">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InputSerialization
+ {
+ public:
+ InputSerialization();
+ InputSerialization(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InputSerialization& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Describes the serialization of a CSV-encoded object.</p>
+ */
+ inline const CSVInput& GetCSV() const{ return m_cSV; }
+
+ /**
+ * <p>Describes the serialization of a CSV-encoded object.</p>
+ */
+ inline bool CSVHasBeenSet() const { return m_cSVHasBeenSet; }
+
+ /**
+ * <p>Describes the serialization of a CSV-encoded object.</p>
+ */
+ inline void SetCSV(const CSVInput& value) { m_cSVHasBeenSet = true; m_cSV = value; }
+
+ /**
+ * <p>Describes the serialization of a CSV-encoded object.</p>
+ */
+ inline void SetCSV(CSVInput&& value) { m_cSVHasBeenSet = true; m_cSV = std::move(value); }
+
+ /**
+ * <p>Describes the serialization of a CSV-encoded object.</p>
+ */
+ inline InputSerialization& WithCSV(const CSVInput& value) { SetCSV(value); return *this;}
+
+ /**
+ * <p>Describes the serialization of a CSV-encoded object.</p>
+ */
+ inline InputSerialization& WithCSV(CSVInput&& value) { SetCSV(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies object's compression format. Valid values: NONE, GZIP, BZIP2.
+ * Default Value: NONE.</p>
+ */
+ inline const CompressionType& GetCompressionType() const{ return m_compressionType; }
+
+ /**
+ * <p>Specifies object's compression format. Valid values: NONE, GZIP, BZIP2.
+ * Default Value: NONE.</p>
+ */
+ inline bool CompressionTypeHasBeenSet() const { return m_compressionTypeHasBeenSet; }
+
+ /**
+ * <p>Specifies object's compression format. Valid values: NONE, GZIP, BZIP2.
+ * Default Value: NONE.</p>
+ */
+ inline void SetCompressionType(const CompressionType& value) { m_compressionTypeHasBeenSet = true; m_compressionType = value; }
+
+ /**
+ * <p>Specifies object's compression format. Valid values: NONE, GZIP, BZIP2.
+ * Default Value: NONE.</p>
+ */
+ inline void SetCompressionType(CompressionType&& value) { m_compressionTypeHasBeenSet = true; m_compressionType = std::move(value); }
+
+ /**
+ * <p>Specifies object's compression format. Valid values: NONE, GZIP, BZIP2.
+ * Default Value: NONE.</p>
+ */
+ inline InputSerialization& WithCompressionType(const CompressionType& value) { SetCompressionType(value); return *this;}
+
+ /**
+ * <p>Specifies object's compression format. Valid values: NONE, GZIP, BZIP2.
+ * Default Value: NONE.</p>
+ */
+ inline InputSerialization& WithCompressionType(CompressionType&& value) { SetCompressionType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies JSON as object's input serialization format.</p>
+ */
+ inline const JSONInput& GetJSON() const{ return m_jSON; }
+
+ /**
+ * <p>Specifies JSON as object's input serialization format.</p>
+ */
+ inline bool JSONHasBeenSet() const { return m_jSONHasBeenSet; }
+
+ /**
+ * <p>Specifies JSON as object's input serialization format.</p>
+ */
+ inline void SetJSON(const JSONInput& value) { m_jSONHasBeenSet = true; m_jSON = value; }
+
+ /**
+ * <p>Specifies JSON as object's input serialization format.</p>
+ */
+ inline void SetJSON(JSONInput&& value) { m_jSONHasBeenSet = true; m_jSON = std::move(value); }
+
+ /**
+ * <p>Specifies JSON as object's input serialization format.</p>
+ */
+ inline InputSerialization& WithJSON(const JSONInput& value) { SetJSON(value); return *this;}
+
+ /**
+ * <p>Specifies JSON as object's input serialization format.</p>
+ */
+ inline InputSerialization& WithJSON(JSONInput&& value) { SetJSON(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies Parquet as object's input serialization format.</p>
+ */
+ inline const ParquetInput& GetParquet() const{ return m_parquet; }
+
+ /**
+ * <p>Specifies Parquet as object's input serialization format.</p>
+ */
+ inline bool ParquetHasBeenSet() const { return m_parquetHasBeenSet; }
+
+ /**
+ * <p>Specifies Parquet as object's input serialization format.</p>
+ */
+ inline void SetParquet(const ParquetInput& value) { m_parquetHasBeenSet = true; m_parquet = value; }
+
+ /**
+ * <p>Specifies Parquet as object's input serialization format.</p>
+ */
+ inline void SetParquet(ParquetInput&& value) { m_parquetHasBeenSet = true; m_parquet = std::move(value); }
+
+ /**
+ * <p>Specifies Parquet as object's input serialization format.</p>
+ */
+ inline InputSerialization& WithParquet(const ParquetInput& value) { SetParquet(value); return *this;}
+
+ /**
+ * <p>Specifies Parquet as object's input serialization format.</p>
+ */
+ inline InputSerialization& WithParquet(ParquetInput&& value) { SetParquet(std::move(value)); return *this;}
+
+ private:
+
+ CSVInput m_cSV;
+ bool m_cSVHasBeenSet;
+
+ CompressionType m_compressionType;
+ bool m_compressionTypeHasBeenSet;
+
+ JSONInput m_jSON;
+ bool m_jSONHasBeenSet;
+
+ ParquetInput m_parquet;
+ bool m_parquetHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAccessTier.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAccessTier.h
new file mode 100644
index 00000000000..b84259b865c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAccessTier.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class IntelligentTieringAccessTier
+ {
+ NOT_SET,
+ ARCHIVE_ACCESS,
+ DEEP_ARCHIVE_ACCESS
+ };
+
+namespace IntelligentTieringAccessTierMapper
+{
+AWS_S3_API IntelligentTieringAccessTier GetIntelligentTieringAccessTierForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForIntelligentTieringAccessTier(IntelligentTieringAccessTier value);
+} // namespace IntelligentTieringAccessTierMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAndOperator.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAndOperator.h
new file mode 100644
index 00000000000..f40740341b9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringAndOperator.h
@@ -0,0 +1,152 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for specifying S3 Intelligent-Tiering filters. The filters
+ * determine the subset of objects to which the rule applies.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/IntelligentTieringAndOperator">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API IntelligentTieringAndOperator
+ {
+ public:
+ IntelligentTieringAndOperator();
+ IntelligentTieringAndOperator(const Aws::Utils::Xml::XmlNode& xmlNode);
+ IntelligentTieringAndOperator& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline IntelligentTieringAndOperator& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline IntelligentTieringAndOperator& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * configuration applies.</p>
+ */
+ inline IntelligentTieringAndOperator& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline const Aws::Vector<Tag>& GetTags() const{ return m_tags; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline void SetTags(const Aws::Vector<Tag>& value) { m_tagsHasBeenSet = true; m_tags = value; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline void SetTags(Aws::Vector<Tag>&& value) { m_tagsHasBeenSet = true; m_tags = std::move(value); }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline IntelligentTieringAndOperator& WithTags(const Aws::Vector<Tag>& value) { SetTags(value); return *this;}
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline IntelligentTieringAndOperator& WithTags(Aws::Vector<Tag>&& value) { SetTags(std::move(value)); return *this;}
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline IntelligentTieringAndOperator& AddTags(const Tag& value) { m_tagsHasBeenSet = true; m_tags.push_back(value); return *this; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the
+ * configuration to apply.</p>
+ */
+ inline IntelligentTieringAndOperator& AddTags(Tag&& value) { m_tagsHasBeenSet = true; m_tags.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::Vector<Tag> m_tags;
+ bool m_tagsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringConfiguration.h
new file mode 100644
index 00000000000..5e89009326e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringConfiguration.h
@@ -0,0 +1,223 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/IntelligentTieringFilter.h>
+#include <aws/s3/model/IntelligentTieringStatus.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tiering.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering configuration for an Amazon S3
+ * bucket.</p> <p>For information about the S3 Intelligent-Tiering storage class,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/IntelligentTieringConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API IntelligentTieringConfiguration
+ {
+ public:
+ IntelligentTieringConfiguration();
+ IntelligentTieringConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ IntelligentTieringConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>Specifies a bucket filter. The configuration only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline const IntelligentTieringFilter& GetFilter() const{ return m_filter; }
+
+ /**
+ * <p>Specifies a bucket filter. The configuration only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+ /**
+ * <p>Specifies a bucket filter. The configuration only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline void SetFilter(const IntelligentTieringFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+ /**
+ * <p>Specifies a bucket filter. The configuration only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline void SetFilter(IntelligentTieringFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+ /**
+ * <p>Specifies a bucket filter. The configuration only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline IntelligentTieringConfiguration& WithFilter(const IntelligentTieringFilter& value) { SetFilter(value); return *this;}
+
+ /**
+ * <p>Specifies a bucket filter. The configuration only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline IntelligentTieringConfiguration& WithFilter(IntelligentTieringFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the status of the configuration.</p>
+ */
+ inline const IntelligentTieringStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>Specifies the status of the configuration.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>Specifies the status of the configuration.</p>
+ */
+ inline void SetStatus(const IntelligentTieringStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>Specifies the status of the configuration.</p>
+ */
+ inline void SetStatus(IntelligentTieringStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>Specifies the status of the configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& WithStatus(const IntelligentTieringStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>Specifies the status of the configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& WithStatus(IntelligentTieringStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline const Aws::Vector<Tiering>& GetTierings() const{ return m_tierings; }
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline bool TieringsHasBeenSet() const { return m_tieringsHasBeenSet; }
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline void SetTierings(const Aws::Vector<Tiering>& value) { m_tieringsHasBeenSet = true; m_tierings = value; }
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline void SetTierings(Aws::Vector<Tiering>&& value) { m_tieringsHasBeenSet = true; m_tierings = std::move(value); }
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& WithTierings(const Aws::Vector<Tiering>& value) { SetTierings(value); return *this;}
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& WithTierings(Aws::Vector<Tiering>&& value) { SetTierings(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& AddTierings(const Tiering& value) { m_tieringsHasBeenSet = true; m_tierings.push_back(value); return *this; }
+
+ /**
+ * <p>Specifies the S3 Intelligent-Tiering storage class tier of the
+ * configuration.</p>
+ */
+ inline IntelligentTieringConfiguration& AddTierings(Tiering&& value) { m_tieringsHasBeenSet = true; m_tierings.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ IntelligentTieringFilter m_filter;
+ bool m_filterHasBeenSet;
+
+ IntelligentTieringStatus m_status;
+ bool m_statusHasBeenSet;
+
+ Aws::Vector<Tiering> m_tierings;
+ bool m_tieringsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringFilter.h
new file mode 100644
index 00000000000..971f9569cca
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringFilter.h
@@ -0,0 +1,167 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Tag.h>
+#include <aws/s3/model/IntelligentTieringAndOperator.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The <code>Filter</code> is used to identify objects that the S3
+ * Intelligent-Tiering configuration applies to.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/IntelligentTieringFilter">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API IntelligentTieringFilter
+ {
+ public:
+ IntelligentTieringFilter();
+ IntelligentTieringFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ IntelligentTieringFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline IntelligentTieringFilter& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline IntelligentTieringFilter& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline IntelligentTieringFilter& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+
+ inline const Tag& GetTag() const{ return m_tag; }
+
+
+ inline bool TagHasBeenSet() const { return m_tagHasBeenSet; }
+
+
+ inline void SetTag(const Tag& value) { m_tagHasBeenSet = true; m_tag = value; }
+
+
+ inline void SetTag(Tag&& value) { m_tagHasBeenSet = true; m_tag = std::move(value); }
+
+
+ inline IntelligentTieringFilter& WithTag(const Tag& value) { SetTag(value); return *this;}
+
+
+ inline IntelligentTieringFilter& WithTag(Tag&& value) { SetTag(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline const IntelligentTieringAndOperator& GetAnd() const{ return m_and; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline bool AndHasBeenSet() const { return m_andHasBeenSet; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline void SetAnd(const IntelligentTieringAndOperator& value) { m_andHasBeenSet = true; m_and = value; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline void SetAnd(IntelligentTieringAndOperator&& value) { m_andHasBeenSet = true; m_and = std::move(value); }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline IntelligentTieringFilter& WithAnd(const IntelligentTieringAndOperator& value) { SetAnd(value); return *this;}
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline IntelligentTieringFilter& WithAnd(IntelligentTieringAndOperator&& value) { SetAnd(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Tag m_tag;
+ bool m_tagHasBeenSet;
+
+ IntelligentTieringAndOperator m_and;
+ bool m_andHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringStatus.h
new file mode 100644
index 00000000000..f829375dabf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/IntelligentTieringStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class IntelligentTieringStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace IntelligentTieringStatusMapper
+{
+AWS_S3_API IntelligentTieringStatus GetIntelligentTieringStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForIntelligentTieringStatus(IntelligentTieringStatus value);
+} // namespace IntelligentTieringStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InvalidObjectState.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InvalidObjectState.h
new file mode 100644
index 00000000000..2ce6a101d21
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InvalidObjectState.h
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/IntelligentTieringAccessTier.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Object is archived and inaccessible until restored.</p><p><h3>See Also:</h3>
+ * <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InvalidObjectState">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InvalidObjectState
+ {
+ public:
+ InvalidObjectState();
+ InvalidObjectState(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InvalidObjectState& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+
+ inline void SetStorageClass(const StorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+
+ inline void SetStorageClass(StorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+
+ inline InvalidObjectState& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+
+ inline InvalidObjectState& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+
+ inline const IntelligentTieringAccessTier& GetAccessTier() const{ return m_accessTier; }
+
+
+ inline bool AccessTierHasBeenSet() const { return m_accessTierHasBeenSet; }
+
+
+ inline void SetAccessTier(const IntelligentTieringAccessTier& value) { m_accessTierHasBeenSet = true; m_accessTier = value; }
+
+
+ inline void SetAccessTier(IntelligentTieringAccessTier&& value) { m_accessTierHasBeenSet = true; m_accessTier = std::move(value); }
+
+
+ inline InvalidObjectState& WithAccessTier(const IntelligentTieringAccessTier& value) { SetAccessTier(value); return *this;}
+
+
+ inline InvalidObjectState& WithAccessTier(IntelligentTieringAccessTier&& value) { SetAccessTier(std::move(value)); return *this;}
+
+ private:
+
+ StorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ IntelligentTieringAccessTier m_accessTier;
+ bool m_accessTierHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryConfiguration.h
new file mode 100644
index 00000000000..d48347ff653
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryConfiguration.h
@@ -0,0 +1,340 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/InventoryDestination.h>
+#include <aws/s3/model/InventoryFilter.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/InventoryIncludedObjectVersions.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/InventorySchedule.h>
+#include <aws/s3/model/InventoryOptionalField.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the inventory configuration for an Amazon S3 bucket. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html">GET
+ * Bucket inventory</a> in the <i>Amazon Simple Storage Service API Reference</i>.
+ * </p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InventoryConfiguration
+ {
+ public:
+ InventoryConfiguration();
+ InventoryConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InventoryConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Contains information about where to publish the inventory results.</p>
+ */
+ inline const InventoryDestination& GetDestination() const{ return m_destination; }
+
+ /**
+ * <p>Contains information about where to publish the inventory results.</p>
+ */
+ inline bool DestinationHasBeenSet() const { return m_destinationHasBeenSet; }
+
+ /**
+ * <p>Contains information about where to publish the inventory results.</p>
+ */
+ inline void SetDestination(const InventoryDestination& value) { m_destinationHasBeenSet = true; m_destination = value; }
+
+ /**
+ * <p>Contains information about where to publish the inventory results.</p>
+ */
+ inline void SetDestination(InventoryDestination&& value) { m_destinationHasBeenSet = true; m_destination = std::move(value); }
+
+ /**
+ * <p>Contains information about where to publish the inventory results.</p>
+ */
+ inline InventoryConfiguration& WithDestination(const InventoryDestination& value) { SetDestination(value); return *this;}
+
+ /**
+ * <p>Contains information about where to publish the inventory results.</p>
+ */
+ inline InventoryConfiguration& WithDestination(InventoryDestination&& value) { SetDestination(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether the inventory is enabled or disabled. If set to
+ * <code>True</code>, an inventory list is generated. If set to <code>False</code>,
+ * no inventory list is generated.</p>
+ */
+ inline bool GetIsEnabled() const{ return m_isEnabled; }
+
+ /**
+ * <p>Specifies whether the inventory is enabled or disabled. If set to
+ * <code>True</code>, an inventory list is generated. If set to <code>False</code>,
+ * no inventory list is generated.</p>
+ */
+ inline bool IsEnabledHasBeenSet() const { return m_isEnabledHasBeenSet; }
+
+ /**
+ * <p>Specifies whether the inventory is enabled or disabled. If set to
+ * <code>True</code>, an inventory list is generated. If set to <code>False</code>,
+ * no inventory list is generated.</p>
+ */
+ inline void SetIsEnabled(bool value) { m_isEnabledHasBeenSet = true; m_isEnabled = value; }
+
+ /**
+ * <p>Specifies whether the inventory is enabled or disabled. If set to
+ * <code>True</code>, an inventory list is generated. If set to <code>False</code>,
+ * no inventory list is generated.</p>
+ */
+ inline InventoryConfiguration& WithIsEnabled(bool value) { SetIsEnabled(value); return *this;}
+
+
+ /**
+ * <p>Specifies an inventory filter. The inventory only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline const InventoryFilter& GetFilter() const{ return m_filter; }
+
+ /**
+ * <p>Specifies an inventory filter. The inventory only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+ /**
+ * <p>Specifies an inventory filter. The inventory only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline void SetFilter(const InventoryFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+ /**
+ * <p>Specifies an inventory filter. The inventory only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline void SetFilter(InventoryFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+ /**
+ * <p>Specifies an inventory filter. The inventory only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline InventoryConfiguration& WithFilter(const InventoryFilter& value) { SetFilter(value); return *this;}
+
+ /**
+ * <p>Specifies an inventory filter. The inventory only includes objects that meet
+ * the filter's criteria.</p>
+ */
+ inline InventoryConfiguration& WithFilter(InventoryFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline InventoryConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline InventoryConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline InventoryConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>Object versions to include in the inventory list. If set to <code>All</code>,
+ * the list includes all the object versions, which adds the version-related fields
+ * <code>VersionId</code>, <code>IsLatest</code>, and <code>DeleteMarker</code> to
+ * the list. If set to <code>Current</code>, the list does not contain these
+ * version-related fields.</p>
+ */
+ inline const InventoryIncludedObjectVersions& GetIncludedObjectVersions() const{ return m_includedObjectVersions; }
+
+ /**
+ * <p>Object versions to include in the inventory list. If set to <code>All</code>,
+ * the list includes all the object versions, which adds the version-related fields
+ * <code>VersionId</code>, <code>IsLatest</code>, and <code>DeleteMarker</code> to
+ * the list. If set to <code>Current</code>, the list does not contain these
+ * version-related fields.</p>
+ */
+ inline bool IncludedObjectVersionsHasBeenSet() const { return m_includedObjectVersionsHasBeenSet; }
+
+ /**
+ * <p>Object versions to include in the inventory list. If set to <code>All</code>,
+ * the list includes all the object versions, which adds the version-related fields
+ * <code>VersionId</code>, <code>IsLatest</code>, and <code>DeleteMarker</code> to
+ * the list. If set to <code>Current</code>, the list does not contain these
+ * version-related fields.</p>
+ */
+ inline void SetIncludedObjectVersions(const InventoryIncludedObjectVersions& value) { m_includedObjectVersionsHasBeenSet = true; m_includedObjectVersions = value; }
+
+ /**
+ * <p>Object versions to include in the inventory list. If set to <code>All</code>,
+ * the list includes all the object versions, which adds the version-related fields
+ * <code>VersionId</code>, <code>IsLatest</code>, and <code>DeleteMarker</code> to
+ * the list. If set to <code>Current</code>, the list does not contain these
+ * version-related fields.</p>
+ */
+ inline void SetIncludedObjectVersions(InventoryIncludedObjectVersions&& value) { m_includedObjectVersionsHasBeenSet = true; m_includedObjectVersions = std::move(value); }
+
+ /**
+ * <p>Object versions to include in the inventory list. If set to <code>All</code>,
+ * the list includes all the object versions, which adds the version-related fields
+ * <code>VersionId</code>, <code>IsLatest</code>, and <code>DeleteMarker</code> to
+ * the list. If set to <code>Current</code>, the list does not contain these
+ * version-related fields.</p>
+ */
+ inline InventoryConfiguration& WithIncludedObjectVersions(const InventoryIncludedObjectVersions& value) { SetIncludedObjectVersions(value); return *this;}
+
+ /**
+ * <p>Object versions to include in the inventory list. If set to <code>All</code>,
+ * the list includes all the object versions, which adds the version-related fields
+ * <code>VersionId</code>, <code>IsLatest</code>, and <code>DeleteMarker</code> to
+ * the list. If set to <code>Current</code>, the list does not contain these
+ * version-related fields.</p>
+ */
+ inline InventoryConfiguration& WithIncludedObjectVersions(InventoryIncludedObjectVersions&& value) { SetIncludedObjectVersions(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline const Aws::Vector<InventoryOptionalField>& GetOptionalFields() const{ return m_optionalFields; }
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline bool OptionalFieldsHasBeenSet() const { return m_optionalFieldsHasBeenSet; }
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline void SetOptionalFields(const Aws::Vector<InventoryOptionalField>& value) { m_optionalFieldsHasBeenSet = true; m_optionalFields = value; }
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline void SetOptionalFields(Aws::Vector<InventoryOptionalField>&& value) { m_optionalFieldsHasBeenSet = true; m_optionalFields = std::move(value); }
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline InventoryConfiguration& WithOptionalFields(const Aws::Vector<InventoryOptionalField>& value) { SetOptionalFields(value); return *this;}
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline InventoryConfiguration& WithOptionalFields(Aws::Vector<InventoryOptionalField>&& value) { SetOptionalFields(std::move(value)); return *this;}
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline InventoryConfiguration& AddOptionalFields(const InventoryOptionalField& value) { m_optionalFieldsHasBeenSet = true; m_optionalFields.push_back(value); return *this; }
+
+ /**
+ * <p>Contains the optional fields that are included in the inventory results.</p>
+ */
+ inline InventoryConfiguration& AddOptionalFields(InventoryOptionalField&& value) { m_optionalFieldsHasBeenSet = true; m_optionalFields.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Specifies the schedule for generating inventory results.</p>
+ */
+ inline const InventorySchedule& GetSchedule() const{ return m_schedule; }
+
+ /**
+ * <p>Specifies the schedule for generating inventory results.</p>
+ */
+ inline bool ScheduleHasBeenSet() const { return m_scheduleHasBeenSet; }
+
+ /**
+ * <p>Specifies the schedule for generating inventory results.</p>
+ */
+ inline void SetSchedule(const InventorySchedule& value) { m_scheduleHasBeenSet = true; m_schedule = value; }
+
+ /**
+ * <p>Specifies the schedule for generating inventory results.</p>
+ */
+ inline void SetSchedule(InventorySchedule&& value) { m_scheduleHasBeenSet = true; m_schedule = std::move(value); }
+
+ /**
+ * <p>Specifies the schedule for generating inventory results.</p>
+ */
+ inline InventoryConfiguration& WithSchedule(const InventorySchedule& value) { SetSchedule(value); return *this;}
+
+ /**
+ * <p>Specifies the schedule for generating inventory results.</p>
+ */
+ inline InventoryConfiguration& WithSchedule(InventorySchedule&& value) { SetSchedule(std::move(value)); return *this;}
+
+ private:
+
+ InventoryDestination m_destination;
+ bool m_destinationHasBeenSet;
+
+ bool m_isEnabled;
+ bool m_isEnabledHasBeenSet;
+
+ InventoryFilter m_filter;
+ bool m_filterHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ InventoryIncludedObjectVersions m_includedObjectVersions;
+ bool m_includedObjectVersionsHasBeenSet;
+
+ Aws::Vector<InventoryOptionalField> m_optionalFields;
+ bool m_optionalFieldsHasBeenSet;
+
+ InventorySchedule m_schedule;
+ bool m_scheduleHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryDestination.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryDestination.h
new file mode 100644
index 00000000000..08f259cd74b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryDestination.h
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/InventoryS3BucketDestination.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the inventory configuration for an Amazon S3 bucket.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryDestination">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InventoryDestination
+ {
+ public:
+ InventoryDestination();
+ InventoryDestination(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InventoryDestination& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Contains the bucket name, file format, bucket owner (optional), and prefix
+ * (optional) where inventory results are published.</p>
+ */
+ inline const InventoryS3BucketDestination& GetS3BucketDestination() const{ return m_s3BucketDestination; }
+
+ /**
+ * <p>Contains the bucket name, file format, bucket owner (optional), and prefix
+ * (optional) where inventory results are published.</p>
+ */
+ inline bool S3BucketDestinationHasBeenSet() const { return m_s3BucketDestinationHasBeenSet; }
+
+ /**
+ * <p>Contains the bucket name, file format, bucket owner (optional), and prefix
+ * (optional) where inventory results are published.</p>
+ */
+ inline void SetS3BucketDestination(const InventoryS3BucketDestination& value) { m_s3BucketDestinationHasBeenSet = true; m_s3BucketDestination = value; }
+
+ /**
+ * <p>Contains the bucket name, file format, bucket owner (optional), and prefix
+ * (optional) where inventory results are published.</p>
+ */
+ inline void SetS3BucketDestination(InventoryS3BucketDestination&& value) { m_s3BucketDestinationHasBeenSet = true; m_s3BucketDestination = std::move(value); }
+
+ /**
+ * <p>Contains the bucket name, file format, bucket owner (optional), and prefix
+ * (optional) where inventory results are published.</p>
+ */
+ inline InventoryDestination& WithS3BucketDestination(const InventoryS3BucketDestination& value) { SetS3BucketDestination(value); return *this;}
+
+ /**
+ * <p>Contains the bucket name, file format, bucket owner (optional), and prefix
+ * (optional) where inventory results are published.</p>
+ */
+ inline InventoryDestination& WithS3BucketDestination(InventoryS3BucketDestination&& value) { SetS3BucketDestination(std::move(value)); return *this;}
+
+ private:
+
+ InventoryS3BucketDestination m_s3BucketDestination;
+ bool m_s3BucketDestinationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryEncryption.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryEncryption.h
new file mode 100644
index 00000000000..6c11c726340
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryEncryption.h
@@ -0,0 +1,114 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/SSES3.h>
+#include <aws/s3/model/SSEKMS.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Contains the type of server-side encryption used to encrypt the inventory
+ * results.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryEncryption">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InventoryEncryption
+ {
+ public:
+ InventoryEncryption();
+ InventoryEncryption(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InventoryEncryption& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the use of SSE-S3 to encrypt delivered inventory reports.</p>
+ */
+ inline const SSES3& GetSSES3() const{ return m_sSES3; }
+
+ /**
+ * <p>Specifies the use of SSE-S3 to encrypt delivered inventory reports.</p>
+ */
+ inline bool SSES3HasBeenSet() const { return m_sSES3HasBeenSet; }
+
+ /**
+ * <p>Specifies the use of SSE-S3 to encrypt delivered inventory reports.</p>
+ */
+ inline void SetSSES3(const SSES3& value) { m_sSES3HasBeenSet = true; m_sSES3 = value; }
+
+ /**
+ * <p>Specifies the use of SSE-S3 to encrypt delivered inventory reports.</p>
+ */
+ inline void SetSSES3(SSES3&& value) { m_sSES3HasBeenSet = true; m_sSES3 = std::move(value); }
+
+ /**
+ * <p>Specifies the use of SSE-S3 to encrypt delivered inventory reports.</p>
+ */
+ inline InventoryEncryption& WithSSES3(const SSES3& value) { SetSSES3(value); return *this;}
+
+ /**
+ * <p>Specifies the use of SSE-S3 to encrypt delivered inventory reports.</p>
+ */
+ inline InventoryEncryption& WithSSES3(SSES3&& value) { SetSSES3(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the use of SSE-KMS to encrypt delivered inventory reports.</p>
+ */
+ inline const SSEKMS& GetSSEKMS() const{ return m_sSEKMS; }
+
+ /**
+ * <p>Specifies the use of SSE-KMS to encrypt delivered inventory reports.</p>
+ */
+ inline bool SSEKMSHasBeenSet() const { return m_sSEKMSHasBeenSet; }
+
+ /**
+ * <p>Specifies the use of SSE-KMS to encrypt delivered inventory reports.</p>
+ */
+ inline void SetSSEKMS(const SSEKMS& value) { m_sSEKMSHasBeenSet = true; m_sSEKMS = value; }
+
+ /**
+ * <p>Specifies the use of SSE-KMS to encrypt delivered inventory reports.</p>
+ */
+ inline void SetSSEKMS(SSEKMS&& value) { m_sSEKMSHasBeenSet = true; m_sSEKMS = std::move(value); }
+
+ /**
+ * <p>Specifies the use of SSE-KMS to encrypt delivered inventory reports.</p>
+ */
+ inline InventoryEncryption& WithSSEKMS(const SSEKMS& value) { SetSSEKMS(value); return *this;}
+
+ /**
+ * <p>Specifies the use of SSE-KMS to encrypt delivered inventory reports.</p>
+ */
+ inline InventoryEncryption& WithSSEKMS(SSEKMS&& value) { SetSSEKMS(std::move(value)); return *this;}
+
+ private:
+
+ SSES3 m_sSES3;
+ bool m_sSES3HasBeenSet;
+
+ SSEKMS m_sSEKMS;
+ bool m_sSEKMSHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFilter.h
new file mode 100644
index 00000000000..919ccf6dd7f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFilter.h
@@ -0,0 +1,97 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies an inventory filter. The inventory only includes objects that meet
+ * the filter's criteria.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryFilter">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InventoryFilter
+ {
+ public:
+ InventoryFilter();
+ InventoryFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InventoryFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline InventoryFilter& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline InventoryFilter& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix that an object must have to be included in the inventory
+ * results.</p>
+ */
+ inline InventoryFilter& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFormat.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFormat.h
new file mode 100644
index 00000000000..12ca4babb7f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFormat.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class InventoryFormat
+ {
+ NOT_SET,
+ CSV,
+ ORC,
+ Parquet
+ };
+
+namespace InventoryFormatMapper
+{
+AWS_S3_API InventoryFormat GetInventoryFormatForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForInventoryFormat(InventoryFormat value);
+} // namespace InventoryFormatMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFrequency.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFrequency.h
new file mode 100644
index 00000000000..7e004c1f41e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryFrequency.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class InventoryFrequency
+ {
+ NOT_SET,
+ Daily,
+ Weekly
+ };
+
+namespace InventoryFrequencyMapper
+{
+AWS_S3_API InventoryFrequency GetInventoryFrequencyForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForInventoryFrequency(InventoryFrequency value);
+} // namespace InventoryFrequencyMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryIncludedObjectVersions.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryIncludedObjectVersions.h
new file mode 100644
index 00000000000..80386e591f8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryIncludedObjectVersions.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class InventoryIncludedObjectVersions
+ {
+ NOT_SET,
+ All,
+ Current
+ };
+
+namespace InventoryIncludedObjectVersionsMapper
+{
+AWS_S3_API InventoryIncludedObjectVersions GetInventoryIncludedObjectVersionsForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForInventoryIncludedObjectVersions(InventoryIncludedObjectVersions value);
+} // namespace InventoryIncludedObjectVersionsMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryOptionalField.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryOptionalField.h
new file mode 100644
index 00000000000..9959aa0bfbf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryOptionalField.h
@@ -0,0 +1,40 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class InventoryOptionalField
+ {
+ NOT_SET,
+ Size,
+ LastModifiedDate,
+ StorageClass,
+ ETag,
+ IsMultipartUploaded,
+ ReplicationStatus,
+ EncryptionStatus,
+ ObjectLockRetainUntilDate,
+ ObjectLockMode,
+ ObjectLockLegalHoldStatus,
+ IntelligentTieringAccessTier
+ };
+
+namespace InventoryOptionalFieldMapper
+{
+AWS_S3_API InventoryOptionalField GetInventoryOptionalFieldForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForInventoryOptionalField(InventoryOptionalField value);
+} // namespace InventoryOptionalFieldMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryS3BucketDestination.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryS3BucketDestination.h
new file mode 100644
index 00000000000..d2f4f0027e0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventoryS3BucketDestination.h
@@ -0,0 +1,285 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/InventoryFormat.h>
+#include <aws/s3/model/InventoryEncryption.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Contains the bucket name, file format, bucket owner (optional), and prefix
+ * (optional) where inventory results are published.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryS3BucketDestination">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InventoryS3BucketDestination
+ {
+ public:
+ InventoryS3BucketDestination();
+ InventoryS3BucketDestination(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InventoryS3BucketDestination& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline const Aws::String& GetAccountId() const{ return m_accountId; }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline bool AccountIdHasBeenSet() const { return m_accountIdHasBeenSet; }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline void SetAccountId(const Aws::String& value) { m_accountIdHasBeenSet = true; m_accountId = value; }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline void SetAccountId(Aws::String&& value) { m_accountIdHasBeenSet = true; m_accountId = std::move(value); }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline void SetAccountId(const char* value) { m_accountIdHasBeenSet = true; m_accountId.assign(value); }
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline InventoryS3BucketDestination& WithAccountId(const Aws::String& value) { SetAccountId(value); return *this;}
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline InventoryS3BucketDestination& WithAccountId(Aws::String&& value) { SetAccountId(std::move(value)); return *this;}
+
+ /**
+ * <p>The account ID that owns the destination S3 bucket. If no account ID is
+ * provided, the owner is not validated before exporting data. </p> <p>
+ * Although this value is optional, we strongly recommend that you set it to help
+ * prevent problems if the destination bucket ownership changes. </p>
+ */
+ inline InventoryS3BucketDestination& WithAccountId(const char* value) { SetAccountId(value); return *this;}
+
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline InventoryS3BucketDestination& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline InventoryS3BucketDestination& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the bucket where inventory results will be
+ * published.</p>
+ */
+ inline InventoryS3BucketDestination& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Specifies the output format of the inventory results.</p>
+ */
+ inline const InventoryFormat& GetFormat() const{ return m_format; }
+
+ /**
+ * <p>Specifies the output format of the inventory results.</p>
+ */
+ inline bool FormatHasBeenSet() const { return m_formatHasBeenSet; }
+
+ /**
+ * <p>Specifies the output format of the inventory results.</p>
+ */
+ inline void SetFormat(const InventoryFormat& value) { m_formatHasBeenSet = true; m_format = value; }
+
+ /**
+ * <p>Specifies the output format of the inventory results.</p>
+ */
+ inline void SetFormat(InventoryFormat&& value) { m_formatHasBeenSet = true; m_format = std::move(value); }
+
+ /**
+ * <p>Specifies the output format of the inventory results.</p>
+ */
+ inline InventoryS3BucketDestination& WithFormat(const InventoryFormat& value) { SetFormat(value); return *this;}
+
+ /**
+ * <p>Specifies the output format of the inventory results.</p>
+ */
+ inline InventoryS3BucketDestination& WithFormat(InventoryFormat&& value) { SetFormat(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline InventoryS3BucketDestination& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline InventoryS3BucketDestination& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix that is prepended to all inventory results.</p>
+ */
+ inline InventoryS3BucketDestination& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>Contains the type of server-side encryption used to encrypt the inventory
+ * results.</p>
+ */
+ inline const InventoryEncryption& GetEncryption() const{ return m_encryption; }
+
+ /**
+ * <p>Contains the type of server-side encryption used to encrypt the inventory
+ * results.</p>
+ */
+ inline bool EncryptionHasBeenSet() const { return m_encryptionHasBeenSet; }
+
+ /**
+ * <p>Contains the type of server-side encryption used to encrypt the inventory
+ * results.</p>
+ */
+ inline void SetEncryption(const InventoryEncryption& value) { m_encryptionHasBeenSet = true; m_encryption = value; }
+
+ /**
+ * <p>Contains the type of server-side encryption used to encrypt the inventory
+ * results.</p>
+ */
+ inline void SetEncryption(InventoryEncryption&& value) { m_encryptionHasBeenSet = true; m_encryption = std::move(value); }
+
+ /**
+ * <p>Contains the type of server-side encryption used to encrypt the inventory
+ * results.</p>
+ */
+ inline InventoryS3BucketDestination& WithEncryption(const InventoryEncryption& value) { SetEncryption(value); return *this;}
+
+ /**
+ * <p>Contains the type of server-side encryption used to encrypt the inventory
+ * results.</p>
+ */
+ inline InventoryS3BucketDestination& WithEncryption(InventoryEncryption&& value) { SetEncryption(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_accountId;
+ bool m_accountIdHasBeenSet;
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ InventoryFormat m_format;
+ bool m_formatHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ InventoryEncryption m_encryption;
+ bool m_encryptionHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventorySchedule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventorySchedule.h
new file mode 100644
index 00000000000..7a6933d2dee
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/InventorySchedule.h
@@ -0,0 +1,79 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/InventoryFrequency.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the schedule for generating inventory results.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventorySchedule">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API InventorySchedule
+ {
+ public:
+ InventorySchedule();
+ InventorySchedule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ InventorySchedule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies how frequently inventory results are produced.</p>
+ */
+ inline const InventoryFrequency& GetFrequency() const{ return m_frequency; }
+
+ /**
+ * <p>Specifies how frequently inventory results are produced.</p>
+ */
+ inline bool FrequencyHasBeenSet() const { return m_frequencyHasBeenSet; }
+
+ /**
+ * <p>Specifies how frequently inventory results are produced.</p>
+ */
+ inline void SetFrequency(const InventoryFrequency& value) { m_frequencyHasBeenSet = true; m_frequency = value; }
+
+ /**
+ * <p>Specifies how frequently inventory results are produced.</p>
+ */
+ inline void SetFrequency(InventoryFrequency&& value) { m_frequencyHasBeenSet = true; m_frequency = std::move(value); }
+
+ /**
+ * <p>Specifies how frequently inventory results are produced.</p>
+ */
+ inline InventorySchedule& WithFrequency(const InventoryFrequency& value) { SetFrequency(value); return *this;}
+
+ /**
+ * <p>Specifies how frequently inventory results are produced.</p>
+ */
+ inline InventorySchedule& WithFrequency(InventoryFrequency&& value) { SetFrequency(std::move(value)); return *this;}
+
+ private:
+
+ InventoryFrequency m_frequency;
+ bool m_frequencyHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONInput.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONInput.h
new file mode 100644
index 00000000000..be157654bd9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONInput.h
@@ -0,0 +1,79 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/JSONType.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies JSON as object's input serialization format.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/JSONInput">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API JSONInput
+ {
+ public:
+ JSONInput();
+ JSONInput(const Aws::Utils::Xml::XmlNode& xmlNode);
+ JSONInput& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The type of JSON. Valid values: Document, Lines.</p>
+ */
+ inline const JSONType& GetType() const{ return m_type; }
+
+ /**
+ * <p>The type of JSON. Valid values: Document, Lines.</p>
+ */
+ inline bool TypeHasBeenSet() const { return m_typeHasBeenSet; }
+
+ /**
+ * <p>The type of JSON. Valid values: Document, Lines.</p>
+ */
+ inline void SetType(const JSONType& value) { m_typeHasBeenSet = true; m_type = value; }
+
+ /**
+ * <p>The type of JSON. Valid values: Document, Lines.</p>
+ */
+ inline void SetType(JSONType&& value) { m_typeHasBeenSet = true; m_type = std::move(value); }
+
+ /**
+ * <p>The type of JSON. Valid values: Document, Lines.</p>
+ */
+ inline JSONInput& WithType(const JSONType& value) { SetType(value); return *this;}
+
+ /**
+ * <p>The type of JSON. Valid values: Document, Lines.</p>
+ */
+ inline JSONInput& WithType(JSONType&& value) { SetType(std::move(value)); return *this;}
+
+ private:
+
+ JSONType m_type;
+ bool m_typeHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONOutput.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONOutput.h
new file mode 100644
index 00000000000..8a4865a7c08
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONOutput.h
@@ -0,0 +1,97 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies JSON as request's output serialization format.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/JSONOutput">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API JSONOutput
+ {
+ public:
+ JSONOutput();
+ JSONOutput(const Aws::Utils::Xml::XmlNode& xmlNode);
+ JSONOutput& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline const Aws::String& GetRecordDelimiter() const{ return m_recordDelimiter; }
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline bool RecordDelimiterHasBeenSet() const { return m_recordDelimiterHasBeenSet; }
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline void SetRecordDelimiter(const Aws::String& value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter = value; }
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline void SetRecordDelimiter(Aws::String&& value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter = std::move(value); }
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline void SetRecordDelimiter(const char* value) { m_recordDelimiterHasBeenSet = true; m_recordDelimiter.assign(value); }
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline JSONOutput& WithRecordDelimiter(const Aws::String& value) { SetRecordDelimiter(value); return *this;}
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline JSONOutput& WithRecordDelimiter(Aws::String&& value) { SetRecordDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>The value used to separate individual records in the output. If no value is
+ * specified, Amazon S3 uses a newline character ('\n').</p>
+ */
+ inline JSONOutput& WithRecordDelimiter(const char* value) { SetRecordDelimiter(value); return *this;}
+
+ private:
+
+ Aws::String m_recordDelimiter;
+ bool m_recordDelimiterHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONType.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONType.h
new file mode 100644
index 00000000000..cf3268228da
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/JSONType.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class JSONType
+ {
+ NOT_SET,
+ DOCUMENT,
+ LINES
+ };
+
+namespace JSONTypeMapper
+{
+AWS_S3_API JSONType GetJSONTypeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForJSONType(JSONType value);
+} // namespace JSONTypeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LambdaFunctionConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LambdaFunctionConfiguration.h
new file mode 100644
index 00000000000..df9aaa6bdf3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LambdaFunctionConfiguration.h
@@ -0,0 +1,218 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/NotificationConfigurationFilter.h>
+#include <aws/s3/model/Event.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for specifying the configuration for AWS Lambda
+ * notifications.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LambdaFunctionConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API LambdaFunctionConfiguration
+ {
+ public:
+ LambdaFunctionConfiguration();
+ LambdaFunctionConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ LambdaFunctionConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const Aws::String& GetId() const{ return m_id; }
+
+
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+
+ inline LambdaFunctionConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+
+ inline LambdaFunctionConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+
+ inline LambdaFunctionConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline const Aws::String& GetLambdaFunctionArn() const{ return m_lambdaFunctionArn; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline bool LambdaFunctionArnHasBeenSet() const { return m_lambdaFunctionArnHasBeenSet; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline void SetLambdaFunctionArn(const Aws::String& value) { m_lambdaFunctionArnHasBeenSet = true; m_lambdaFunctionArn = value; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline void SetLambdaFunctionArn(Aws::String&& value) { m_lambdaFunctionArnHasBeenSet = true; m_lambdaFunctionArn = std::move(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline void SetLambdaFunctionArn(const char* value) { m_lambdaFunctionArnHasBeenSet = true; m_lambdaFunctionArn.assign(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline LambdaFunctionConfiguration& WithLambdaFunctionArn(const Aws::String& value) { SetLambdaFunctionArn(value); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline LambdaFunctionConfiguration& WithLambdaFunctionArn(Aws::String&& value) { SetLambdaFunctionArn(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3
+ * invokes when the specified event type occurs.</p>
+ */
+ inline LambdaFunctionConfiguration& WithLambdaFunctionArn(const char* value) { SetLambdaFunctionArn(value); return *this;}
+
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline const Aws::Vector<Event>& GetEvents() const{ return m_events; }
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline bool EventsHasBeenSet() const { return m_eventsHasBeenSet; }
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetEvents(const Aws::Vector<Event>& value) { m_eventsHasBeenSet = true; m_events = value; }
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetEvents(Aws::Vector<Event>&& value) { m_eventsHasBeenSet = true; m_events = std::move(value); }
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline LambdaFunctionConfiguration& WithEvents(const Aws::Vector<Event>& value) { SetEvents(value); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline LambdaFunctionConfiguration& WithEvents(Aws::Vector<Event>&& value) { SetEvents(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline LambdaFunctionConfiguration& AddEvents(const Event& value) { m_eventsHasBeenSet = true; m_events.push_back(value); return *this; }
+
+ /**
+ * <p>The Amazon S3 bucket event for which to invoke the AWS Lambda function. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline LambdaFunctionConfiguration& AddEvents(Event&& value) { m_eventsHasBeenSet = true; m_events.push_back(std::move(value)); return *this; }
+
+
+
+ inline const NotificationConfigurationFilter& GetFilter() const{ return m_filter; }
+
+
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+
+ inline void SetFilter(const NotificationConfigurationFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+
+ inline void SetFilter(NotificationConfigurationFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+
+ inline LambdaFunctionConfiguration& WithFilter(const NotificationConfigurationFilter& value) { SetFilter(value); return *this;}
+
+
+ inline LambdaFunctionConfiguration& WithFilter(NotificationConfigurationFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_lambdaFunctionArn;
+ bool m_lambdaFunctionArnHasBeenSet;
+
+ Aws::Vector<Event> m_events;
+ bool m_eventsHasBeenSet;
+
+ NotificationConfigurationFilter m_filter;
+ bool m_filterHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleConfiguration.h
new file mode 100644
index 00000000000..3da3b89dd83
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleConfiguration.h
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Rule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for lifecycle rules. You can add as many as 1000
+ * rules.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API LifecycleConfiguration
+ {
+ public:
+ LifecycleConfiguration();
+ LifecycleConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ LifecycleConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline const Aws::Vector<Rule>& GetRules() const{ return m_rules; }
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline bool RulesHasBeenSet() const { return m_rulesHasBeenSet; }
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline void SetRules(const Aws::Vector<Rule>& value) { m_rulesHasBeenSet = true; m_rules = value; }
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline void SetRules(Aws::Vector<Rule>&& value) { m_rulesHasBeenSet = true; m_rules = std::move(value); }
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline LifecycleConfiguration& WithRules(const Aws::Vector<Rule>& value) { SetRules(value); return *this;}
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline LifecycleConfiguration& WithRules(Aws::Vector<Rule>&& value) { SetRules(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline LifecycleConfiguration& AddRules(const Rule& value) { m_rulesHasBeenSet = true; m_rules.push_back(value); return *this; }
+
+ /**
+ * <p>Specifies lifecycle configuration rules for an Amazon S3 bucket. </p>
+ */
+ inline LifecycleConfiguration& AddRules(Rule&& value) { m_rulesHasBeenSet = true; m_rules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<Rule> m_rules;
+ bool m_rulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleExpiration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleExpiration.h
new file mode 100644
index 00000000000..cb9628df583
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleExpiration.h
@@ -0,0 +1,149 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/DateTime.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the expiration for the lifecycle of the object.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleExpiration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API LifecycleExpiration
+ {
+ public:
+ LifecycleExpiration();
+ LifecycleExpiration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ LifecycleExpiration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Indicates at what date the object is to be moved or deleted. Should be in GMT
+ * ISO 8601 Format.</p>
+ */
+ inline const Aws::Utils::DateTime& GetDate() const{ return m_date; }
+
+ /**
+ * <p>Indicates at what date the object is to be moved or deleted. Should be in GMT
+ * ISO 8601 Format.</p>
+ */
+ inline bool DateHasBeenSet() const { return m_dateHasBeenSet; }
+
+ /**
+ * <p>Indicates at what date the object is to be moved or deleted. Should be in GMT
+ * ISO 8601 Format.</p>
+ */
+ inline void SetDate(const Aws::Utils::DateTime& value) { m_dateHasBeenSet = true; m_date = value; }
+
+ /**
+ * <p>Indicates at what date the object is to be moved or deleted. Should be in GMT
+ * ISO 8601 Format.</p>
+ */
+ inline void SetDate(Aws::Utils::DateTime&& value) { m_dateHasBeenSet = true; m_date = std::move(value); }
+
+ /**
+ * <p>Indicates at what date the object is to be moved or deleted. Should be in GMT
+ * ISO 8601 Format.</p>
+ */
+ inline LifecycleExpiration& WithDate(const Aws::Utils::DateTime& value) { SetDate(value); return *this;}
+
+ /**
+ * <p>Indicates at what date the object is to be moved or deleted. Should be in GMT
+ * ISO 8601 Format.</p>
+ */
+ inline LifecycleExpiration& WithDate(Aws::Utils::DateTime&& value) { SetDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Indicates the lifetime, in days, of the objects that are subject to the rule.
+ * The value must be a non-zero positive integer.</p>
+ */
+ inline int GetDays() const{ return m_days; }
+
+ /**
+ * <p>Indicates the lifetime, in days, of the objects that are subject to the rule.
+ * The value must be a non-zero positive integer.</p>
+ */
+ inline bool DaysHasBeenSet() const { return m_daysHasBeenSet; }
+
+ /**
+ * <p>Indicates the lifetime, in days, of the objects that are subject to the rule.
+ * The value must be a non-zero positive integer.</p>
+ */
+ inline void SetDays(int value) { m_daysHasBeenSet = true; m_days = value; }
+
+ /**
+ * <p>Indicates the lifetime, in days, of the objects that are subject to the rule.
+ * The value must be a non-zero positive integer.</p>
+ */
+ inline LifecycleExpiration& WithDays(int value) { SetDays(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether Amazon S3 will remove a delete marker with no noncurrent
+ * versions. If set to true, the delete marker will be expired; if set to false the
+ * policy takes no action. This cannot be specified with Days or Date in a
+ * Lifecycle Expiration Policy.</p>
+ */
+ inline bool GetExpiredObjectDeleteMarker() const{ return m_expiredObjectDeleteMarker; }
+
+ /**
+ * <p>Indicates whether Amazon S3 will remove a delete marker with no noncurrent
+ * versions. If set to true, the delete marker will be expired; if set to false the
+ * policy takes no action. This cannot be specified with Days or Date in a
+ * Lifecycle Expiration Policy.</p>
+ */
+ inline bool ExpiredObjectDeleteMarkerHasBeenSet() const { return m_expiredObjectDeleteMarkerHasBeenSet; }
+
+ /**
+ * <p>Indicates whether Amazon S3 will remove a delete marker with no noncurrent
+ * versions. If set to true, the delete marker will be expired; if set to false the
+ * policy takes no action. This cannot be specified with Days or Date in a
+ * Lifecycle Expiration Policy.</p>
+ */
+ inline void SetExpiredObjectDeleteMarker(bool value) { m_expiredObjectDeleteMarkerHasBeenSet = true; m_expiredObjectDeleteMarker = value; }
+
+ /**
+ * <p>Indicates whether Amazon S3 will remove a delete marker with no noncurrent
+ * versions. If set to true, the delete marker will be expired; if set to false the
+ * policy takes no action. This cannot be specified with Days or Date in a
+ * Lifecycle Expiration Policy.</p>
+ */
+ inline LifecycleExpiration& WithExpiredObjectDeleteMarker(bool value) { SetExpiredObjectDeleteMarker(value); return *this;}
+
+ private:
+
+ Aws::Utils::DateTime m_date;
+ bool m_dateHasBeenSet;
+
+ int m_days;
+ bool m_daysHasBeenSet;
+
+ bool m_expiredObjectDeleteMarker;
+ bool m_expiredObjectDeleteMarkerHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRule.h
new file mode 100644
index 00000000000..573af31c60f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRule.h
@@ -0,0 +1,379 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/LifecycleExpiration.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/LifecycleRuleFilter.h>
+#include <aws/s3/model/ExpirationStatus.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/NoncurrentVersionExpiration.h>
+#include <aws/s3/model/AbortIncompleteMultipartUpload.h>
+#include <aws/s3/model/Transition.h>
+#include <aws/s3/model/NoncurrentVersionTransition.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A lifecycle rule for individual objects in an Amazon S3 bucket.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleRule">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API LifecycleRule
+ {
+ public:
+ LifecycleRule();
+ LifecycleRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ LifecycleRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object in the form of date,
+ * days and, whether the object has a delete marker.</p>
+ */
+ inline const LifecycleExpiration& GetExpiration() const{ return m_expiration; }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object in the form of date,
+ * days and, whether the object has a delete marker.</p>
+ */
+ inline bool ExpirationHasBeenSet() const { return m_expirationHasBeenSet; }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object in the form of date,
+ * days and, whether the object has a delete marker.</p>
+ */
+ inline void SetExpiration(const LifecycleExpiration& value) { m_expirationHasBeenSet = true; m_expiration = value; }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object in the form of date,
+ * days and, whether the object has a delete marker.</p>
+ */
+ inline void SetExpiration(LifecycleExpiration&& value) { m_expirationHasBeenSet = true; m_expiration = std::move(value); }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object in the form of date,
+ * days and, whether the object has a delete marker.</p>
+ */
+ inline LifecycleRule& WithExpiration(const LifecycleExpiration& value) { SetExpiration(value); return *this;}
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object in the form of date,
+ * days and, whether the object has a delete marker.</p>
+ */
+ inline LifecycleRule& WithExpiration(LifecycleExpiration&& value) { SetExpiration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline const Aws::String& GetID() const{ return m_iD; }
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline bool IDHasBeenSet() const { return m_iDHasBeenSet; }
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline void SetID(const Aws::String& value) { m_iDHasBeenSet = true; m_iD = value; }
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline void SetID(Aws::String&& value) { m_iDHasBeenSet = true; m_iD = std::move(value); }
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline void SetID(const char* value) { m_iDHasBeenSet = true; m_iD.assign(value); }
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline LifecycleRule& WithID(const Aws::String& value) { SetID(value); return *this;}
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline LifecycleRule& WithID(Aws::String&& value) { SetID(std::move(value)); return *this;}
+
+ /**
+ * <p>Unique identifier for the rule. The value cannot be longer than 255
+ * characters.</p>
+ */
+ inline LifecycleRule& WithID(const char* value) { SetID(value); return *this;}
+
+
+
+ inline const LifecycleRuleFilter& GetFilter() const{ return m_filter; }
+
+
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+
+ inline void SetFilter(const LifecycleRuleFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+
+ inline void SetFilter(LifecycleRuleFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+
+ inline LifecycleRule& WithFilter(const LifecycleRuleFilter& value) { SetFilter(value); return *this;}
+
+
+ inline LifecycleRule& WithFilter(LifecycleRuleFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is
+ * not currently being applied.</p>
+ */
+ inline const ExpirationStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is
+ * not currently being applied.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is
+ * not currently being applied.</p>
+ */
+ inline void SetStatus(const ExpirationStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is
+ * not currently being applied.</p>
+ */
+ inline void SetStatus(ExpirationStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is
+ * not currently being applied.</p>
+ */
+ inline LifecycleRule& WithStatus(const ExpirationStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is
+ * not currently being applied.</p>
+ */
+ inline LifecycleRule& WithStatus(ExpirationStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline const Aws::Vector<Transition>& GetTransitions() const{ return m_transitions; }
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline bool TransitionsHasBeenSet() const { return m_transitionsHasBeenSet; }
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline void SetTransitions(const Aws::Vector<Transition>& value) { m_transitionsHasBeenSet = true; m_transitions = value; }
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline void SetTransitions(Aws::Vector<Transition>&& value) { m_transitionsHasBeenSet = true; m_transitions = std::move(value); }
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline LifecycleRule& WithTransitions(const Aws::Vector<Transition>& value) { SetTransitions(value); return *this;}
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline LifecycleRule& WithTransitions(Aws::Vector<Transition>&& value) { SetTransitions(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline LifecycleRule& AddTransitions(const Transition& value) { m_transitionsHasBeenSet = true; m_transitions.push_back(value); return *this; }
+
+ /**
+ * <p>Specifies when an Amazon S3 object transitions to a specified storage
+ * class.</p>
+ */
+ inline LifecycleRule& AddTransitions(Transition&& value) { m_transitionsHasBeenSet = true; m_transitions.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline const Aws::Vector<NoncurrentVersionTransition>& GetNoncurrentVersionTransitions() const{ return m_noncurrentVersionTransitions; }
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline bool NoncurrentVersionTransitionsHasBeenSet() const { return m_noncurrentVersionTransitionsHasBeenSet; }
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline void SetNoncurrentVersionTransitions(const Aws::Vector<NoncurrentVersionTransition>& value) { m_noncurrentVersionTransitionsHasBeenSet = true; m_noncurrentVersionTransitions = value; }
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline void SetNoncurrentVersionTransitions(Aws::Vector<NoncurrentVersionTransition>&& value) { m_noncurrentVersionTransitionsHasBeenSet = true; m_noncurrentVersionTransitions = std::move(value); }
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline LifecycleRule& WithNoncurrentVersionTransitions(const Aws::Vector<NoncurrentVersionTransition>& value) { SetNoncurrentVersionTransitions(value); return *this;}
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline LifecycleRule& WithNoncurrentVersionTransitions(Aws::Vector<NoncurrentVersionTransition>&& value) { SetNoncurrentVersionTransitions(std::move(value)); return *this;}
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline LifecycleRule& AddNoncurrentVersionTransitions(const NoncurrentVersionTransition& value) { m_noncurrentVersionTransitionsHasBeenSet = true; m_noncurrentVersionTransitions.push_back(value); return *this; }
+
+ /**
+ * <p> Specifies the transition rule for the lifecycle rule that describes when
+ * noncurrent objects transition to a specific storage class. If your bucket is
+ * versioning-enabled (or versioning is suspended), you can set this action to
+ * request that Amazon S3 transition noncurrent object versions to a specific
+ * storage class at a set period in the object's lifetime. </p>
+ */
+ inline LifecycleRule& AddNoncurrentVersionTransitions(NoncurrentVersionTransition&& value) { m_noncurrentVersionTransitionsHasBeenSet = true; m_noncurrentVersionTransitions.push_back(std::move(value)); return *this; }
+
+
+
+ inline const NoncurrentVersionExpiration& GetNoncurrentVersionExpiration() const{ return m_noncurrentVersionExpiration; }
+
+
+ inline bool NoncurrentVersionExpirationHasBeenSet() const { return m_noncurrentVersionExpirationHasBeenSet; }
+
+
+ inline void SetNoncurrentVersionExpiration(const NoncurrentVersionExpiration& value) { m_noncurrentVersionExpirationHasBeenSet = true; m_noncurrentVersionExpiration = value; }
+
+
+ inline void SetNoncurrentVersionExpiration(NoncurrentVersionExpiration&& value) { m_noncurrentVersionExpirationHasBeenSet = true; m_noncurrentVersionExpiration = std::move(value); }
+
+
+ inline LifecycleRule& WithNoncurrentVersionExpiration(const NoncurrentVersionExpiration& value) { SetNoncurrentVersionExpiration(value); return *this;}
+
+
+ inline LifecycleRule& WithNoncurrentVersionExpiration(NoncurrentVersionExpiration&& value) { SetNoncurrentVersionExpiration(std::move(value)); return *this;}
+
+
+
+ inline const AbortIncompleteMultipartUpload& GetAbortIncompleteMultipartUpload() const{ return m_abortIncompleteMultipartUpload; }
+
+
+ inline bool AbortIncompleteMultipartUploadHasBeenSet() const { return m_abortIncompleteMultipartUploadHasBeenSet; }
+
+
+ inline void SetAbortIncompleteMultipartUpload(const AbortIncompleteMultipartUpload& value) { m_abortIncompleteMultipartUploadHasBeenSet = true; m_abortIncompleteMultipartUpload = value; }
+
+
+ inline void SetAbortIncompleteMultipartUpload(AbortIncompleteMultipartUpload&& value) { m_abortIncompleteMultipartUploadHasBeenSet = true; m_abortIncompleteMultipartUpload = std::move(value); }
+
+
+ inline LifecycleRule& WithAbortIncompleteMultipartUpload(const AbortIncompleteMultipartUpload& value) { SetAbortIncompleteMultipartUpload(value); return *this;}
+
+
+ inline LifecycleRule& WithAbortIncompleteMultipartUpload(AbortIncompleteMultipartUpload&& value) { SetAbortIncompleteMultipartUpload(std::move(value)); return *this;}
+
+ private:
+
+ LifecycleExpiration m_expiration;
+ bool m_expirationHasBeenSet;
+
+ Aws::String m_iD;
+ bool m_iDHasBeenSet;
+
+ LifecycleRuleFilter m_filter;
+ bool m_filterHasBeenSet;
+
+ ExpirationStatus m_status;
+ bool m_statusHasBeenSet;
+
+ Aws::Vector<Transition> m_transitions;
+ bool m_transitionsHasBeenSet;
+
+ Aws::Vector<NoncurrentVersionTransition> m_noncurrentVersionTransitions;
+ bool m_noncurrentVersionTransitionsHasBeenSet;
+
+ NoncurrentVersionExpiration m_noncurrentVersionExpiration;
+ bool m_noncurrentVersionExpirationHasBeenSet;
+
+ AbortIncompleteMultipartUpload m_abortIncompleteMultipartUpload;
+ bool m_abortIncompleteMultipartUploadHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleAndOperator.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleAndOperator.h
new file mode 100644
index 00000000000..36ccbdd5f3c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleAndOperator.h
@@ -0,0 +1,144 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>This is used in a Lifecycle Rule Filter to apply a logical AND to two or more
+ * predicates. The Lifecycle Rule will apply to any object matching all of the
+ * predicates configured inside the And operator.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleRuleAndOperator">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API LifecycleRuleAndOperator
+ {
+ public:
+ LifecycleRuleAndOperator();
+ LifecycleRuleAndOperator(const Aws::Utils::Xml::XmlNode& xmlNode);
+ LifecycleRuleAndOperator& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline LifecycleRuleAndOperator& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline LifecycleRuleAndOperator& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline LifecycleRuleAndOperator& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline const Aws::Vector<Tag>& GetTags() const{ return m_tags; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline void SetTags(const Aws::Vector<Tag>& value) { m_tagsHasBeenSet = true; m_tags = value; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline void SetTags(Aws::Vector<Tag>&& value) { m_tagsHasBeenSet = true; m_tags = std::move(value); }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline LifecycleRuleAndOperator& WithTags(const Aws::Vector<Tag>& value) { SetTags(value); return *this;}
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline LifecycleRuleAndOperator& WithTags(Aws::Vector<Tag>&& value) { SetTags(std::move(value)); return *this;}
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline LifecycleRuleAndOperator& AddTags(const Tag& value) { m_tagsHasBeenSet = true; m_tags.push_back(value); return *this; }
+
+ /**
+ * <p>All of these tags must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline LifecycleRuleAndOperator& AddTags(Tag&& value) { m_tagsHasBeenSet = true; m_tags.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::Vector<Tag> m_tags;
+ bool m_tagsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleFilter.h
new file mode 100644
index 00000000000..1903c7af67f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LifecycleRuleFilter.h
@@ -0,0 +1,154 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Tag.h>
+#include <aws/s3/model/LifecycleRuleAndOperator.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The <code>Filter</code> is used to identify objects that a Lifecycle Rule
+ * applies to. A <code>Filter</code> must have exactly one of <code>Prefix</code>,
+ * <code>Tag</code>, or <code>And</code> specified.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleRuleFilter">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API LifecycleRuleFilter
+ {
+ public:
+ LifecycleRuleFilter();
+ LifecycleRuleFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ LifecycleRuleFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline LifecycleRuleFilter& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline LifecycleRuleFilter& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Prefix identifying one or more objects to which the rule applies.</p>
+ */
+ inline LifecycleRuleFilter& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>This tag must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline const Tag& GetTag() const{ return m_tag; }
+
+ /**
+ * <p>This tag must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline bool TagHasBeenSet() const { return m_tagHasBeenSet; }
+
+ /**
+ * <p>This tag must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline void SetTag(const Tag& value) { m_tagHasBeenSet = true; m_tag = value; }
+
+ /**
+ * <p>This tag must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline void SetTag(Tag&& value) { m_tagHasBeenSet = true; m_tag = std::move(value); }
+
+ /**
+ * <p>This tag must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline LifecycleRuleFilter& WithTag(const Tag& value) { SetTag(value); return *this;}
+
+ /**
+ * <p>This tag must exist in the object's tag set in order for the rule to
+ * apply.</p>
+ */
+ inline LifecycleRuleFilter& WithTag(Tag&& value) { SetTag(std::move(value)); return *this;}
+
+
+
+ inline const LifecycleRuleAndOperator& GetAnd() const{ return m_and; }
+
+
+ inline bool AndHasBeenSet() const { return m_andHasBeenSet; }
+
+
+ inline void SetAnd(const LifecycleRuleAndOperator& value) { m_andHasBeenSet = true; m_and = value; }
+
+
+ inline void SetAnd(LifecycleRuleAndOperator&& value) { m_andHasBeenSet = true; m_and = std::move(value); }
+
+
+ inline LifecycleRuleFilter& WithAnd(const LifecycleRuleAndOperator& value) { SetAnd(value); return *this;}
+
+
+ inline LifecycleRuleFilter& WithAnd(LifecycleRuleAndOperator&& value) { SetAnd(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Tag m_tag;
+ bool m_tagHasBeenSet;
+
+ LifecycleRuleAndOperator m_and;
+ bool m_andHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsRequest.h
new file mode 100644
index 00000000000..c4e27125e76
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsRequest.h
@@ -0,0 +1,247 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListBucketAnalyticsConfigurationsRequest : public S3Request
+ {
+ public:
+ ListBucketAnalyticsConfigurationsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListBucketAnalyticsConfigurations"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket from which analytics configurations are retrieved.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline bool ContinuationTokenHasBeenSet() const { return m_continuationTokenHasBeenSet; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = value; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = std::move(value); }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationTokenHasBeenSet = true; m_continuationToken.assign(value); }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketAnalyticsConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_continuationToken;
+ bool m_continuationTokenHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsResult.h
new file mode 100644
index 00000000000..9fc4f7cb24a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketAnalyticsConfigurationsResult.h
@@ -0,0 +1,207 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/AnalyticsConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListBucketAnalyticsConfigurationsResult
+ {
+ public:
+ ListBucketAnalyticsConfigurationsResult();
+ ListBucketAnalyticsConfigurationsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListBucketAnalyticsConfigurationsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Indicates whether the returned list of analytics configurations is complete.
+ * A value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>Indicates whether the returned list of analytics configurations is complete.
+ * A value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>Indicates whether the returned list of analytics configurations is complete.
+ * A value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>The marker that is used as a starting point for this analytics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>The marker that is used as a starting point for this analytics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationToken = value; }
+
+ /**
+ * <p>The marker that is used as a starting point for this analytics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationToken = std::move(value); }
+
+ /**
+ * <p>The marker that is used as a starting point for this analytics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationToken.assign(value); }
+
+ /**
+ * <p>The marker that is used as a starting point for this analytics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>The marker that is used as a starting point for this analytics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The marker that is used as a starting point for this analytics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which indicates that there are more analytics configurations to list. The
+ * next request must include this <code>NextContinuationToken</code>. The token is
+ * obfuscated and is not a usable value.</p>
+ */
+ inline const Aws::String& GetNextContinuationToken() const{ return m_nextContinuationToken; }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which indicates that there are more analytics configurations to list. The
+ * next request must include this <code>NextContinuationToken</code>. The token is
+ * obfuscated and is not a usable value.</p>
+ */
+ inline void SetNextContinuationToken(const Aws::String& value) { m_nextContinuationToken = value; }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which indicates that there are more analytics configurations to list. The
+ * next request must include this <code>NextContinuationToken</code>. The token is
+ * obfuscated and is not a usable value.</p>
+ */
+ inline void SetNextContinuationToken(Aws::String&& value) { m_nextContinuationToken = std::move(value); }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which indicates that there are more analytics configurations to list. The
+ * next request must include this <code>NextContinuationToken</code>. The token is
+ * obfuscated and is not a usable value.</p>
+ */
+ inline void SetNextContinuationToken(const char* value) { m_nextContinuationToken.assign(value); }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which indicates that there are more analytics configurations to list. The
+ * next request must include this <code>NextContinuationToken</code>. The token is
+ * obfuscated and is not a usable value.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithNextContinuationToken(const Aws::String& value) { SetNextContinuationToken(value); return *this;}
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which indicates that there are more analytics configurations to list. The
+ * next request must include this <code>NextContinuationToken</code>. The token is
+ * obfuscated and is not a usable value.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithNextContinuationToken(Aws::String&& value) { SetNextContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which indicates that there are more analytics configurations to list. The
+ * next request must include this <code>NextContinuationToken</code>. The token is
+ * obfuscated and is not a usable value.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithNextContinuationToken(const char* value) { SetNextContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The list of analytics configurations for a bucket.</p>
+ */
+ inline const Aws::Vector<AnalyticsConfiguration>& GetAnalyticsConfigurationList() const{ return m_analyticsConfigurationList; }
+
+ /**
+ * <p>The list of analytics configurations for a bucket.</p>
+ */
+ inline void SetAnalyticsConfigurationList(const Aws::Vector<AnalyticsConfiguration>& value) { m_analyticsConfigurationList = value; }
+
+ /**
+ * <p>The list of analytics configurations for a bucket.</p>
+ */
+ inline void SetAnalyticsConfigurationList(Aws::Vector<AnalyticsConfiguration>&& value) { m_analyticsConfigurationList = std::move(value); }
+
+ /**
+ * <p>The list of analytics configurations for a bucket.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithAnalyticsConfigurationList(const Aws::Vector<AnalyticsConfiguration>& value) { SetAnalyticsConfigurationList(value); return *this;}
+
+ /**
+ * <p>The list of analytics configurations for a bucket.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& WithAnalyticsConfigurationList(Aws::Vector<AnalyticsConfiguration>&& value) { SetAnalyticsConfigurationList(std::move(value)); return *this;}
+
+ /**
+ * <p>The list of analytics configurations for a bucket.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& AddAnalyticsConfigurationList(const AnalyticsConfiguration& value) { m_analyticsConfigurationList.push_back(value); return *this; }
+
+ /**
+ * <p>The list of analytics configurations for a bucket.</p>
+ */
+ inline ListBucketAnalyticsConfigurationsResult& AddAnalyticsConfigurationList(AnalyticsConfiguration&& value) { m_analyticsConfigurationList.push_back(std::move(value)); return *this; }
+
+ private:
+
+ bool m_isTruncated;
+
+ Aws::String m_continuationToken;
+
+ Aws::String m_nextContinuationToken;
+
+ Aws::Vector<AnalyticsConfiguration> m_analyticsConfigurationList;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsRequest.h
new file mode 100644
index 00000000000..5a20d97c154
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsRequest.h
@@ -0,0 +1,193 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListBucketIntelligentTieringConfigurationsRequest : public S3Request
+ {
+ public:
+ ListBucketIntelligentTieringConfigurationsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListBucketIntelligentTieringConfigurations"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline bool ContinuationTokenHasBeenSet() const { return m_continuationTokenHasBeenSet; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = value; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = std::move(value); }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationTokenHasBeenSet = true; m_continuationToken.assign(value); }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketIntelligentTieringConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_continuationToken;
+ bool m_continuationTokenHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsResult.h
new file mode 100644
index 00000000000..0203f9ac437
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketIntelligentTieringConfigurationsResult.h
@@ -0,0 +1,207 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/IntelligentTieringConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListBucketIntelligentTieringConfigurationsResult
+ {
+ public:
+ ListBucketIntelligentTieringConfigurationsResult();
+ ListBucketIntelligentTieringConfigurationsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListBucketIntelligentTieringConfigurationsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Indicates whether the returned list of analytics configurations is complete.
+ * A value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>Indicates whether the returned list of analytics configurations is complete.
+ * A value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>Indicates whether the returned list of analytics configurations is complete.
+ * A value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationToken = value; }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationToken = std::move(value); }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationToken.assign(value); }
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The ContinuationToken that represents a placeholder from where this request
+ * should begin.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline const Aws::String& GetNextContinuationToken() const{ return m_nextContinuationToken; }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline void SetNextContinuationToken(const Aws::String& value) { m_nextContinuationToken = value; }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline void SetNextContinuationToken(Aws::String&& value) { m_nextContinuationToken = std::move(value); }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline void SetNextContinuationToken(const char* value) { m_nextContinuationToken.assign(value); }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithNextContinuationToken(const Aws::String& value) { SetNextContinuationToken(value); return *this;}
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithNextContinuationToken(Aws::String&& value) { SetNextContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithNextContinuationToken(const char* value) { SetNextContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The list of S3 Intelligent-Tiering configurations for a bucket.</p>
+ */
+ inline const Aws::Vector<IntelligentTieringConfiguration>& GetIntelligentTieringConfigurationList() const{ return m_intelligentTieringConfigurationList; }
+
+ /**
+ * <p>The list of S3 Intelligent-Tiering configurations for a bucket.</p>
+ */
+ inline void SetIntelligentTieringConfigurationList(const Aws::Vector<IntelligentTieringConfiguration>& value) { m_intelligentTieringConfigurationList = value; }
+
+ /**
+ * <p>The list of S3 Intelligent-Tiering configurations for a bucket.</p>
+ */
+ inline void SetIntelligentTieringConfigurationList(Aws::Vector<IntelligentTieringConfiguration>&& value) { m_intelligentTieringConfigurationList = std::move(value); }
+
+ /**
+ * <p>The list of S3 Intelligent-Tiering configurations for a bucket.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithIntelligentTieringConfigurationList(const Aws::Vector<IntelligentTieringConfiguration>& value) { SetIntelligentTieringConfigurationList(value); return *this;}
+
+ /**
+ * <p>The list of S3 Intelligent-Tiering configurations for a bucket.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& WithIntelligentTieringConfigurationList(Aws::Vector<IntelligentTieringConfiguration>&& value) { SetIntelligentTieringConfigurationList(std::move(value)); return *this;}
+
+ /**
+ * <p>The list of S3 Intelligent-Tiering configurations for a bucket.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& AddIntelligentTieringConfigurationList(const IntelligentTieringConfiguration& value) { m_intelligentTieringConfigurationList.push_back(value); return *this; }
+
+ /**
+ * <p>The list of S3 Intelligent-Tiering configurations for a bucket.</p>
+ */
+ inline ListBucketIntelligentTieringConfigurationsResult& AddIntelligentTieringConfigurationList(IntelligentTieringConfiguration&& value) { m_intelligentTieringConfigurationList.push_back(std::move(value)); return *this; }
+
+ private:
+
+ bool m_isTruncated;
+
+ Aws::String m_continuationToken;
+
+ Aws::String m_nextContinuationToken;
+
+ Aws::Vector<IntelligentTieringConfiguration> m_intelligentTieringConfigurationList;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsRequest.h
new file mode 100644
index 00000000000..d1b424439d1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsRequest.h
@@ -0,0 +1,271 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListBucketInventoryConfigurationsRequest : public S3Request
+ {
+ public:
+ ListBucketInventoryConfigurationsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListBucketInventoryConfigurations"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the inventory configurations to
+ * retrieve.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline bool ContinuationTokenHasBeenSet() const { return m_continuationTokenHasBeenSet; }
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = value; }
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = std::move(value); }
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationTokenHasBeenSet = true; m_continuationToken.assign(value); }
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The marker used to continue an inventory configuration listing that has been
+ * truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketInventoryConfigurationsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListBucketInventoryConfigurationsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListBucketInventoryConfigurationsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListBucketInventoryConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListBucketInventoryConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketInventoryConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketInventoryConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListBucketInventoryConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketInventoryConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketInventoryConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_continuationToken;
+ bool m_continuationTokenHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsResult.h
new file mode 100644
index 00000000000..e28a0661e32
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketInventoryConfigurationsResult.h
@@ -0,0 +1,207 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/InventoryConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListBucketInventoryConfigurationsResult
+ {
+ public:
+ ListBucketInventoryConfigurationsResult();
+ ListBucketInventoryConfigurationsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListBucketInventoryConfigurationsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>If sent in the request, the marker that is used as a starting point for this
+ * inventory configuration list response.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>If sent in the request, the marker that is used as a starting point for this
+ * inventory configuration list response.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationToken = value; }
+
+ /**
+ * <p>If sent in the request, the marker that is used as a starting point for this
+ * inventory configuration list response.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationToken = std::move(value); }
+
+ /**
+ * <p>If sent in the request, the marker that is used as a starting point for this
+ * inventory configuration list response.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationToken.assign(value); }
+
+ /**
+ * <p>If sent in the request, the marker that is used as a starting point for this
+ * inventory configuration list response.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>If sent in the request, the marker that is used as a starting point for this
+ * inventory configuration list response.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>If sent in the request, the marker that is used as a starting point for this
+ * inventory configuration list response.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The list of inventory configurations for a bucket.</p>
+ */
+ inline const Aws::Vector<InventoryConfiguration>& GetInventoryConfigurationList() const{ return m_inventoryConfigurationList; }
+
+ /**
+ * <p>The list of inventory configurations for a bucket.</p>
+ */
+ inline void SetInventoryConfigurationList(const Aws::Vector<InventoryConfiguration>& value) { m_inventoryConfigurationList = value; }
+
+ /**
+ * <p>The list of inventory configurations for a bucket.</p>
+ */
+ inline void SetInventoryConfigurationList(Aws::Vector<InventoryConfiguration>&& value) { m_inventoryConfigurationList = std::move(value); }
+
+ /**
+ * <p>The list of inventory configurations for a bucket.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithInventoryConfigurationList(const Aws::Vector<InventoryConfiguration>& value) { SetInventoryConfigurationList(value); return *this;}
+
+ /**
+ * <p>The list of inventory configurations for a bucket.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithInventoryConfigurationList(Aws::Vector<InventoryConfiguration>&& value) { SetInventoryConfigurationList(std::move(value)); return *this;}
+
+ /**
+ * <p>The list of inventory configurations for a bucket.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& AddInventoryConfigurationList(const InventoryConfiguration& value) { m_inventoryConfigurationList.push_back(value); return *this; }
+
+ /**
+ * <p>The list of inventory configurations for a bucket.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& AddInventoryConfigurationList(InventoryConfiguration&& value) { m_inventoryConfigurationList.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Tells whether the returned list of inventory configurations is complete. A
+ * value of true indicates that the list is not complete and the
+ * NextContinuationToken is provided for a subsequent request.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>Tells whether the returned list of inventory configurations is complete. A
+ * value of true indicates that the list is not complete and the
+ * NextContinuationToken is provided for a subsequent request.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>Tells whether the returned list of inventory configurations is complete. A
+ * value of true indicates that the list is not complete and the
+ * NextContinuationToken is provided for a subsequent request.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline const Aws::String& GetNextContinuationToken() const{ return m_nextContinuationToken; }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline void SetNextContinuationToken(const Aws::String& value) { m_nextContinuationToken = value; }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline void SetNextContinuationToken(Aws::String&& value) { m_nextContinuationToken = std::move(value); }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline void SetNextContinuationToken(const char* value) { m_nextContinuationToken.assign(value); }
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithNextContinuationToken(const Aws::String& value) { SetNextContinuationToken(value); return *this;}
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithNextContinuationToken(Aws::String&& value) { SetNextContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The marker used to continue this inventory configuration listing. Use the
+ * <code>NextContinuationToken</code> from this response to continue the listing in
+ * a subsequent request. The continuation token is an opaque value that Amazon S3
+ * understands.</p>
+ */
+ inline ListBucketInventoryConfigurationsResult& WithNextContinuationToken(const char* value) { SetNextContinuationToken(value); return *this;}
+
+ private:
+
+ Aws::String m_continuationToken;
+
+ Aws::Vector<InventoryConfiguration> m_inventoryConfigurationList;
+
+ bool m_isTruncated;
+
+ Aws::String m_nextContinuationToken;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsRequest.h
new file mode 100644
index 00000000000..ce84ae1a59c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsRequest.h
@@ -0,0 +1,263 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListBucketMetricsConfigurationsRequest : public S3Request
+ {
+ public:
+ ListBucketMetricsConfigurationsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListBucketMetricsConfigurations"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the metrics configurations to retrieve.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline bool ContinuationTokenHasBeenSet() const { return m_continuationTokenHasBeenSet; }
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = value; }
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = std::move(value); }
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationTokenHasBeenSet = true; m_continuationToken.assign(value); }
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The marker that is used to continue a metrics configuration listing that has
+ * been truncated. Use the NextContinuationToken from a previously truncated list
+ * response to continue the listing. The continuation token is an opaque value that
+ * Amazon S3 understands.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListBucketMetricsConfigurationsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListBucketMetricsConfigurationsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListBucketMetricsConfigurationsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListBucketMetricsConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListBucketMetricsConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketMetricsConfigurationsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketMetricsConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListBucketMetricsConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListBucketMetricsConfigurationsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListBucketMetricsConfigurationsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_continuationToken;
+ bool m_continuationTokenHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsResult.h
new file mode 100644
index 00000000000..4c070322b2d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketMetricsConfigurationsResult.h
@@ -0,0 +1,207 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/MetricsConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListBucketMetricsConfigurationsResult
+ {
+ public:
+ ListBucketMetricsConfigurationsResult();
+ ListBucketMetricsConfigurationsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListBucketMetricsConfigurationsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Indicates whether the returned list of metrics configurations is complete. A
+ * value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>Indicates whether the returned list of metrics configurations is complete. A
+ * value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>Indicates whether the returned list of metrics configurations is complete. A
+ * value of true indicates that the list is not complete and the
+ * NextContinuationToken will be provided for a subsequent request.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>The marker that is used as a starting point for this metrics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>The marker that is used as a starting point for this metrics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationToken = value; }
+
+ /**
+ * <p>The marker that is used as a starting point for this metrics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationToken = std::move(value); }
+
+ /**
+ * <p>The marker that is used as a starting point for this metrics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationToken.assign(value); }
+
+ /**
+ * <p>The marker that is used as a starting point for this metrics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>The marker that is used as a starting point for this metrics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The marker that is used as a starting point for this metrics configuration
+ * list response. This value is present if it was sent in the request.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The marker used to continue a metrics configuration listing that has been
+ * truncated. Use the <code>NextContinuationToken</code> from a previously
+ * truncated list response to continue the listing. The continuation token is an
+ * opaque value that Amazon S3 understands.</p>
+ */
+ inline const Aws::String& GetNextContinuationToken() const{ return m_nextContinuationToken; }
+
+ /**
+ * <p>The marker used to continue a metrics configuration listing that has been
+ * truncated. Use the <code>NextContinuationToken</code> from a previously
+ * truncated list response to continue the listing. The continuation token is an
+ * opaque value that Amazon S3 understands.</p>
+ */
+ inline void SetNextContinuationToken(const Aws::String& value) { m_nextContinuationToken = value; }
+
+ /**
+ * <p>The marker used to continue a metrics configuration listing that has been
+ * truncated. Use the <code>NextContinuationToken</code> from a previously
+ * truncated list response to continue the listing. The continuation token is an
+ * opaque value that Amazon S3 understands.</p>
+ */
+ inline void SetNextContinuationToken(Aws::String&& value) { m_nextContinuationToken = std::move(value); }
+
+ /**
+ * <p>The marker used to continue a metrics configuration listing that has been
+ * truncated. Use the <code>NextContinuationToken</code> from a previously
+ * truncated list response to continue the listing. The continuation token is an
+ * opaque value that Amazon S3 understands.</p>
+ */
+ inline void SetNextContinuationToken(const char* value) { m_nextContinuationToken.assign(value); }
+
+ /**
+ * <p>The marker used to continue a metrics configuration listing that has been
+ * truncated. Use the <code>NextContinuationToken</code> from a previously
+ * truncated list response to continue the listing. The continuation token is an
+ * opaque value that Amazon S3 understands.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithNextContinuationToken(const Aws::String& value) { SetNextContinuationToken(value); return *this;}
+
+ /**
+ * <p>The marker used to continue a metrics configuration listing that has been
+ * truncated. Use the <code>NextContinuationToken</code> from a previously
+ * truncated list response to continue the listing. The continuation token is an
+ * opaque value that Amazon S3 understands.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithNextContinuationToken(Aws::String&& value) { SetNextContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>The marker used to continue a metrics configuration listing that has been
+ * truncated. Use the <code>NextContinuationToken</code> from a previously
+ * truncated list response to continue the listing. The continuation token is an
+ * opaque value that Amazon S3 understands.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithNextContinuationToken(const char* value) { SetNextContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The list of metrics configurations for a bucket.</p>
+ */
+ inline const Aws::Vector<MetricsConfiguration>& GetMetricsConfigurationList() const{ return m_metricsConfigurationList; }
+
+ /**
+ * <p>The list of metrics configurations for a bucket.</p>
+ */
+ inline void SetMetricsConfigurationList(const Aws::Vector<MetricsConfiguration>& value) { m_metricsConfigurationList = value; }
+
+ /**
+ * <p>The list of metrics configurations for a bucket.</p>
+ */
+ inline void SetMetricsConfigurationList(Aws::Vector<MetricsConfiguration>&& value) { m_metricsConfigurationList = std::move(value); }
+
+ /**
+ * <p>The list of metrics configurations for a bucket.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithMetricsConfigurationList(const Aws::Vector<MetricsConfiguration>& value) { SetMetricsConfigurationList(value); return *this;}
+
+ /**
+ * <p>The list of metrics configurations for a bucket.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& WithMetricsConfigurationList(Aws::Vector<MetricsConfiguration>&& value) { SetMetricsConfigurationList(std::move(value)); return *this;}
+
+ /**
+ * <p>The list of metrics configurations for a bucket.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& AddMetricsConfigurationList(const MetricsConfiguration& value) { m_metricsConfigurationList.push_back(value); return *this; }
+
+ /**
+ * <p>The list of metrics configurations for a bucket.</p>
+ */
+ inline ListBucketMetricsConfigurationsResult& AddMetricsConfigurationList(MetricsConfiguration&& value) { m_metricsConfigurationList.push_back(std::move(value)); return *this; }
+
+ private:
+
+ bool m_isTruncated;
+
+ Aws::String m_continuationToken;
+
+ Aws::String m_nextContinuationToken;
+
+ Aws::Vector<MetricsConfiguration> m_metricsConfigurationList;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketsResult.h
new file mode 100644
index 00000000000..a580ac0aadb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListBucketsResult.h
@@ -0,0 +1,107 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Owner.h>
+#include <aws/s3/model/Bucket.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListBucketsResult
+ {
+ public:
+ ListBucketsResult();
+ ListBucketsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListBucketsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The list of buckets owned by the requestor.</p>
+ */
+ inline const Aws::Vector<Bucket>& GetBuckets() const{ return m_buckets; }
+
+ /**
+ * <p>The list of buckets owned by the requestor.</p>
+ */
+ inline void SetBuckets(const Aws::Vector<Bucket>& value) { m_buckets = value; }
+
+ /**
+ * <p>The list of buckets owned by the requestor.</p>
+ */
+ inline void SetBuckets(Aws::Vector<Bucket>&& value) { m_buckets = std::move(value); }
+
+ /**
+ * <p>The list of buckets owned by the requestor.</p>
+ */
+ inline ListBucketsResult& WithBuckets(const Aws::Vector<Bucket>& value) { SetBuckets(value); return *this;}
+
+ /**
+ * <p>The list of buckets owned by the requestor.</p>
+ */
+ inline ListBucketsResult& WithBuckets(Aws::Vector<Bucket>&& value) { SetBuckets(std::move(value)); return *this;}
+
+ /**
+ * <p>The list of buckets owned by the requestor.</p>
+ */
+ inline ListBucketsResult& AddBuckets(const Bucket& value) { m_buckets.push_back(value); return *this; }
+
+ /**
+ * <p>The list of buckets owned by the requestor.</p>
+ */
+ inline ListBucketsResult& AddBuckets(Bucket&& value) { m_buckets.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The owner of the buckets listed.</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>The owner of the buckets listed.</p>
+ */
+ inline void SetOwner(const Owner& value) { m_owner = value; }
+
+ /**
+ * <p>The owner of the buckets listed.</p>
+ */
+ inline void SetOwner(Owner&& value) { m_owner = std::move(value); }
+
+ /**
+ * <p>The owner of the buckets listed.</p>
+ */
+ inline ListBucketsResult& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>The owner of the buckets listed.</p>
+ */
+ inline ListBucketsResult& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+ private:
+
+ Aws::Vector<Bucket> m_buckets;
+
+ Owner m_owner;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsRequest.h
new file mode 100644
index 00000000000..e40941b26ab
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsRequest.h
@@ -0,0 +1,730 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListMultipartUploadsRequest : public S3Request
+ {
+ public:
+ ListMultipartUploadsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListMultipartUploads"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated. </p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline bool DelimiterHasBeenSet() const { return m_delimiterHasBeenSet; }
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiterHasBeenSet = true; m_delimiter = value; }
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiterHasBeenSet = true; m_delimiter = std::move(value); }
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiterHasBeenSet = true; m_delimiter.assign(value); }
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline ListMultipartUploadsRequest& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline ListMultipartUploadsRequest& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>Character you use to group keys.</p> <p>All keys that contain the same string
+ * between the prefix, if specified, and the first occurrence of the delimiter
+ * after the prefix are grouped under a single result element,
+ * <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the
+ * substring starts at the beginning of the key. The keys that are grouped under
+ * <code>CommonPrefixes</code> result element are not returned elsewhere in the
+ * response.</p>
+ */
+ inline ListMultipartUploadsRequest& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+
+ inline bool EncodingTypeHasBeenSet() const { return m_encodingTypeHasBeenSet; }
+
+
+ inline void SetEncodingType(const EncodingType& value) { m_encodingTypeHasBeenSet = true; m_encodingType = value; }
+
+
+ inline void SetEncodingType(EncodingType&& value) { m_encodingTypeHasBeenSet = true; m_encodingType = std::move(value); }
+
+
+ inline ListMultipartUploadsRequest& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+
+ inline ListMultipartUploadsRequest& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline const Aws::String& GetKeyMarker() const{ return m_keyMarker; }
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline bool KeyMarkerHasBeenSet() const { return m_keyMarkerHasBeenSet; }
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline void SetKeyMarker(const Aws::String& value) { m_keyMarkerHasBeenSet = true; m_keyMarker = value; }
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline void SetKeyMarker(Aws::String&& value) { m_keyMarkerHasBeenSet = true; m_keyMarker = std::move(value); }
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline void SetKeyMarker(const char* value) { m_keyMarkerHasBeenSet = true; m_keyMarker.assign(value); }
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithKeyMarker(const Aws::String& value) { SetKeyMarker(value); return *this;}
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithKeyMarker(Aws::String&& value) { SetKeyMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Together with upload-id-marker, this parameter specifies the multipart upload
+ * after which listing should begin.</p> <p>If <code>upload-id-marker</code> is not
+ * specified, only the keys lexicographically greater than the specified
+ * <code>key-marker</code> will be included in the list.</p> <p>If
+ * <code>upload-id-marker</code> is specified, any multipart uploads for a key
+ * equal to the <code>key-marker</code> might also be included, provided those
+ * multipart uploads have upload IDs lexicographically greater than the specified
+ * <code>upload-id-marker</code>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithKeyMarker(const char* value) { SetKeyMarker(value); return *this;}
+
+
+ /**
+ * <p>Sets the maximum number of multipart uploads, from 1 to 1,000, to return in
+ * the response body. 1,000 is the maximum number of uploads that can be returned
+ * in a response.</p>
+ */
+ inline int GetMaxUploads() const{ return m_maxUploads; }
+
+ /**
+ * <p>Sets the maximum number of multipart uploads, from 1 to 1,000, to return in
+ * the response body. 1,000 is the maximum number of uploads that can be returned
+ * in a response.</p>
+ */
+ inline bool MaxUploadsHasBeenSet() const { return m_maxUploadsHasBeenSet; }
+
+ /**
+ * <p>Sets the maximum number of multipart uploads, from 1 to 1,000, to return in
+ * the response body. 1,000 is the maximum number of uploads that can be returned
+ * in a response.</p>
+ */
+ inline void SetMaxUploads(int value) { m_maxUploadsHasBeenSet = true; m_maxUploads = value; }
+
+ /**
+ * <p>Sets the maximum number of multipart uploads, from 1 to 1,000, to return in
+ * the response body. 1,000 is the maximum number of uploads that can be returned
+ * in a response.</p>
+ */
+ inline ListMultipartUploadsRequest& WithMaxUploads(int value) { SetMaxUploads(value); return *this;}
+
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline ListMultipartUploadsRequest& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline ListMultipartUploadsRequest& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Lists in-progress uploads only for those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different grouping of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.)</p>
+ */
+ inline ListMultipartUploadsRequest& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline const Aws::String& GetUploadIdMarker() const{ return m_uploadIdMarker; }
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline bool UploadIdMarkerHasBeenSet() const { return m_uploadIdMarkerHasBeenSet; }
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline void SetUploadIdMarker(const Aws::String& value) { m_uploadIdMarkerHasBeenSet = true; m_uploadIdMarker = value; }
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline void SetUploadIdMarker(Aws::String&& value) { m_uploadIdMarkerHasBeenSet = true; m_uploadIdMarker = std::move(value); }
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline void SetUploadIdMarker(const char* value) { m_uploadIdMarkerHasBeenSet = true; m_uploadIdMarker.assign(value); }
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithUploadIdMarker(const Aws::String& value) { SetUploadIdMarker(value); return *this;}
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithUploadIdMarker(Aws::String&& value) { SetUploadIdMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Together with key-marker, specifies the multipart upload after which listing
+ * should begin. If key-marker is not specified, the upload-id-marker parameter is
+ * ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ * might be included in the list only if they have an upload ID lexicographically
+ * greater than the specified <code>upload-id-marker</code>.</p>
+ */
+ inline ListMultipartUploadsRequest& WithUploadIdMarker(const char* value) { SetUploadIdMarker(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListMultipartUploadsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListMultipartUploadsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListMultipartUploadsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListMultipartUploadsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListMultipartUploadsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListMultipartUploadsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListMultipartUploadsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListMultipartUploadsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListMultipartUploadsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListMultipartUploadsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListMultipartUploadsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListMultipartUploadsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_delimiter;
+ bool m_delimiterHasBeenSet;
+
+ EncodingType m_encodingType;
+ bool m_encodingTypeHasBeenSet;
+
+ Aws::String m_keyMarker;
+ bool m_keyMarkerHasBeenSet;
+
+ int m_maxUploads;
+ bool m_maxUploadsHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::String m_uploadIdMarker;
+ bool m_uploadIdMarkerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsResult.h
new file mode 100644
index 00000000000..70cf65ba6d4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListMultipartUploadsResult.h
@@ -0,0 +1,549 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/s3/model/MultipartUpload.h>
+#include <aws/s3/model/CommonPrefix.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListMultipartUploadsResult
+ {
+ public:
+ ListMultipartUploadsResult();
+ ListMultipartUploadsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListMultipartUploadsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline ListMultipartUploadsResult& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline ListMultipartUploadsResult& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline ListMultipartUploadsResult& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The key at or after which the listing began.</p>
+ */
+ inline const Aws::String& GetKeyMarker() const{ return m_keyMarker; }
+
+ /**
+ * <p>The key at or after which the listing began.</p>
+ */
+ inline void SetKeyMarker(const Aws::String& value) { m_keyMarker = value; }
+
+ /**
+ * <p>The key at or after which the listing began.</p>
+ */
+ inline void SetKeyMarker(Aws::String&& value) { m_keyMarker = std::move(value); }
+
+ /**
+ * <p>The key at or after which the listing began.</p>
+ */
+ inline void SetKeyMarker(const char* value) { m_keyMarker.assign(value); }
+
+ /**
+ * <p>The key at or after which the listing began.</p>
+ */
+ inline ListMultipartUploadsResult& WithKeyMarker(const Aws::String& value) { SetKeyMarker(value); return *this;}
+
+ /**
+ * <p>The key at or after which the listing began.</p>
+ */
+ inline ListMultipartUploadsResult& WithKeyMarker(Aws::String&& value) { SetKeyMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>The key at or after which the listing began.</p>
+ */
+ inline ListMultipartUploadsResult& WithKeyMarker(const char* value) { SetKeyMarker(value); return *this;}
+
+
+ /**
+ * <p>Upload ID after which listing began.</p>
+ */
+ inline const Aws::String& GetUploadIdMarker() const{ return m_uploadIdMarker; }
+
+ /**
+ * <p>Upload ID after which listing began.</p>
+ */
+ inline void SetUploadIdMarker(const Aws::String& value) { m_uploadIdMarker = value; }
+
+ /**
+ * <p>Upload ID after which listing began.</p>
+ */
+ inline void SetUploadIdMarker(Aws::String&& value) { m_uploadIdMarker = std::move(value); }
+
+ /**
+ * <p>Upload ID after which listing began.</p>
+ */
+ inline void SetUploadIdMarker(const char* value) { m_uploadIdMarker.assign(value); }
+
+ /**
+ * <p>Upload ID after which listing began.</p>
+ */
+ inline ListMultipartUploadsResult& WithUploadIdMarker(const Aws::String& value) { SetUploadIdMarker(value); return *this;}
+
+ /**
+ * <p>Upload ID after which listing began.</p>
+ */
+ inline ListMultipartUploadsResult& WithUploadIdMarker(Aws::String&& value) { SetUploadIdMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Upload ID after which listing began.</p>
+ */
+ inline ListMultipartUploadsResult& WithUploadIdMarker(const char* value) { SetUploadIdMarker(value); return *this;}
+
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the key-marker request parameter in a subsequent request.</p>
+ */
+ inline const Aws::String& GetNextKeyMarker() const{ return m_nextKeyMarker; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the key-marker request parameter in a subsequent request.</p>
+ */
+ inline void SetNextKeyMarker(const Aws::String& value) { m_nextKeyMarker = value; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the key-marker request parameter in a subsequent request.</p>
+ */
+ inline void SetNextKeyMarker(Aws::String&& value) { m_nextKeyMarker = std::move(value); }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the key-marker request parameter in a subsequent request.</p>
+ */
+ inline void SetNextKeyMarker(const char* value) { m_nextKeyMarker.assign(value); }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the key-marker request parameter in a subsequent request.</p>
+ */
+ inline ListMultipartUploadsResult& WithNextKeyMarker(const Aws::String& value) { SetNextKeyMarker(value); return *this;}
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the key-marker request parameter in a subsequent request.</p>
+ */
+ inline ListMultipartUploadsResult& WithNextKeyMarker(Aws::String&& value) { SetNextKeyMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the key-marker request parameter in a subsequent request.</p>
+ */
+ inline ListMultipartUploadsResult& WithNextKeyMarker(const char* value) { SetNextKeyMarker(value); return *this;}
+
+
+ /**
+ * <p>When a prefix is provided in the request, this field contains the specified
+ * prefix. The result contains only keys starting with the specified prefix.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>When a prefix is provided in the request, this field contains the specified
+ * prefix. The result contains only keys starting with the specified prefix.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefix = value; }
+
+ /**
+ * <p>When a prefix is provided in the request, this field contains the specified
+ * prefix. The result contains only keys starting with the specified prefix.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefix = std::move(value); }
+
+ /**
+ * <p>When a prefix is provided in the request, this field contains the specified
+ * prefix. The result contains only keys starting with the specified prefix.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefix.assign(value); }
+
+ /**
+ * <p>When a prefix is provided in the request, this field contains the specified
+ * prefix. The result contains only keys starting with the specified prefix.</p>
+ */
+ inline ListMultipartUploadsResult& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>When a prefix is provided in the request, this field contains the specified
+ * prefix. The result contains only keys starting with the specified prefix.</p>
+ */
+ inline ListMultipartUploadsResult& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>When a prefix is provided in the request, this field contains the specified
+ * prefix. The result contains only keys starting with the specified prefix.</p>
+ */
+ inline ListMultipartUploadsResult& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>Contains the delimiter you specified in the request. If you don't specify a
+ * delimiter in your request, this element is absent from the response.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>Contains the delimiter you specified in the request. If you don't specify a
+ * delimiter in your request, this element is absent from the response.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiter = value; }
+
+ /**
+ * <p>Contains the delimiter you specified in the request. If you don't specify a
+ * delimiter in your request, this element is absent from the response.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiter = std::move(value); }
+
+ /**
+ * <p>Contains the delimiter you specified in the request. If you don't specify a
+ * delimiter in your request, this element is absent from the response.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiter.assign(value); }
+
+ /**
+ * <p>Contains the delimiter you specified in the request. If you don't specify a
+ * delimiter in your request, this element is absent from the response.</p>
+ */
+ inline ListMultipartUploadsResult& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>Contains the delimiter you specified in the request. If you don't specify a
+ * delimiter in your request, this element is absent from the response.</p>
+ */
+ inline ListMultipartUploadsResult& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>Contains the delimiter you specified in the request. If you don't specify a
+ * delimiter in your request, this element is absent from the response.</p>
+ */
+ inline ListMultipartUploadsResult& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the <code>upload-id-marker</code> request parameter in a subsequent
+ * request.</p>
+ */
+ inline const Aws::String& GetNextUploadIdMarker() const{ return m_nextUploadIdMarker; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the <code>upload-id-marker</code> request parameter in a subsequent
+ * request.</p>
+ */
+ inline void SetNextUploadIdMarker(const Aws::String& value) { m_nextUploadIdMarker = value; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the <code>upload-id-marker</code> request parameter in a subsequent
+ * request.</p>
+ */
+ inline void SetNextUploadIdMarker(Aws::String&& value) { m_nextUploadIdMarker = std::move(value); }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the <code>upload-id-marker</code> request parameter in a subsequent
+ * request.</p>
+ */
+ inline void SetNextUploadIdMarker(const char* value) { m_nextUploadIdMarker.assign(value); }
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the <code>upload-id-marker</code> request parameter in a subsequent
+ * request.</p>
+ */
+ inline ListMultipartUploadsResult& WithNextUploadIdMarker(const Aws::String& value) { SetNextUploadIdMarker(value); return *this;}
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the <code>upload-id-marker</code> request parameter in a subsequent
+ * request.</p>
+ */
+ inline ListMultipartUploadsResult& WithNextUploadIdMarker(Aws::String&& value) { SetNextUploadIdMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>When a list is truncated, this element specifies the value that should be
+ * used for the <code>upload-id-marker</code> request parameter in a subsequent
+ * request.</p>
+ */
+ inline ListMultipartUploadsResult& WithNextUploadIdMarker(const char* value) { SetNextUploadIdMarker(value); return *this;}
+
+
+ /**
+ * <p>Maximum number of multipart uploads that could have been included in the
+ * response.</p>
+ */
+ inline int GetMaxUploads() const{ return m_maxUploads; }
+
+ /**
+ * <p>Maximum number of multipart uploads that could have been included in the
+ * response.</p>
+ */
+ inline void SetMaxUploads(int value) { m_maxUploads = value; }
+
+ /**
+ * <p>Maximum number of multipart uploads that could have been included in the
+ * response.</p>
+ */
+ inline ListMultipartUploadsResult& WithMaxUploads(int value) { SetMaxUploads(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the returned list of multipart uploads is truncated. A
+ * value of true indicates that the list was truncated. The list can be truncated
+ * if the number of multipart uploads exceeds the limit allowed or specified by max
+ * uploads.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>Indicates whether the returned list of multipart uploads is truncated. A
+ * value of true indicates that the list was truncated. The list can be truncated
+ * if the number of multipart uploads exceeds the limit allowed or specified by max
+ * uploads.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>Indicates whether the returned list of multipart uploads is truncated. A
+ * value of true indicates that the list was truncated. The list can be truncated
+ * if the number of multipart uploads exceeds the limit allowed or specified by max
+ * uploads.</p>
+ */
+ inline ListMultipartUploadsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>Container for elements related to a particular multipart upload. A response
+ * can contain zero or more <code>Upload</code> elements.</p>
+ */
+ inline const Aws::Vector<MultipartUpload>& GetUploads() const{ return m_uploads; }
+
+ /**
+ * <p>Container for elements related to a particular multipart upload. A response
+ * can contain zero or more <code>Upload</code> elements.</p>
+ */
+ inline void SetUploads(const Aws::Vector<MultipartUpload>& value) { m_uploads = value; }
+
+ /**
+ * <p>Container for elements related to a particular multipart upload. A response
+ * can contain zero or more <code>Upload</code> elements.</p>
+ */
+ inline void SetUploads(Aws::Vector<MultipartUpload>&& value) { m_uploads = std::move(value); }
+
+ /**
+ * <p>Container for elements related to a particular multipart upload. A response
+ * can contain zero or more <code>Upload</code> elements.</p>
+ */
+ inline ListMultipartUploadsResult& WithUploads(const Aws::Vector<MultipartUpload>& value) { SetUploads(value); return *this;}
+
+ /**
+ * <p>Container for elements related to a particular multipart upload. A response
+ * can contain zero or more <code>Upload</code> elements.</p>
+ */
+ inline ListMultipartUploadsResult& WithUploads(Aws::Vector<MultipartUpload>&& value) { SetUploads(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for elements related to a particular multipart upload. A response
+ * can contain zero or more <code>Upload</code> elements.</p>
+ */
+ inline ListMultipartUploadsResult& AddUploads(const MultipartUpload& value) { m_uploads.push_back(value); return *this; }
+
+ /**
+ * <p>Container for elements related to a particular multipart upload. A response
+ * can contain zero or more <code>Upload</code> elements.</p>
+ */
+ inline ListMultipartUploadsResult& AddUploads(MultipartUpload&& value) { m_uploads.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>If you specify a delimiter in the request, then the result returns each
+ * distinct key prefix containing the delimiter in a <code>CommonPrefixes</code>
+ * element. The distinct key prefixes are returned in the <code>Prefix</code> child
+ * element.</p>
+ */
+ inline const Aws::Vector<CommonPrefix>& GetCommonPrefixes() const{ return m_commonPrefixes; }
+
+ /**
+ * <p>If you specify a delimiter in the request, then the result returns each
+ * distinct key prefix containing the delimiter in a <code>CommonPrefixes</code>
+ * element. The distinct key prefixes are returned in the <code>Prefix</code> child
+ * element.</p>
+ */
+ inline void SetCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { m_commonPrefixes = value; }
+
+ /**
+ * <p>If you specify a delimiter in the request, then the result returns each
+ * distinct key prefix containing the delimiter in a <code>CommonPrefixes</code>
+ * element. The distinct key prefixes are returned in the <code>Prefix</code> child
+ * element.</p>
+ */
+ inline void SetCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { m_commonPrefixes = std::move(value); }
+
+ /**
+ * <p>If you specify a delimiter in the request, then the result returns each
+ * distinct key prefix containing the delimiter in a <code>CommonPrefixes</code>
+ * element. The distinct key prefixes are returned in the <code>Prefix</code> child
+ * element.</p>
+ */
+ inline ListMultipartUploadsResult& WithCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { SetCommonPrefixes(value); return *this;}
+
+ /**
+ * <p>If you specify a delimiter in the request, then the result returns each
+ * distinct key prefix containing the delimiter in a <code>CommonPrefixes</code>
+ * element. The distinct key prefixes are returned in the <code>Prefix</code> child
+ * element.</p>
+ */
+ inline ListMultipartUploadsResult& WithCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { SetCommonPrefixes(std::move(value)); return *this;}
+
+ /**
+ * <p>If you specify a delimiter in the request, then the result returns each
+ * distinct key prefix containing the delimiter in a <code>CommonPrefixes</code>
+ * element. The distinct key prefixes are returned in the <code>Prefix</code> child
+ * element.</p>
+ */
+ inline ListMultipartUploadsResult& AddCommonPrefixes(const CommonPrefix& value) { m_commonPrefixes.push_back(value); return *this; }
+
+ /**
+ * <p>If you specify a delimiter in the request, then the result returns each
+ * distinct key prefix containing the delimiter in a <code>CommonPrefixes</code>
+ * element. The distinct key prefixes are returned in the <code>Prefix</code> child
+ * element.</p>
+ */
+ inline ListMultipartUploadsResult& AddCommonPrefixes(CommonPrefix&& value) { m_commonPrefixes.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ * <p>If you specify <code>encoding-type</code> request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter</code>,
+ * <code>KeyMarker</code>, <code>Prefix</code>, <code>NextKeyMarker</code>,
+ * <code>Key</code>.</p>
+ */
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ * <p>If you specify <code>encoding-type</code> request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter</code>,
+ * <code>KeyMarker</code>, <code>Prefix</code>, <code>NextKeyMarker</code>,
+ * <code>Key</code>.</p>
+ */
+ inline void SetEncodingType(const EncodingType& value) { m_encodingType = value; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ * <p>If you specify <code>encoding-type</code> request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter</code>,
+ * <code>KeyMarker</code>, <code>Prefix</code>, <code>NextKeyMarker</code>,
+ * <code>Key</code>.</p>
+ */
+ inline void SetEncodingType(EncodingType&& value) { m_encodingType = std::move(value); }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ * <p>If you specify <code>encoding-type</code> request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter</code>,
+ * <code>KeyMarker</code>, <code>Prefix</code>, <code>NextKeyMarker</code>,
+ * <code>Key</code>.</p>
+ */
+ inline ListMultipartUploadsResult& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ * <p>If you specify <code>encoding-type</code> request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter</code>,
+ * <code>KeyMarker</code>, <code>Prefix</code>, <code>NextKeyMarker</code>,
+ * <code>Key</code>.</p>
+ */
+ inline ListMultipartUploadsResult& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_bucket;
+
+ Aws::String m_keyMarker;
+
+ Aws::String m_uploadIdMarker;
+
+ Aws::String m_nextKeyMarker;
+
+ Aws::String m_prefix;
+
+ Aws::String m_delimiter;
+
+ Aws::String m_nextUploadIdMarker;
+
+ int m_maxUploads;
+
+ bool m_isTruncated;
+
+ Aws::Vector<MultipartUpload> m_uploads;
+
+ Aws::Vector<CommonPrefix> m_commonPrefixes;
+
+ EncodingType m_encodingType;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsRequest.h
new file mode 100644
index 00000000000..652fe1c89c6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsRequest.h
@@ -0,0 +1,502 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListObjectVersionsRequest : public S3Request
+ {
+ public:
+ ListObjectVersionsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListObjectVersions"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline ListObjectVersionsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline ListObjectVersionsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name that contains the objects. </p>
+ */
+ inline ListObjectVersionsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline bool DelimiterHasBeenSet() const { return m_delimiterHasBeenSet; }
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiterHasBeenSet = true; m_delimiter = value; }
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiterHasBeenSet = true; m_delimiter = std::move(value); }
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiterHasBeenSet = true; m_delimiter.assign(value); }
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline ListObjectVersionsRequest& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline ListObjectVersionsRequest& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>A delimiter is a character that you specify to group keys. All keys that
+ * contain the same string between the <code>prefix</code> and the first occurrence
+ * of the delimiter are grouped under a single result element in CommonPrefixes.
+ * These groups are counted as one result against the max-keys limitation. These
+ * keys are not returned elsewhere in the response.</p>
+ */
+ inline ListObjectVersionsRequest& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+
+ inline bool EncodingTypeHasBeenSet() const { return m_encodingTypeHasBeenSet; }
+
+
+ inline void SetEncodingType(const EncodingType& value) { m_encodingTypeHasBeenSet = true; m_encodingType = value; }
+
+
+ inline void SetEncodingType(EncodingType&& value) { m_encodingTypeHasBeenSet = true; m_encodingType = std::move(value); }
+
+
+ inline ListObjectVersionsRequest& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+
+ inline ListObjectVersionsRequest& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline const Aws::String& GetKeyMarker() const{ return m_keyMarker; }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline bool KeyMarkerHasBeenSet() const { return m_keyMarkerHasBeenSet; }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline void SetKeyMarker(const Aws::String& value) { m_keyMarkerHasBeenSet = true; m_keyMarker = value; }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline void SetKeyMarker(Aws::String&& value) { m_keyMarkerHasBeenSet = true; m_keyMarker = std::move(value); }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline void SetKeyMarker(const char* value) { m_keyMarkerHasBeenSet = true; m_keyMarker.assign(value); }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline ListObjectVersionsRequest& WithKeyMarker(const Aws::String& value) { SetKeyMarker(value); return *this;}
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline ListObjectVersionsRequest& WithKeyMarker(Aws::String&& value) { SetKeyMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline ListObjectVersionsRequest& WithKeyMarker(const char* value) { SetKeyMarker(value); return *this;}
+
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. If additional keys satisfy the search criteria, but were not
+ * returned because max-keys was exceeded, the response contains
+ * &lt;isTruncated&gt;true&lt;/isTruncated&gt;. To return the additional keys, see
+ * key-marker and version-id-marker.</p>
+ */
+ inline int GetMaxKeys() const{ return m_maxKeys; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. If additional keys satisfy the search criteria, but were not
+ * returned because max-keys was exceeded, the response contains
+ * &lt;isTruncated&gt;true&lt;/isTruncated&gt;. To return the additional keys, see
+ * key-marker and version-id-marker.</p>
+ */
+ inline bool MaxKeysHasBeenSet() const { return m_maxKeysHasBeenSet; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. If additional keys satisfy the search criteria, but were not
+ * returned because max-keys was exceeded, the response contains
+ * &lt;isTruncated&gt;true&lt;/isTruncated&gt;. To return the additional keys, see
+ * key-marker and version-id-marker.</p>
+ */
+ inline void SetMaxKeys(int value) { m_maxKeysHasBeenSet = true; m_maxKeys = value; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. If additional keys satisfy the search criteria, but were not
+ * returned because max-keys was exceeded, the response contains
+ * &lt;isTruncated&gt;true&lt;/isTruncated&gt;. To return the additional keys, see
+ * key-marker and version-id-marker.</p>
+ */
+ inline ListObjectVersionsRequest& WithMaxKeys(int value) { SetMaxKeys(value); return *this;}
+
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline ListObjectVersionsRequest& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline ListObjectVersionsRequest& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Use this parameter to select only those keys that begin with the specified
+ * prefix. You can use prefixes to separate a bucket into different groupings of
+ * keys. (You can think of using prefix to make groups in the same way you'd use a
+ * folder in a file system.) You can use prefix with delimiter to roll up numerous
+ * objects into a single result under CommonPrefixes. </p>
+ */
+ inline ListObjectVersionsRequest& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline const Aws::String& GetVersionIdMarker() const{ return m_versionIdMarker; }
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline bool VersionIdMarkerHasBeenSet() const { return m_versionIdMarkerHasBeenSet; }
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline void SetVersionIdMarker(const Aws::String& value) { m_versionIdMarkerHasBeenSet = true; m_versionIdMarker = value; }
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline void SetVersionIdMarker(Aws::String&& value) { m_versionIdMarkerHasBeenSet = true; m_versionIdMarker = std::move(value); }
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline void SetVersionIdMarker(const char* value) { m_versionIdMarkerHasBeenSet = true; m_versionIdMarker.assign(value); }
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline ListObjectVersionsRequest& WithVersionIdMarker(const Aws::String& value) { SetVersionIdMarker(value); return *this;}
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline ListObjectVersionsRequest& WithVersionIdMarker(Aws::String&& value) { SetVersionIdMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the object version you want to start listing from.</p>
+ */
+ inline ListObjectVersionsRequest& WithVersionIdMarker(const char* value) { SetVersionIdMarker(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectVersionsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectVersionsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectVersionsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListObjectVersionsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListObjectVersionsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListObjectVersionsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListObjectVersionsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListObjectVersionsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListObjectVersionsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListObjectVersionsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListObjectVersionsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListObjectVersionsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_delimiter;
+ bool m_delimiterHasBeenSet;
+
+ EncodingType m_encodingType;
+ bool m_encodingTypeHasBeenSet;
+
+ Aws::String m_keyMarker;
+ bool m_keyMarkerHasBeenSet;
+
+ int m_maxKeys;
+ bool m_maxKeysHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::String m_versionIdMarker;
+ bool m_versionIdMarkerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsResult.h
new file mode 100644
index 00000000000..20909af4ad1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectVersionsResult.h
@@ -0,0 +1,604 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/s3/model/ObjectVersion.h>
+#include <aws/s3/model/DeleteMarkerEntry.h>
+#include <aws/s3/model/CommonPrefix.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListObjectVersionsResult
+ {
+ public:
+ ListObjectVersionsResult();
+ ListObjectVersionsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListObjectVersionsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>A flag that indicates whether Amazon S3 returned all of the results that
+ * satisfied the search criteria. If your results were truncated, you can make a
+ * follow-up paginated request using the NextKeyMarker and NextVersionIdMarker
+ * response parameters as a starting place in another request to return the rest of
+ * the results.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>A flag that indicates whether Amazon S3 returned all of the results that
+ * satisfied the search criteria. If your results were truncated, you can make a
+ * follow-up paginated request using the NextKeyMarker and NextVersionIdMarker
+ * response parameters as a starting place in another request to return the rest of
+ * the results.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>A flag that indicates whether Amazon S3 returned all of the results that
+ * satisfied the search criteria. If your results were truncated, you can make a
+ * follow-up paginated request using the NextKeyMarker and NextVersionIdMarker
+ * response parameters as a starting place in another request to return the rest of
+ * the results.</p>
+ */
+ inline ListObjectVersionsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>Marks the last key returned in a truncated response.</p>
+ */
+ inline const Aws::String& GetKeyMarker() const{ return m_keyMarker; }
+
+ /**
+ * <p>Marks the last key returned in a truncated response.</p>
+ */
+ inline void SetKeyMarker(const Aws::String& value) { m_keyMarker = value; }
+
+ /**
+ * <p>Marks the last key returned in a truncated response.</p>
+ */
+ inline void SetKeyMarker(Aws::String&& value) { m_keyMarker = std::move(value); }
+
+ /**
+ * <p>Marks the last key returned in a truncated response.</p>
+ */
+ inline void SetKeyMarker(const char* value) { m_keyMarker.assign(value); }
+
+ /**
+ * <p>Marks the last key returned in a truncated response.</p>
+ */
+ inline ListObjectVersionsResult& WithKeyMarker(const Aws::String& value) { SetKeyMarker(value); return *this;}
+
+ /**
+ * <p>Marks the last key returned in a truncated response.</p>
+ */
+ inline ListObjectVersionsResult& WithKeyMarker(Aws::String&& value) { SetKeyMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Marks the last key returned in a truncated response.</p>
+ */
+ inline ListObjectVersionsResult& WithKeyMarker(const char* value) { SetKeyMarker(value); return *this;}
+
+
+ /**
+ * <p>Marks the last version of the key returned in a truncated response.</p>
+ */
+ inline const Aws::String& GetVersionIdMarker() const{ return m_versionIdMarker; }
+
+ /**
+ * <p>Marks the last version of the key returned in a truncated response.</p>
+ */
+ inline void SetVersionIdMarker(const Aws::String& value) { m_versionIdMarker = value; }
+
+ /**
+ * <p>Marks the last version of the key returned in a truncated response.</p>
+ */
+ inline void SetVersionIdMarker(Aws::String&& value) { m_versionIdMarker = std::move(value); }
+
+ /**
+ * <p>Marks the last version of the key returned in a truncated response.</p>
+ */
+ inline void SetVersionIdMarker(const char* value) { m_versionIdMarker.assign(value); }
+
+ /**
+ * <p>Marks the last version of the key returned in a truncated response.</p>
+ */
+ inline ListObjectVersionsResult& WithVersionIdMarker(const Aws::String& value) { SetVersionIdMarker(value); return *this;}
+
+ /**
+ * <p>Marks the last version of the key returned in a truncated response.</p>
+ */
+ inline ListObjectVersionsResult& WithVersionIdMarker(Aws::String&& value) { SetVersionIdMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Marks the last version of the key returned in a truncated response.</p>
+ */
+ inline ListObjectVersionsResult& WithVersionIdMarker(const char* value) { SetVersionIdMarker(value); return *this;}
+
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextKeyMarker</code> specifies the first key not returned that satisfies
+ * the search criteria. Use this value for the key-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline const Aws::String& GetNextKeyMarker() const{ return m_nextKeyMarker; }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextKeyMarker</code> specifies the first key not returned that satisfies
+ * the search criteria. Use this value for the key-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline void SetNextKeyMarker(const Aws::String& value) { m_nextKeyMarker = value; }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextKeyMarker</code> specifies the first key not returned that satisfies
+ * the search criteria. Use this value for the key-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline void SetNextKeyMarker(Aws::String&& value) { m_nextKeyMarker = std::move(value); }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextKeyMarker</code> specifies the first key not returned that satisfies
+ * the search criteria. Use this value for the key-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline void SetNextKeyMarker(const char* value) { m_nextKeyMarker.assign(value); }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextKeyMarker</code> specifies the first key not returned that satisfies
+ * the search criteria. Use this value for the key-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline ListObjectVersionsResult& WithNextKeyMarker(const Aws::String& value) { SetNextKeyMarker(value); return *this;}
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextKeyMarker</code> specifies the first key not returned that satisfies
+ * the search criteria. Use this value for the key-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline ListObjectVersionsResult& WithNextKeyMarker(Aws::String&& value) { SetNextKeyMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextKeyMarker</code> specifies the first key not returned that satisfies
+ * the search criteria. Use this value for the key-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline ListObjectVersionsResult& WithNextKeyMarker(const char* value) { SetNextKeyMarker(value); return *this;}
+
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextVersionIdMarker</code> specifies the first object version not returned
+ * that satisfies the search criteria. Use this value for the version-id-marker
+ * request parameter in a subsequent request.</p>
+ */
+ inline const Aws::String& GetNextVersionIdMarker() const{ return m_nextVersionIdMarker; }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextVersionIdMarker</code> specifies the first object version not returned
+ * that satisfies the search criteria. Use this value for the version-id-marker
+ * request parameter in a subsequent request.</p>
+ */
+ inline void SetNextVersionIdMarker(const Aws::String& value) { m_nextVersionIdMarker = value; }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextVersionIdMarker</code> specifies the first object version not returned
+ * that satisfies the search criteria. Use this value for the version-id-marker
+ * request parameter in a subsequent request.</p>
+ */
+ inline void SetNextVersionIdMarker(Aws::String&& value) { m_nextVersionIdMarker = std::move(value); }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextVersionIdMarker</code> specifies the first object version not returned
+ * that satisfies the search criteria. Use this value for the version-id-marker
+ * request parameter in a subsequent request.</p>
+ */
+ inline void SetNextVersionIdMarker(const char* value) { m_nextVersionIdMarker.assign(value); }
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextVersionIdMarker</code> specifies the first object version not returned
+ * that satisfies the search criteria. Use this value for the version-id-marker
+ * request parameter in a subsequent request.</p>
+ */
+ inline ListObjectVersionsResult& WithNextVersionIdMarker(const Aws::String& value) { SetNextVersionIdMarker(value); return *this;}
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextVersionIdMarker</code> specifies the first object version not returned
+ * that satisfies the search criteria. Use this value for the version-id-marker
+ * request parameter in a subsequent request.</p>
+ */
+ inline ListObjectVersionsResult& WithNextVersionIdMarker(Aws::String&& value) { SetNextVersionIdMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>When the number of responses exceeds the value of <code>MaxKeys</code>,
+ * <code>NextVersionIdMarker</code> specifies the first object version not returned
+ * that satisfies the search criteria. Use this value for the version-id-marker
+ * request parameter in a subsequent request.</p>
+ */
+ inline ListObjectVersionsResult& WithNextVersionIdMarker(const char* value) { SetNextVersionIdMarker(value); return *this;}
+
+
+ /**
+ * <p>Container for version information.</p>
+ */
+ inline const Aws::Vector<ObjectVersion>& GetVersions() const{ return m_versions; }
+
+ /**
+ * <p>Container for version information.</p>
+ */
+ inline void SetVersions(const Aws::Vector<ObjectVersion>& value) { m_versions = value; }
+
+ /**
+ * <p>Container for version information.</p>
+ */
+ inline void SetVersions(Aws::Vector<ObjectVersion>&& value) { m_versions = std::move(value); }
+
+ /**
+ * <p>Container for version information.</p>
+ */
+ inline ListObjectVersionsResult& WithVersions(const Aws::Vector<ObjectVersion>& value) { SetVersions(value); return *this;}
+
+ /**
+ * <p>Container for version information.</p>
+ */
+ inline ListObjectVersionsResult& WithVersions(Aws::Vector<ObjectVersion>&& value) { SetVersions(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for version information.</p>
+ */
+ inline ListObjectVersionsResult& AddVersions(const ObjectVersion& value) { m_versions.push_back(value); return *this; }
+
+ /**
+ * <p>Container for version information.</p>
+ */
+ inline ListObjectVersionsResult& AddVersions(ObjectVersion&& value) { m_versions.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Container for an object that is a delete marker.</p>
+ */
+ inline const Aws::Vector<DeleteMarkerEntry>& GetDeleteMarkers() const{ return m_deleteMarkers; }
+
+ /**
+ * <p>Container for an object that is a delete marker.</p>
+ */
+ inline void SetDeleteMarkers(const Aws::Vector<DeleteMarkerEntry>& value) { m_deleteMarkers = value; }
+
+ /**
+ * <p>Container for an object that is a delete marker.</p>
+ */
+ inline void SetDeleteMarkers(Aws::Vector<DeleteMarkerEntry>&& value) { m_deleteMarkers = std::move(value); }
+
+ /**
+ * <p>Container for an object that is a delete marker.</p>
+ */
+ inline ListObjectVersionsResult& WithDeleteMarkers(const Aws::Vector<DeleteMarkerEntry>& value) { SetDeleteMarkers(value); return *this;}
+
+ /**
+ * <p>Container for an object that is a delete marker.</p>
+ */
+ inline ListObjectVersionsResult& WithDeleteMarkers(Aws::Vector<DeleteMarkerEntry>&& value) { SetDeleteMarkers(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for an object that is a delete marker.</p>
+ */
+ inline ListObjectVersionsResult& AddDeleteMarkers(const DeleteMarkerEntry& value) { m_deleteMarkers.push_back(value); return *this; }
+
+ /**
+ * <p>Container for an object that is a delete marker.</p>
+ */
+ inline ListObjectVersionsResult& AddDeleteMarkers(DeleteMarkerEntry&& value) { m_deleteMarkers.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline const Aws::String& GetName() const{ return m_name; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetName(const Aws::String& value) { m_name = value; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetName(Aws::String&& value) { m_name = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetName(const char* value) { m_name.assign(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline ListObjectVersionsResult& WithName(const Aws::String& value) { SetName(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline ListObjectVersionsResult& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline ListObjectVersionsResult& WithName(const char* value) { SetName(value); return *this;}
+
+
+ /**
+ * <p>Selects objects that start with the value supplied by this parameter.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Selects objects that start with the value supplied by this parameter.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefix = value; }
+
+ /**
+ * <p>Selects objects that start with the value supplied by this parameter.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefix = std::move(value); }
+
+ /**
+ * <p>Selects objects that start with the value supplied by this parameter.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefix.assign(value); }
+
+ /**
+ * <p>Selects objects that start with the value supplied by this parameter.</p>
+ */
+ inline ListObjectVersionsResult& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Selects objects that start with the value supplied by this parameter.</p>
+ */
+ inline ListObjectVersionsResult& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Selects objects that start with the value supplied by this parameter.</p>
+ */
+ inline ListObjectVersionsResult& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>The delimiter grouping the included keys. A delimiter is a character that you
+ * specify to group keys. All keys that contain the same string between the prefix
+ * and the first occurrence of the delimiter are grouped under a single result
+ * element in <code>CommonPrefixes</code>. These groups are counted as one result
+ * against the max-keys limitation. These keys are not returned elsewhere in the
+ * response.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>The delimiter grouping the included keys. A delimiter is a character that you
+ * specify to group keys. All keys that contain the same string between the prefix
+ * and the first occurrence of the delimiter are grouped under a single result
+ * element in <code>CommonPrefixes</code>. These groups are counted as one result
+ * against the max-keys limitation. These keys are not returned elsewhere in the
+ * response.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiter = value; }
+
+ /**
+ * <p>The delimiter grouping the included keys. A delimiter is a character that you
+ * specify to group keys. All keys that contain the same string between the prefix
+ * and the first occurrence of the delimiter are grouped under a single result
+ * element in <code>CommonPrefixes</code>. These groups are counted as one result
+ * against the max-keys limitation. These keys are not returned elsewhere in the
+ * response.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiter = std::move(value); }
+
+ /**
+ * <p>The delimiter grouping the included keys. A delimiter is a character that you
+ * specify to group keys. All keys that contain the same string between the prefix
+ * and the first occurrence of the delimiter are grouped under a single result
+ * element in <code>CommonPrefixes</code>. These groups are counted as one result
+ * against the max-keys limitation. These keys are not returned elsewhere in the
+ * response.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiter.assign(value); }
+
+ /**
+ * <p>The delimiter grouping the included keys. A delimiter is a character that you
+ * specify to group keys. All keys that contain the same string between the prefix
+ * and the first occurrence of the delimiter are grouped under a single result
+ * element in <code>CommonPrefixes</code>. These groups are counted as one result
+ * against the max-keys limitation. These keys are not returned elsewhere in the
+ * response.</p>
+ */
+ inline ListObjectVersionsResult& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>The delimiter grouping the included keys. A delimiter is a character that you
+ * specify to group keys. All keys that contain the same string between the prefix
+ * and the first occurrence of the delimiter are grouped under a single result
+ * element in <code>CommonPrefixes</code>. These groups are counted as one result
+ * against the max-keys limitation. These keys are not returned elsewhere in the
+ * response.</p>
+ */
+ inline ListObjectVersionsResult& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>The delimiter grouping the included keys. A delimiter is a character that you
+ * specify to group keys. All keys that contain the same string between the prefix
+ * and the first occurrence of the delimiter are grouped under a single result
+ * element in <code>CommonPrefixes</code>. These groups are counted as one result
+ * against the max-keys limitation. These keys are not returned elsewhere in the
+ * response.</p>
+ */
+ inline ListObjectVersionsResult& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+ /**
+ * <p>Specifies the maximum number of objects to return.</p>
+ */
+ inline int GetMaxKeys() const{ return m_maxKeys; }
+
+ /**
+ * <p>Specifies the maximum number of objects to return.</p>
+ */
+ inline void SetMaxKeys(int value) { m_maxKeys = value; }
+
+ /**
+ * <p>Specifies the maximum number of objects to return.</p>
+ */
+ inline ListObjectVersionsResult& WithMaxKeys(int value) { SetMaxKeys(value); return *this;}
+
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p>
+ */
+ inline const Aws::Vector<CommonPrefix>& GetCommonPrefixes() const{ return m_commonPrefixes; }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p>
+ */
+ inline void SetCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { m_commonPrefixes = value; }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p>
+ */
+ inline void SetCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { m_commonPrefixes = std::move(value); }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p>
+ */
+ inline ListObjectVersionsResult& WithCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { SetCommonPrefixes(value); return *this;}
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p>
+ */
+ inline ListObjectVersionsResult& WithCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { SetCommonPrefixes(std::move(value)); return *this;}
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p>
+ */
+ inline ListObjectVersionsResult& AddCommonPrefixes(const CommonPrefix& value) { m_commonPrefixes.push_back(value); return *this; }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p>
+ */
+ inline ListObjectVersionsResult& AddCommonPrefixes(CommonPrefix&& value) { m_commonPrefixes.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p> Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>KeyMarker, NextKeyMarker, Prefix,
+ * Key</code>, and <code>Delimiter</code>.</p>
+ */
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+ /**
+ * <p> Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>KeyMarker, NextKeyMarker, Prefix,
+ * Key</code>, and <code>Delimiter</code>.</p>
+ */
+ inline void SetEncodingType(const EncodingType& value) { m_encodingType = value; }
+
+ /**
+ * <p> Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>KeyMarker, NextKeyMarker, Prefix,
+ * Key</code>, and <code>Delimiter</code>.</p>
+ */
+ inline void SetEncodingType(EncodingType&& value) { m_encodingType = std::move(value); }
+
+ /**
+ * <p> Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>KeyMarker, NextKeyMarker, Prefix,
+ * Key</code>, and <code>Delimiter</code>.</p>
+ */
+ inline ListObjectVersionsResult& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+ /**
+ * <p> Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>KeyMarker, NextKeyMarker, Prefix,
+ * Key</code>, and <code>Delimiter</code>.</p>
+ */
+ inline ListObjectVersionsResult& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+ private:
+
+ bool m_isTruncated;
+
+ Aws::String m_keyMarker;
+
+ Aws::String m_versionIdMarker;
+
+ Aws::String m_nextKeyMarker;
+
+ Aws::String m_nextVersionIdMarker;
+
+ Aws::Vector<ObjectVersion> m_versions;
+
+ Aws::Vector<DeleteMarkerEntry> m_deleteMarkers;
+
+ Aws::String m_name;
+
+ Aws::String m_prefix;
+
+ Aws::String m_delimiter;
+
+ int m_maxKeys;
+
+ Aws::Vector<CommonPrefix> m_commonPrefixes;
+
+ EncodingType m_encodingType;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsRequest.h
new file mode 100644
index 00000000000..08a2bdccd36
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsRequest.h
@@ -0,0 +1,573 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListObjectsRequest : public S3Request
+ {
+ public:
+ ListObjectsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListObjects"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket containing the objects.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline bool DelimiterHasBeenSet() const { return m_delimiterHasBeenSet; }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiterHasBeenSet = true; m_delimiter = value; }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiterHasBeenSet = true; m_delimiter = std::move(value); }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiterHasBeenSet = true; m_delimiter.assign(value); }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline ListObjectsRequest& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline ListObjectsRequest& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline ListObjectsRequest& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+
+ inline bool EncodingTypeHasBeenSet() const { return m_encodingTypeHasBeenSet; }
+
+
+ inline void SetEncodingType(const EncodingType& value) { m_encodingTypeHasBeenSet = true; m_encodingType = value; }
+
+
+ inline void SetEncodingType(EncodingType&& value) { m_encodingTypeHasBeenSet = true; m_encodingType = std::move(value); }
+
+
+ inline ListObjectsRequest& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+
+ inline ListObjectsRequest& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline const Aws::String& GetMarker() const{ return m_marker; }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline bool MarkerHasBeenSet() const { return m_markerHasBeenSet; }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline void SetMarker(const Aws::String& value) { m_markerHasBeenSet = true; m_marker = value; }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline void SetMarker(Aws::String&& value) { m_markerHasBeenSet = true; m_marker = std::move(value); }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline void SetMarker(const char* value) { m_markerHasBeenSet = true; m_marker.assign(value); }
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline ListObjectsRequest& WithMarker(const Aws::String& value) { SetMarker(value); return *this;}
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline ListObjectsRequest& WithMarker(Aws::String&& value) { SetMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the key to start with when listing objects in a bucket.</p>
+ */
+ inline ListObjectsRequest& WithMarker(const char* value) { SetMarker(value); return *this;}
+
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. </p>
+ */
+ inline int GetMaxKeys() const{ return m_maxKeys; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. </p>
+ */
+ inline bool MaxKeysHasBeenSet() const { return m_maxKeysHasBeenSet; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. </p>
+ */
+ inline void SetMaxKeys(int value) { m_maxKeysHasBeenSet = true; m_maxKeys = value; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more. </p>
+ */
+ inline ListObjectsRequest& WithMaxKeys(int value) { SetMaxKeys(value); return *this;}
+
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline ListObjectsRequest& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline ListObjectsRequest& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline ListObjectsRequest& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request. Bucket owners need not specify this parameter in their
+ * requests.</p>
+ */
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request. Bucket owners need not specify this parameter in their
+ * requests.</p>
+ */
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request. Bucket owners need not specify this parameter in their
+ * requests.</p>
+ */
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request. Bucket owners need not specify this parameter in their
+ * requests.</p>
+ */
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request. Bucket owners need not specify this parameter in their
+ * requests.</p>
+ */
+ inline ListObjectsRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request. Bucket owners need not specify this parameter in their
+ * requests.</p>
+ */
+ inline ListObjectsRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListObjectsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListObjectsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListObjectsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListObjectsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListObjectsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListObjectsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListObjectsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListObjectsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListObjectsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_delimiter;
+ bool m_delimiterHasBeenSet;
+
+ EncodingType m_encodingType;
+ bool m_encodingTypeHasBeenSet;
+
+ Aws::String m_marker;
+ bool m_markerHasBeenSet;
+
+ int m_maxKeys;
+ bool m_maxKeysHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsResult.h
new file mode 100644
index 00000000000..69f60d384b9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsResult.h
@@ -0,0 +1,509 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/s3/model/Object.h>
+#include <aws/s3/model/CommonPrefix.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListObjectsResult
+ {
+ public:
+ ListObjectsResult();
+ ListObjectsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListObjectsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>A flag that indicates whether Amazon S3 returned all of the results that
+ * satisfied the search criteria.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>A flag that indicates whether Amazon S3 returned all of the results that
+ * satisfied the search criteria.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>A flag that indicates whether Amazon S3 returned all of the results that
+ * satisfied the search criteria.</p>
+ */
+ inline ListObjectsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>Indicates where in the bucket listing begins. Marker is included in the
+ * response if it was sent with the request.</p>
+ */
+ inline const Aws::String& GetMarker() const{ return m_marker; }
+
+ /**
+ * <p>Indicates where in the bucket listing begins. Marker is included in the
+ * response if it was sent with the request.</p>
+ */
+ inline void SetMarker(const Aws::String& value) { m_marker = value; }
+
+ /**
+ * <p>Indicates where in the bucket listing begins. Marker is included in the
+ * response if it was sent with the request.</p>
+ */
+ inline void SetMarker(Aws::String&& value) { m_marker = std::move(value); }
+
+ /**
+ * <p>Indicates where in the bucket listing begins. Marker is included in the
+ * response if it was sent with the request.</p>
+ */
+ inline void SetMarker(const char* value) { m_marker.assign(value); }
+
+ /**
+ * <p>Indicates where in the bucket listing begins. Marker is included in the
+ * response if it was sent with the request.</p>
+ */
+ inline ListObjectsResult& WithMarker(const Aws::String& value) { SetMarker(value); return *this;}
+
+ /**
+ * <p>Indicates where in the bucket listing begins. Marker is included in the
+ * response if it was sent with the request.</p>
+ */
+ inline ListObjectsResult& WithMarker(Aws::String&& value) { SetMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>Indicates where in the bucket listing begins. Marker is included in the
+ * response if it was sent with the request.</p>
+ */
+ inline ListObjectsResult& WithMarker(const char* value) { SetMarker(value); return *this;}
+
+
+ /**
+ * <p>When response is truncated (the IsTruncated element value in the response is
+ * true), you can use the key name in this field as marker in the subsequent
+ * request to get next set of objects. Amazon S3 lists objects in alphabetical
+ * order Note: This element is returned only if you have delimiter request
+ * parameter specified. If response does not include the NextMarker and it is
+ * truncated, you can use the value of the last Key in the response as the marker
+ * in the subsequent request to get the next set of object keys.</p>
+ */
+ inline const Aws::String& GetNextMarker() const{ return m_nextMarker; }
+
+ /**
+ * <p>When response is truncated (the IsTruncated element value in the response is
+ * true), you can use the key name in this field as marker in the subsequent
+ * request to get next set of objects. Amazon S3 lists objects in alphabetical
+ * order Note: This element is returned only if you have delimiter request
+ * parameter specified. If response does not include the NextMarker and it is
+ * truncated, you can use the value of the last Key in the response as the marker
+ * in the subsequent request to get the next set of object keys.</p>
+ */
+ inline void SetNextMarker(const Aws::String& value) { m_nextMarker = value; }
+
+ /**
+ * <p>When response is truncated (the IsTruncated element value in the response is
+ * true), you can use the key name in this field as marker in the subsequent
+ * request to get next set of objects. Amazon S3 lists objects in alphabetical
+ * order Note: This element is returned only if you have delimiter request
+ * parameter specified. If response does not include the NextMarker and it is
+ * truncated, you can use the value of the last Key in the response as the marker
+ * in the subsequent request to get the next set of object keys.</p>
+ */
+ inline void SetNextMarker(Aws::String&& value) { m_nextMarker = std::move(value); }
+
+ /**
+ * <p>When response is truncated (the IsTruncated element value in the response is
+ * true), you can use the key name in this field as marker in the subsequent
+ * request to get next set of objects. Amazon S3 lists objects in alphabetical
+ * order Note: This element is returned only if you have delimiter request
+ * parameter specified. If response does not include the NextMarker and it is
+ * truncated, you can use the value of the last Key in the response as the marker
+ * in the subsequent request to get the next set of object keys.</p>
+ */
+ inline void SetNextMarker(const char* value) { m_nextMarker.assign(value); }
+
+ /**
+ * <p>When response is truncated (the IsTruncated element value in the response is
+ * true), you can use the key name in this field as marker in the subsequent
+ * request to get next set of objects. Amazon S3 lists objects in alphabetical
+ * order Note: This element is returned only if you have delimiter request
+ * parameter specified. If response does not include the NextMarker and it is
+ * truncated, you can use the value of the last Key in the response as the marker
+ * in the subsequent request to get the next set of object keys.</p>
+ */
+ inline ListObjectsResult& WithNextMarker(const Aws::String& value) { SetNextMarker(value); return *this;}
+
+ /**
+ * <p>When response is truncated (the IsTruncated element value in the response is
+ * true), you can use the key name in this field as marker in the subsequent
+ * request to get next set of objects. Amazon S3 lists objects in alphabetical
+ * order Note: This element is returned only if you have delimiter request
+ * parameter specified. If response does not include the NextMarker and it is
+ * truncated, you can use the value of the last Key in the response as the marker
+ * in the subsequent request to get the next set of object keys.</p>
+ */
+ inline ListObjectsResult& WithNextMarker(Aws::String&& value) { SetNextMarker(std::move(value)); return *this;}
+
+ /**
+ * <p>When response is truncated (the IsTruncated element value in the response is
+ * true), you can use the key name in this field as marker in the subsequent
+ * request to get next set of objects. Amazon S3 lists objects in alphabetical
+ * order Note: This element is returned only if you have delimiter request
+ * parameter specified. If response does not include the NextMarker and it is
+ * truncated, you can use the value of the last Key in the response as the marker
+ * in the subsequent request to get the next set of object keys.</p>
+ */
+ inline ListObjectsResult& WithNextMarker(const char* value) { SetNextMarker(value); return *this;}
+
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline const Aws::Vector<Object>& GetContents() const{ return m_contents; }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline void SetContents(const Aws::Vector<Object>& value) { m_contents = value; }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline void SetContents(Aws::Vector<Object>&& value) { m_contents = std::move(value); }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsResult& WithContents(const Aws::Vector<Object>& value) { SetContents(value); return *this;}
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsResult& WithContents(Aws::Vector<Object>&& value) { SetContents(std::move(value)); return *this;}
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsResult& AddContents(const Object& value) { m_contents.push_back(value); return *this; }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsResult& AddContents(Object&& value) { m_contents.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline const Aws::String& GetName() const{ return m_name; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetName(const Aws::String& value) { m_name = value; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetName(Aws::String&& value) { m_name = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetName(const char* value) { m_name.assign(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline ListObjectsResult& WithName(const Aws::String& value) { SetName(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline ListObjectsResult& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline ListObjectsResult& WithName(const char* value) { SetName(value); return *this;}
+
+
+ /**
+ * <p>Keys that begin with the indicated prefix.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Keys that begin with the indicated prefix.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefix = value; }
+
+ /**
+ * <p>Keys that begin with the indicated prefix.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefix = std::move(value); }
+
+ /**
+ * <p>Keys that begin with the indicated prefix.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefix.assign(value); }
+
+ /**
+ * <p>Keys that begin with the indicated prefix.</p>
+ */
+ inline ListObjectsResult& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Keys that begin with the indicated prefix.</p>
+ */
+ inline ListObjectsResult& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Keys that begin with the indicated prefix.</p>
+ */
+ inline ListObjectsResult& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * <code>CommonPrefixes</code> collection. These rolled-up keys are not returned
+ * elsewhere in the response. Each rolled-up result counts as only one return
+ * against the <code>MaxKeys</code> value.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * <code>CommonPrefixes</code> collection. These rolled-up keys are not returned
+ * elsewhere in the response. Each rolled-up result counts as only one return
+ * against the <code>MaxKeys</code> value.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiter = value; }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * <code>CommonPrefixes</code> collection. These rolled-up keys are not returned
+ * elsewhere in the response. Each rolled-up result counts as only one return
+ * against the <code>MaxKeys</code> value.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiter = std::move(value); }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * <code>CommonPrefixes</code> collection. These rolled-up keys are not returned
+ * elsewhere in the response. Each rolled-up result counts as only one return
+ * against the <code>MaxKeys</code> value.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiter.assign(value); }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * <code>CommonPrefixes</code> collection. These rolled-up keys are not returned
+ * elsewhere in the response. Each rolled-up result counts as only one return
+ * against the <code>MaxKeys</code> value.</p>
+ */
+ inline ListObjectsResult& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * <code>CommonPrefixes</code> collection. These rolled-up keys are not returned
+ * elsewhere in the response. Each rolled-up result counts as only one return
+ * against the <code>MaxKeys</code> value.</p>
+ */
+ inline ListObjectsResult& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * <code>CommonPrefixes</code> collection. These rolled-up keys are not returned
+ * elsewhere in the response. Each rolled-up result counts as only one return
+ * against the <code>MaxKeys</code> value.</p>
+ */
+ inline ListObjectsResult& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+ /**
+ * <p>The maximum number of keys returned in the response body.</p>
+ */
+ inline int GetMaxKeys() const{ return m_maxKeys; }
+
+ /**
+ * <p>The maximum number of keys returned in the response body.</p>
+ */
+ inline void SetMaxKeys(int value) { m_maxKeys = value; }
+
+ /**
+ * <p>The maximum number of keys returned in the response body.</p>
+ */
+ inline ListObjectsResult& WithMaxKeys(int value) { SetMaxKeys(value); return *this;}
+
+
+ /**
+ * <p>All of the keys rolled up in a common prefix count as a single return when
+ * calculating the number of returns. </p> <p>A response can contain CommonPrefixes
+ * only if you specify a delimiter.</p> <p>CommonPrefixes contains all (if there
+ * are any) keys between Prefix and the next occurrence of the string specified by
+ * the delimiter.</p> <p> CommonPrefixes lists keys that act like subdirectories in
+ * the directory specified by Prefix.</p> <p>For example, if the prefix is notes/
+ * and the delimiter is a slash (/) as in notes/summer/july, the common prefix is
+ * notes/summer/. All of the keys that roll up into a common prefix count as a
+ * single return when calculating the number of returns.</p>
+ */
+ inline const Aws::Vector<CommonPrefix>& GetCommonPrefixes() const{ return m_commonPrefixes; }
+
+ /**
+ * <p>All of the keys rolled up in a common prefix count as a single return when
+ * calculating the number of returns. </p> <p>A response can contain CommonPrefixes
+ * only if you specify a delimiter.</p> <p>CommonPrefixes contains all (if there
+ * are any) keys between Prefix and the next occurrence of the string specified by
+ * the delimiter.</p> <p> CommonPrefixes lists keys that act like subdirectories in
+ * the directory specified by Prefix.</p> <p>For example, if the prefix is notes/
+ * and the delimiter is a slash (/) as in notes/summer/july, the common prefix is
+ * notes/summer/. All of the keys that roll up into a common prefix count as a
+ * single return when calculating the number of returns.</p>
+ */
+ inline void SetCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { m_commonPrefixes = value; }
+
+ /**
+ * <p>All of the keys rolled up in a common prefix count as a single return when
+ * calculating the number of returns. </p> <p>A response can contain CommonPrefixes
+ * only if you specify a delimiter.</p> <p>CommonPrefixes contains all (if there
+ * are any) keys between Prefix and the next occurrence of the string specified by
+ * the delimiter.</p> <p> CommonPrefixes lists keys that act like subdirectories in
+ * the directory specified by Prefix.</p> <p>For example, if the prefix is notes/
+ * and the delimiter is a slash (/) as in notes/summer/july, the common prefix is
+ * notes/summer/. All of the keys that roll up into a common prefix count as a
+ * single return when calculating the number of returns.</p>
+ */
+ inline void SetCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { m_commonPrefixes = std::move(value); }
+
+ /**
+ * <p>All of the keys rolled up in a common prefix count as a single return when
+ * calculating the number of returns. </p> <p>A response can contain CommonPrefixes
+ * only if you specify a delimiter.</p> <p>CommonPrefixes contains all (if there
+ * are any) keys between Prefix and the next occurrence of the string specified by
+ * the delimiter.</p> <p> CommonPrefixes lists keys that act like subdirectories in
+ * the directory specified by Prefix.</p> <p>For example, if the prefix is notes/
+ * and the delimiter is a slash (/) as in notes/summer/july, the common prefix is
+ * notes/summer/. All of the keys that roll up into a common prefix count as a
+ * single return when calculating the number of returns.</p>
+ */
+ inline ListObjectsResult& WithCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { SetCommonPrefixes(value); return *this;}
+
+ /**
+ * <p>All of the keys rolled up in a common prefix count as a single return when
+ * calculating the number of returns. </p> <p>A response can contain CommonPrefixes
+ * only if you specify a delimiter.</p> <p>CommonPrefixes contains all (if there
+ * are any) keys between Prefix and the next occurrence of the string specified by
+ * the delimiter.</p> <p> CommonPrefixes lists keys that act like subdirectories in
+ * the directory specified by Prefix.</p> <p>For example, if the prefix is notes/
+ * and the delimiter is a slash (/) as in notes/summer/july, the common prefix is
+ * notes/summer/. All of the keys that roll up into a common prefix count as a
+ * single return when calculating the number of returns.</p>
+ */
+ inline ListObjectsResult& WithCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { SetCommonPrefixes(std::move(value)); return *this;}
+
+ /**
+ * <p>All of the keys rolled up in a common prefix count as a single return when
+ * calculating the number of returns. </p> <p>A response can contain CommonPrefixes
+ * only if you specify a delimiter.</p> <p>CommonPrefixes contains all (if there
+ * are any) keys between Prefix and the next occurrence of the string specified by
+ * the delimiter.</p> <p> CommonPrefixes lists keys that act like subdirectories in
+ * the directory specified by Prefix.</p> <p>For example, if the prefix is notes/
+ * and the delimiter is a slash (/) as in notes/summer/july, the common prefix is
+ * notes/summer/. All of the keys that roll up into a common prefix count as a
+ * single return when calculating the number of returns.</p>
+ */
+ inline ListObjectsResult& AddCommonPrefixes(const CommonPrefix& value) { m_commonPrefixes.push_back(value); return *this; }
+
+ /**
+ * <p>All of the keys rolled up in a common prefix count as a single return when
+ * calculating the number of returns. </p> <p>A response can contain CommonPrefixes
+ * only if you specify a delimiter.</p> <p>CommonPrefixes contains all (if there
+ * are any) keys between Prefix and the next occurrence of the string specified by
+ * the delimiter.</p> <p> CommonPrefixes lists keys that act like subdirectories in
+ * the directory specified by Prefix.</p> <p>For example, if the prefix is notes/
+ * and the delimiter is a slash (/) as in notes/summer/july, the common prefix is
+ * notes/summer/. All of the keys that roll up into a common prefix count as a
+ * single return when calculating the number of returns.</p>
+ */
+ inline ListObjectsResult& AddCommonPrefixes(CommonPrefix&& value) { m_commonPrefixes.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline void SetEncodingType(const EncodingType& value) { m_encodingType = value; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline void SetEncodingType(EncodingType&& value) { m_encodingType = std::move(value); }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline ListObjectsResult& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline ListObjectsResult& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+ private:
+
+ bool m_isTruncated;
+
+ Aws::String m_marker;
+
+ Aws::String m_nextMarker;
+
+ Aws::Vector<Object> m_contents;
+
+ Aws::String m_name;
+
+ Aws::String m_prefix;
+
+ Aws::String m_delimiter;
+
+ int m_maxKeys;
+
+ Aws::Vector<CommonPrefix> m_commonPrefixes;
+
+ EncodingType m_encodingType;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Request.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Request.h
new file mode 100644
index 00000000000..c5e875a6741
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Request.h
@@ -0,0 +1,693 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListObjectsV2Request : public S3Request
+ {
+ public:
+ ListObjectsV2Request();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListObjectsV2"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsV2Request& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsV2Request& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Bucket name to list. </p> <p>When using this API with an access point, you
+ * must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsV2Request& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline bool DelimiterHasBeenSet() const { return m_delimiterHasBeenSet; }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiterHasBeenSet = true; m_delimiter = value; }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiterHasBeenSet = true; m_delimiter = std::move(value); }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiterHasBeenSet = true; m_delimiter.assign(value); }
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline ListObjectsV2Request& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline ListObjectsV2Request& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>A delimiter is a character you use to group keys.</p>
+ */
+ inline ListObjectsV2Request& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline bool EncodingTypeHasBeenSet() const { return m_encodingTypeHasBeenSet; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline void SetEncodingType(const EncodingType& value) { m_encodingTypeHasBeenSet = true; m_encodingType = value; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline void SetEncodingType(EncodingType&& value) { m_encodingTypeHasBeenSet = true; m_encodingType = std::move(value); }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline ListObjectsV2Request& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object keys in the response.</p>
+ */
+ inline ListObjectsV2Request& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more.</p>
+ */
+ inline int GetMaxKeys() const{ return m_maxKeys; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more.</p>
+ */
+ inline bool MaxKeysHasBeenSet() const { return m_maxKeysHasBeenSet; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more.</p>
+ */
+ inline void SetMaxKeys(int value) { m_maxKeysHasBeenSet = true; m_maxKeys = value; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more.</p>
+ */
+ inline ListObjectsV2Request& WithMaxKeys(int value) { SetMaxKeys(value); return *this;}
+
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline ListObjectsV2Request& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline ListObjectsV2Request& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Limits the response to keys that begin with the specified prefix.</p>
+ */
+ inline ListObjectsV2Request& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline bool ContinuationTokenHasBeenSet() const { return m_continuationTokenHasBeenSet; }
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = value; }
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationTokenHasBeenSet = true; m_continuationToken = std::move(value); }
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationTokenHasBeenSet = true; m_continuationToken.assign(value); }
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline ListObjectsV2Request& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline ListObjectsV2Request& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p>ContinuationToken indicates Amazon S3 that the list is being continued on
+ * this bucket with a token. ContinuationToken is obfuscated and is not a real
+ * key.</p>
+ */
+ inline ListObjectsV2Request& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>The owner field is not present in listV2 by default, if you want to return
+ * owner field with each key in the result then set the fetch owner field to
+ * true.</p>
+ */
+ inline bool GetFetchOwner() const{ return m_fetchOwner; }
+
+ /**
+ * <p>The owner field is not present in listV2 by default, if you want to return
+ * owner field with each key in the result then set the fetch owner field to
+ * true.</p>
+ */
+ inline bool FetchOwnerHasBeenSet() const { return m_fetchOwnerHasBeenSet; }
+
+ /**
+ * <p>The owner field is not present in listV2 by default, if you want to return
+ * owner field with each key in the result then set the fetch owner field to
+ * true.</p>
+ */
+ inline void SetFetchOwner(bool value) { m_fetchOwnerHasBeenSet = true; m_fetchOwner = value; }
+
+ /**
+ * <p>The owner field is not present in listV2 by default, if you want to return
+ * owner field with each key in the result then set the fetch owner field to
+ * true.</p>
+ */
+ inline ListObjectsV2Request& WithFetchOwner(bool value) { SetFetchOwner(value); return *this;}
+
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline const Aws::String& GetStartAfter() const{ return m_startAfter; }
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline bool StartAfterHasBeenSet() const { return m_startAfterHasBeenSet; }
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline void SetStartAfter(const Aws::String& value) { m_startAfterHasBeenSet = true; m_startAfter = value; }
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline void SetStartAfter(Aws::String&& value) { m_startAfterHasBeenSet = true; m_startAfter = std::move(value); }
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline void SetStartAfter(const char* value) { m_startAfterHasBeenSet = true; m_startAfter.assign(value); }
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline ListObjectsV2Request& WithStartAfter(const Aws::String& value) { SetStartAfter(value); return *this;}
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline ListObjectsV2Request& WithStartAfter(Aws::String&& value) { SetStartAfter(std::move(value)); return *this;}
+
+ /**
+ * <p>StartAfter is where you want Amazon S3 to start listing from. Amazon S3
+ * starts listing after this specified key. StartAfter can be any key in the
+ * bucket.</p>
+ */
+ inline ListObjectsV2Request& WithStartAfter(const char* value) { SetStartAfter(value); return *this;}
+
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request in V2 style. Bucket owners need not specify this parameter in
+ * their requests.</p>
+ */
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request in V2 style. Bucket owners need not specify this parameter in
+ * their requests.</p>
+ */
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request in V2 style. Bucket owners need not specify this parameter in
+ * their requests.</p>
+ */
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request in V2 style. Bucket owners need not specify this parameter in
+ * their requests.</p>
+ */
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request in V2 style. Bucket owners need not specify this parameter in
+ * their requests.</p>
+ */
+ inline ListObjectsV2Request& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+ /**
+ * <p>Confirms that the requester knows that she or he will be charged for the list
+ * objects request in V2 style. Bucket owners need not specify this parameter in
+ * their requests.</p>
+ */
+ inline ListObjectsV2Request& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectsV2Request& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectsV2Request& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListObjectsV2Request& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListObjectsV2Request& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListObjectsV2Request& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListObjectsV2Request& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListObjectsV2Request& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListObjectsV2Request& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListObjectsV2Request& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListObjectsV2Request& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListObjectsV2Request& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListObjectsV2Request& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_delimiter;
+ bool m_delimiterHasBeenSet;
+
+ EncodingType m_encodingType;
+ bool m_encodingTypeHasBeenSet;
+
+ int m_maxKeys;
+ bool m_maxKeysHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::String m_continuationToken;
+ bool m_continuationTokenHasBeenSet;
+
+ bool m_fetchOwner;
+ bool m_fetchOwnerHasBeenSet;
+
+ Aws::String m_startAfter;
+ bool m_startAfterHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Result.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Result.h
new file mode 100644
index 00000000000..44c2e059a4d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListObjectsV2Result.h
@@ -0,0 +1,726 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/EncodingType.h>
+#include <aws/s3/model/Object.h>
+#include <aws/s3/model/CommonPrefix.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListObjectsV2Result
+ {
+ public:
+ ListObjectsV2Result();
+ ListObjectsV2Result(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListObjectsV2Result& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>Set to false if all of the results were returned. Set to true if more keys
+ * are available to return. If the number of results exceeds that specified by
+ * MaxKeys, all of the results might not be returned.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p>Set to false if all of the results were returned. Set to true if more keys
+ * are available to return. If the number of results exceeds that specified by
+ * MaxKeys, all of the results might not be returned.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p>Set to false if all of the results were returned. Set to true if more keys
+ * are available to return. If the number of results exceeds that specified by
+ * MaxKeys, all of the results might not be returned.</p>
+ */
+ inline ListObjectsV2Result& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline const Aws::Vector<Object>& GetContents() const{ return m_contents; }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline void SetContents(const Aws::Vector<Object>& value) { m_contents = value; }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline void SetContents(Aws::Vector<Object>&& value) { m_contents = std::move(value); }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsV2Result& WithContents(const Aws::Vector<Object>& value) { SetContents(value); return *this;}
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsV2Result& WithContents(Aws::Vector<Object>&& value) { SetContents(std::move(value)); return *this;}
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsV2Result& AddContents(const Object& value) { m_contents.push_back(value); return *this; }
+
+ /**
+ * <p>Metadata about each object returned.</p>
+ */
+ inline ListObjectsV2Result& AddContents(Object&& value) { m_contents.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetName() const{ return m_name; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetName(const Aws::String& value) { m_name = value; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetName(Aws::String&& value) { m_name = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetName(const char* value) { m_name.assign(value); }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsV2Result& WithName(const Aws::String& value) { SetName(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsV2Result& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListObjectsV2Result& WithName(const char* value) { SetName(value); return *this;}
+
+
+ /**
+ * <p> Keys that begin with the indicated prefix.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p> Keys that begin with the indicated prefix.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefix = value; }
+
+ /**
+ * <p> Keys that begin with the indicated prefix.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefix = std::move(value); }
+
+ /**
+ * <p> Keys that begin with the indicated prefix.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefix.assign(value); }
+
+ /**
+ * <p> Keys that begin with the indicated prefix.</p>
+ */
+ inline ListObjectsV2Result& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p> Keys that begin with the indicated prefix.</p>
+ */
+ inline ListObjectsV2Result& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p> Keys that begin with the indicated prefix.</p>
+ */
+ inline ListObjectsV2Result& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * CommonPrefixes collection. These rolled-up keys are not returned elsewhere in
+ * the response. Each rolled-up result counts as only one return against the
+ * <code>MaxKeys</code> value.</p>
+ */
+ inline const Aws::String& GetDelimiter() const{ return m_delimiter; }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * CommonPrefixes collection. These rolled-up keys are not returned elsewhere in
+ * the response. Each rolled-up result counts as only one return against the
+ * <code>MaxKeys</code> value.</p>
+ */
+ inline void SetDelimiter(const Aws::String& value) { m_delimiter = value; }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * CommonPrefixes collection. These rolled-up keys are not returned elsewhere in
+ * the response. Each rolled-up result counts as only one return against the
+ * <code>MaxKeys</code> value.</p>
+ */
+ inline void SetDelimiter(Aws::String&& value) { m_delimiter = std::move(value); }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * CommonPrefixes collection. These rolled-up keys are not returned elsewhere in
+ * the response. Each rolled-up result counts as only one return against the
+ * <code>MaxKeys</code> value.</p>
+ */
+ inline void SetDelimiter(const char* value) { m_delimiter.assign(value); }
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * CommonPrefixes collection. These rolled-up keys are not returned elsewhere in
+ * the response. Each rolled-up result counts as only one return against the
+ * <code>MaxKeys</code> value.</p>
+ */
+ inline ListObjectsV2Result& WithDelimiter(const Aws::String& value) { SetDelimiter(value); return *this;}
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * CommonPrefixes collection. These rolled-up keys are not returned elsewhere in
+ * the response. Each rolled-up result counts as only one return against the
+ * <code>MaxKeys</code> value.</p>
+ */
+ inline ListObjectsV2Result& WithDelimiter(Aws::String&& value) { SetDelimiter(std::move(value)); return *this;}
+
+ /**
+ * <p>Causes keys that contain the same string between the prefix and the first
+ * occurrence of the delimiter to be rolled up into a single result element in the
+ * CommonPrefixes collection. These rolled-up keys are not returned elsewhere in
+ * the response. Each rolled-up result counts as only one return against the
+ * <code>MaxKeys</code> value.</p>
+ */
+ inline ListObjectsV2Result& WithDelimiter(const char* value) { SetDelimiter(value); return *this;}
+
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more.</p>
+ */
+ inline int GetMaxKeys() const{ return m_maxKeys; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more.</p>
+ */
+ inline void SetMaxKeys(int value) { m_maxKeys = value; }
+
+ /**
+ * <p>Sets the maximum number of keys returned in the response. By default the API
+ * returns up to 1,000 key names. The response might contain fewer keys but will
+ * never contain more.</p>
+ */
+ inline ListObjectsV2Result& WithMaxKeys(int value) { SetMaxKeys(value); return *this;}
+
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p> <p>A response can contain
+ * <code>CommonPrefixes</code> only if you specify a delimiter.</p> <p>
+ * <code>CommonPrefixes</code> contains all (if there are any) keys between
+ * <code>Prefix</code> and the next occurrence of the string specified by a
+ * delimiter.</p> <p> <code>CommonPrefixes</code> lists keys that act like
+ * subdirectories in the directory specified by <code>Prefix</code>.</p> <p>For
+ * example, if the prefix is <code>notes/</code> and the delimiter is a slash
+ * (<code>/</code>) as in <code>notes/summer/july</code>, the common prefix is
+ * <code>notes/summer/</code>. All of the keys that roll up into a common prefix
+ * count as a single return when calculating the number of returns. </p>
+ */
+ inline const Aws::Vector<CommonPrefix>& GetCommonPrefixes() const{ return m_commonPrefixes; }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p> <p>A response can contain
+ * <code>CommonPrefixes</code> only if you specify a delimiter.</p> <p>
+ * <code>CommonPrefixes</code> contains all (if there are any) keys between
+ * <code>Prefix</code> and the next occurrence of the string specified by a
+ * delimiter.</p> <p> <code>CommonPrefixes</code> lists keys that act like
+ * subdirectories in the directory specified by <code>Prefix</code>.</p> <p>For
+ * example, if the prefix is <code>notes/</code> and the delimiter is a slash
+ * (<code>/</code>) as in <code>notes/summer/july</code>, the common prefix is
+ * <code>notes/summer/</code>. All of the keys that roll up into a common prefix
+ * count as a single return when calculating the number of returns. </p>
+ */
+ inline void SetCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { m_commonPrefixes = value; }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p> <p>A response can contain
+ * <code>CommonPrefixes</code> only if you specify a delimiter.</p> <p>
+ * <code>CommonPrefixes</code> contains all (if there are any) keys between
+ * <code>Prefix</code> and the next occurrence of the string specified by a
+ * delimiter.</p> <p> <code>CommonPrefixes</code> lists keys that act like
+ * subdirectories in the directory specified by <code>Prefix</code>.</p> <p>For
+ * example, if the prefix is <code>notes/</code> and the delimiter is a slash
+ * (<code>/</code>) as in <code>notes/summer/july</code>, the common prefix is
+ * <code>notes/summer/</code>. All of the keys that roll up into a common prefix
+ * count as a single return when calculating the number of returns. </p>
+ */
+ inline void SetCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { m_commonPrefixes = std::move(value); }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p> <p>A response can contain
+ * <code>CommonPrefixes</code> only if you specify a delimiter.</p> <p>
+ * <code>CommonPrefixes</code> contains all (if there are any) keys between
+ * <code>Prefix</code> and the next occurrence of the string specified by a
+ * delimiter.</p> <p> <code>CommonPrefixes</code> lists keys that act like
+ * subdirectories in the directory specified by <code>Prefix</code>.</p> <p>For
+ * example, if the prefix is <code>notes/</code> and the delimiter is a slash
+ * (<code>/</code>) as in <code>notes/summer/july</code>, the common prefix is
+ * <code>notes/summer/</code>. All of the keys that roll up into a common prefix
+ * count as a single return when calculating the number of returns. </p>
+ */
+ inline ListObjectsV2Result& WithCommonPrefixes(const Aws::Vector<CommonPrefix>& value) { SetCommonPrefixes(value); return *this;}
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p> <p>A response can contain
+ * <code>CommonPrefixes</code> only if you specify a delimiter.</p> <p>
+ * <code>CommonPrefixes</code> contains all (if there are any) keys between
+ * <code>Prefix</code> and the next occurrence of the string specified by a
+ * delimiter.</p> <p> <code>CommonPrefixes</code> lists keys that act like
+ * subdirectories in the directory specified by <code>Prefix</code>.</p> <p>For
+ * example, if the prefix is <code>notes/</code> and the delimiter is a slash
+ * (<code>/</code>) as in <code>notes/summer/july</code>, the common prefix is
+ * <code>notes/summer/</code>. All of the keys that roll up into a common prefix
+ * count as a single return when calculating the number of returns. </p>
+ */
+ inline ListObjectsV2Result& WithCommonPrefixes(Aws::Vector<CommonPrefix>&& value) { SetCommonPrefixes(std::move(value)); return *this;}
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p> <p>A response can contain
+ * <code>CommonPrefixes</code> only if you specify a delimiter.</p> <p>
+ * <code>CommonPrefixes</code> contains all (if there are any) keys between
+ * <code>Prefix</code> and the next occurrence of the string specified by a
+ * delimiter.</p> <p> <code>CommonPrefixes</code> lists keys that act like
+ * subdirectories in the directory specified by <code>Prefix</code>.</p> <p>For
+ * example, if the prefix is <code>notes/</code> and the delimiter is a slash
+ * (<code>/</code>) as in <code>notes/summer/july</code>, the common prefix is
+ * <code>notes/summer/</code>. All of the keys that roll up into a common prefix
+ * count as a single return when calculating the number of returns. </p>
+ */
+ inline ListObjectsV2Result& AddCommonPrefixes(const CommonPrefix& value) { m_commonPrefixes.push_back(value); return *this; }
+
+ /**
+ * <p>All of the keys rolled up into a common prefix count as a single return when
+ * calculating the number of returns.</p> <p>A response can contain
+ * <code>CommonPrefixes</code> only if you specify a delimiter.</p> <p>
+ * <code>CommonPrefixes</code> contains all (if there are any) keys between
+ * <code>Prefix</code> and the next occurrence of the string specified by a
+ * delimiter.</p> <p> <code>CommonPrefixes</code> lists keys that act like
+ * subdirectories in the directory specified by <code>Prefix</code>.</p> <p>For
+ * example, if the prefix is <code>notes/</code> and the delimiter is a slash
+ * (<code>/</code>) as in <code>notes/summer/july</code>, the common prefix is
+ * <code>notes/summer/</code>. All of the keys that roll up into a common prefix
+ * count as a single return when calculating the number of returns. </p>
+ */
+ inline ListObjectsV2Result& AddCommonPrefixes(CommonPrefix&& value) { m_commonPrefixes.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify the encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter, Prefix, Key,</code>
+ * and <code>StartAfter</code>.</p>
+ */
+ inline const EncodingType& GetEncodingType() const{ return m_encodingType; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify the encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter, Prefix, Key,</code>
+ * and <code>StartAfter</code>.</p>
+ */
+ inline void SetEncodingType(const EncodingType& value) { m_encodingType = value; }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify the encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter, Prefix, Key,</code>
+ * and <code>StartAfter</code>.</p>
+ */
+ inline void SetEncodingType(EncodingType&& value) { m_encodingType = std::move(value); }
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify the encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter, Prefix, Key,</code>
+ * and <code>StartAfter</code>.</p>
+ */
+ inline ListObjectsV2Result& WithEncodingType(const EncodingType& value) { SetEncodingType(value); return *this;}
+
+ /**
+ * <p>Encoding type used by Amazon S3 to encode object key names in the XML
+ * response.</p> <p>If you specify the encoding-type request parameter, Amazon S3
+ * includes this element in the response, and returns encoded key name values in
+ * the following response elements:</p> <p> <code>Delimiter, Prefix, Key,</code>
+ * and <code>StartAfter</code>.</p>
+ */
+ inline ListObjectsV2Result& WithEncodingType(EncodingType&& value) { SetEncodingType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>KeyCount is the number of keys returned with this request. KeyCount will
+ * always be less than equals to MaxKeys field. Say you ask for 50 keys, your
+ * result will include less than equals 50 keys </p>
+ */
+ inline int GetKeyCount() const{ return m_keyCount; }
+
+ /**
+ * <p>KeyCount is the number of keys returned with this request. KeyCount will
+ * always be less than equals to MaxKeys field. Say you ask for 50 keys, your
+ * result will include less than equals 50 keys </p>
+ */
+ inline void SetKeyCount(int value) { m_keyCount = value; }
+
+ /**
+ * <p>KeyCount is the number of keys returned with this request. KeyCount will
+ * always be less than equals to MaxKeys field. Say you ask for 50 keys, your
+ * result will include less than equals 50 keys </p>
+ */
+ inline ListObjectsV2Result& WithKeyCount(int value) { SetKeyCount(value); return *this;}
+
+
+ /**
+ * <p> If ContinuationToken was sent with the request, it is included in the
+ * response.</p>
+ */
+ inline const Aws::String& GetContinuationToken() const{ return m_continuationToken; }
+
+ /**
+ * <p> If ContinuationToken was sent with the request, it is included in the
+ * response.</p>
+ */
+ inline void SetContinuationToken(const Aws::String& value) { m_continuationToken = value; }
+
+ /**
+ * <p> If ContinuationToken was sent with the request, it is included in the
+ * response.</p>
+ */
+ inline void SetContinuationToken(Aws::String&& value) { m_continuationToken = std::move(value); }
+
+ /**
+ * <p> If ContinuationToken was sent with the request, it is included in the
+ * response.</p>
+ */
+ inline void SetContinuationToken(const char* value) { m_continuationToken.assign(value); }
+
+ /**
+ * <p> If ContinuationToken was sent with the request, it is included in the
+ * response.</p>
+ */
+ inline ListObjectsV2Result& WithContinuationToken(const Aws::String& value) { SetContinuationToken(value); return *this;}
+
+ /**
+ * <p> If ContinuationToken was sent with the request, it is included in the
+ * response.</p>
+ */
+ inline ListObjectsV2Result& WithContinuationToken(Aws::String&& value) { SetContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p> If ContinuationToken was sent with the request, it is included in the
+ * response.</p>
+ */
+ inline ListObjectsV2Result& WithContinuationToken(const char* value) { SetContinuationToken(value); return *this;}
+
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which means there are more keys in the bucket that can be listed. The next
+ * list requests to Amazon S3 can be continued with this
+ * <code>NextContinuationToken</code>. <code>NextContinuationToken</code> is
+ * obfuscated and is not a real key</p>
+ */
+ inline const Aws::String& GetNextContinuationToken() const{ return m_nextContinuationToken; }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which means there are more keys in the bucket that can be listed. The next
+ * list requests to Amazon S3 can be continued with this
+ * <code>NextContinuationToken</code>. <code>NextContinuationToken</code> is
+ * obfuscated and is not a real key</p>
+ */
+ inline void SetNextContinuationToken(const Aws::String& value) { m_nextContinuationToken = value; }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which means there are more keys in the bucket that can be listed. The next
+ * list requests to Amazon S3 can be continued with this
+ * <code>NextContinuationToken</code>. <code>NextContinuationToken</code> is
+ * obfuscated and is not a real key</p>
+ */
+ inline void SetNextContinuationToken(Aws::String&& value) { m_nextContinuationToken = std::move(value); }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which means there are more keys in the bucket that can be listed. The next
+ * list requests to Amazon S3 can be continued with this
+ * <code>NextContinuationToken</code>. <code>NextContinuationToken</code> is
+ * obfuscated and is not a real key</p>
+ */
+ inline void SetNextContinuationToken(const char* value) { m_nextContinuationToken.assign(value); }
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which means there are more keys in the bucket that can be listed. The next
+ * list requests to Amazon S3 can be continued with this
+ * <code>NextContinuationToken</code>. <code>NextContinuationToken</code> is
+ * obfuscated and is not a real key</p>
+ */
+ inline ListObjectsV2Result& WithNextContinuationToken(const Aws::String& value) { SetNextContinuationToken(value); return *this;}
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which means there are more keys in the bucket that can be listed. The next
+ * list requests to Amazon S3 can be continued with this
+ * <code>NextContinuationToken</code>. <code>NextContinuationToken</code> is
+ * obfuscated and is not a real key</p>
+ */
+ inline ListObjectsV2Result& WithNextContinuationToken(Aws::String&& value) { SetNextContinuationToken(std::move(value)); return *this;}
+
+ /**
+ * <p> <code>NextContinuationToken</code> is sent when <code>isTruncated</code> is
+ * true, which means there are more keys in the bucket that can be listed. The next
+ * list requests to Amazon S3 can be continued with this
+ * <code>NextContinuationToken</code>. <code>NextContinuationToken</code> is
+ * obfuscated and is not a real key</p>
+ */
+ inline ListObjectsV2Result& WithNextContinuationToken(const char* value) { SetNextContinuationToken(value); return *this;}
+
+
+ /**
+ * <p>If StartAfter was sent with the request, it is included in the response.</p>
+ */
+ inline const Aws::String& GetStartAfter() const{ return m_startAfter; }
+
+ /**
+ * <p>If StartAfter was sent with the request, it is included in the response.</p>
+ */
+ inline void SetStartAfter(const Aws::String& value) { m_startAfter = value; }
+
+ /**
+ * <p>If StartAfter was sent with the request, it is included in the response.</p>
+ */
+ inline void SetStartAfter(Aws::String&& value) { m_startAfter = std::move(value); }
+
+ /**
+ * <p>If StartAfter was sent with the request, it is included in the response.</p>
+ */
+ inline void SetStartAfter(const char* value) { m_startAfter.assign(value); }
+
+ /**
+ * <p>If StartAfter was sent with the request, it is included in the response.</p>
+ */
+ inline ListObjectsV2Result& WithStartAfter(const Aws::String& value) { SetStartAfter(value); return *this;}
+
+ /**
+ * <p>If StartAfter was sent with the request, it is included in the response.</p>
+ */
+ inline ListObjectsV2Result& WithStartAfter(Aws::String&& value) { SetStartAfter(std::move(value)); return *this;}
+
+ /**
+ * <p>If StartAfter was sent with the request, it is included in the response.</p>
+ */
+ inline ListObjectsV2Result& WithStartAfter(const char* value) { SetStartAfter(value); return *this;}
+
+ private:
+
+ bool m_isTruncated;
+
+ Aws::Vector<Object> m_contents;
+
+ Aws::String m_name;
+
+ Aws::String m_prefix;
+
+ Aws::String m_delimiter;
+
+ int m_maxKeys;
+
+ Aws::Vector<CommonPrefix> m_commonPrefixes;
+
+ EncodingType m_encodingType;
+
+ int m_keyCount;
+
+ Aws::String m_continuationToken;
+
+ Aws::String m_nextContinuationToken;
+
+ Aws::String m_startAfter;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsRequest.h
new file mode 100644
index 00000000000..eca155dfe3a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsRequest.h
@@ -0,0 +1,502 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API ListPartsRequest : public S3Request
+ {
+ public:
+ ListPartsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "ListParts"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListPartsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListPartsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the parts are being uploaded. </p> <p>When
+ * using this API with an access point, you must direct requests to the access
+ * point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ListPartsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline ListPartsRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline ListPartsRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline ListPartsRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Sets the maximum number of parts to return.</p>
+ */
+ inline int GetMaxParts() const{ return m_maxParts; }
+
+ /**
+ * <p>Sets the maximum number of parts to return.</p>
+ */
+ inline bool MaxPartsHasBeenSet() const { return m_maxPartsHasBeenSet; }
+
+ /**
+ * <p>Sets the maximum number of parts to return.</p>
+ */
+ inline void SetMaxParts(int value) { m_maxPartsHasBeenSet = true; m_maxParts = value; }
+
+ /**
+ * <p>Sets the maximum number of parts to return.</p>
+ */
+ inline ListPartsRequest& WithMaxParts(int value) { SetMaxParts(value); return *this;}
+
+
+ /**
+ * <p>Specifies the part after which listing should begin. Only parts with higher
+ * part numbers will be listed.</p>
+ */
+ inline int GetPartNumberMarker() const{ return m_partNumberMarker; }
+
+ /**
+ * <p>Specifies the part after which listing should begin. Only parts with higher
+ * part numbers will be listed.</p>
+ */
+ inline bool PartNumberMarkerHasBeenSet() const { return m_partNumberMarkerHasBeenSet; }
+
+ /**
+ * <p>Specifies the part after which listing should begin. Only parts with higher
+ * part numbers will be listed.</p>
+ */
+ inline void SetPartNumberMarker(int value) { m_partNumberMarkerHasBeenSet = true; m_partNumberMarker = value; }
+
+ /**
+ * <p>Specifies the part after which listing should begin. Only parts with higher
+ * part numbers will be listed.</p>
+ */
+ inline ListPartsRequest& WithPartNumberMarker(int value) { SetPartNumberMarker(value); return *this;}
+
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline bool UploadIdHasBeenSet() const { return m_uploadIdHasBeenSet; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadIdHasBeenSet = true; m_uploadId = value; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadIdHasBeenSet = true; m_uploadId = std::move(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadIdHasBeenSet = true; m_uploadId.assign(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline ListPartsRequest& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline ListPartsRequest& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline ListPartsRequest& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline ListPartsRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline ListPartsRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListPartsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListPartsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline ListPartsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline ListPartsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline ListPartsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline ListPartsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline ListPartsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListPartsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListPartsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline ListPartsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline ListPartsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline ListPartsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ int m_maxParts;
+ bool m_maxPartsHasBeenSet;
+
+ int m_partNumberMarker;
+ bool m_partNumberMarkerHasBeenSet;
+
+ Aws::String m_uploadId;
+ bool m_uploadIdHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsResult.h
new file mode 100644
index 00000000000..9cf2e6d514d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ListPartsResult.h
@@ -0,0 +1,547 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Initiator.h>
+#include <aws/s3/model/Owner.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/s3/model/Part.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API ListPartsResult
+ {
+ public:
+ ListPartsResult();
+ ListPartsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ ListPartsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, then the response includes this header indicating
+ * when the initiated multipart upload will become eligible for abort operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>The
+ * response will also include the <code>x-amz-abort-rule-id</code> header that will
+ * provide the ID of the lifecycle configuration rule that defines this action.</p>
+ */
+ inline const Aws::Utils::DateTime& GetAbortDate() const{ return m_abortDate; }
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, then the response includes this header indicating
+ * when the initiated multipart upload will become eligible for abort operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>The
+ * response will also include the <code>x-amz-abort-rule-id</code> header that will
+ * provide the ID of the lifecycle configuration rule that defines this action.</p>
+ */
+ inline void SetAbortDate(const Aws::Utils::DateTime& value) { m_abortDate = value; }
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, then the response includes this header indicating
+ * when the initiated multipart upload will become eligible for abort operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>The
+ * response will also include the <code>x-amz-abort-rule-id</code> header that will
+ * provide the ID of the lifecycle configuration rule that defines this action.</p>
+ */
+ inline void SetAbortDate(Aws::Utils::DateTime&& value) { m_abortDate = std::move(value); }
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, then the response includes this header indicating
+ * when the initiated multipart upload will become eligible for abort operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>The
+ * response will also include the <code>x-amz-abort-rule-id</code> header that will
+ * provide the ID of the lifecycle configuration rule that defines this action.</p>
+ */
+ inline ListPartsResult& WithAbortDate(const Aws::Utils::DateTime& value) { SetAbortDate(value); return *this;}
+
+ /**
+ * <p>If the bucket has a lifecycle rule configured with an action to abort
+ * incomplete multipart uploads and the prefix in the lifecycle rule matches the
+ * object name in the request, then the response includes this header indicating
+ * when the initiated multipart upload will become eligible for abort operation.
+ * For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config">Aborting
+ * Incomplete Multipart Uploads Using a Bucket Lifecycle Policy</a>.</p> <p>The
+ * response will also include the <code>x-amz-abort-rule-id</code> header that will
+ * provide the ID of the lifecycle configuration rule that defines this action.</p>
+ */
+ inline ListPartsResult& WithAbortDate(Aws::Utils::DateTime&& value) { SetAbortDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies applicable lifecycle configuration rule that defines the action to
+ * abort incomplete multipart uploads.</p>
+ */
+ inline const Aws::String& GetAbortRuleId() const{ return m_abortRuleId; }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies applicable lifecycle configuration rule that defines the action to
+ * abort incomplete multipart uploads.</p>
+ */
+ inline void SetAbortRuleId(const Aws::String& value) { m_abortRuleId = value; }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies applicable lifecycle configuration rule that defines the action to
+ * abort incomplete multipart uploads.</p>
+ */
+ inline void SetAbortRuleId(Aws::String&& value) { m_abortRuleId = std::move(value); }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies applicable lifecycle configuration rule that defines the action to
+ * abort incomplete multipart uploads.</p>
+ */
+ inline void SetAbortRuleId(const char* value) { m_abortRuleId.assign(value); }
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies applicable lifecycle configuration rule that defines the action to
+ * abort incomplete multipart uploads.</p>
+ */
+ inline ListPartsResult& WithAbortRuleId(const Aws::String& value) { SetAbortRuleId(value); return *this;}
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies applicable lifecycle configuration rule that defines the action to
+ * abort incomplete multipart uploads.</p>
+ */
+ inline ListPartsResult& WithAbortRuleId(Aws::String&& value) { SetAbortRuleId(std::move(value)); return *this;}
+
+ /**
+ * <p>This header is returned along with the <code>x-amz-abort-date</code> header.
+ * It identifies applicable lifecycle configuration rule that defines the action to
+ * abort incomplete multipart uploads.</p>
+ */
+ inline ListPartsResult& WithAbortRuleId(const char* value) { SetAbortRuleId(value); return *this;}
+
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline ListPartsResult& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline ListPartsResult& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ */
+ inline ListPartsResult& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_key = value; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline ListPartsResult& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline ListPartsResult& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline ListPartsResult& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadId = value; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadId = std::move(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadId.assign(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline ListPartsResult& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline ListPartsResult& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose parts are being listed.</p>
+ */
+ inline ListPartsResult& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+ /**
+ * <p>When a list is truncated, this element specifies the last part in the list,
+ * as well as the value to use for the part-number-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline int GetPartNumberMarker() const{ return m_partNumberMarker; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the last part in the list,
+ * as well as the value to use for the part-number-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline void SetPartNumberMarker(int value) { m_partNumberMarker = value; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the last part in the list,
+ * as well as the value to use for the part-number-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline ListPartsResult& WithPartNumberMarker(int value) { SetPartNumberMarker(value); return *this;}
+
+
+ /**
+ * <p>When a list is truncated, this element specifies the last part in the list,
+ * as well as the value to use for the part-number-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline int GetNextPartNumberMarker() const{ return m_nextPartNumberMarker; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the last part in the list,
+ * as well as the value to use for the part-number-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline void SetNextPartNumberMarker(int value) { m_nextPartNumberMarker = value; }
+
+ /**
+ * <p>When a list is truncated, this element specifies the last part in the list,
+ * as well as the value to use for the part-number-marker request parameter in a
+ * subsequent request.</p>
+ */
+ inline ListPartsResult& WithNextPartNumberMarker(int value) { SetNextPartNumberMarker(value); return *this;}
+
+
+ /**
+ * <p>Maximum number of parts that were allowed in the response.</p>
+ */
+ inline int GetMaxParts() const{ return m_maxParts; }
+
+ /**
+ * <p>Maximum number of parts that were allowed in the response.</p>
+ */
+ inline void SetMaxParts(int value) { m_maxParts = value; }
+
+ /**
+ * <p>Maximum number of parts that were allowed in the response.</p>
+ */
+ inline ListPartsResult& WithMaxParts(int value) { SetMaxParts(value); return *this;}
+
+
+ /**
+ * <p> Indicates whether the returned list of parts is truncated. A true value
+ * indicates that the list was truncated. A list can be truncated if the number of
+ * parts exceeds the limit returned in the MaxParts element.</p>
+ */
+ inline bool GetIsTruncated() const{ return m_isTruncated; }
+
+ /**
+ * <p> Indicates whether the returned list of parts is truncated. A true value
+ * indicates that the list was truncated. A list can be truncated if the number of
+ * parts exceeds the limit returned in the MaxParts element.</p>
+ */
+ inline void SetIsTruncated(bool value) { m_isTruncated = value; }
+
+ /**
+ * <p> Indicates whether the returned list of parts is truncated. A true value
+ * indicates that the list was truncated. A list can be truncated if the number of
+ * parts exceeds the limit returned in the MaxParts element.</p>
+ */
+ inline ListPartsResult& WithIsTruncated(bool value) { SetIsTruncated(value); return *this;}
+
+
+ /**
+ * <p> Container for elements related to a particular part. A response can contain
+ * zero or more <code>Part</code> elements.</p>
+ */
+ inline const Aws::Vector<Part>& GetParts() const{ return m_parts; }
+
+ /**
+ * <p> Container for elements related to a particular part. A response can contain
+ * zero or more <code>Part</code> elements.</p>
+ */
+ inline void SetParts(const Aws::Vector<Part>& value) { m_parts = value; }
+
+ /**
+ * <p> Container for elements related to a particular part. A response can contain
+ * zero or more <code>Part</code> elements.</p>
+ */
+ inline void SetParts(Aws::Vector<Part>&& value) { m_parts = std::move(value); }
+
+ /**
+ * <p> Container for elements related to a particular part. A response can contain
+ * zero or more <code>Part</code> elements.</p>
+ */
+ inline ListPartsResult& WithParts(const Aws::Vector<Part>& value) { SetParts(value); return *this;}
+
+ /**
+ * <p> Container for elements related to a particular part. A response can contain
+ * zero or more <code>Part</code> elements.</p>
+ */
+ inline ListPartsResult& WithParts(Aws::Vector<Part>&& value) { SetParts(std::move(value)); return *this;}
+
+ /**
+ * <p> Container for elements related to a particular part. A response can contain
+ * zero or more <code>Part</code> elements.</p>
+ */
+ inline ListPartsResult& AddParts(const Part& value) { m_parts.push_back(value); return *this; }
+
+ /**
+ * <p> Container for elements related to a particular part. A response can contain
+ * zero or more <code>Part</code> elements.</p>
+ */
+ inline ListPartsResult& AddParts(Part&& value) { m_parts.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Container element that identifies who initiated the multipart upload. If the
+ * initiator is an AWS account, this element provides the same information as the
+ * <code>Owner</code> element. If the initiator is an IAM User, this element
+ * provides the user ARN and display name.</p>
+ */
+ inline const Initiator& GetInitiator() const{ return m_initiator; }
+
+ /**
+ * <p>Container element that identifies who initiated the multipart upload. If the
+ * initiator is an AWS account, this element provides the same information as the
+ * <code>Owner</code> element. If the initiator is an IAM User, this element
+ * provides the user ARN and display name.</p>
+ */
+ inline void SetInitiator(const Initiator& value) { m_initiator = value; }
+
+ /**
+ * <p>Container element that identifies who initiated the multipart upload. If the
+ * initiator is an AWS account, this element provides the same information as the
+ * <code>Owner</code> element. If the initiator is an IAM User, this element
+ * provides the user ARN and display name.</p>
+ */
+ inline void SetInitiator(Initiator&& value) { m_initiator = std::move(value); }
+
+ /**
+ * <p>Container element that identifies who initiated the multipart upload. If the
+ * initiator is an AWS account, this element provides the same information as the
+ * <code>Owner</code> element. If the initiator is an IAM User, this element
+ * provides the user ARN and display name.</p>
+ */
+ inline ListPartsResult& WithInitiator(const Initiator& value) { SetInitiator(value); return *this;}
+
+ /**
+ * <p>Container element that identifies who initiated the multipart upload. If the
+ * initiator is an AWS account, this element provides the same information as the
+ * <code>Owner</code> element. If the initiator is an IAM User, this element
+ * provides the user ARN and display name.</p>
+ */
+ inline ListPartsResult& WithInitiator(Initiator&& value) { SetInitiator(std::move(value)); return *this;}
+
+
+ /**
+ * <p> Container element that identifies the object owner, after the object is
+ * created. If multipart upload is initiated by an IAM user, this element provides
+ * the parent account ID and display name.</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p> Container element that identifies the object owner, after the object is
+ * created. If multipart upload is initiated by an IAM user, this element provides
+ * the parent account ID and display name.</p>
+ */
+ inline void SetOwner(const Owner& value) { m_owner = value; }
+
+ /**
+ * <p> Container element that identifies the object owner, after the object is
+ * created. If multipart upload is initiated by an IAM user, this element provides
+ * the parent account ID and display name.</p>
+ */
+ inline void SetOwner(Owner&& value) { m_owner = std::move(value); }
+
+ /**
+ * <p> Container element that identifies the object owner, after the object is
+ * created. If multipart upload is initiated by an IAM user, this element provides
+ * the parent account ID and display name.</p>
+ */
+ inline ListPartsResult& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p> Container element that identifies the object owner, after the object is
+ * created. If multipart upload is initiated by an IAM user, this element provides
+ * the parent account ID and display name.</p>
+ */
+ inline ListPartsResult& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Class of storage (STANDARD or REDUCED_REDUNDANCY) used to store the uploaded
+ * object.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>Class of storage (STANDARD or REDUCED_REDUNDANCY) used to store the uploaded
+ * object.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClass = value; }
+
+ /**
+ * <p>Class of storage (STANDARD or REDUCED_REDUNDANCY) used to store the uploaded
+ * object.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClass = std::move(value); }
+
+ /**
+ * <p>Class of storage (STANDARD or REDUCED_REDUNDANCY) used to store the uploaded
+ * object.</p>
+ */
+ inline ListPartsResult& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>Class of storage (STANDARD or REDUCED_REDUNDANCY) used to store the uploaded
+ * object.</p>
+ */
+ inline ListPartsResult& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline ListPartsResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline ListPartsResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ Aws::Utils::DateTime m_abortDate;
+
+ Aws::String m_abortRuleId;
+
+ Aws::String m_bucket;
+
+ Aws::String m_key;
+
+ Aws::String m_uploadId;
+
+ int m_partNumberMarker;
+
+ int m_nextPartNumberMarker;
+
+ int m_maxParts;
+
+ bool m_isTruncated;
+
+ Aws::Vector<Part> m_parts;
+
+ Initiator m_initiator;
+
+ Owner m_owner;
+
+ StorageClass m_storageClass;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LoggingEnabled.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LoggingEnabled.h
new file mode 100644
index 00000000000..444fbf49f05
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/LoggingEnabled.h
@@ -0,0 +1,238 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/TargetGrant.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes where logs are stored and the prefix that Amazon S3 assigns to all
+ * log object keys for a bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html">PUT
+ * Bucket logging</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LoggingEnabled">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API LoggingEnabled
+ {
+ public:
+ LoggingEnabled();
+ LoggingEnabled(const Aws::Utils::Xml::XmlNode& xmlNode);
+ LoggingEnabled& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline const Aws::String& GetTargetBucket() const{ return m_targetBucket; }
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline bool TargetBucketHasBeenSet() const { return m_targetBucketHasBeenSet; }
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline void SetTargetBucket(const Aws::String& value) { m_targetBucketHasBeenSet = true; m_targetBucket = value; }
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline void SetTargetBucket(Aws::String&& value) { m_targetBucketHasBeenSet = true; m_targetBucket = std::move(value); }
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline void SetTargetBucket(const char* value) { m_targetBucketHasBeenSet = true; m_targetBucket.assign(value); }
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline LoggingEnabled& WithTargetBucket(const Aws::String& value) { SetTargetBucket(value); return *this;}
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline LoggingEnabled& WithTargetBucket(Aws::String&& value) { SetTargetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the bucket where you want Amazon S3 to store server access logs.
+ * You can have your logs delivered to any bucket that you own, including the same
+ * bucket that is being logged. You can also configure multiple buckets to deliver
+ * their logs to the same target bucket. In this case, you should choose a
+ * different <code>TargetPrefix</code> for each source bucket so that the delivered
+ * log files can be distinguished by key.</p>
+ */
+ inline LoggingEnabled& WithTargetBucket(const char* value) { SetTargetBucket(value); return *this;}
+
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline const Aws::Vector<TargetGrant>& GetTargetGrants() const{ return m_targetGrants; }
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline bool TargetGrantsHasBeenSet() const { return m_targetGrantsHasBeenSet; }
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline void SetTargetGrants(const Aws::Vector<TargetGrant>& value) { m_targetGrantsHasBeenSet = true; m_targetGrants = value; }
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline void SetTargetGrants(Aws::Vector<TargetGrant>&& value) { m_targetGrantsHasBeenSet = true; m_targetGrants = std::move(value); }
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline LoggingEnabled& WithTargetGrants(const Aws::Vector<TargetGrant>& value) { SetTargetGrants(value); return *this;}
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline LoggingEnabled& WithTargetGrants(Aws::Vector<TargetGrant>&& value) { SetTargetGrants(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline LoggingEnabled& AddTargetGrants(const TargetGrant& value) { m_targetGrantsHasBeenSet = true; m_targetGrants.push_back(value); return *this; }
+
+ /**
+ * <p>Container for granting information.</p>
+ */
+ inline LoggingEnabled& AddTargetGrants(TargetGrant&& value) { m_targetGrantsHasBeenSet = true; m_targetGrants.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline const Aws::String& GetTargetPrefix() const{ return m_targetPrefix; }
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline bool TargetPrefixHasBeenSet() const { return m_targetPrefixHasBeenSet; }
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline void SetTargetPrefix(const Aws::String& value) { m_targetPrefixHasBeenSet = true; m_targetPrefix = value; }
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline void SetTargetPrefix(Aws::String&& value) { m_targetPrefixHasBeenSet = true; m_targetPrefix = std::move(value); }
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline void SetTargetPrefix(const char* value) { m_targetPrefixHasBeenSet = true; m_targetPrefix.assign(value); }
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline LoggingEnabled& WithTargetPrefix(const Aws::String& value) { SetTargetPrefix(value); return *this;}
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline LoggingEnabled& WithTargetPrefix(Aws::String&& value) { SetTargetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>A prefix for all log object keys. If you store log files from multiple Amazon
+ * S3 buckets in a single bucket, you can use a prefix to distinguish which log
+ * files came from which bucket.</p>
+ */
+ inline LoggingEnabled& WithTargetPrefix(const char* value) { SetTargetPrefix(value); return *this;}
+
+ private:
+
+ Aws::String m_targetBucket;
+ bool m_targetBucketHasBeenSet;
+
+ Aws::Vector<TargetGrant> m_targetGrants;
+ bool m_targetGrantsHasBeenSet;
+
+ Aws::String m_targetPrefix;
+ bool m_targetPrefixHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADelete.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADelete.h
new file mode 100644
index 00000000000..02a689681e1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADelete.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class MFADelete
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace MFADeleteMapper
+{
+AWS_S3_API MFADelete GetMFADeleteForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForMFADelete(MFADelete value);
+} // namespace MFADeleteMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADeleteStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADeleteStatus.h
new file mode 100644
index 00000000000..f48fcf21ca3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MFADeleteStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class MFADeleteStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace MFADeleteStatusMapper
+{
+AWS_S3_API MFADeleteStatus GetMFADeleteStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForMFADeleteStatus(MFADeleteStatus value);
+} // namespace MFADeleteStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataDirective.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataDirective.h
new file mode 100644
index 00000000000..74e71b2a420
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataDirective.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class MetadataDirective
+ {
+ NOT_SET,
+ COPY,
+ REPLACE
+ };
+
+namespace MetadataDirectiveMapper
+{
+AWS_S3_API MetadataDirective GetMetadataDirectiveForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForMetadataDirective(MetadataDirective value);
+} // namespace MetadataDirectiveMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataEntry.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataEntry.h
new file mode 100644
index 00000000000..b6d876e9181
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetadataEntry.h
@@ -0,0 +1,132 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A metadata key-value pair to store with an object.</p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetadataEntry">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API MetadataEntry
+ {
+ public:
+ MetadataEntry();
+ MetadataEntry(const Aws::Utils::Xml::XmlNode& xmlNode);
+ MetadataEntry& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline const Aws::String& GetName() const{ return m_name; }
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline bool NameHasBeenSet() const { return m_nameHasBeenSet; }
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline void SetName(const Aws::String& value) { m_nameHasBeenSet = true; m_name = value; }
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline void SetName(Aws::String&& value) { m_nameHasBeenSet = true; m_name = std::move(value); }
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline void SetName(const char* value) { m_nameHasBeenSet = true; m_name.assign(value); }
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline MetadataEntry& WithName(const Aws::String& value) { SetName(value); return *this;}
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline MetadataEntry& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}
+
+ /**
+ * <p>Name of the Object.</p>
+ */
+ inline MetadataEntry& WithName(const char* value) { SetName(value); return *this;}
+
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline const Aws::String& GetValue() const{ return m_value; }
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline bool ValueHasBeenSet() const { return m_valueHasBeenSet; }
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline void SetValue(const Aws::String& value) { m_valueHasBeenSet = true; m_value = value; }
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline void SetValue(Aws::String&& value) { m_valueHasBeenSet = true; m_value = std::move(value); }
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline void SetValue(const char* value) { m_valueHasBeenSet = true; m_value.assign(value); }
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline MetadataEntry& WithValue(const Aws::String& value) { SetValue(value); return *this;}
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline MetadataEntry& WithValue(Aws::String&& value) { SetValue(std::move(value)); return *this;}
+
+ /**
+ * <p>Value of the Object.</p>
+ */
+ inline MetadataEntry& WithValue(const char* value) { SetValue(value); return *this;}
+
+ private:
+
+ Aws::String m_name;
+ bool m_nameHasBeenSet;
+
+ Aws::String m_value;
+ bool m_valueHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Metrics.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Metrics.h
new file mode 100644
index 00000000000..815b2b556cc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Metrics.h
@@ -0,0 +1,120 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/MetricsStatus.h>
+#include <aws/s3/model/ReplicationTimeValue.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p> A container specifying replication metrics-related settings enabling
+ * replication metrics and events.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Metrics">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Metrics
+ {
+ public:
+ Metrics();
+ Metrics(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Metrics& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p> Specifies whether the replication metrics are enabled. </p>
+ */
+ inline const MetricsStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p> Specifies whether the replication metrics are enabled. </p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p> Specifies whether the replication metrics are enabled. </p>
+ */
+ inline void SetStatus(const MetricsStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p> Specifies whether the replication metrics are enabled. </p>
+ */
+ inline void SetStatus(MetricsStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p> Specifies whether the replication metrics are enabled. </p>
+ */
+ inline Metrics& WithStatus(const MetricsStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p> Specifies whether the replication metrics are enabled. </p>
+ */
+ inline Metrics& WithStatus(MetricsStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p> A container specifying the time threshold for emitting the
+ * <code>s3:Replication:OperationMissedThreshold</code> event. </p>
+ */
+ inline const ReplicationTimeValue& GetEventThreshold() const{ return m_eventThreshold; }
+
+ /**
+ * <p> A container specifying the time threshold for emitting the
+ * <code>s3:Replication:OperationMissedThreshold</code> event. </p>
+ */
+ inline bool EventThresholdHasBeenSet() const { return m_eventThresholdHasBeenSet; }
+
+ /**
+ * <p> A container specifying the time threshold for emitting the
+ * <code>s3:Replication:OperationMissedThreshold</code> event. </p>
+ */
+ inline void SetEventThreshold(const ReplicationTimeValue& value) { m_eventThresholdHasBeenSet = true; m_eventThreshold = value; }
+
+ /**
+ * <p> A container specifying the time threshold for emitting the
+ * <code>s3:Replication:OperationMissedThreshold</code> event. </p>
+ */
+ inline void SetEventThreshold(ReplicationTimeValue&& value) { m_eventThresholdHasBeenSet = true; m_eventThreshold = std::move(value); }
+
+ /**
+ * <p> A container specifying the time threshold for emitting the
+ * <code>s3:Replication:OperationMissedThreshold</code> event. </p>
+ */
+ inline Metrics& WithEventThreshold(const ReplicationTimeValue& value) { SetEventThreshold(value); return *this;}
+
+ /**
+ * <p> A container specifying the time threshold for emitting the
+ * <code>s3:Replication:OperationMissedThreshold</code> event. </p>
+ */
+ inline Metrics& WithEventThreshold(ReplicationTimeValue&& value) { SetEventThreshold(std::move(value)); return *this;}
+
+ private:
+
+ MetricsStatus m_status;
+ bool m_statusHasBeenSet;
+
+ ReplicationTimeValue m_eventThreshold;
+ bool m_eventThresholdHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsAndOperator.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsAndOperator.h
new file mode 100644
index 00000000000..e413af11d93
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsAndOperator.h
@@ -0,0 +1,137 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetricsAndOperator">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API MetricsAndOperator
+ {
+ public:
+ MetricsAndOperator();
+ MetricsAndOperator(const Aws::Utils::Xml::XmlNode& xmlNode);
+ MetricsAndOperator& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline MetricsAndOperator& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline MetricsAndOperator& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix used when evaluating an AND predicate.</p>
+ */
+ inline MetricsAndOperator& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline const Aws::Vector<Tag>& GetTags() const{ return m_tags; }
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline void SetTags(const Aws::Vector<Tag>& value) { m_tagsHasBeenSet = true; m_tags = value; }
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline void SetTags(Aws::Vector<Tag>&& value) { m_tagsHasBeenSet = true; m_tags = std::move(value); }
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline MetricsAndOperator& WithTags(const Aws::Vector<Tag>& value) { SetTags(value); return *this;}
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline MetricsAndOperator& WithTags(Aws::Vector<Tag>&& value) { SetTags(std::move(value)); return *this;}
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline MetricsAndOperator& AddTags(const Tag& value) { m_tagsHasBeenSet = true; m_tags.push_back(value); return *this; }
+
+ /**
+ * <p>The list of tags used when evaluating an AND predicate.</p>
+ */
+ inline MetricsAndOperator& AddTags(Tag&& value) { m_tagsHasBeenSet = true; m_tags.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::Vector<Tag> m_tags;
+ bool m_tagsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsConfiguration.h
new file mode 100644
index 00000000000..57abb1c6534
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsConfiguration.h
@@ -0,0 +1,142 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/MetricsFilter.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies a metrics configuration for the CloudWatch request metrics
+ * (specified by the metrics configuration ID) from an Amazon S3 bucket. If you're
+ * updating an existing metrics configuration, note that this is a full replacement
+ * of the existing metrics configuration. If you don't include the elements you
+ * want to keep, they are erased. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTMetricConfiguration.html">
+ * PUT Bucket metrics</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetricsConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API MetricsConfiguration
+ {
+ public:
+ MetricsConfiguration();
+ MetricsConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ MetricsConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline MetricsConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline MetricsConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline MetricsConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>Specifies a metrics configuration filter. The metrics configuration will only
+ * include objects that meet the filter's criteria. A filter must be a prefix, a
+ * tag, or a conjunction (MetricsAndOperator).</p>
+ */
+ inline const MetricsFilter& GetFilter() const{ return m_filter; }
+
+ /**
+ * <p>Specifies a metrics configuration filter. The metrics configuration will only
+ * include objects that meet the filter's criteria. A filter must be a prefix, a
+ * tag, or a conjunction (MetricsAndOperator).</p>
+ */
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+ /**
+ * <p>Specifies a metrics configuration filter. The metrics configuration will only
+ * include objects that meet the filter's criteria. A filter must be a prefix, a
+ * tag, or a conjunction (MetricsAndOperator).</p>
+ */
+ inline void SetFilter(const MetricsFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+ /**
+ * <p>Specifies a metrics configuration filter. The metrics configuration will only
+ * include objects that meet the filter's criteria. A filter must be a prefix, a
+ * tag, or a conjunction (MetricsAndOperator).</p>
+ */
+ inline void SetFilter(MetricsFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+ /**
+ * <p>Specifies a metrics configuration filter. The metrics configuration will only
+ * include objects that meet the filter's criteria. A filter must be a prefix, a
+ * tag, or a conjunction (MetricsAndOperator).</p>
+ */
+ inline MetricsConfiguration& WithFilter(const MetricsFilter& value) { SetFilter(value); return *this;}
+
+ /**
+ * <p>Specifies a metrics configuration filter. The metrics configuration will only
+ * include objects that meet the filter's criteria. A filter must be a prefix, a
+ * tag, or a conjunction (MetricsAndOperator).</p>
+ */
+ inline MetricsConfiguration& WithFilter(MetricsFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ MetricsFilter m_filter;
+ bool m_filterHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsFilter.h
new file mode 100644
index 00000000000..1305abdf21f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsFilter.h
@@ -0,0 +1,172 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Tag.h>
+#include <aws/s3/model/MetricsAndOperator.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies a metrics configuration filter. The metrics configuration only
+ * includes objects that meet the filter's criteria. A filter must be a prefix, a
+ * tag, or a conjunction (MetricsAndOperator).</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetricsFilter">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API MetricsFilter
+ {
+ public:
+ MetricsFilter();
+ MetricsFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ MetricsFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline MetricsFilter& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline MetricsFilter& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix used when evaluating a metrics filter.</p>
+ */
+ inline MetricsFilter& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>The tag used when evaluating a metrics filter.</p>
+ */
+ inline const Tag& GetTag() const{ return m_tag; }
+
+ /**
+ * <p>The tag used when evaluating a metrics filter.</p>
+ */
+ inline bool TagHasBeenSet() const { return m_tagHasBeenSet; }
+
+ /**
+ * <p>The tag used when evaluating a metrics filter.</p>
+ */
+ inline void SetTag(const Tag& value) { m_tagHasBeenSet = true; m_tag = value; }
+
+ /**
+ * <p>The tag used when evaluating a metrics filter.</p>
+ */
+ inline void SetTag(Tag&& value) { m_tagHasBeenSet = true; m_tag = std::move(value); }
+
+ /**
+ * <p>The tag used when evaluating a metrics filter.</p>
+ */
+ inline MetricsFilter& WithTag(const Tag& value) { SetTag(value); return *this;}
+
+ /**
+ * <p>The tag used when evaluating a metrics filter.</p>
+ */
+ inline MetricsFilter& WithTag(Tag&& value) { SetTag(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline const MetricsAndOperator& GetAnd() const{ return m_and; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline bool AndHasBeenSet() const { return m_andHasBeenSet; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline void SetAnd(const MetricsAndOperator& value) { m_andHasBeenSet = true; m_and = value; }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline void SetAnd(MetricsAndOperator&& value) { m_andHasBeenSet = true; m_and = std::move(value); }
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline MetricsFilter& WithAnd(const MetricsAndOperator& value) { SetAnd(value); return *this;}
+
+ /**
+ * <p>A conjunction (logical AND) of predicates, which is used in evaluating a
+ * metrics filter. The operator must have at least two predicates, and an object
+ * must match all of the predicates in order for the filter to apply.</p>
+ */
+ inline MetricsFilter& WithAnd(MetricsAndOperator&& value) { SetAnd(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Tag m_tag;
+ bool m_tagHasBeenSet;
+
+ MetricsAndOperator m_and;
+ bool m_andHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsStatus.h
new file mode 100644
index 00000000000..adaa3d7b65b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MetricsStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class MetricsStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace MetricsStatusMapper
+{
+AWS_S3_API MetricsStatus GetMetricsStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForMetricsStatus(MetricsStatus value);
+} // namespace MetricsStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MultipartUpload.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MultipartUpload.h
new file mode 100644
index 00000000000..29eafa4222c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/MultipartUpload.h
@@ -0,0 +1,273 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/Owner.h>
+#include <aws/s3/model/Initiator.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the <code>MultipartUpload</code> for the Amazon S3
+ * object.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MultipartUpload">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API MultipartUpload
+ {
+ public:
+ MultipartUpload();
+ MultipartUpload(const Aws::Utils::Xml::XmlNode& xmlNode);
+ MultipartUpload& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline bool UploadIdHasBeenSet() const { return m_uploadIdHasBeenSet; }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadIdHasBeenSet = true; m_uploadId = value; }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadIdHasBeenSet = true; m_uploadId = std::move(value); }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadIdHasBeenSet = true; m_uploadId.assign(value); }
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline MultipartUpload& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline MultipartUpload& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>Upload ID that identifies the multipart upload.</p>
+ */
+ inline MultipartUpload& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline MultipartUpload& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline MultipartUpload& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Key of the object for which the multipart upload was initiated.</p>
+ */
+ inline MultipartUpload& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Date and time at which the multipart upload was initiated.</p>
+ */
+ inline const Aws::Utils::DateTime& GetInitiated() const{ return m_initiated; }
+
+ /**
+ * <p>Date and time at which the multipart upload was initiated.</p>
+ */
+ inline bool InitiatedHasBeenSet() const { return m_initiatedHasBeenSet; }
+
+ /**
+ * <p>Date and time at which the multipart upload was initiated.</p>
+ */
+ inline void SetInitiated(const Aws::Utils::DateTime& value) { m_initiatedHasBeenSet = true; m_initiated = value; }
+
+ /**
+ * <p>Date and time at which the multipart upload was initiated.</p>
+ */
+ inline void SetInitiated(Aws::Utils::DateTime&& value) { m_initiatedHasBeenSet = true; m_initiated = std::move(value); }
+
+ /**
+ * <p>Date and time at which the multipart upload was initiated.</p>
+ */
+ inline MultipartUpload& WithInitiated(const Aws::Utils::DateTime& value) { SetInitiated(value); return *this;}
+
+ /**
+ * <p>Date and time at which the multipart upload was initiated.</p>
+ */
+ inline MultipartUpload& WithInitiated(Aws::Utils::DateTime&& value) { SetInitiated(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline MultipartUpload& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline MultipartUpload& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the owner of the object that is part of the multipart upload. </p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>Specifies the owner of the object that is part of the multipart upload. </p>
+ */
+ inline bool OwnerHasBeenSet() const { return m_ownerHasBeenSet; }
+
+ /**
+ * <p>Specifies the owner of the object that is part of the multipart upload. </p>
+ */
+ inline void SetOwner(const Owner& value) { m_ownerHasBeenSet = true; m_owner = value; }
+
+ /**
+ * <p>Specifies the owner of the object that is part of the multipart upload. </p>
+ */
+ inline void SetOwner(Owner&& value) { m_ownerHasBeenSet = true; m_owner = std::move(value); }
+
+ /**
+ * <p>Specifies the owner of the object that is part of the multipart upload. </p>
+ */
+ inline MultipartUpload& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>Specifies the owner of the object that is part of the multipart upload. </p>
+ */
+ inline MultipartUpload& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Identifies who initiated the multipart upload.</p>
+ */
+ inline const Initiator& GetInitiator() const{ return m_initiator; }
+
+ /**
+ * <p>Identifies who initiated the multipart upload.</p>
+ */
+ inline bool InitiatorHasBeenSet() const { return m_initiatorHasBeenSet; }
+
+ /**
+ * <p>Identifies who initiated the multipart upload.</p>
+ */
+ inline void SetInitiator(const Initiator& value) { m_initiatorHasBeenSet = true; m_initiator = value; }
+
+ /**
+ * <p>Identifies who initiated the multipart upload.</p>
+ */
+ inline void SetInitiator(Initiator&& value) { m_initiatorHasBeenSet = true; m_initiator = std::move(value); }
+
+ /**
+ * <p>Identifies who initiated the multipart upload.</p>
+ */
+ inline MultipartUpload& WithInitiator(const Initiator& value) { SetInitiator(value); return *this;}
+
+ /**
+ * <p>Identifies who initiated the multipart upload.</p>
+ */
+ inline MultipartUpload& WithInitiator(Initiator&& value) { SetInitiator(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_uploadId;
+ bool m_uploadIdHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::Utils::DateTime m_initiated;
+ bool m_initiatedHasBeenSet;
+
+ StorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ Owner m_owner;
+ bool m_ownerHasBeenSet;
+
+ Initiator m_initiator;
+ bool m_initiatorHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionExpiration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionExpiration.h
new file mode 100644
index 00000000000..9e966d77226
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionExpiration.h
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies when noncurrent object versions expire. Upon expiration, Amazon S3
+ * permanently deletes the noncurrent object versions. You set this lifecycle
+ * configuration action on a bucket that has versioning enabled (or suspended) to
+ * request that Amazon S3 delete noncurrent object versions at a specific period in
+ * the object's lifetime.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NoncurrentVersionExpiration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API NoncurrentVersionExpiration
+ {
+ public:
+ NoncurrentVersionExpiration();
+ NoncurrentVersionExpiration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ NoncurrentVersionExpiration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates When an Object Became Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline int GetNoncurrentDays() const{ return m_noncurrentDays; }
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates When an Object Became Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline bool NoncurrentDaysHasBeenSet() const { return m_noncurrentDaysHasBeenSet; }
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates When an Object Became Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetNoncurrentDays(int value) { m_noncurrentDaysHasBeenSet = true; m_noncurrentDays = value; }
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates When an Object Became Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline NoncurrentVersionExpiration& WithNoncurrentDays(int value) { SetNoncurrentDays(value); return *this;}
+
+ private:
+
+ int m_noncurrentDays;
+ bool m_noncurrentDaysHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionTransition.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionTransition.h
new file mode 100644
index 00000000000..03c21414a59
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NoncurrentVersionTransition.h
@@ -0,0 +1,130 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/TransitionStorageClass.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the transition rule that describes when noncurrent objects
+ * transition to the <code>STANDARD_IA</code>, <code>ONEZONE_IA</code>,
+ * <code>INTELLIGENT_TIERING</code>, <code>GLACIER</code>, or
+ * <code>DEEP_ARCHIVE</code> storage class. If your bucket is versioning-enabled
+ * (or versioning is suspended), you can set this action to request that Amazon S3
+ * transition noncurrent object versions to the <code>STANDARD_IA</code>,
+ * <code>ONEZONE_IA</code>, <code>INTELLIGENT_TIERING</code>, <code>GLACIER</code>,
+ * or <code>DEEP_ARCHIVE</code> storage class at a specific period in the object's
+ * lifetime.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NoncurrentVersionTransition">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API NoncurrentVersionTransition
+ {
+ public:
+ NoncurrentVersionTransition();
+ NoncurrentVersionTransition(const Aws::Utils::Xml::XmlNode& xmlNode);
+ NoncurrentVersionTransition& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates How Long an Object Has Been Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline int GetNoncurrentDays() const{ return m_noncurrentDays; }
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates How Long an Object Has Been Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline bool NoncurrentDaysHasBeenSet() const { return m_noncurrentDaysHasBeenSet; }
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates How Long an Object Has Been Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetNoncurrentDays(int value) { m_noncurrentDaysHasBeenSet = true; m_noncurrentDays = value; }
+
+ /**
+ * <p>Specifies the number of days an object is noncurrent before Amazon S3 can
+ * perform the associated action. For information about the noncurrent days
+ * calculations, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations">How
+ * Amazon S3 Calculates How Long an Object Has Been Noncurrent</a> in the <i>Amazon
+ * Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline NoncurrentVersionTransition& WithNoncurrentDays(int value) { SetNoncurrentDays(value); return *this;}
+
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline const TransitionStorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(const TransitionStorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(TransitionStorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline NoncurrentVersionTransition& WithStorageClass(const TransitionStorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline NoncurrentVersionTransition& WithStorageClass(TransitionStorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+ private:
+
+ int m_noncurrentDays;
+ bool m_noncurrentDaysHasBeenSet;
+
+ TransitionStorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfiguration.h
new file mode 100644
index 00000000000..f479b46490e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfiguration.h
@@ -0,0 +1,205 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/TopicConfiguration.h>
+#include <aws/s3/model/QueueConfiguration.h>
+#include <aws/s3/model/LambdaFunctionConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for specifying the notification configuration of the bucket. If
+ * this element is empty, notifications are turned off for the
+ * bucket.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NotificationConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API NotificationConfiguration
+ {
+ public:
+ NotificationConfiguration();
+ NotificationConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ NotificationConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline const Aws::Vector<TopicConfiguration>& GetTopicConfigurations() const{ return m_topicConfigurations; }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline bool TopicConfigurationsHasBeenSet() const { return m_topicConfigurationsHasBeenSet; }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline void SetTopicConfigurations(const Aws::Vector<TopicConfiguration>& value) { m_topicConfigurationsHasBeenSet = true; m_topicConfigurations = value; }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline void SetTopicConfigurations(Aws::Vector<TopicConfiguration>&& value) { m_topicConfigurationsHasBeenSet = true; m_topicConfigurations = std::move(value); }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline NotificationConfiguration& WithTopicConfigurations(const Aws::Vector<TopicConfiguration>& value) { SetTopicConfigurations(value); return *this;}
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline NotificationConfiguration& WithTopicConfigurations(Aws::Vector<TopicConfiguration>&& value) { SetTopicConfigurations(std::move(value)); return *this;}
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline NotificationConfiguration& AddTopicConfigurations(const TopicConfiguration& value) { m_topicConfigurationsHasBeenSet = true; m_topicConfigurations.push_back(value); return *this; }
+
+ /**
+ * <p>The topic to which notifications are sent and the events for which
+ * notifications are generated.</p>
+ */
+ inline NotificationConfiguration& AddTopicConfigurations(TopicConfiguration&& value) { m_topicConfigurationsHasBeenSet = true; m_topicConfigurations.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline const Aws::Vector<QueueConfiguration>& GetQueueConfigurations() const{ return m_queueConfigurations; }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline bool QueueConfigurationsHasBeenSet() const { return m_queueConfigurationsHasBeenSet; }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline void SetQueueConfigurations(const Aws::Vector<QueueConfiguration>& value) { m_queueConfigurationsHasBeenSet = true; m_queueConfigurations = value; }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline void SetQueueConfigurations(Aws::Vector<QueueConfiguration>&& value) { m_queueConfigurationsHasBeenSet = true; m_queueConfigurations = std::move(value); }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline NotificationConfiguration& WithQueueConfigurations(const Aws::Vector<QueueConfiguration>& value) { SetQueueConfigurations(value); return *this;}
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline NotificationConfiguration& WithQueueConfigurations(Aws::Vector<QueueConfiguration>&& value) { SetQueueConfigurations(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline NotificationConfiguration& AddQueueConfigurations(const QueueConfiguration& value) { m_queueConfigurationsHasBeenSet = true; m_queueConfigurations.push_back(value); return *this; }
+
+ /**
+ * <p>The Amazon Simple Queue Service queues to publish messages to and the events
+ * for which to publish messages.</p>
+ */
+ inline NotificationConfiguration& AddQueueConfigurations(QueueConfiguration&& value) { m_queueConfigurationsHasBeenSet = true; m_queueConfigurations.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline const Aws::Vector<LambdaFunctionConfiguration>& GetLambdaFunctionConfigurations() const{ return m_lambdaFunctionConfigurations; }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline bool LambdaFunctionConfigurationsHasBeenSet() const { return m_lambdaFunctionConfigurationsHasBeenSet; }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline void SetLambdaFunctionConfigurations(const Aws::Vector<LambdaFunctionConfiguration>& value) { m_lambdaFunctionConfigurationsHasBeenSet = true; m_lambdaFunctionConfigurations = value; }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline void SetLambdaFunctionConfigurations(Aws::Vector<LambdaFunctionConfiguration>&& value) { m_lambdaFunctionConfigurationsHasBeenSet = true; m_lambdaFunctionConfigurations = std::move(value); }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline NotificationConfiguration& WithLambdaFunctionConfigurations(const Aws::Vector<LambdaFunctionConfiguration>& value) { SetLambdaFunctionConfigurations(value); return *this;}
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline NotificationConfiguration& WithLambdaFunctionConfigurations(Aws::Vector<LambdaFunctionConfiguration>&& value) { SetLambdaFunctionConfigurations(std::move(value)); return *this;}
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline NotificationConfiguration& AddLambdaFunctionConfigurations(const LambdaFunctionConfiguration& value) { m_lambdaFunctionConfigurationsHasBeenSet = true; m_lambdaFunctionConfigurations.push_back(value); return *this; }
+
+ /**
+ * <p>Describes the AWS Lambda functions to invoke and the events for which to
+ * invoke them.</p>
+ */
+ inline NotificationConfiguration& AddLambdaFunctionConfigurations(LambdaFunctionConfiguration&& value) { m_lambdaFunctionConfigurationsHasBeenSet = true; m_lambdaFunctionConfigurations.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<TopicConfiguration> m_topicConfigurations;
+ bool m_topicConfigurationsHasBeenSet;
+
+ Aws::Vector<QueueConfiguration> m_queueConfigurations;
+ bool m_queueConfigurationsHasBeenSet;
+
+ Aws::Vector<LambdaFunctionConfiguration> m_lambdaFunctionConfigurations;
+ bool m_lambdaFunctionConfigurationsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationDeprecated.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationDeprecated.h
new file mode 100644
index 00000000000..fabb46afcf6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationDeprecated.h
@@ -0,0 +1,167 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/TopicConfigurationDeprecated.h>
+#include <aws/s3/model/QueueConfigurationDeprecated.h>
+#include <aws/s3/model/CloudFunctionConfiguration.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ class AWS_S3_API NotificationConfigurationDeprecated
+ {
+ public:
+ NotificationConfigurationDeprecated();
+ NotificationConfigurationDeprecated(const Aws::Utils::Xml::XmlNode& xmlNode);
+ NotificationConfigurationDeprecated& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>This data type is deprecated. A container for specifying the configuration
+ * for publication of messages to an Amazon Simple Notification Service (Amazon
+ * SNS) topic when Amazon S3 detects specified events. </p>
+ */
+ inline const TopicConfigurationDeprecated& GetTopicConfiguration() const{ return m_topicConfiguration; }
+
+ /**
+ * <p>This data type is deprecated. A container for specifying the configuration
+ * for publication of messages to an Amazon Simple Notification Service (Amazon
+ * SNS) topic when Amazon S3 detects specified events. </p>
+ */
+ inline bool TopicConfigurationHasBeenSet() const { return m_topicConfigurationHasBeenSet; }
+
+ /**
+ * <p>This data type is deprecated. A container for specifying the configuration
+ * for publication of messages to an Amazon Simple Notification Service (Amazon
+ * SNS) topic when Amazon S3 detects specified events. </p>
+ */
+ inline void SetTopicConfiguration(const TopicConfigurationDeprecated& value) { m_topicConfigurationHasBeenSet = true; m_topicConfiguration = value; }
+
+ /**
+ * <p>This data type is deprecated. A container for specifying the configuration
+ * for publication of messages to an Amazon Simple Notification Service (Amazon
+ * SNS) topic when Amazon S3 detects specified events. </p>
+ */
+ inline void SetTopicConfiguration(TopicConfigurationDeprecated&& value) { m_topicConfigurationHasBeenSet = true; m_topicConfiguration = std::move(value); }
+
+ /**
+ * <p>This data type is deprecated. A container for specifying the configuration
+ * for publication of messages to an Amazon Simple Notification Service (Amazon
+ * SNS) topic when Amazon S3 detects specified events. </p>
+ */
+ inline NotificationConfigurationDeprecated& WithTopicConfiguration(const TopicConfigurationDeprecated& value) { SetTopicConfiguration(value); return *this;}
+
+ /**
+ * <p>This data type is deprecated. A container for specifying the configuration
+ * for publication of messages to an Amazon Simple Notification Service (Amazon
+ * SNS) topic when Amazon S3 detects specified events. </p>
+ */
+ inline NotificationConfigurationDeprecated& WithTopicConfiguration(TopicConfigurationDeprecated&& value) { SetTopicConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>This data type is deprecated. This data type specifies the configuration for
+ * publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue when
+ * Amazon S3 detects specified events. </p>
+ */
+ inline const QueueConfigurationDeprecated& GetQueueConfiguration() const{ return m_queueConfiguration; }
+
+ /**
+ * <p>This data type is deprecated. This data type specifies the configuration for
+ * publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue when
+ * Amazon S3 detects specified events. </p>
+ */
+ inline bool QueueConfigurationHasBeenSet() const { return m_queueConfigurationHasBeenSet; }
+
+ /**
+ * <p>This data type is deprecated. This data type specifies the configuration for
+ * publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue when
+ * Amazon S3 detects specified events. </p>
+ */
+ inline void SetQueueConfiguration(const QueueConfigurationDeprecated& value) { m_queueConfigurationHasBeenSet = true; m_queueConfiguration = value; }
+
+ /**
+ * <p>This data type is deprecated. This data type specifies the configuration for
+ * publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue when
+ * Amazon S3 detects specified events. </p>
+ */
+ inline void SetQueueConfiguration(QueueConfigurationDeprecated&& value) { m_queueConfigurationHasBeenSet = true; m_queueConfiguration = std::move(value); }
+
+ /**
+ * <p>This data type is deprecated. This data type specifies the configuration for
+ * publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue when
+ * Amazon S3 detects specified events. </p>
+ */
+ inline NotificationConfigurationDeprecated& WithQueueConfiguration(const QueueConfigurationDeprecated& value) { SetQueueConfiguration(value); return *this;}
+
+ /**
+ * <p>This data type is deprecated. This data type specifies the configuration for
+ * publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue when
+ * Amazon S3 detects specified events. </p>
+ */
+ inline NotificationConfigurationDeprecated& WithQueueConfiguration(QueueConfigurationDeprecated&& value) { SetQueueConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Container for specifying the AWS Lambda notification configuration.</p>
+ */
+ inline const CloudFunctionConfiguration& GetCloudFunctionConfiguration() const{ return m_cloudFunctionConfiguration; }
+
+ /**
+ * <p>Container for specifying the AWS Lambda notification configuration.</p>
+ */
+ inline bool CloudFunctionConfigurationHasBeenSet() const { return m_cloudFunctionConfigurationHasBeenSet; }
+
+ /**
+ * <p>Container for specifying the AWS Lambda notification configuration.</p>
+ */
+ inline void SetCloudFunctionConfiguration(const CloudFunctionConfiguration& value) { m_cloudFunctionConfigurationHasBeenSet = true; m_cloudFunctionConfiguration = value; }
+
+ /**
+ * <p>Container for specifying the AWS Lambda notification configuration.</p>
+ */
+ inline void SetCloudFunctionConfiguration(CloudFunctionConfiguration&& value) { m_cloudFunctionConfigurationHasBeenSet = true; m_cloudFunctionConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for specifying the AWS Lambda notification configuration.</p>
+ */
+ inline NotificationConfigurationDeprecated& WithCloudFunctionConfiguration(const CloudFunctionConfiguration& value) { SetCloudFunctionConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for specifying the AWS Lambda notification configuration.</p>
+ */
+ inline NotificationConfigurationDeprecated& WithCloudFunctionConfiguration(CloudFunctionConfiguration&& value) { SetCloudFunctionConfiguration(std::move(value)); return *this;}
+
+ private:
+
+ TopicConfigurationDeprecated m_topicConfiguration;
+ bool m_topicConfigurationHasBeenSet;
+
+ QueueConfigurationDeprecated m_queueConfiguration;
+ bool m_queueConfigurationHasBeenSet;
+
+ CloudFunctionConfiguration m_cloudFunctionConfiguration;
+ bool m_cloudFunctionConfigurationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationFilter.h
new file mode 100644
index 00000000000..36e3ba429f3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/NotificationConfigurationFilter.h
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/S3KeyFilter.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies object key name filtering rules. For information about key name
+ * filtering, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Configuring
+ * Event Notifications</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NotificationConfigurationFilter">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API NotificationConfigurationFilter
+ {
+ public:
+ NotificationConfigurationFilter();
+ NotificationConfigurationFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ NotificationConfigurationFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const S3KeyFilter& GetKey() const{ return m_key; }
+
+
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+
+ inline void SetKey(const S3KeyFilter& value) { m_keyHasBeenSet = true; m_key = value; }
+
+
+ inline void SetKey(S3KeyFilter&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+
+ inline NotificationConfigurationFilter& WithKey(const S3KeyFilter& value) { SetKey(value); return *this;}
+
+
+ inline NotificationConfigurationFilter& WithKey(S3KeyFilter&& value) { SetKey(std::move(value)); return *this;}
+
+ private:
+
+ S3KeyFilter m_key;
+ bool m_keyHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Object.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Object.h
new file mode 100644
index 00000000000..a041642ca79
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Object.h
@@ -0,0 +1,358 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/ObjectStorageClass.h>
+#include <aws/s3/model/Owner.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>An object consists of data and its descriptive metadata.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Object">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Object
+ {
+ public:
+ Object();
+ Object(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Object& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline Object& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline Object& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The name that you assign to an object. You use the object key to retrieve the
+ * object.</p>
+ */
+ inline Object& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The date the Object was Last Modified</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>The date the Object was Last Modified</p>
+ */
+ inline bool LastModifiedHasBeenSet() const { return m_lastModifiedHasBeenSet; }
+
+ /**
+ * <p>The date the Object was Last Modified</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModifiedHasBeenSet = true; m_lastModified = value; }
+
+ /**
+ * <p>The date the Object was Last Modified</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModifiedHasBeenSet = true; m_lastModified = std::move(value); }
+
+ /**
+ * <p>The date the Object was Last Modified</p>
+ */
+ inline Object& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>The date the Object was Last Modified</p>
+ */
+ inline Object& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline bool ETagHasBeenSet() const { return m_eTagHasBeenSet; }
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTagHasBeenSet = true; m_eTag = value; }
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTagHasBeenSet = true; m_eTag = std::move(value); }
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline void SetETag(const char* value) { m_eTagHasBeenSet = true; m_eTag.assign(value); }
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline Object& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline Object& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>The entity tag is a hash of the object. The ETag reflects changes only to the
+ * contents of an object, not its metadata. The ETag may or may not be an MD5
+ * digest of the object data. Whether or not it is depends on how the object was
+ * created and how it is encrypted as described below:</p> <ul> <li> <p>Objects
+ * created by the PUT Object, POST Object, or Copy operation, or through the AWS
+ * Management Console, and are encrypted by SSE-S3 or plaintext, have ETags that
+ * are an MD5 digest of their object data.</p> </li> <li> <p>Objects created by the
+ * PUT Object, POST Object, or Copy operation, or through the AWS Management
+ * Console, and are encrypted by SSE-C or SSE-KMS, have ETags that are not an MD5
+ * digest of their object data.</p> </li> <li> <p>If an object is created by either
+ * the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest,
+ * regardless of the method of encryption.</p> </li> </ul>
+ */
+ inline Object& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>Size in bytes of the object</p>
+ */
+ inline long long GetSize() const{ return m_size; }
+
+ /**
+ * <p>Size in bytes of the object</p>
+ */
+ inline bool SizeHasBeenSet() const { return m_sizeHasBeenSet; }
+
+ /**
+ * <p>Size in bytes of the object</p>
+ */
+ inline void SetSize(long long value) { m_sizeHasBeenSet = true; m_size = value; }
+
+ /**
+ * <p>Size in bytes of the object</p>
+ */
+ inline Object& WithSize(long long value) { SetSize(value); return *this;}
+
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline const ObjectStorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(const ObjectStorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(ObjectStorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline Object& WithStorageClass(const ObjectStorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline Object& WithStorageClass(ObjectStorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The owner of the object</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>The owner of the object</p>
+ */
+ inline bool OwnerHasBeenSet() const { return m_ownerHasBeenSet; }
+
+ /**
+ * <p>The owner of the object</p>
+ */
+ inline void SetOwner(const Owner& value) { m_ownerHasBeenSet = true; m_owner = value; }
+
+ /**
+ * <p>The owner of the object</p>
+ */
+ inline void SetOwner(Owner&& value) { m_ownerHasBeenSet = true; m_owner = std::move(value); }
+
+ /**
+ * <p>The owner of the object</p>
+ */
+ inline Object& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>The owner of the object</p>
+ */
+ inline Object& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::Utils::DateTime m_lastModified;
+ bool m_lastModifiedHasBeenSet;
+
+ Aws::String m_eTag;
+ bool m_eTagHasBeenSet;
+
+ long long m_size;
+ bool m_sizeHasBeenSet;
+
+ ObjectStorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ Owner m_owner;
+ bool m_ownerHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectCannedACL.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectCannedACL.h
new file mode 100644
index 00000000000..7c5c6376c9d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectCannedACL.h
@@ -0,0 +1,36 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectCannedACL
+ {
+ NOT_SET,
+ private_,
+ public_read,
+ public_read_write,
+ authenticated_read,
+ aws_exec_read,
+ bucket_owner_read,
+ bucket_owner_full_control
+ };
+
+namespace ObjectCannedACLMapper
+{
+AWS_S3_API ObjectCannedACL GetObjectCannedACLForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectCannedACL(ObjectCannedACL value);
+} // namespace ObjectCannedACLMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectIdentifier.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectIdentifier.h
new file mode 100644
index 00000000000..ef7bdd50a8f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectIdentifier.h
@@ -0,0 +1,133 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Object Identifier is unique value to identify objects.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectIdentifier">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ObjectIdentifier
+ {
+ public:
+ ObjectIdentifier();
+ ObjectIdentifier(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ObjectIdentifier& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline ObjectIdentifier& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline ObjectIdentifier& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Key name of the object to delete.</p>
+ */
+ inline ObjectIdentifier& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline ObjectIdentifier& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline ObjectIdentifier& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>VersionId for the specific version of the object to delete.</p>
+ */
+ inline ObjectIdentifier& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+ private:
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockConfiguration.h
new file mode 100644
index 00000000000..4d83cc9565a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockConfiguration.h
@@ -0,0 +1,114 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectLockEnabled.h>
+#include <aws/s3/model/ObjectLockRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The container element for Object Lock configuration parameters.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ObjectLockConfiguration
+ {
+ public:
+ ObjectLockConfiguration();
+ ObjectLockConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ObjectLockConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Indicates whether this bucket has an Object Lock configuration enabled.</p>
+ */
+ inline const ObjectLockEnabled& GetObjectLockEnabled() const{ return m_objectLockEnabled; }
+
+ /**
+ * <p>Indicates whether this bucket has an Object Lock configuration enabled.</p>
+ */
+ inline bool ObjectLockEnabledHasBeenSet() const { return m_objectLockEnabledHasBeenSet; }
+
+ /**
+ * <p>Indicates whether this bucket has an Object Lock configuration enabled.</p>
+ */
+ inline void SetObjectLockEnabled(const ObjectLockEnabled& value) { m_objectLockEnabledHasBeenSet = true; m_objectLockEnabled = value; }
+
+ /**
+ * <p>Indicates whether this bucket has an Object Lock configuration enabled.</p>
+ */
+ inline void SetObjectLockEnabled(ObjectLockEnabled&& value) { m_objectLockEnabledHasBeenSet = true; m_objectLockEnabled = std::move(value); }
+
+ /**
+ * <p>Indicates whether this bucket has an Object Lock configuration enabled.</p>
+ */
+ inline ObjectLockConfiguration& WithObjectLockEnabled(const ObjectLockEnabled& value) { SetObjectLockEnabled(value); return *this;}
+
+ /**
+ * <p>Indicates whether this bucket has an Object Lock configuration enabled.</p>
+ */
+ inline ObjectLockConfiguration& WithObjectLockEnabled(ObjectLockEnabled&& value) { SetObjectLockEnabled(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The Object Lock rule in place for the specified object.</p>
+ */
+ inline const ObjectLockRule& GetRule() const{ return m_rule; }
+
+ /**
+ * <p>The Object Lock rule in place for the specified object.</p>
+ */
+ inline bool RuleHasBeenSet() const { return m_ruleHasBeenSet; }
+
+ /**
+ * <p>The Object Lock rule in place for the specified object.</p>
+ */
+ inline void SetRule(const ObjectLockRule& value) { m_ruleHasBeenSet = true; m_rule = value; }
+
+ /**
+ * <p>The Object Lock rule in place for the specified object.</p>
+ */
+ inline void SetRule(ObjectLockRule&& value) { m_ruleHasBeenSet = true; m_rule = std::move(value); }
+
+ /**
+ * <p>The Object Lock rule in place for the specified object.</p>
+ */
+ inline ObjectLockConfiguration& WithRule(const ObjectLockRule& value) { SetRule(value); return *this;}
+
+ /**
+ * <p>The Object Lock rule in place for the specified object.</p>
+ */
+ inline ObjectLockConfiguration& WithRule(ObjectLockRule&& value) { SetRule(std::move(value)); return *this;}
+
+ private:
+
+ ObjectLockEnabled m_objectLockEnabled;
+ bool m_objectLockEnabledHasBeenSet;
+
+ ObjectLockRule m_rule;
+ bool m_ruleHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockEnabled.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockEnabled.h
new file mode 100644
index 00000000000..fb7bf42351f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockEnabled.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectLockEnabled
+ {
+ NOT_SET,
+ Enabled
+ };
+
+namespace ObjectLockEnabledMapper
+{
+AWS_S3_API ObjectLockEnabled GetObjectLockEnabledForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectLockEnabled(ObjectLockEnabled value);
+} // namespace ObjectLockEnabledMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHold.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHold.h
new file mode 100644
index 00000000000..fdeba38ddab
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHold.h
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectLockLegalHoldStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A Legal Hold configuration for an object.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockLegalHold">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ObjectLockLegalHold
+ {
+ public:
+ ObjectLockLegalHold();
+ ObjectLockLegalHold(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ObjectLockLegalHold& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Indicates whether the specified object has a Legal Hold in place.</p>
+ */
+ inline const ObjectLockLegalHoldStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>Indicates whether the specified object has a Legal Hold in place.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>Indicates whether the specified object has a Legal Hold in place.</p>
+ */
+ inline void SetStatus(const ObjectLockLegalHoldStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>Indicates whether the specified object has a Legal Hold in place.</p>
+ */
+ inline void SetStatus(ObjectLockLegalHoldStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>Indicates whether the specified object has a Legal Hold in place.</p>
+ */
+ inline ObjectLockLegalHold& WithStatus(const ObjectLockLegalHoldStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>Indicates whether the specified object has a Legal Hold in place.</p>
+ */
+ inline ObjectLockLegalHold& WithStatus(ObjectLockLegalHoldStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ ObjectLockLegalHoldStatus m_status;
+ bool m_statusHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHoldStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHoldStatus.h
new file mode 100644
index 00000000000..8c3960640d5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockLegalHoldStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectLockLegalHoldStatus
+ {
+ NOT_SET,
+ ON,
+ OFF
+ };
+
+namespace ObjectLockLegalHoldStatusMapper
+{
+AWS_S3_API ObjectLockLegalHoldStatus GetObjectLockLegalHoldStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus value);
+} // namespace ObjectLockLegalHoldStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockMode.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockMode.h
new file mode 100644
index 00000000000..06f90156673
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockMode.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectLockMode
+ {
+ NOT_SET,
+ GOVERNANCE,
+ COMPLIANCE
+ };
+
+namespace ObjectLockModeMapper
+{
+AWS_S3_API ObjectLockMode GetObjectLockModeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectLockMode(ObjectLockMode value);
+} // namespace ObjectLockModeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetention.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetention.h
new file mode 100644
index 00000000000..26c60fdb78e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetention.h
@@ -0,0 +1,113 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectLockRetentionMode.h>
+#include <aws/core/utils/DateTime.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A Retention configuration for an object.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockRetention">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ObjectLockRetention
+ {
+ public:
+ ObjectLockRetention();
+ ObjectLockRetention(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ObjectLockRetention& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Indicates the Retention mode for the specified object.</p>
+ */
+ inline const ObjectLockRetentionMode& GetMode() const{ return m_mode; }
+
+ /**
+ * <p>Indicates the Retention mode for the specified object.</p>
+ */
+ inline bool ModeHasBeenSet() const { return m_modeHasBeenSet; }
+
+ /**
+ * <p>Indicates the Retention mode for the specified object.</p>
+ */
+ inline void SetMode(const ObjectLockRetentionMode& value) { m_modeHasBeenSet = true; m_mode = value; }
+
+ /**
+ * <p>Indicates the Retention mode for the specified object.</p>
+ */
+ inline void SetMode(ObjectLockRetentionMode&& value) { m_modeHasBeenSet = true; m_mode = std::move(value); }
+
+ /**
+ * <p>Indicates the Retention mode for the specified object.</p>
+ */
+ inline ObjectLockRetention& WithMode(const ObjectLockRetentionMode& value) { SetMode(value); return *this;}
+
+ /**
+ * <p>Indicates the Retention mode for the specified object.</p>
+ */
+ inline ObjectLockRetention& WithMode(ObjectLockRetentionMode&& value) { SetMode(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The date on which this Object Lock Retention will expire.</p>
+ */
+ inline const Aws::Utils::DateTime& GetRetainUntilDate() const{ return m_retainUntilDate; }
+
+ /**
+ * <p>The date on which this Object Lock Retention will expire.</p>
+ */
+ inline bool RetainUntilDateHasBeenSet() const { return m_retainUntilDateHasBeenSet; }
+
+ /**
+ * <p>The date on which this Object Lock Retention will expire.</p>
+ */
+ inline void SetRetainUntilDate(const Aws::Utils::DateTime& value) { m_retainUntilDateHasBeenSet = true; m_retainUntilDate = value; }
+
+ /**
+ * <p>The date on which this Object Lock Retention will expire.</p>
+ */
+ inline void SetRetainUntilDate(Aws::Utils::DateTime&& value) { m_retainUntilDateHasBeenSet = true; m_retainUntilDate = std::move(value); }
+
+ /**
+ * <p>The date on which this Object Lock Retention will expire.</p>
+ */
+ inline ObjectLockRetention& WithRetainUntilDate(const Aws::Utils::DateTime& value) { SetRetainUntilDate(value); return *this;}
+
+ /**
+ * <p>The date on which this Object Lock Retention will expire.</p>
+ */
+ inline ObjectLockRetention& WithRetainUntilDate(Aws::Utils::DateTime&& value) { SetRetainUntilDate(std::move(value)); return *this;}
+
+ private:
+
+ ObjectLockRetentionMode m_mode;
+ bool m_modeHasBeenSet;
+
+ Aws::Utils::DateTime m_retainUntilDate;
+ bool m_retainUntilDateHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetentionMode.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetentionMode.h
new file mode 100644
index 00000000000..099f787e823
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRetentionMode.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectLockRetentionMode
+ {
+ NOT_SET,
+ GOVERNANCE,
+ COMPLIANCE
+ };
+
+namespace ObjectLockRetentionModeMapper
+{
+AWS_S3_API ObjectLockRetentionMode GetObjectLockRetentionModeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectLockRetentionMode(ObjectLockRetentionMode value);
+} // namespace ObjectLockRetentionModeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRule.h
new file mode 100644
index 00000000000..17523929d64
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectLockRule.h
@@ -0,0 +1,84 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/DefaultRetention.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The container element for an Object Lock rule.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockRule">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ObjectLockRule
+ {
+ public:
+ ObjectLockRule();
+ ObjectLockRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ObjectLockRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The default retention period that you want to apply to new objects placed in
+ * the specified bucket.</p>
+ */
+ inline const DefaultRetention& GetDefaultRetention() const{ return m_defaultRetention; }
+
+ /**
+ * <p>The default retention period that you want to apply to new objects placed in
+ * the specified bucket.</p>
+ */
+ inline bool DefaultRetentionHasBeenSet() const { return m_defaultRetentionHasBeenSet; }
+
+ /**
+ * <p>The default retention period that you want to apply to new objects placed in
+ * the specified bucket.</p>
+ */
+ inline void SetDefaultRetention(const DefaultRetention& value) { m_defaultRetentionHasBeenSet = true; m_defaultRetention = value; }
+
+ /**
+ * <p>The default retention period that you want to apply to new objects placed in
+ * the specified bucket.</p>
+ */
+ inline void SetDefaultRetention(DefaultRetention&& value) { m_defaultRetentionHasBeenSet = true; m_defaultRetention = std::move(value); }
+
+ /**
+ * <p>The default retention period that you want to apply to new objects placed in
+ * the specified bucket.</p>
+ */
+ inline ObjectLockRule& WithDefaultRetention(const DefaultRetention& value) { SetDefaultRetention(value); return *this;}
+
+ /**
+ * <p>The default retention period that you want to apply to new objects placed in
+ * the specified bucket.</p>
+ */
+ inline ObjectLockRule& WithDefaultRetention(DefaultRetention&& value) { SetDefaultRetention(std::move(value)); return *this;}
+
+ private:
+
+ DefaultRetention m_defaultRetention;
+ bool m_defaultRetentionHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectOwnership.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectOwnership.h
new file mode 100644
index 00000000000..06ba5f9daa7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectOwnership.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectOwnership
+ {
+ NOT_SET,
+ BucketOwnerPreferred,
+ ObjectWriter
+ };
+
+namespace ObjectOwnershipMapper
+{
+AWS_S3_API ObjectOwnership GetObjectOwnershipForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectOwnership(ObjectOwnership value);
+} // namespace ObjectOwnershipMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectStorageClass.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectStorageClass.h
new file mode 100644
index 00000000000..814e5de398d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectStorageClass.h
@@ -0,0 +1,37 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectStorageClass
+ {
+ NOT_SET,
+ STANDARD,
+ REDUCED_REDUNDANCY,
+ GLACIER,
+ STANDARD_IA,
+ ONEZONE_IA,
+ INTELLIGENT_TIERING,
+ DEEP_ARCHIVE,
+ OUTPOSTS
+ };
+
+namespace ObjectStorageClassMapper
+{
+AWS_S3_API ObjectStorageClass GetObjectStorageClassForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectStorageClass(ObjectStorageClass value);
+} // namespace ObjectStorageClassMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersion.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersion.h
new file mode 100644
index 00000000000..d084d24b1e3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersion.h
@@ -0,0 +1,333 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ObjectVersionStorageClass.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/Owner.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The version of an object.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectVersion">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ObjectVersion
+ {
+ public:
+ ObjectVersion();
+ ObjectVersion(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ObjectVersion& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline bool ETagHasBeenSet() const { return m_eTagHasBeenSet; }
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTagHasBeenSet = true; m_eTag = value; }
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTagHasBeenSet = true; m_eTag = std::move(value); }
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline void SetETag(const char* value) { m_eTagHasBeenSet = true; m_eTag.assign(value); }
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline ObjectVersion& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline ObjectVersion& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>The entity tag is an MD5 hash of that version of the object.</p>
+ */
+ inline ObjectVersion& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>Size in bytes of the object.</p>
+ */
+ inline long long GetSize() const{ return m_size; }
+
+ /**
+ * <p>Size in bytes of the object.</p>
+ */
+ inline bool SizeHasBeenSet() const { return m_sizeHasBeenSet; }
+
+ /**
+ * <p>Size in bytes of the object.</p>
+ */
+ inline void SetSize(long long value) { m_sizeHasBeenSet = true; m_size = value; }
+
+ /**
+ * <p>Size in bytes of the object.</p>
+ */
+ inline ObjectVersion& WithSize(long long value) { SetSize(value); return *this;}
+
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline const ObjectVersionStorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(const ObjectVersionStorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline void SetStorageClass(ObjectVersionStorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline ObjectVersion& WithStorageClass(const ObjectVersionStorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>The class of storage used to store the object.</p>
+ */
+ inline ObjectVersion& WithStorageClass(ObjectVersionStorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline ObjectVersion& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline ObjectVersion& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline ObjectVersion& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline ObjectVersion& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline ObjectVersion& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version ID of an object.</p>
+ */
+ inline ObjectVersion& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline bool GetIsLatest() const{ return m_isLatest; }
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline bool IsLatestHasBeenSet() const { return m_isLatestHasBeenSet; }
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline void SetIsLatest(bool value) { m_isLatestHasBeenSet = true; m_isLatest = value; }
+
+ /**
+ * <p>Specifies whether the object is (true) or is not (false) the latest version
+ * of an object.</p>
+ */
+ inline ObjectVersion& WithIsLatest(bool value) { SetIsLatest(value); return *this;}
+
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline bool LastModifiedHasBeenSet() const { return m_lastModifiedHasBeenSet; }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModifiedHasBeenSet = true; m_lastModified = value; }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModifiedHasBeenSet = true; m_lastModified = std::move(value); }
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline ObjectVersion& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>Date and time the object was last modified.</p>
+ */
+ inline ObjectVersion& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the owner of the object.</p>
+ */
+ inline const Owner& GetOwner() const{ return m_owner; }
+
+ /**
+ * <p>Specifies the owner of the object.</p>
+ */
+ inline bool OwnerHasBeenSet() const { return m_ownerHasBeenSet; }
+
+ /**
+ * <p>Specifies the owner of the object.</p>
+ */
+ inline void SetOwner(const Owner& value) { m_ownerHasBeenSet = true; m_owner = value; }
+
+ /**
+ * <p>Specifies the owner of the object.</p>
+ */
+ inline void SetOwner(Owner&& value) { m_ownerHasBeenSet = true; m_owner = std::move(value); }
+
+ /**
+ * <p>Specifies the owner of the object.</p>
+ */
+ inline ObjectVersion& WithOwner(const Owner& value) { SetOwner(value); return *this;}
+
+ /**
+ * <p>Specifies the owner of the object.</p>
+ */
+ inline ObjectVersion& WithOwner(Owner&& value) { SetOwner(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_eTag;
+ bool m_eTagHasBeenSet;
+
+ long long m_size;
+ bool m_sizeHasBeenSet;
+
+ ObjectVersionStorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ bool m_isLatest;
+ bool m_isLatestHasBeenSet;
+
+ Aws::Utils::DateTime m_lastModified;
+ bool m_lastModifiedHasBeenSet;
+
+ Owner m_owner;
+ bool m_ownerHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersionStorageClass.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersionStorageClass.h
new file mode 100644
index 00000000000..04724dfa082
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ObjectVersionStorageClass.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ObjectVersionStorageClass
+ {
+ NOT_SET,
+ STANDARD
+ };
+
+namespace ObjectVersionStorageClassMapper
+{
+AWS_S3_API ObjectVersionStorageClass GetObjectVersionStorageClassForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForObjectVersionStorageClass(ObjectVersionStorageClass value);
+} // namespace ObjectVersionStorageClassMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputLocation.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputLocation.h
new file mode 100644
index 00000000000..4240773137f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputLocation.h
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/S3Location.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes the location where the restore job's output is
+ * stored.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/OutputLocation">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API OutputLocation
+ {
+ public:
+ OutputLocation();
+ OutputLocation(const Aws::Utils::Xml::XmlNode& xmlNode);
+ OutputLocation& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Describes an S3 location that will receive the results of the restore
+ * request.</p>
+ */
+ inline const S3Location& GetS3() const{ return m_s3; }
+
+ /**
+ * <p>Describes an S3 location that will receive the results of the restore
+ * request.</p>
+ */
+ inline bool S3HasBeenSet() const { return m_s3HasBeenSet; }
+
+ /**
+ * <p>Describes an S3 location that will receive the results of the restore
+ * request.</p>
+ */
+ inline void SetS3(const S3Location& value) { m_s3HasBeenSet = true; m_s3 = value; }
+
+ /**
+ * <p>Describes an S3 location that will receive the results of the restore
+ * request.</p>
+ */
+ inline void SetS3(S3Location&& value) { m_s3HasBeenSet = true; m_s3 = std::move(value); }
+
+ /**
+ * <p>Describes an S3 location that will receive the results of the restore
+ * request.</p>
+ */
+ inline OutputLocation& WithS3(const S3Location& value) { SetS3(value); return *this;}
+
+ /**
+ * <p>Describes an S3 location that will receive the results of the restore
+ * request.</p>
+ */
+ inline OutputLocation& WithS3(S3Location&& value) { SetS3(std::move(value)); return *this;}
+
+ private:
+
+ S3Location m_s3;
+ bool m_s3HasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputSerialization.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputSerialization.h
new file mode 100644
index 00000000000..92331d902c8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OutputSerialization.h
@@ -0,0 +1,114 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/CSVOutput.h>
+#include <aws/s3/model/JSONOutput.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes how results of the Select job are serialized.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/OutputSerialization">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API OutputSerialization
+ {
+ public:
+ OutputSerialization();
+ OutputSerialization(const Aws::Utils::Xml::XmlNode& xmlNode);
+ OutputSerialization& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Describes the serialization of CSV-encoded Select results.</p>
+ */
+ inline const CSVOutput& GetCSV() const{ return m_cSV; }
+
+ /**
+ * <p>Describes the serialization of CSV-encoded Select results.</p>
+ */
+ inline bool CSVHasBeenSet() const { return m_cSVHasBeenSet; }
+
+ /**
+ * <p>Describes the serialization of CSV-encoded Select results.</p>
+ */
+ inline void SetCSV(const CSVOutput& value) { m_cSVHasBeenSet = true; m_cSV = value; }
+
+ /**
+ * <p>Describes the serialization of CSV-encoded Select results.</p>
+ */
+ inline void SetCSV(CSVOutput&& value) { m_cSVHasBeenSet = true; m_cSV = std::move(value); }
+
+ /**
+ * <p>Describes the serialization of CSV-encoded Select results.</p>
+ */
+ inline OutputSerialization& WithCSV(const CSVOutput& value) { SetCSV(value); return *this;}
+
+ /**
+ * <p>Describes the serialization of CSV-encoded Select results.</p>
+ */
+ inline OutputSerialization& WithCSV(CSVOutput&& value) { SetCSV(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies JSON as request's output serialization format.</p>
+ */
+ inline const JSONOutput& GetJSON() const{ return m_jSON; }
+
+ /**
+ * <p>Specifies JSON as request's output serialization format.</p>
+ */
+ inline bool JSONHasBeenSet() const { return m_jSONHasBeenSet; }
+
+ /**
+ * <p>Specifies JSON as request's output serialization format.</p>
+ */
+ inline void SetJSON(const JSONOutput& value) { m_jSONHasBeenSet = true; m_jSON = value; }
+
+ /**
+ * <p>Specifies JSON as request's output serialization format.</p>
+ */
+ inline void SetJSON(JSONOutput&& value) { m_jSONHasBeenSet = true; m_jSON = std::move(value); }
+
+ /**
+ * <p>Specifies JSON as request's output serialization format.</p>
+ */
+ inline OutputSerialization& WithJSON(const JSONOutput& value) { SetJSON(value); return *this;}
+
+ /**
+ * <p>Specifies JSON as request's output serialization format.</p>
+ */
+ inline OutputSerialization& WithJSON(JSONOutput&& value) { SetJSON(std::move(value)); return *this;}
+
+ private:
+
+ CSVOutput m_cSV;
+ bool m_cSVHasBeenSet;
+
+ JSONOutput m_jSON;
+ bool m_jSONHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Owner.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Owner.h
new file mode 100644
index 00000000000..4f3f5d6aaa7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Owner.h
@@ -0,0 +1,132 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the owner's display name and ID.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Owner">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Owner
+ {
+ public:
+ Owner();
+ Owner(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Owner& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline const Aws::String& GetDisplayName() const{ return m_displayName; }
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline bool DisplayNameHasBeenSet() const { return m_displayNameHasBeenSet; }
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline void SetDisplayName(const Aws::String& value) { m_displayNameHasBeenSet = true; m_displayName = value; }
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline void SetDisplayName(Aws::String&& value) { m_displayNameHasBeenSet = true; m_displayName = std::move(value); }
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline void SetDisplayName(const char* value) { m_displayNameHasBeenSet = true; m_displayName.assign(value); }
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline Owner& WithDisplayName(const Aws::String& value) { SetDisplayName(value); return *this;}
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline Owner& WithDisplayName(Aws::String&& value) { SetDisplayName(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for the display name of the owner.</p>
+ */
+ inline Owner& WithDisplayName(const char* value) { SetDisplayName(value); return *this;}
+
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline const Aws::String& GetID() const{ return m_iD; }
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline bool IDHasBeenSet() const { return m_iDHasBeenSet; }
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline void SetID(const Aws::String& value) { m_iDHasBeenSet = true; m_iD = value; }
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline void SetID(Aws::String&& value) { m_iDHasBeenSet = true; m_iD = std::move(value); }
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline void SetID(const char* value) { m_iDHasBeenSet = true; m_iD.assign(value); }
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline Owner& WithID(const Aws::String& value) { SetID(value); return *this;}
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline Owner& WithID(Aws::String&& value) { SetID(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for the ID of the owner.</p>
+ */
+ inline Owner& WithID(const char* value) { SetID(value); return *this;}
+
+ private:
+
+ Aws::String m_displayName;
+ bool m_displayNameHasBeenSet;
+
+ Aws::String m_iD;
+ bool m_iDHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnerOverride.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnerOverride.h
new file mode 100644
index 00000000000..0d9660a9ca7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnerOverride.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class OwnerOverride
+ {
+ NOT_SET,
+ Destination
+ };
+
+namespace OwnerOverrideMapper
+{
+AWS_S3_API OwnerOverride GetOwnerOverrideForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForOwnerOverride(OwnerOverride value);
+} // namespace OwnerOverrideMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControls.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControls.h
new file mode 100644
index 00000000000..a0d1a3542f9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControls.h
@@ -0,0 +1,90 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/OwnershipControlsRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The container element for a bucket's ownership controls.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/OwnershipControls">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API OwnershipControls
+ {
+ public:
+ OwnershipControls();
+ OwnershipControls(const Aws::Utils::Xml::XmlNode& xmlNode);
+ OwnershipControls& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline const Aws::Vector<OwnershipControlsRule>& GetRules() const{ return m_rules; }
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline bool RulesHasBeenSet() const { return m_rulesHasBeenSet; }
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline void SetRules(const Aws::Vector<OwnershipControlsRule>& value) { m_rulesHasBeenSet = true; m_rules = value; }
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline void SetRules(Aws::Vector<OwnershipControlsRule>&& value) { m_rulesHasBeenSet = true; m_rules = std::move(value); }
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline OwnershipControls& WithRules(const Aws::Vector<OwnershipControlsRule>& value) { SetRules(value); return *this;}
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline OwnershipControls& WithRules(Aws::Vector<OwnershipControlsRule>&& value) { SetRules(std::move(value)); return *this;}
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline OwnershipControls& AddRules(const OwnershipControlsRule& value) { m_rulesHasBeenSet = true; m_rules.push_back(value); return *this; }
+
+ /**
+ * <p>The container element for an ownership control rule.</p>
+ */
+ inline OwnershipControls& AddRules(OwnershipControlsRule&& value) { m_rulesHasBeenSet = true; m_rules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<OwnershipControlsRule> m_rules;
+ bool m_rulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControlsRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControlsRule.h
new file mode 100644
index 00000000000..2e512c810cf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/OwnershipControlsRule.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ObjectOwnership.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The container element for an ownership control rule.</p><p><h3>See Also:</h3>
+ * <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/OwnershipControlsRule">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API OwnershipControlsRule
+ {
+ public:
+ OwnershipControlsRule();
+ OwnershipControlsRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ OwnershipControlsRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const ObjectOwnership& GetObjectOwnership() const{ return m_objectOwnership; }
+
+
+ inline bool ObjectOwnershipHasBeenSet() const { return m_objectOwnershipHasBeenSet; }
+
+
+ inline void SetObjectOwnership(const ObjectOwnership& value) { m_objectOwnershipHasBeenSet = true; m_objectOwnership = value; }
+
+
+ inline void SetObjectOwnership(ObjectOwnership&& value) { m_objectOwnershipHasBeenSet = true; m_objectOwnership = std::move(value); }
+
+
+ inline OwnershipControlsRule& WithObjectOwnership(const ObjectOwnership& value) { SetObjectOwnership(value); return *this;}
+
+
+ inline OwnershipControlsRule& WithObjectOwnership(ObjectOwnership&& value) { SetObjectOwnership(std::move(value)); return *this;}
+
+ private:
+
+ ObjectOwnership m_objectOwnership;
+ bool m_objectOwnershipHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ParquetInput.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ParquetInput.h
new file mode 100644
index 00000000000..3bc15a84810
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ParquetInput.h
@@ -0,0 +1,41 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for Parquet.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ParquetInput">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API ParquetInput
+ {
+ public:
+ ParquetInput();
+ ParquetInput(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ParquetInput& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Part.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Part.h
new file mode 100644
index 00000000000..6b83d534f12
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Part.h
@@ -0,0 +1,175 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for elements related to a part.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Part">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Part
+ {
+ public:
+ Part();
+ Part(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Part& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Part number identifying the part. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline int GetPartNumber() const{ return m_partNumber; }
+
+ /**
+ * <p>Part number identifying the part. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline bool PartNumberHasBeenSet() const { return m_partNumberHasBeenSet; }
+
+ /**
+ * <p>Part number identifying the part. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline void SetPartNumber(int value) { m_partNumberHasBeenSet = true; m_partNumber = value; }
+
+ /**
+ * <p>Part number identifying the part. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline Part& WithPartNumber(int value) { SetPartNumber(value); return *this;}
+
+
+ /**
+ * <p>Date and time at which the part was uploaded.</p>
+ */
+ inline const Aws::Utils::DateTime& GetLastModified() const{ return m_lastModified; }
+
+ /**
+ * <p>Date and time at which the part was uploaded.</p>
+ */
+ inline bool LastModifiedHasBeenSet() const { return m_lastModifiedHasBeenSet; }
+
+ /**
+ * <p>Date and time at which the part was uploaded.</p>
+ */
+ inline void SetLastModified(const Aws::Utils::DateTime& value) { m_lastModifiedHasBeenSet = true; m_lastModified = value; }
+
+ /**
+ * <p>Date and time at which the part was uploaded.</p>
+ */
+ inline void SetLastModified(Aws::Utils::DateTime&& value) { m_lastModifiedHasBeenSet = true; m_lastModified = std::move(value); }
+
+ /**
+ * <p>Date and time at which the part was uploaded.</p>
+ */
+ inline Part& WithLastModified(const Aws::Utils::DateTime& value) { SetLastModified(value); return *this;}
+
+ /**
+ * <p>Date and time at which the part was uploaded.</p>
+ */
+ inline Part& WithLastModified(Aws::Utils::DateTime&& value) { SetLastModified(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline bool ETagHasBeenSet() const { return m_eTagHasBeenSet; }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTagHasBeenSet = true; m_eTag = value; }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTagHasBeenSet = true; m_eTag = std::move(value); }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline void SetETag(const char* value) { m_eTagHasBeenSet = true; m_eTag.assign(value); }
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline Part& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline Part& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>Entity tag returned when the part was uploaded.</p>
+ */
+ inline Part& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>Size in bytes of the uploaded part data.</p>
+ */
+ inline long long GetSize() const{ return m_size; }
+
+ /**
+ * <p>Size in bytes of the uploaded part data.</p>
+ */
+ inline bool SizeHasBeenSet() const { return m_sizeHasBeenSet; }
+
+ /**
+ * <p>Size in bytes of the uploaded part data.</p>
+ */
+ inline void SetSize(long long value) { m_sizeHasBeenSet = true; m_size = value; }
+
+ /**
+ * <p>Size in bytes of the uploaded part data.</p>
+ */
+ inline Part& WithSize(long long value) { SetSize(value); return *this;}
+
+ private:
+
+ int m_partNumber;
+ bool m_partNumberHasBeenSet;
+
+ Aws::Utils::DateTime m_lastModified;
+ bool m_lastModifiedHasBeenSet;
+
+ Aws::String m_eTag;
+ bool m_eTagHasBeenSet;
+
+ long long m_size;
+ bool m_sizeHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Payer.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Payer.h
new file mode 100644
index 00000000000..5e04c72bd25
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Payer.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class Payer
+ {
+ NOT_SET,
+ Requester,
+ BucketOwner
+ };
+
+namespace PayerMapper
+{
+AWS_S3_API Payer GetPayerForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForPayer(Payer value);
+} // namespace PayerMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Permission.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Permission.h
new file mode 100644
index 00000000000..a0c648a444b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Permission.h
@@ -0,0 +1,34 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class Permission
+ {
+ NOT_SET,
+ FULL_CONTROL,
+ WRITE,
+ WRITE_ACP,
+ READ,
+ READ_ACP
+ };
+
+namespace PermissionMapper
+{
+AWS_S3_API Permission GetPermissionForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForPermission(Permission value);
+} // namespace PermissionMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PolicyStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PolicyStatus.h
new file mode 100644
index 00000000000..cd0cfd393bc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PolicyStatus.h
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The container element for a bucket's policy status.</p><p><h3>See Also:</h3>
+ * <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PolicyStatus">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API PolicyStatus
+ {
+ public:
+ PolicyStatus();
+ PolicyStatus(const Aws::Utils::Xml::XmlNode& xmlNode);
+ PolicyStatus& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The policy status for this bucket. <code>TRUE</code> indicates that this
+ * bucket is public. <code>FALSE</code> indicates that the bucket is not
+ * public.</p>
+ */
+ inline bool GetIsPublic() const{ return m_isPublic; }
+
+ /**
+ * <p>The policy status for this bucket. <code>TRUE</code> indicates that this
+ * bucket is public. <code>FALSE</code> indicates that the bucket is not
+ * public.</p>
+ */
+ inline bool IsPublicHasBeenSet() const { return m_isPublicHasBeenSet; }
+
+ /**
+ * <p>The policy status for this bucket. <code>TRUE</code> indicates that this
+ * bucket is public. <code>FALSE</code> indicates that the bucket is not
+ * public.</p>
+ */
+ inline void SetIsPublic(bool value) { m_isPublicHasBeenSet = true; m_isPublic = value; }
+
+ /**
+ * <p>The policy status for this bucket. <code>TRUE</code> indicates that this
+ * bucket is public. <code>FALSE</code> indicates that the bucket is not
+ * public.</p>
+ */
+ inline PolicyStatus& WithIsPublic(bool value) { SetIsPublic(value); return *this;}
+
+ private:
+
+ bool m_isPublic;
+ bool m_isPublicHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Progress.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Progress.h
new file mode 100644
index 00000000000..a188e5b9c7e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Progress.h
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>This data type contains information about progress of an
+ * operation.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Progress">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Progress
+ {
+ public:
+ Progress();
+ Progress(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Progress& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The current number of object bytes scanned.</p>
+ */
+ inline long long GetBytesScanned() const{ return m_bytesScanned; }
+
+ /**
+ * <p>The current number of object bytes scanned.</p>
+ */
+ inline bool BytesScannedHasBeenSet() const { return m_bytesScannedHasBeenSet; }
+
+ /**
+ * <p>The current number of object bytes scanned.</p>
+ */
+ inline void SetBytesScanned(long long value) { m_bytesScannedHasBeenSet = true; m_bytesScanned = value; }
+
+ /**
+ * <p>The current number of object bytes scanned.</p>
+ */
+ inline Progress& WithBytesScanned(long long value) { SetBytesScanned(value); return *this;}
+
+
+ /**
+ * <p>The current number of uncompressed object bytes processed.</p>
+ */
+ inline long long GetBytesProcessed() const{ return m_bytesProcessed; }
+
+ /**
+ * <p>The current number of uncompressed object bytes processed.</p>
+ */
+ inline bool BytesProcessedHasBeenSet() const { return m_bytesProcessedHasBeenSet; }
+
+ /**
+ * <p>The current number of uncompressed object bytes processed.</p>
+ */
+ inline void SetBytesProcessed(long long value) { m_bytesProcessedHasBeenSet = true; m_bytesProcessed = value; }
+
+ /**
+ * <p>The current number of uncompressed object bytes processed.</p>
+ */
+ inline Progress& WithBytesProcessed(long long value) { SetBytesProcessed(value); return *this;}
+
+
+ /**
+ * <p>The current number of bytes of records payload data returned.</p>
+ */
+ inline long long GetBytesReturned() const{ return m_bytesReturned; }
+
+ /**
+ * <p>The current number of bytes of records payload data returned.</p>
+ */
+ inline bool BytesReturnedHasBeenSet() const { return m_bytesReturnedHasBeenSet; }
+
+ /**
+ * <p>The current number of bytes of records payload data returned.</p>
+ */
+ inline void SetBytesReturned(long long value) { m_bytesReturnedHasBeenSet = true; m_bytesReturned = value; }
+
+ /**
+ * <p>The current number of bytes of records payload data returned.</p>
+ */
+ inline Progress& WithBytesReturned(long long value) { SetBytesReturned(value); return *this;}
+
+ private:
+
+ long long m_bytesScanned;
+ bool m_bytesScannedHasBeenSet;
+
+ long long m_bytesProcessed;
+ bool m_bytesProcessedHasBeenSet;
+
+ long long m_bytesReturned;
+ bool m_bytesReturnedHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ProgressEvent.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ProgressEvent.h
new file mode 100644
index 00000000000..9b3b8edf850
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ProgressEvent.h
@@ -0,0 +1,79 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Progress.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>This data type contains information about the progress event of an
+ * operation.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ProgressEvent">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ProgressEvent
+ {
+ public:
+ ProgressEvent();
+ ProgressEvent(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ProgressEvent& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The Progress event details.</p>
+ */
+ inline const Progress& GetDetails() const{ return m_details; }
+
+ /**
+ * <p>The Progress event details.</p>
+ */
+ inline bool DetailsHasBeenSet() const { return m_detailsHasBeenSet; }
+
+ /**
+ * <p>The Progress event details.</p>
+ */
+ inline void SetDetails(const Progress& value) { m_detailsHasBeenSet = true; m_details = value; }
+
+ /**
+ * <p>The Progress event details.</p>
+ */
+ inline void SetDetails(Progress&& value) { m_detailsHasBeenSet = true; m_details = std::move(value); }
+
+ /**
+ * <p>The Progress event details.</p>
+ */
+ inline ProgressEvent& WithDetails(const Progress& value) { SetDetails(value); return *this;}
+
+ /**
+ * <p>The Progress event details.</p>
+ */
+ inline ProgressEvent& WithDetails(Progress&& value) { SetDetails(std::move(value)); return *this;}
+
+ private:
+
+ Progress m_details;
+ bool m_detailsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Protocol.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Protocol.h
new file mode 100644
index 00000000000..efaa9c8990d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Protocol.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class Protocol
+ {
+ NOT_SET,
+ http,
+ https
+ };
+
+namespace ProtocolMapper
+{
+AWS_S3_API Protocol GetProtocolForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForProtocol(Protocol value);
+} // namespace ProtocolMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PublicAccessBlockConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PublicAccessBlockConfiguration.h
new file mode 100644
index 00000000000..b1eefb24cdd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PublicAccessBlockConfiguration.h
@@ -0,0 +1,219 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The PublicAccessBlock configuration that you want to apply to this Amazon S3
+ * bucket. You can enable the configuration options in any combination. For more
+ * information about when Amazon S3 considers a bucket or object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>. </p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PublicAccessBlockConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API PublicAccessBlockConfiguration
+ {
+ public:
+ PublicAccessBlockConfiguration();
+ PublicAccessBlockConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ PublicAccessBlockConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public access control lists (ACLs)
+ * for this bucket and objects in this bucket. Setting this element to
+ * <code>TRUE</code> causes the following behavior:</p> <ul> <li> <p>PUT Bucket acl
+ * and PUT Object acl calls fail if the specified ACL is public.</p> </li> <li>
+ * <p>PUT Object calls fail if the request includes a public ACL.</p> </li> <li>
+ * <p>PUT Bucket calls fail if the request includes a public ACL.</p> </li> </ul>
+ * <p>Enabling this setting doesn't affect existing policies or ACLs.</p>
+ */
+ inline bool GetBlockPublicAcls() const{ return m_blockPublicAcls; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public access control lists (ACLs)
+ * for this bucket and objects in this bucket. Setting this element to
+ * <code>TRUE</code> causes the following behavior:</p> <ul> <li> <p>PUT Bucket acl
+ * and PUT Object acl calls fail if the specified ACL is public.</p> </li> <li>
+ * <p>PUT Object calls fail if the request includes a public ACL.</p> </li> <li>
+ * <p>PUT Bucket calls fail if the request includes a public ACL.</p> </li> </ul>
+ * <p>Enabling this setting doesn't affect existing policies or ACLs.</p>
+ */
+ inline bool BlockPublicAclsHasBeenSet() const { return m_blockPublicAclsHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public access control lists (ACLs)
+ * for this bucket and objects in this bucket. Setting this element to
+ * <code>TRUE</code> causes the following behavior:</p> <ul> <li> <p>PUT Bucket acl
+ * and PUT Object acl calls fail if the specified ACL is public.</p> </li> <li>
+ * <p>PUT Object calls fail if the request includes a public ACL.</p> </li> <li>
+ * <p>PUT Bucket calls fail if the request includes a public ACL.</p> </li> </ul>
+ * <p>Enabling this setting doesn't affect existing policies or ACLs.</p>
+ */
+ inline void SetBlockPublicAcls(bool value) { m_blockPublicAclsHasBeenSet = true; m_blockPublicAcls = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public access control lists (ACLs)
+ * for this bucket and objects in this bucket. Setting this element to
+ * <code>TRUE</code> causes the following behavior:</p> <ul> <li> <p>PUT Bucket acl
+ * and PUT Object acl calls fail if the specified ACL is public.</p> </li> <li>
+ * <p>PUT Object calls fail if the request includes a public ACL.</p> </li> <li>
+ * <p>PUT Bucket calls fail if the request includes a public ACL.</p> </li> </ul>
+ * <p>Enabling this setting doesn't affect existing policies or ACLs.</p>
+ */
+ inline PublicAccessBlockConfiguration& WithBlockPublicAcls(bool value) { SetBlockPublicAcls(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should ignore public ACLs for this bucket and
+ * objects in this bucket. Setting this element to <code>TRUE</code> causes Amazon
+ * S3 to ignore all public ACLs on this bucket and objects in this bucket.</p>
+ * <p>Enabling this setting doesn't affect the persistence of any existing ACLs and
+ * doesn't prevent new public ACLs from being set.</p>
+ */
+ inline bool GetIgnorePublicAcls() const{ return m_ignorePublicAcls; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should ignore public ACLs for this bucket and
+ * objects in this bucket. Setting this element to <code>TRUE</code> causes Amazon
+ * S3 to ignore all public ACLs on this bucket and objects in this bucket.</p>
+ * <p>Enabling this setting doesn't affect the persistence of any existing ACLs and
+ * doesn't prevent new public ACLs from being set.</p>
+ */
+ inline bool IgnorePublicAclsHasBeenSet() const { return m_ignorePublicAclsHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should ignore public ACLs for this bucket and
+ * objects in this bucket. Setting this element to <code>TRUE</code> causes Amazon
+ * S3 to ignore all public ACLs on this bucket and objects in this bucket.</p>
+ * <p>Enabling this setting doesn't affect the persistence of any existing ACLs and
+ * doesn't prevent new public ACLs from being set.</p>
+ */
+ inline void SetIgnorePublicAcls(bool value) { m_ignorePublicAclsHasBeenSet = true; m_ignorePublicAcls = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should ignore public ACLs for this bucket and
+ * objects in this bucket. Setting this element to <code>TRUE</code> causes Amazon
+ * S3 to ignore all public ACLs on this bucket and objects in this bucket.</p>
+ * <p>Enabling this setting doesn't affect the persistence of any existing ACLs and
+ * doesn't prevent new public ACLs from being set.</p>
+ */
+ inline PublicAccessBlockConfiguration& WithIgnorePublicAcls(bool value) { SetIgnorePublicAcls(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> causes Amazon S3 to reject
+ * calls to PUT Bucket policy if the specified bucket policy allows public access.
+ * </p> <p>Enabling this setting doesn't affect existing bucket policies.</p>
+ */
+ inline bool GetBlockPublicPolicy() const{ return m_blockPublicPolicy; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> causes Amazon S3 to reject
+ * calls to PUT Bucket policy if the specified bucket policy allows public access.
+ * </p> <p>Enabling this setting doesn't affect existing bucket policies.</p>
+ */
+ inline bool BlockPublicPolicyHasBeenSet() const { return m_blockPublicPolicyHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> causes Amazon S3 to reject
+ * calls to PUT Bucket policy if the specified bucket policy allows public access.
+ * </p> <p>Enabling this setting doesn't affect existing bucket policies.</p>
+ */
+ inline void SetBlockPublicPolicy(bool value) { m_blockPublicPolicyHasBeenSet = true; m_blockPublicPolicy = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should block public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> causes Amazon S3 to reject
+ * calls to PUT Bucket policy if the specified bucket policy allows public access.
+ * </p> <p>Enabling this setting doesn't affect existing bucket policies.</p>
+ */
+ inline PublicAccessBlockConfiguration& WithBlockPublicPolicy(bool value) { SetBlockPublicPolicy(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should restrict public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> restricts access to this
+ * bucket to only AWS service principals and authorized users within this account
+ * if the bucket has a public policy.</p> <p>Enabling this setting doesn't affect
+ * previously stored bucket policies, except that public and cross-account access
+ * within any public bucket policy, including non-public delegation to specific
+ * accounts, is blocked.</p>
+ */
+ inline bool GetRestrictPublicBuckets() const{ return m_restrictPublicBuckets; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should restrict public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> restricts access to this
+ * bucket to only AWS service principals and authorized users within this account
+ * if the bucket has a public policy.</p> <p>Enabling this setting doesn't affect
+ * previously stored bucket policies, except that public and cross-account access
+ * within any public bucket policy, including non-public delegation to specific
+ * accounts, is blocked.</p>
+ */
+ inline bool RestrictPublicBucketsHasBeenSet() const { return m_restrictPublicBucketsHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should restrict public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> restricts access to this
+ * bucket to only AWS service principals and authorized users within this account
+ * if the bucket has a public policy.</p> <p>Enabling this setting doesn't affect
+ * previously stored bucket policies, except that public and cross-account access
+ * within any public bucket policy, including non-public delegation to specific
+ * accounts, is blocked.</p>
+ */
+ inline void SetRestrictPublicBuckets(bool value) { m_restrictPublicBucketsHasBeenSet = true; m_restrictPublicBuckets = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should restrict public bucket policies for this
+ * bucket. Setting this element to <code>TRUE</code> restricts access to this
+ * bucket to only AWS service principals and authorized users within this account
+ * if the bucket has a public policy.</p> <p>Enabling this setting doesn't affect
+ * previously stored bucket policies, except that public and cross-account access
+ * within any public bucket policy, including non-public delegation to specific
+ * accounts, is blocked.</p>
+ */
+ inline PublicAccessBlockConfiguration& WithRestrictPublicBuckets(bool value) { SetRestrictPublicBuckets(value); return *this;}
+
+ private:
+
+ bool m_blockPublicAcls;
+ bool m_blockPublicAclsHasBeenSet;
+
+ bool m_ignorePublicAcls;
+ bool m_ignorePublicAclsHasBeenSet;
+
+ bool m_blockPublicPolicy;
+ bool m_blockPublicPolicyHasBeenSet;
+
+ bool m_restrictPublicBuckets;
+ bool m_restrictPublicBucketsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAccelerateConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAccelerateConfigurationRequest.h
new file mode 100644
index 00000000000..a595afdbcc7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAccelerateConfigurationRequest.h
@@ -0,0 +1,230 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/AccelerateConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketAccelerateConfigurationRequest : public S3Request
+ {
+ public:
+ PutBucketAccelerateConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketAccelerateConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which the accelerate configuration is set.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Container for setting the transfer acceleration state.</p>
+ */
+ inline const AccelerateConfiguration& GetAccelerateConfiguration() const{ return m_accelerateConfiguration; }
+
+ /**
+ * <p>Container for setting the transfer acceleration state.</p>
+ */
+ inline bool AccelerateConfigurationHasBeenSet() const { return m_accelerateConfigurationHasBeenSet; }
+
+ /**
+ * <p>Container for setting the transfer acceleration state.</p>
+ */
+ inline void SetAccelerateConfiguration(const AccelerateConfiguration& value) { m_accelerateConfigurationHasBeenSet = true; m_accelerateConfiguration = value; }
+
+ /**
+ * <p>Container for setting the transfer acceleration state.</p>
+ */
+ inline void SetAccelerateConfiguration(AccelerateConfiguration&& value) { m_accelerateConfigurationHasBeenSet = true; m_accelerateConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for setting the transfer acceleration state.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithAccelerateConfiguration(const AccelerateConfiguration& value) { SetAccelerateConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for setting the transfer acceleration state.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithAccelerateConfiguration(AccelerateConfiguration&& value) { SetAccelerateConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAccelerateConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketAccelerateConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketAccelerateConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketAccelerateConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ AccelerateConfiguration m_accelerateConfiguration;
+ bool m_accelerateConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAclRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAclRequest.h
new file mode 100644
index 00000000000..43d1f632870
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAclRequest.h
@@ -0,0 +1,585 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/s3/model/BucketCannedACL.h>
+#include <aws/s3/model/AccessControlPolicy.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketAclRequest : public S3Request
+ {
+ public:
+ PutBucketAclRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketAcl"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline const BucketCannedACL& GetACL() const{ return m_aCL; }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline bool ACLHasBeenSet() const { return m_aCLHasBeenSet; }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline void SetACL(const BucketCannedACL& value) { m_aCLHasBeenSet = true; m_aCL = value; }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline void SetACL(BucketCannedACL&& value) { m_aCLHasBeenSet = true; m_aCL = std::move(value); }
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithACL(const BucketCannedACL& value) { SetACL(value); return *this;}
+
+ /**
+ * <p>The canned ACL to apply to the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithACL(BucketCannedACL&& value) { SetACL(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline const AccessControlPolicy& GetAccessControlPolicy() const{ return m_accessControlPolicy; }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline bool AccessControlPolicyHasBeenSet() const { return m_accessControlPolicyHasBeenSet; }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline void SetAccessControlPolicy(const AccessControlPolicy& value) { m_accessControlPolicyHasBeenSet = true; m_accessControlPolicy = value; }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline void SetAccessControlPolicy(AccessControlPolicy&& value) { m_accessControlPolicyHasBeenSet = true; m_accessControlPolicy = std::move(value); }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline PutBucketAclRequest& WithAccessControlPolicy(const AccessControlPolicy& value) { SetAccessControlPolicy(value); return *this;}
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline PutBucketAclRequest& WithAccessControlPolicy(AccessControlPolicy&& value) { SetAccessControlPolicy(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline PutBucketAclRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline PutBucketAclRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket to which to apply the ACL.</p>
+ */
+ inline PutBucketAclRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketAclRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketAclRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketAclRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline const Aws::String& GetGrantFullControl() const{ return m_grantFullControl; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline bool GrantFullControlHasBeenSet() const { return m_grantFullControlHasBeenSet; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline void SetGrantFullControl(const Aws::String& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = value; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline void SetGrantFullControl(Aws::String&& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = std::move(value); }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline void SetGrantFullControl(const char* value) { m_grantFullControlHasBeenSet = true; m_grantFullControl.assign(value); }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantFullControl(const Aws::String& value) { SetGrantFullControl(value); return *this;}
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantFullControl(Aws::String&& value) { SetGrantFullControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantFullControl(const char* value) { SetGrantFullControl(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline const Aws::String& GetGrantRead() const{ return m_grantRead; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline bool GrantReadHasBeenSet() const { return m_grantReadHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline void SetGrantRead(const Aws::String& value) { m_grantReadHasBeenSet = true; m_grantRead = value; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline void SetGrantRead(Aws::String&& value) { m_grantReadHasBeenSet = true; m_grantRead = std::move(value); }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline void SetGrantRead(const char* value) { m_grantReadHasBeenSet = true; m_grantRead.assign(value); }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantRead(const Aws::String& value) { SetGrantRead(value); return *this;}
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantRead(Aws::String&& value) { SetGrantRead(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantRead(const char* value) { SetGrantRead(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline const Aws::String& GetGrantReadACP() const{ return m_grantReadACP; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline bool GrantReadACPHasBeenSet() const { return m_grantReadACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline void SetGrantReadACP(const Aws::String& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = value; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline void SetGrantReadACP(Aws::String&& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline void SetGrantReadACP(const char* value) { m_grantReadACPHasBeenSet = true; m_grantReadACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline PutBucketAclRequest& WithGrantReadACP(const Aws::String& value) { SetGrantReadACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline PutBucketAclRequest& WithGrantReadACP(Aws::String&& value) { SetGrantReadACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p>
+ */
+ inline PutBucketAclRequest& WithGrantReadACP(const char* value) { SetGrantReadACP(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline const Aws::String& GetGrantWrite() const{ return m_grantWrite; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline bool GrantWriteHasBeenSet() const { return m_grantWriteHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(const Aws::String& value) { m_grantWriteHasBeenSet = true; m_grantWrite = value; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(Aws::String&& value) { m_grantWriteHasBeenSet = true; m_grantWrite = std::move(value); }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(const char* value) { m_grantWriteHasBeenSet = true; m_grantWrite.assign(value); }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantWrite(const Aws::String& value) { SetGrantWrite(value); return *this;}
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantWrite(Aws::String&& value) { SetGrantWrite(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantWrite(const char* value) { SetGrantWrite(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline const Aws::String& GetGrantWriteACP() const{ return m_grantWriteACP; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline bool GrantWriteACPHasBeenSet() const { return m_grantWriteACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline void SetGrantWriteACP(const Aws::String& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = value; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline void SetGrantWriteACP(Aws::String&& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline void SetGrantWriteACP(const char* value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantWriteACP(const Aws::String& value) { SetGrantWriteACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantWriteACP(Aws::String&& value) { SetGrantWriteACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p>
+ */
+ inline PutBucketAclRequest& WithGrantWriteACP(const char* value) { SetGrantWriteACP(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAclRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAclRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAclRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketAclRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketAclRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketAclRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketAclRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ BucketCannedACL m_aCL;
+ bool m_aCLHasBeenSet;
+
+ AccessControlPolicy m_accessControlPolicy;
+ bool m_accessControlPolicyHasBeenSet;
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_grantFullControl;
+ bool m_grantFullControlHasBeenSet;
+
+ Aws::String m_grantRead;
+ bool m_grantReadHasBeenSet;
+
+ Aws::String m_grantReadACP;
+ bool m_grantReadACPHasBeenSet;
+
+ Aws::String m_grantWrite;
+ bool m_grantWriteHasBeenSet;
+
+ Aws::String m_grantWriteACP;
+ bool m_grantWriteACPHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAnalyticsConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAnalyticsConfigurationRequest.h
new file mode 100644
index 00000000000..a3dfe078c45
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketAnalyticsConfigurationRequest.h
@@ -0,0 +1,274 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/AnalyticsConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketAnalyticsConfigurationRequest : public S3Request
+ {
+ public:
+ PutBucketAnalyticsConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketAnalyticsConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which an analytics configuration is stored.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID that identifies the analytics configuration.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline const AnalyticsConfiguration& GetAnalyticsConfiguration() const{ return m_analyticsConfiguration; }
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline bool AnalyticsConfigurationHasBeenSet() const { return m_analyticsConfigurationHasBeenSet; }
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline void SetAnalyticsConfiguration(const AnalyticsConfiguration& value) { m_analyticsConfigurationHasBeenSet = true; m_analyticsConfiguration = value; }
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline void SetAnalyticsConfiguration(AnalyticsConfiguration&& value) { m_analyticsConfigurationHasBeenSet = true; m_analyticsConfiguration = std::move(value); }
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithAnalyticsConfiguration(const AnalyticsConfiguration& value) { SetAnalyticsConfiguration(value); return *this;}
+
+ /**
+ * <p>The configuration and any analyses for the analytics filter.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithAnalyticsConfiguration(AnalyticsConfiguration&& value) { SetAnalyticsConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketAnalyticsConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketAnalyticsConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketAnalyticsConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketAnalyticsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ AnalyticsConfiguration m_analyticsConfiguration;
+ bool m_analyticsConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketCorsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketCorsRequest.h
new file mode 100644
index 00000000000..5273651e51b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketCorsRequest.h
@@ -0,0 +1,340 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/CORSConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketCorsRequest : public S3Request
+ {
+ public:
+ PutBucketCorsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketCors"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline PutBucketCorsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline PutBucketCorsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the bucket impacted by the <code>cors</code>configuration.</p>
+ */
+ inline PutBucketCorsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Describes the cross-origin access configuration for objects in an Amazon S3
+ * bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline const CORSConfiguration& GetCORSConfiguration() const{ return m_cORSConfiguration; }
+
+ /**
+ * <p>Describes the cross-origin access configuration for objects in an Amazon S3
+ * bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline bool CORSConfigurationHasBeenSet() const { return m_cORSConfigurationHasBeenSet; }
+
+ /**
+ * <p>Describes the cross-origin access configuration for objects in an Amazon S3
+ * bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline void SetCORSConfiguration(const CORSConfiguration& value) { m_cORSConfigurationHasBeenSet = true; m_cORSConfiguration = value; }
+
+ /**
+ * <p>Describes the cross-origin access configuration for objects in an Amazon S3
+ * bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline void SetCORSConfiguration(CORSConfiguration&& value) { m_cORSConfigurationHasBeenSet = true; m_cORSConfiguration = std::move(value); }
+
+ /**
+ * <p>Describes the cross-origin access configuration for objects in an Amazon S3
+ * bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline PutBucketCorsRequest& WithCORSConfiguration(const CORSConfiguration& value) { SetCORSConfiguration(value); return *this;}
+
+ /**
+ * <p>Describes the cross-origin access configuration for objects in an Amazon S3
+ * bucket. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html">Enabling
+ * Cross-Origin Resource Sharing</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline PutBucketCorsRequest& WithCORSConfiguration(CORSConfiguration&& value) { SetCORSConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketCorsRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketCorsRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.</a> </p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketCorsRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketCorsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketCorsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketCorsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketCorsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketCorsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketCorsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketCorsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketCorsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketCorsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketCorsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ CORSConfiguration m_cORSConfiguration;
+ bool m_cORSConfigurationHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketEncryptionRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketEncryptionRequest.h
new file mode 100644
index 00000000000..4df4aa86489
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketEncryptionRequest.h
@@ -0,0 +1,328 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ServerSideEncryptionConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketEncryptionRequest : public S3Request
+ {
+ public:
+ PutBucketEncryptionRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketEncryption"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline PutBucketEncryptionRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline PutBucketEncryptionRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies default encryption for a bucket using server-side encryption with
+ * Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS
+ * (SSE-KMS). For information about the Amazon S3 default encryption feature, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html">Amazon
+ * S3 Default Bucket Encryption</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline PutBucketEncryptionRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline PutBucketEncryptionRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline PutBucketEncryptionRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the server-side encryption
+ * configuration.</p> <p>For requests made using the AWS Command Line Interface
+ * (CLI) or AWS SDKs, this field is calculated automatically.</p>
+ */
+ inline PutBucketEncryptionRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+
+ inline const ServerSideEncryptionConfiguration& GetServerSideEncryptionConfiguration() const{ return m_serverSideEncryptionConfiguration; }
+
+
+ inline bool ServerSideEncryptionConfigurationHasBeenSet() const { return m_serverSideEncryptionConfigurationHasBeenSet; }
+
+
+ inline void SetServerSideEncryptionConfiguration(const ServerSideEncryptionConfiguration& value) { m_serverSideEncryptionConfigurationHasBeenSet = true; m_serverSideEncryptionConfiguration = value; }
+
+
+ inline void SetServerSideEncryptionConfiguration(ServerSideEncryptionConfiguration&& value) { m_serverSideEncryptionConfigurationHasBeenSet = true; m_serverSideEncryptionConfiguration = std::move(value); }
+
+
+ inline PutBucketEncryptionRequest& WithServerSideEncryptionConfiguration(const ServerSideEncryptionConfiguration& value) { SetServerSideEncryptionConfiguration(value); return *this;}
+
+
+ inline PutBucketEncryptionRequest& WithServerSideEncryptionConfiguration(ServerSideEncryptionConfiguration&& value) { SetServerSideEncryptionConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketEncryptionRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketEncryptionRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketEncryptionRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketEncryptionRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketEncryptionRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketEncryptionRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketEncryptionRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketEncryptionRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketEncryptionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketEncryptionRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ ServerSideEncryptionConfiguration m_serverSideEncryptionConfiguration;
+ bool m_serverSideEncryptionConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketIntelligentTieringConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketIntelligentTieringConfigurationRequest.h
new file mode 100644
index 00000000000..9055e5c1d8f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketIntelligentTieringConfigurationRequest.h
@@ -0,0 +1,220 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/IntelligentTieringConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketIntelligentTieringConfigurationRequest : public S3Request
+ {
+ public:
+ PutBucketIntelligentTieringConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketIntelligentTieringConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose configuration you want to modify or
+ * retrieve.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline const IntelligentTieringConfiguration& GetIntelligentTieringConfiguration() const{ return m_intelligentTieringConfiguration; }
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline bool IntelligentTieringConfigurationHasBeenSet() const { return m_intelligentTieringConfigurationHasBeenSet; }
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetIntelligentTieringConfiguration(const IntelligentTieringConfiguration& value) { m_intelligentTieringConfigurationHasBeenSet = true; m_intelligentTieringConfiguration = value; }
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline void SetIntelligentTieringConfiguration(IntelligentTieringConfiguration&& value) { m_intelligentTieringConfigurationHasBeenSet = true; m_intelligentTieringConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithIntelligentTieringConfiguration(const IntelligentTieringConfiguration& value) { SetIntelligentTieringConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for S3 Intelligent-Tiering configuration.</p>
+ */
+ inline PutBucketIntelligentTieringConfigurationRequest& WithIntelligentTieringConfiguration(IntelligentTieringConfiguration&& value) { SetIntelligentTieringConfiguration(std::move(value)); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketIntelligentTieringConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ IntelligentTieringConfiguration m_intelligentTieringConfiguration;
+ bool m_intelligentTieringConfigurationHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketInventoryConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketInventoryConfigurationRequest.h
new file mode 100644
index 00000000000..bbddeea373e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketInventoryConfigurationRequest.h
@@ -0,0 +1,274 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/InventoryConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketInventoryConfigurationRequest : public S3Request
+ {
+ public:
+ PutBucketInventoryConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketInventoryConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket where the inventory configuration will be stored.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the inventory configuration.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline const InventoryConfiguration& GetInventoryConfiguration() const{ return m_inventoryConfiguration; }
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline bool InventoryConfigurationHasBeenSet() const { return m_inventoryConfigurationHasBeenSet; }
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline void SetInventoryConfiguration(const InventoryConfiguration& value) { m_inventoryConfigurationHasBeenSet = true; m_inventoryConfiguration = value; }
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline void SetInventoryConfiguration(InventoryConfiguration&& value) { m_inventoryConfigurationHasBeenSet = true; m_inventoryConfiguration = std::move(value); }
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithInventoryConfiguration(const InventoryConfiguration& value) { SetInventoryConfiguration(value); return *this;}
+
+ /**
+ * <p>Specifies the inventory configuration.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithInventoryConfiguration(InventoryConfiguration&& value) { SetInventoryConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketInventoryConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketInventoryConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketInventoryConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketInventoryConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ InventoryConfiguration m_inventoryConfiguration;
+ bool m_inventoryConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLifecycleConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLifecycleConfigurationRequest.h
new file mode 100644
index 00000000000..d47ef160678
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLifecycleConfigurationRequest.h
@@ -0,0 +1,232 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/BucketLifecycleConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketLifecycleConfigurationRequest : public S3Request
+ {
+ public:
+ PutBucketLifecycleConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketLifecycleConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to set the configuration.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Container for lifecycle rules. You can add as many as 1,000 rules.</p>
+ */
+ inline const BucketLifecycleConfiguration& GetLifecycleConfiguration() const{ return m_lifecycleConfiguration; }
+
+ /**
+ * <p>Container for lifecycle rules. You can add as many as 1,000 rules.</p>
+ */
+ inline bool LifecycleConfigurationHasBeenSet() const { return m_lifecycleConfigurationHasBeenSet; }
+
+ /**
+ * <p>Container for lifecycle rules. You can add as many as 1,000 rules.</p>
+ */
+ inline void SetLifecycleConfiguration(const BucketLifecycleConfiguration& value) { m_lifecycleConfigurationHasBeenSet = true; m_lifecycleConfiguration = value; }
+
+ /**
+ * <p>Container for lifecycle rules. You can add as many as 1,000 rules.</p>
+ */
+ inline void SetLifecycleConfiguration(BucketLifecycleConfiguration&& value) { m_lifecycleConfigurationHasBeenSet = true; m_lifecycleConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for lifecycle rules. You can add as many as 1,000 rules.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithLifecycleConfiguration(const BucketLifecycleConfiguration& value) { SetLifecycleConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for lifecycle rules. You can add as many as 1,000 rules.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithLifecycleConfiguration(BucketLifecycleConfiguration&& value) { SetLifecycleConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketLifecycleConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketLifecycleConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketLifecycleConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketLifecycleConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ BucketLifecycleConfiguration m_lifecycleConfiguration;
+ bool m_lifecycleConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLoggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLoggingRequest.h
new file mode 100644
index 00000000000..925daf94f92
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketLoggingRequest.h
@@ -0,0 +1,292 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/BucketLoggingStatus.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketLoggingRequest : public S3Request
+ {
+ public:
+ PutBucketLoggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketLogging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline PutBucketLoggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline PutBucketLoggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which to set the logging parameters.</p>
+ */
+ inline PutBucketLoggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Container for logging status information.</p>
+ */
+ inline const BucketLoggingStatus& GetBucketLoggingStatus() const{ return m_bucketLoggingStatus; }
+
+ /**
+ * <p>Container for logging status information.</p>
+ */
+ inline bool BucketLoggingStatusHasBeenSet() const { return m_bucketLoggingStatusHasBeenSet; }
+
+ /**
+ * <p>Container for logging status information.</p>
+ */
+ inline void SetBucketLoggingStatus(const BucketLoggingStatus& value) { m_bucketLoggingStatusHasBeenSet = true; m_bucketLoggingStatus = value; }
+
+ /**
+ * <p>Container for logging status information.</p>
+ */
+ inline void SetBucketLoggingStatus(BucketLoggingStatus&& value) { m_bucketLoggingStatusHasBeenSet = true; m_bucketLoggingStatus = std::move(value); }
+
+ /**
+ * <p>Container for logging status information.</p>
+ */
+ inline PutBucketLoggingRequest& WithBucketLoggingStatus(const BucketLoggingStatus& value) { SetBucketLoggingStatus(value); return *this;}
+
+ /**
+ * <p>Container for logging status information.</p>
+ */
+ inline PutBucketLoggingRequest& WithBucketLoggingStatus(BucketLoggingStatus&& value) { SetBucketLoggingStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutBucketLoggingRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutBucketLoggingRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash of the <code>PutBucketLogging</code> request body.</p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutBucketLoggingRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketLoggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketLoggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketLoggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketLoggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketLoggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketLoggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketLoggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketLoggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketLoggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketLoggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketLoggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketLoggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ BucketLoggingStatus m_bucketLoggingStatus;
+ bool m_bucketLoggingStatusHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketMetricsConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketMetricsConfigurationRequest.h
new file mode 100644
index 00000000000..c61e5e8b0cd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketMetricsConfigurationRequest.h
@@ -0,0 +1,274 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/MetricsConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketMetricsConfigurationRequest : public S3Request
+ {
+ public:
+ PutBucketMetricsConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketMetricsConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket for which the metrics configuration is set.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline const Aws::String& GetId() const{ return m_id; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+ /**
+ * <p>The ID used to identify the metrics configuration.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline const MetricsConfiguration& GetMetricsConfiguration() const{ return m_metricsConfiguration; }
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline bool MetricsConfigurationHasBeenSet() const { return m_metricsConfigurationHasBeenSet; }
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline void SetMetricsConfiguration(const MetricsConfiguration& value) { m_metricsConfigurationHasBeenSet = true; m_metricsConfiguration = value; }
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline void SetMetricsConfiguration(MetricsConfiguration&& value) { m_metricsConfigurationHasBeenSet = true; m_metricsConfiguration = std::move(value); }
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithMetricsConfiguration(const MetricsConfiguration& value) { SetMetricsConfiguration(value); return *this;}
+
+ /**
+ * <p>Specifies the metrics configuration.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithMetricsConfiguration(MetricsConfiguration&& value) { SetMetricsConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketMetricsConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketMetricsConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketMetricsConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketMetricsConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ MetricsConfiguration m_metricsConfiguration;
+ bool m_metricsConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketNotificationConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketNotificationConfigurationRequest.h
new file mode 100644
index 00000000000..364fe22be84
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketNotificationConfigurationRequest.h
@@ -0,0 +1,218 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/NotificationConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketNotificationConfigurationRequest : public S3Request
+ {
+ public:
+ PutBucketNotificationConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketNotificationConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline PutBucketNotificationConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline PutBucketNotificationConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline PutBucketNotificationConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+
+ inline const NotificationConfiguration& GetNotificationConfiguration() const{ return m_notificationConfiguration; }
+
+
+ inline bool NotificationConfigurationHasBeenSet() const { return m_notificationConfigurationHasBeenSet; }
+
+
+ inline void SetNotificationConfiguration(const NotificationConfiguration& value) { m_notificationConfigurationHasBeenSet = true; m_notificationConfiguration = value; }
+
+
+ inline void SetNotificationConfiguration(NotificationConfiguration&& value) { m_notificationConfigurationHasBeenSet = true; m_notificationConfiguration = std::move(value); }
+
+
+ inline PutBucketNotificationConfigurationRequest& WithNotificationConfiguration(const NotificationConfiguration& value) { SetNotificationConfiguration(value); return *this;}
+
+
+ inline PutBucketNotificationConfigurationRequest& WithNotificationConfiguration(NotificationConfiguration&& value) { SetNotificationConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketNotificationConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketNotificationConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketNotificationConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketNotificationConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketNotificationConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketNotificationConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ NotificationConfiguration m_notificationConfiguration;
+ bool m_notificationConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketOwnershipControlsRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketOwnershipControlsRequest.h
new file mode 100644
index 00000000000..7bf3cda70e7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketOwnershipControlsRequest.h
@@ -0,0 +1,306 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/OwnershipControls.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketOwnershipControlsRequest : public S3Request
+ {
+ public:
+ PutBucketOwnershipControlsRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketOwnershipControls"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>OwnershipControls</code> you
+ * want to set.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash of the <code>OwnershipControls</code> request body. </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * that you want to apply to this Amazon S3 bucket.</p>
+ */
+ inline const OwnershipControls& GetOwnershipControls() const{ return m_ownershipControls; }
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * that you want to apply to this Amazon S3 bucket.</p>
+ */
+ inline bool OwnershipControlsHasBeenSet() const { return m_ownershipControlsHasBeenSet; }
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * that you want to apply to this Amazon S3 bucket.</p>
+ */
+ inline void SetOwnershipControls(const OwnershipControls& value) { m_ownershipControlsHasBeenSet = true; m_ownershipControls = value; }
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * that you want to apply to this Amazon S3 bucket.</p>
+ */
+ inline void SetOwnershipControls(OwnershipControls&& value) { m_ownershipControlsHasBeenSet = true; m_ownershipControls = std::move(value); }
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * that you want to apply to this Amazon S3 bucket.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithOwnershipControls(const OwnershipControls& value) { SetOwnershipControls(value); return *this;}
+
+ /**
+ * <p>The <code>OwnershipControls</code> (BucketOwnerPreferred or ObjectWriter)
+ * that you want to apply to this Amazon S3 bucket.</p>
+ */
+ inline PutBucketOwnershipControlsRequest& WithOwnershipControls(OwnershipControls&& value) { SetOwnershipControls(std::move(value)); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketOwnershipControlsRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketOwnershipControlsRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketOwnershipControlsRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ OwnershipControls m_ownershipControls;
+ bool m_ownershipControlsHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketPolicyRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketPolicyRequest.h
new file mode 100644
index 00000000000..8d916cd2188
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketPolicyRequest.h
@@ -0,0 +1,284 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketPolicyRequest : public StreamingS3Request
+ {
+ public:
+ PutBucketPolicyRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketPolicy"; }
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline PutBucketPolicyRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline PutBucketPolicyRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket.</p>
+ */
+ inline PutBucketPolicyRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutBucketPolicyRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutBucketPolicyRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash of the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutBucketPolicyRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Set this parameter to true to confirm that you want to remove your
+ * permissions to change this bucket policy in the future.</p>
+ */
+ inline bool GetConfirmRemoveSelfBucketAccess() const{ return m_confirmRemoveSelfBucketAccess; }
+
+ /**
+ * <p>Set this parameter to true to confirm that you want to remove your
+ * permissions to change this bucket policy in the future.</p>
+ */
+ inline bool ConfirmRemoveSelfBucketAccessHasBeenSet() const { return m_confirmRemoveSelfBucketAccessHasBeenSet; }
+
+ /**
+ * <p>Set this parameter to true to confirm that you want to remove your
+ * permissions to change this bucket policy in the future.</p>
+ */
+ inline void SetConfirmRemoveSelfBucketAccess(bool value) { m_confirmRemoveSelfBucketAccessHasBeenSet = true; m_confirmRemoveSelfBucketAccess = value; }
+
+ /**
+ * <p>Set this parameter to true to confirm that you want to remove your
+ * permissions to change this bucket policy in the future.</p>
+ */
+ inline PutBucketPolicyRequest& WithConfirmRemoveSelfBucketAccess(bool value) { SetConfirmRemoveSelfBucketAccess(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketPolicyRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketPolicyRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketPolicyRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketPolicyRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketPolicyRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketPolicyRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketPolicyRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketPolicyRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketPolicyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketPolicyRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ bool m_confirmRemoveSelfBucketAccess;
+ bool m_confirmRemoveSelfBucketAccessHasBeenSet;
+
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketReplicationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketReplicationRequest.h
new file mode 100644
index 00000000000..db4696e01dd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketReplicationRequest.h
@@ -0,0 +1,348 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ReplicationConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketReplicationRequest : public S3Request
+ {
+ public:
+ PutBucketReplicationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketReplication"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline PutBucketReplicationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline PutBucketReplicationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket</p>
+ */
+ inline PutBucketReplicationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketReplicationRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketReplicationRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketReplicationRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+
+ inline const ReplicationConfiguration& GetReplicationConfiguration() const{ return m_replicationConfiguration; }
+
+
+ inline bool ReplicationConfigurationHasBeenSet() const { return m_replicationConfigurationHasBeenSet; }
+
+
+ inline void SetReplicationConfiguration(const ReplicationConfiguration& value) { m_replicationConfigurationHasBeenSet = true; m_replicationConfiguration = value; }
+
+
+ inline void SetReplicationConfiguration(ReplicationConfiguration&& value) { m_replicationConfigurationHasBeenSet = true; m_replicationConfiguration = std::move(value); }
+
+
+ inline PutBucketReplicationRequest& WithReplicationConfiguration(const ReplicationConfiguration& value) { SetReplicationConfiguration(value); return *this;}
+
+
+ inline PutBucketReplicationRequest& WithReplicationConfiguration(ReplicationConfiguration&& value) { SetReplicationConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline const Aws::String& GetToken() const{ return m_token; }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline bool TokenHasBeenSet() const { return m_tokenHasBeenSet; }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline void SetToken(const Aws::String& value) { m_tokenHasBeenSet = true; m_token = value; }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline void SetToken(Aws::String&& value) { m_tokenHasBeenSet = true; m_token = std::move(value); }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline void SetToken(const char* value) { m_tokenHasBeenSet = true; m_token.assign(value); }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline PutBucketReplicationRequest& WithToken(const Aws::String& value) { SetToken(value); return *this;}
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline PutBucketReplicationRequest& WithToken(Aws::String&& value) { SetToken(std::move(value)); return *this;}
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline PutBucketReplicationRequest& WithToken(const char* value) { SetToken(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketReplicationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketReplicationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketReplicationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketReplicationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketReplicationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketReplicationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketReplicationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketReplicationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketReplicationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketReplicationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ ReplicationConfiguration m_replicationConfiguration;
+ bool m_replicationConfigurationHasBeenSet;
+
+ Aws::String m_token;
+ bool m_tokenHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketRequestPaymentRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketRequestPaymentRequest.h
new file mode 100644
index 00000000000..f5840d203d2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketRequestPaymentRequest.h
@@ -0,0 +1,316 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPaymentConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketRequestPaymentRequest : public S3Request
+ {
+ public:
+ PutBucketRequestPaymentRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketRequestPayment"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Container for Payer.</p>
+ */
+ inline const RequestPaymentConfiguration& GetRequestPaymentConfiguration() const{ return m_requestPaymentConfiguration; }
+
+ /**
+ * <p>Container for Payer.</p>
+ */
+ inline bool RequestPaymentConfigurationHasBeenSet() const { return m_requestPaymentConfigurationHasBeenSet; }
+
+ /**
+ * <p>Container for Payer.</p>
+ */
+ inline void SetRequestPaymentConfiguration(const RequestPaymentConfiguration& value) { m_requestPaymentConfigurationHasBeenSet = true; m_requestPaymentConfiguration = value; }
+
+ /**
+ * <p>Container for Payer.</p>
+ */
+ inline void SetRequestPaymentConfiguration(RequestPaymentConfiguration&& value) { m_requestPaymentConfigurationHasBeenSet = true; m_requestPaymentConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for Payer.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithRequestPaymentConfiguration(const RequestPaymentConfiguration& value) { SetRequestPaymentConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for Payer.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithRequestPaymentConfiguration(RequestPaymentConfiguration&& value) { SetRequestPaymentConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketRequestPaymentRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketRequestPaymentRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketRequestPaymentRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketRequestPaymentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketRequestPaymentRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketRequestPaymentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketRequestPaymentRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ RequestPaymentConfiguration m_requestPaymentConfiguration;
+ bool m_requestPaymentConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketTaggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketTaggingRequest.h
new file mode 100644
index 00000000000..1454f4239f4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketTaggingRequest.h
@@ -0,0 +1,316 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Tagging.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketTaggingRequest : public S3Request
+ {
+ public:
+ PutBucketTaggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketTagging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketTaggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketTaggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketTaggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketTaggingRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketTaggingRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketTaggingRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements.</p>
+ */
+ inline const Tagging& GetTagging() const{ return m_tagging; }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements.</p>
+ */
+ inline bool TaggingHasBeenSet() const { return m_taggingHasBeenSet; }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements.</p>
+ */
+ inline void SetTagging(const Tagging& value) { m_taggingHasBeenSet = true; m_tagging = value; }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements.</p>
+ */
+ inline void SetTagging(Tagging&& value) { m_taggingHasBeenSet = true; m_tagging = std::move(value); }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements.</p>
+ */
+ inline PutBucketTaggingRequest& WithTagging(const Tagging& value) { SetTagging(value); return *this;}
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements.</p>
+ */
+ inline PutBucketTaggingRequest& WithTagging(Tagging&& value) { SetTagging(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketTaggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketTaggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketTaggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketTaggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketTaggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketTaggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketTaggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Tagging m_tagging;
+ bool m_taggingHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketVersioningRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketVersioningRequest.h
new file mode 100644
index 00000000000..9e306b05b21
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketVersioningRequest.h
@@ -0,0 +1,368 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/VersioningConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketVersioningRequest : public S3Request
+ {
+ public:
+ PutBucketVersioningRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketVersioning"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketVersioningRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketVersioningRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketVersioningRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketVersioningRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketVersioningRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>&gt;The base64-encoded 128-bit MD5 digest of the data. You must use this
+ * header as a message integrity check to verify that the request body was not
+ * corrupted in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketVersioningRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline const Aws::String& GetMFA() const{ return m_mFA; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline bool MFAHasBeenSet() const { return m_mFAHasBeenSet; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline void SetMFA(const Aws::String& value) { m_mFAHasBeenSet = true; m_mFA = value; }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline void SetMFA(Aws::String&& value) { m_mFAHasBeenSet = true; m_mFA = std::move(value); }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline void SetMFA(const char* value) { m_mFAHasBeenSet = true; m_mFA.assign(value); }
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline PutBucketVersioningRequest& WithMFA(const Aws::String& value) { SetMFA(value); return *this;}
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline PutBucketVersioningRequest& WithMFA(Aws::String&& value) { SetMFA(std::move(value)); return *this;}
+
+ /**
+ * <p>The concatenation of the authentication device's serial number, a space, and
+ * the value that is displayed on your authentication device.</p>
+ */
+ inline PutBucketVersioningRequest& WithMFA(const char* value) { SetMFA(value); return *this;}
+
+
+ /**
+ * <p>Container for setting the versioning state.</p>
+ */
+ inline const VersioningConfiguration& GetVersioningConfiguration() const{ return m_versioningConfiguration; }
+
+ /**
+ * <p>Container for setting the versioning state.</p>
+ */
+ inline bool VersioningConfigurationHasBeenSet() const { return m_versioningConfigurationHasBeenSet; }
+
+ /**
+ * <p>Container for setting the versioning state.</p>
+ */
+ inline void SetVersioningConfiguration(const VersioningConfiguration& value) { m_versioningConfigurationHasBeenSet = true; m_versioningConfiguration = value; }
+
+ /**
+ * <p>Container for setting the versioning state.</p>
+ */
+ inline void SetVersioningConfiguration(VersioningConfiguration&& value) { m_versioningConfigurationHasBeenSet = true; m_versioningConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for setting the versioning state.</p>
+ */
+ inline PutBucketVersioningRequest& WithVersioningConfiguration(const VersioningConfiguration& value) { SetVersioningConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for setting the versioning state.</p>
+ */
+ inline PutBucketVersioningRequest& WithVersioningConfiguration(VersioningConfiguration&& value) { SetVersioningConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketVersioningRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketVersioningRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketVersioningRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketVersioningRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketVersioningRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketVersioningRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketVersioningRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketVersioningRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketVersioningRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketVersioningRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketVersioningRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketVersioningRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_mFA;
+ bool m_mFAHasBeenSet;
+
+ VersioningConfiguration m_versioningConfiguration;
+ bool m_versioningConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketWebsiteRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketWebsiteRequest.h
new file mode 100644
index 00000000000..695dae41c82
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutBucketWebsiteRequest.h
@@ -0,0 +1,316 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/WebsiteConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutBucketWebsiteRequest : public S3Request
+ {
+ public:
+ PutBucketWebsiteRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutBucketWebsite"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketWebsiteRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketWebsiteRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p>
+ */
+ inline PutBucketWebsiteRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketWebsiteRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketWebsiteRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. You must use this header
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, see <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>.</p> <p>For requests
+ * made using the AWS Command Line Interface (CLI) or AWS SDKs, this field is
+ * calculated automatically.</p>
+ */
+ inline PutBucketWebsiteRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline const WebsiteConfiguration& GetWebsiteConfiguration() const{ return m_websiteConfiguration; }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline bool WebsiteConfigurationHasBeenSet() const { return m_websiteConfigurationHasBeenSet; }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline void SetWebsiteConfiguration(const WebsiteConfiguration& value) { m_websiteConfigurationHasBeenSet = true; m_websiteConfiguration = value; }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline void SetWebsiteConfiguration(WebsiteConfiguration&& value) { m_websiteConfigurationHasBeenSet = true; m_websiteConfiguration = std::move(value); }
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline PutBucketWebsiteRequest& WithWebsiteConfiguration(const WebsiteConfiguration& value) { SetWebsiteConfiguration(value); return *this;}
+
+ /**
+ * <p>Container for the request.</p>
+ */
+ inline PutBucketWebsiteRequest& WithWebsiteConfiguration(WebsiteConfiguration&& value) { SetWebsiteConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketWebsiteRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketWebsiteRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutBucketWebsiteRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutBucketWebsiteRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutBucketWebsiteRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutBucketWebsiteRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketWebsiteRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutBucketWebsiteRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutBucketWebsiteRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutBucketWebsiteRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ WebsiteConfiguration m_websiteConfiguration;
+ bool m_websiteConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclRequest.h
new file mode 100644
index 00000000000..e2ec137af3e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclRequest.h
@@ -0,0 +1,948 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/s3/model/ObjectCannedACL.h>
+#include <aws/s3/model/AccessControlPolicy.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutObjectAclRequest : public S3Request
+ {
+ public:
+ PutObjectAclRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutObjectAcl"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p>
+ */
+ inline const ObjectCannedACL& GetACL() const{ return m_aCL; }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p>
+ */
+ inline bool ACLHasBeenSet() const { return m_aCLHasBeenSet; }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p>
+ */
+ inline void SetACL(const ObjectCannedACL& value) { m_aCLHasBeenSet = true; m_aCL = value; }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p>
+ */
+ inline void SetACL(ObjectCannedACL&& value) { m_aCLHasBeenSet = true; m_aCL = std::move(value); }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p>
+ */
+ inline PutObjectAclRequest& WithACL(const ObjectCannedACL& value) { SetACL(value); return *this;}
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p>
+ */
+ inline PutObjectAclRequest& WithACL(ObjectCannedACL&& value) { SetACL(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline const AccessControlPolicy& GetAccessControlPolicy() const{ return m_accessControlPolicy; }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline bool AccessControlPolicyHasBeenSet() const { return m_accessControlPolicyHasBeenSet; }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline void SetAccessControlPolicy(const AccessControlPolicy& value) { m_accessControlPolicyHasBeenSet = true; m_accessControlPolicy = value; }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline void SetAccessControlPolicy(AccessControlPolicy&& value) { m_accessControlPolicyHasBeenSet = true; m_accessControlPolicy = std::move(value); }
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline PutObjectAclRequest& WithAccessControlPolicy(const AccessControlPolicy& value) { SetAccessControlPolicy(value); return *this;}
+
+ /**
+ * <p>Contains the elements that set the ACL permissions for an object per
+ * grantee.</p>
+ */
+ inline PutObjectAclRequest& WithAccessControlPolicy(AccessControlPolicy&& value) { SetAccessControlPolicy(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectAclRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectAclRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name that contains the object to which you want to attach the ACL.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectAclRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutObjectAclRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutObjectAclRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the data. This header must be used
+ * as a message integrity check to verify that the request body was not corrupted
+ * in transit. For more information, go to <a
+ * href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864.&gt;</a> </p> <p>For
+ * requests made using the AWS Command Line Interface (CLI) or AWS SDKs, this field
+ * is calculated automatically.</p>
+ */
+ inline PutObjectAclRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantFullControl() const{ return m_grantFullControl; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantFullControlHasBeenSet() const { return m_grantFullControlHasBeenSet; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const Aws::String& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = value; }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(Aws::String&& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = std::move(value); }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const char* value) { m_grantFullControlHasBeenSet = true; m_grantFullControl.assign(value); }
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantFullControl(const Aws::String& value) { SetGrantFullControl(value); return *this;}
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantFullControl(Aws::String&& value) { SetGrantFullControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee the read, write, read ACP, and write ACP permissions on the
+ * bucket.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantFullControl(const char* value) { SetGrantFullControl(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantRead() const{ return m_grantRead; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadHasBeenSet() const { return m_grantReadHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const Aws::String& value) { m_grantReadHasBeenSet = true; m_grantRead = value; }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(Aws::String&& value) { m_grantReadHasBeenSet = true; m_grantRead = std::move(value); }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const char* value) { m_grantReadHasBeenSet = true; m_grantRead.assign(value); }
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantRead(const Aws::String& value) { SetGrantRead(value); return *this;}
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantRead(Aws::String&& value) { SetGrantRead(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to list the objects in the bucket.</p> <p>This action is not
+ * supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantRead(const char* value) { SetGrantRead(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantReadACP() const{ return m_grantReadACP; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadACPHasBeenSet() const { return m_grantReadACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const Aws::String& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = value; }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(Aws::String&& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const char* value) { m_grantReadACPHasBeenSet = true; m_grantReadACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantReadACP(const Aws::String& value) { SetGrantReadACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantReadACP(Aws::String&& value) { SetGrantReadACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the bucket ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantReadACP(const char* value) { SetGrantReadACP(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline const Aws::String& GetGrantWrite() const{ return m_grantWrite; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline bool GrantWriteHasBeenSet() const { return m_grantWriteHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(const Aws::String& value) { m_grantWriteHasBeenSet = true; m_grantWrite = value; }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(Aws::String&& value) { m_grantWriteHasBeenSet = true; m_grantWrite = std::move(value); }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline void SetGrantWrite(const char* value) { m_grantWriteHasBeenSet = true; m_grantWrite.assign(value); }
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline PutObjectAclRequest& WithGrantWrite(const Aws::String& value) { SetGrantWrite(value); return *this;}
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline PutObjectAclRequest& WithGrantWrite(Aws::String&& value) { SetGrantWrite(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to create, overwrite, and delete any object in the bucket.</p>
+ */
+ inline PutObjectAclRequest& WithGrantWrite(const char* value) { SetGrantWrite(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantWriteACP() const{ return m_grantWriteACP; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantWriteACPHasBeenSet() const { return m_grantWriteACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const Aws::String& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = value; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(Aws::String&& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const char* value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantWriteACP(const Aws::String& value) { SetGrantWriteACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantWriteACP(Aws::String&& value) { SetGrantWriteACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable bucket.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectAclRequest& WithGrantWriteACP(const char* value) { SetGrantWriteACP(value); return *this;}
+
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectAclRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectAclRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Key for which the PUT operation was initiated.</p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectAclRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline PutObjectAclRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline PutObjectAclRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline PutObjectAclRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline PutObjectAclRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline PutObjectAclRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectAclRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectAclRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectAclRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutObjectAclRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutObjectAclRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutObjectAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutObjectAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectAclRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutObjectAclRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectAclRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectAclRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ ObjectCannedACL m_aCL;
+ bool m_aCLHasBeenSet;
+
+ AccessControlPolicy m_accessControlPolicy;
+ bool m_accessControlPolicyHasBeenSet;
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_grantFullControl;
+ bool m_grantFullControlHasBeenSet;
+
+ Aws::String m_grantRead;
+ bool m_grantReadHasBeenSet;
+
+ Aws::String m_grantReadACP;
+ bool m_grantReadACPHasBeenSet;
+
+ Aws::String m_grantWrite;
+ bool m_grantWriteHasBeenSet;
+
+ Aws::String m_grantWriteACP;
+ bool m_grantWriteACPHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclResult.h
new file mode 100644
index 00000000000..0047bbca990
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectAclResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API PutObjectAclResult
+ {
+ public:
+ PutObjectAclResult();
+ PutObjectAclResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ PutObjectAclResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline PutObjectAclResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline PutObjectAclResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldRequest.h
new file mode 100644
index 00000000000..4bf13e588f0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldRequest.h
@@ -0,0 +1,481 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ObjectLockLegalHold.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutObjectLegalHoldRequest : public S3Request
+ {
+ public:
+ PutObjectLegalHoldRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutObjectLegalHold"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the object that you want to place a Legal Hold on.
+ * </p> <p>When using this API with an access point, you must direct requests to
+ * the access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The key name for the object that you want to place a Legal Hold on.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Container element for the Legal Hold configuration you want to apply to the
+ * specified object.</p>
+ */
+ inline const ObjectLockLegalHold& GetLegalHold() const{ return m_legalHold; }
+
+ /**
+ * <p>Container element for the Legal Hold configuration you want to apply to the
+ * specified object.</p>
+ */
+ inline bool LegalHoldHasBeenSet() const { return m_legalHoldHasBeenSet; }
+
+ /**
+ * <p>Container element for the Legal Hold configuration you want to apply to the
+ * specified object.</p>
+ */
+ inline void SetLegalHold(const ObjectLockLegalHold& value) { m_legalHoldHasBeenSet = true; m_legalHold = value; }
+
+ /**
+ * <p>Container element for the Legal Hold configuration you want to apply to the
+ * specified object.</p>
+ */
+ inline void SetLegalHold(ObjectLockLegalHold&& value) { m_legalHoldHasBeenSet = true; m_legalHold = std::move(value); }
+
+ /**
+ * <p>Container element for the Legal Hold configuration you want to apply to the
+ * specified object.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithLegalHold(const ObjectLockLegalHold& value) { SetLegalHold(value); return *this;}
+
+ /**
+ * <p>Container element for the Legal Hold configuration you want to apply to the
+ * specified object.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithLegalHold(ObjectLockLegalHold&& value) { SetLegalHold(std::move(value)); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline PutObjectLegalHoldRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline PutObjectLegalHoldRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version ID of the object that you want to place a Legal Hold on.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectLegalHoldRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutObjectLegalHoldRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutObjectLegalHoldRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutObjectLegalHoldRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutObjectLegalHoldRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectLegalHoldRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectLegalHoldRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutObjectLegalHoldRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectLegalHoldRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectLegalHoldRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ ObjectLockLegalHold m_legalHold;
+ bool m_legalHoldHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldResult.h
new file mode 100644
index 00000000000..f4322c70f9e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLegalHoldResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API PutObjectLegalHoldResult
+ {
+ public:
+ PutObjectLegalHoldResult();
+ PutObjectLegalHoldResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ PutObjectLegalHoldResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline PutObjectLegalHoldResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline PutObjectLegalHoldResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationRequest.h
new file mode 100644
index 00000000000..249fa153b13
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationRequest.h
@@ -0,0 +1,365 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ObjectLockConfiguration.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutObjectLockConfigurationRequest : public S3Request
+ {
+ public:
+ PutObjectLockConfigurationRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutObjectLockConfiguration"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket whose Object Lock configuration you want to create or replace.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The Object Lock configuration that you want to apply to the specified
+ * bucket.</p>
+ */
+ inline const ObjectLockConfiguration& GetObjectLockConfiguration() const{ return m_objectLockConfiguration; }
+
+ /**
+ * <p>The Object Lock configuration that you want to apply to the specified
+ * bucket.</p>
+ */
+ inline bool ObjectLockConfigurationHasBeenSet() const { return m_objectLockConfigurationHasBeenSet; }
+
+ /**
+ * <p>The Object Lock configuration that you want to apply to the specified
+ * bucket.</p>
+ */
+ inline void SetObjectLockConfiguration(const ObjectLockConfiguration& value) { m_objectLockConfigurationHasBeenSet = true; m_objectLockConfiguration = value; }
+
+ /**
+ * <p>The Object Lock configuration that you want to apply to the specified
+ * bucket.</p>
+ */
+ inline void SetObjectLockConfiguration(ObjectLockConfiguration&& value) { m_objectLockConfigurationHasBeenSet = true; m_objectLockConfiguration = std::move(value); }
+
+ /**
+ * <p>The Object Lock configuration that you want to apply to the specified
+ * bucket.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithObjectLockConfiguration(const ObjectLockConfiguration& value) { SetObjectLockConfiguration(value); return *this;}
+
+ /**
+ * <p>The Object Lock configuration that you want to apply to the specified
+ * bucket.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithObjectLockConfiguration(ObjectLockConfiguration&& value) { SetObjectLockConfiguration(std::move(value)); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline PutObjectLockConfigurationRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline PutObjectLockConfigurationRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline const Aws::String& GetToken() const{ return m_token; }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline bool TokenHasBeenSet() const { return m_tokenHasBeenSet; }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline void SetToken(const Aws::String& value) { m_tokenHasBeenSet = true; m_token = value; }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline void SetToken(Aws::String&& value) { m_tokenHasBeenSet = true; m_token = std::move(value); }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline void SetToken(const char* value) { m_tokenHasBeenSet = true; m_token.assign(value); }
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithToken(const Aws::String& value) { SetToken(value); return *this;}
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithToken(Aws::String&& value) { SetToken(std::move(value)); return *this;}
+
+ /**
+ * <p>A token to allow Object Lock to be enabled for an existing bucket.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithToken(const char* value) { SetToken(value); return *this;}
+
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectLockConfigurationRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutObjectLockConfigurationRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutObjectLockConfigurationRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutObjectLockConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectLockConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectLockConfigurationRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectLockConfigurationRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ ObjectLockConfiguration m_objectLockConfiguration;
+ bool m_objectLockConfigurationHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_token;
+ bool m_tokenHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationResult.h
new file mode 100644
index 00000000000..c3b86b53d50
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectLockConfigurationResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API PutObjectLockConfigurationResult
+ {
+ public:
+ PutObjectLockConfigurationResult();
+ PutObjectLockConfigurationResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ PutObjectLockConfigurationResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline PutObjectLockConfigurationResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline PutObjectLockConfigurationResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRequest.h
new file mode 100644
index 00000000000..27a829ce553
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRequest.h
@@ -0,0 +1,1987 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/s3/model/ObjectCannedACL.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/s3/model/ObjectLockMode.h>
+#include <aws/s3/model/ObjectLockLegalHoldStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutObjectRequest : public StreamingS3Request
+ {
+ public:
+ PutObjectRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutObject"; }
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const ObjectCannedACL& GetACL() const{ return m_aCL; }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool ACLHasBeenSet() const { return m_aCLHasBeenSet; }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetACL(const ObjectCannedACL& value) { m_aCLHasBeenSet = true; m_aCL = value; }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetACL(ObjectCannedACL&& value) { m_aCLHasBeenSet = true; m_aCL = std::move(value); }
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithACL(const ObjectCannedACL& value) { SetACL(value); return *this;}
+
+ /**
+ * <p>The canned ACL to apply to the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned
+ * ACL</a>.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithACL(ObjectCannedACL&& value) { SetACL(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name to which the PUT operation was initiated. </p> <p>When using
+ * this API with an access point, you must direct requests to the access point
+ * hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline const Aws::String& GetCacheControl() const{ return m_cacheControl; }
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline bool CacheControlHasBeenSet() const { return m_cacheControlHasBeenSet; }
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline void SetCacheControl(const Aws::String& value) { m_cacheControlHasBeenSet = true; m_cacheControl = value; }
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline void SetCacheControl(Aws::String&& value) { m_cacheControlHasBeenSet = true; m_cacheControl = std::move(value); }
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline void SetCacheControl(const char* value) { m_cacheControlHasBeenSet = true; m_cacheControl.assign(value); }
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline PutObjectRequest& WithCacheControl(const Aws::String& value) { SetCacheControl(value); return *this;}
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline PutObjectRequest& WithCacheControl(Aws::String&& value) { SetCacheControl(std::move(value)); return *this;}
+
+ /**
+ * <p> Can be used to specify caching behavior along the request/reply chain. For
+ * more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
+ */
+ inline PutObjectRequest& WithCacheControl(const char* value) { SetCacheControl(value); return *this;}
+
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline const Aws::String& GetContentDisposition() const{ return m_contentDisposition; }
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline bool ContentDispositionHasBeenSet() const { return m_contentDispositionHasBeenSet; }
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline void SetContentDisposition(const Aws::String& value) { m_contentDispositionHasBeenSet = true; m_contentDisposition = value; }
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline void SetContentDisposition(Aws::String&& value) { m_contentDispositionHasBeenSet = true; m_contentDisposition = std::move(value); }
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline void SetContentDisposition(const char* value) { m_contentDispositionHasBeenSet = true; m_contentDisposition.assign(value); }
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline PutObjectRequest& WithContentDisposition(const Aws::String& value) { SetContentDisposition(value); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline PutObjectRequest& WithContentDisposition(Aws::String&& value) { SetContentDisposition(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies presentational information for the object. For more information,
+ * see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1</a>.</p>
+ */
+ inline PutObjectRequest& WithContentDisposition(const char* value) { SetContentDisposition(value); return *this;}
+
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline const Aws::String& GetContentEncoding() const{ return m_contentEncoding; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline bool ContentEncodingHasBeenSet() const { return m_contentEncodingHasBeenSet; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline void SetContentEncoding(const Aws::String& value) { m_contentEncodingHasBeenSet = true; m_contentEncoding = value; }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline void SetContentEncoding(Aws::String&& value) { m_contentEncodingHasBeenSet = true; m_contentEncoding = std::move(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline void SetContentEncoding(const char* value) { m_contentEncodingHasBeenSet = true; m_contentEncoding.assign(value); }
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline PutObjectRequest& WithContentEncoding(const Aws::String& value) { SetContentEncoding(value); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline PutObjectRequest& WithContentEncoding(Aws::String&& value) { SetContentEncoding(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies what content encodings have been applied to the object and thus
+ * what decoding mechanisms must be applied to obtain the media-type referenced by
+ * the Content-Type header field. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11</a>.</p>
+ */
+ inline PutObjectRequest& WithContentEncoding(const char* value) { SetContentEncoding(value); return *this;}
+
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline const Aws::String& GetContentLanguage() const{ return m_contentLanguage; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline bool ContentLanguageHasBeenSet() const { return m_contentLanguageHasBeenSet; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const Aws::String& value) { m_contentLanguageHasBeenSet = true; m_contentLanguage = value; }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(Aws::String&& value) { m_contentLanguageHasBeenSet = true; m_contentLanguage = std::move(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline void SetContentLanguage(const char* value) { m_contentLanguageHasBeenSet = true; m_contentLanguage.assign(value); }
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline PutObjectRequest& WithContentLanguage(const Aws::String& value) { SetContentLanguage(value); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline PutObjectRequest& WithContentLanguage(Aws::String&& value) { SetContentLanguage(std::move(value)); return *this;}
+
+ /**
+ * <p>The language the content is in.</p>
+ */
+ inline PutObjectRequest& WithContentLanguage(const char* value) { SetContentLanguage(value); return *this;}
+
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13</a>.</p>
+ */
+ inline long long GetContentLength() const{ return m_contentLength; }
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13</a>.</p>
+ */
+ inline bool ContentLengthHasBeenSet() const { return m_contentLengthHasBeenSet; }
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13</a>.</p>
+ */
+ inline void SetContentLength(long long value) { m_contentLengthHasBeenSet = true; m_contentLength = value; }
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically. For more information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13</a>.</p>
+ */
+ inline PutObjectRequest& WithContentLength(long long value) { SetContentLength(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline PutObjectRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline PutObjectRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the message (without the headers)
+ * according to RFC 1864. This header can be used as a message integrity check to
+ * verify that the data is the same data that was originally sent. Although it is
+ * optional, we recommend using the Content-MD5 mechanism as an end-to-end
+ * integrity check. For more information about REST request authentication, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST
+ * Authentication</a>.</p>
+ */
+ inline PutObjectRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable. For more
+ * information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21</a>.</p>
+ */
+ inline const Aws::Utils::DateTime& GetExpires() const{ return m_expires; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable. For more
+ * information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21</a>.</p>
+ */
+ inline bool ExpiresHasBeenSet() const { return m_expiresHasBeenSet; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable. For more
+ * information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21</a>.</p>
+ */
+ inline void SetExpires(const Aws::Utils::DateTime& value) { m_expiresHasBeenSet = true; m_expires = value; }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable. For more
+ * information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21</a>.</p>
+ */
+ inline void SetExpires(Aws::Utils::DateTime&& value) { m_expiresHasBeenSet = true; m_expires = std::move(value); }
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable. For more
+ * information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21</a>.</p>
+ */
+ inline PutObjectRequest& WithExpires(const Aws::Utils::DateTime& value) { SetExpires(value); return *this;}
+
+ /**
+ * <p>The date and time at which the object is no longer cacheable. For more
+ * information, see <a
+ * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21</a>.</p>
+ */
+ inline PutObjectRequest& WithExpires(Aws::Utils::DateTime&& value) { SetExpires(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantFullControl() const{ return m_grantFullControl; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantFullControlHasBeenSet() const { return m_grantFullControlHasBeenSet; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const Aws::String& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = value; }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(Aws::String&& value) { m_grantFullControlHasBeenSet = true; m_grantFullControl = std::move(value); }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantFullControl(const char* value) { m_grantFullControlHasBeenSet = true; m_grantFullControl.assign(value); }
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantFullControl(const Aws::String& value) { SetGrantFullControl(value); return *this;}
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantFullControl(Aws::String&& value) { SetGrantFullControl(std::move(value)); return *this;}
+
+ /**
+ * <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+ * object.</p> <p>This action is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantFullControl(const char* value) { SetGrantFullControl(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantRead() const{ return m_grantRead; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadHasBeenSet() const { return m_grantReadHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const Aws::String& value) { m_grantReadHasBeenSet = true; m_grantRead = value; }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(Aws::String&& value) { m_grantReadHasBeenSet = true; m_grantRead = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantRead(const char* value) { m_grantReadHasBeenSet = true; m_grantRead.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantRead(const Aws::String& value) { SetGrantRead(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantRead(Aws::String&& value) { SetGrantRead(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object data and its metadata.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantRead(const char* value) { SetGrantRead(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantReadACP() const{ return m_grantReadACP; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantReadACPHasBeenSet() const { return m_grantReadACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const Aws::String& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = value; }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(Aws::String&& value) { m_grantReadACPHasBeenSet = true; m_grantReadACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantReadACP(const char* value) { m_grantReadACPHasBeenSet = true; m_grantReadACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantReadACP(const Aws::String& value) { SetGrantReadACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantReadACP(Aws::String&& value) { SetGrantReadACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to read the object ACL.</p> <p>This action is not supported by
+ * Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantReadACP(const char* value) { SetGrantReadACP(value); return *this;}
+
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline const Aws::String& GetGrantWriteACP() const{ return m_grantWriteACP; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline bool GrantWriteACPHasBeenSet() const { return m_grantWriteACPHasBeenSet; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const Aws::String& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = value; }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(Aws::String&& value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP = std::move(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline void SetGrantWriteACP(const char* value) { m_grantWriteACPHasBeenSet = true; m_grantWriteACP.assign(value); }
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantWriteACP(const Aws::String& value) { SetGrantWriteACP(value); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantWriteACP(Aws::String&& value) { SetGrantWriteACP(std::move(value)); return *this;}
+
+ /**
+ * <p>Allows grantee to write the ACL for the applicable object.</p> <p>This action
+ * is not supported by Amazon S3 on Outposts.</p>
+ */
+ inline PutObjectRequest& WithGrantWriteACP(const char* value) { SetGrantWriteACP(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline PutObjectRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline PutObjectRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the PUT operation was initiated.</p>
+ */
+ inline PutObjectRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline const Aws::Map<Aws::String, Aws::String>& GetMetadata() const{ return m_metadata; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline bool MetadataHasBeenSet() const { return m_metadataHasBeenSet; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(const Aws::Map<Aws::String, Aws::String>& value) { m_metadataHasBeenSet = true; m_metadata = value; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline void SetMetadata(Aws::Map<Aws::String, Aws::String>&& value) { m_metadataHasBeenSet = true; m_metadata = std::move(value); }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& WithMetadata(const Aws::Map<Aws::String, Aws::String>& value) { SetMetadata(value); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& WithMetadata(Aws::Map<Aws::String, Aws::String>&& value) { SetMetadata(std::move(value)); return *this;}
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& AddMetadata(const Aws::String& key, const Aws::String& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& AddMetadata(Aws::String&& key, const Aws::String& value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& AddMetadata(const Aws::String& key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& AddMetadata(Aws::String&& key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& AddMetadata(const char* key, Aws::String&& value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, std::move(value)); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& AddMetadata(Aws::String&& key, const char* value) { m_metadataHasBeenSet = true; m_metadata.emplace(std::move(key), value); return *this; }
+
+ /**
+ * <p>A map of metadata to store with the object in S3.</p>
+ */
+ inline PutObjectRequest& AddMetadata(const char* key, const char* value) { m_metadataHasBeenSet = true; m_metadata.emplace(key, value); return *this; }
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline bool ServerSideEncryptionHasBeenSet() const { return m_serverSideEncryptionHasBeenSet; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline PutObjectRequest& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline PutObjectRequest& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline PutObjectRequest& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created
+ * objects. The STANDARD storage class provides high durability and high
+ * availability. Depending on performance needs, you can specify a different
+ * Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS Storage Class. For
+ * more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage
+ * Classes</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
+ */
+ inline PutObjectRequest& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline const Aws::String& GetWebsiteRedirectLocation() const{ return m_websiteRedirectLocation; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline bool WebsiteRedirectLocationHasBeenSet() const { return m_websiteRedirectLocationHasBeenSet; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline void SetWebsiteRedirectLocation(const Aws::String& value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation = value; }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline void SetWebsiteRedirectLocation(Aws::String&& value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation = std::move(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline void SetWebsiteRedirectLocation(const char* value) { m_websiteRedirectLocationHasBeenSet = true; m_websiteRedirectLocation.assign(value); }
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline PutObjectRequest& WithWebsiteRedirectLocation(const Aws::String& value) { SetWebsiteRedirectLocation(value); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline PutObjectRequest& WithWebsiteRedirectLocation(Aws::String&& value) { SetWebsiteRedirectLocation(std::move(value)); return *this;}
+
+ /**
+ * <p>If the bucket is configured as a website, redirects requests for this object
+ * to another object in the same bucket or to an external URL. Amazon S3 stores the
+ * value of this header in the object metadata. For information about object
+ * metadata, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object
+ * Key and Metadata</a>.</p> <p>In the following example, the request header sets
+ * the redirect to an object (anotherPage.html) in the same bucket:</p> <p>
+ * <code>x-amz-website-redirect-location: /anotherPage.html</code> </p> <p>In the
+ * following example, the request header sets the object redirect to another
+ * website:</p> <p> <code>x-amz-website-redirect-location:
+ * http://www.example.com/</code> </p> <p>For more information about website
+ * hosting in Amazon S3, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting
+ * Websites on Amazon S3</a> and <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How
+ * to Configure Website Page Redirects</a>. </p>
+ */
+ inline PutObjectRequest& WithWebsiteRedirectLocation(const char* value) { SetWebsiteRedirectLocation(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline PutObjectRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline PutObjectRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline PutObjectRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline PutObjectRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline PutObjectRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p>
+ */
+ inline PutObjectRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline PutObjectRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline PutObjectRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline PutObjectRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline bool SSEKMSKeyIdHasBeenSet() const { return m_sSEKMSKeyIdHasBeenSet; }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline PutObjectRequest& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline PutObjectRequest& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetrical customer managed customer master key (CMK) that
+ * was used for the object.</p> <p> If the value of
+ * <code>x-amz-server-side-encryption</code> is <code>aws:kms</code>, this header
+ * specifies the ID of the symmetric customer managed AWS KMS CMK that will be used
+ * for the object. If you specify
+ * <code>x-amz-server-side-encryption:aws:kms</code>, but do not provide<code>
+ * x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the AWS
+ * managed CMK in AWS to protect the data.</p>
+ */
+ inline PutObjectRequest& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline const Aws::String& GetSSEKMSEncryptionContext() const{ return m_sSEKMSEncryptionContext; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline bool SSEKMSEncryptionContextHasBeenSet() const { return m_sSEKMSEncryptionContextHasBeenSet; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const Aws::String& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = value; }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(Aws::String&& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = std::move(value); }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const char* value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext.assign(value); }
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline PutObjectRequest& WithSSEKMSEncryptionContext(const Aws::String& value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline PutObjectRequest& WithSSEKMSEncryptionContext(Aws::String&& value) { SetSSEKMSEncryptionContext(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the AWS KMS Encryption Context to use for object encryption. The
+ * value of this header is a base64-encoded UTF-8 string holding JSON with the
+ * encryption context key-value pairs.</p>
+ */
+ inline PutObjectRequest& WithSSEKMSEncryptionContext(const char* value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with a PUT operation doesn’t affect
+ * bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with a PUT operation doesn’t affect
+ * bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline bool BucketKeyEnabledHasBeenSet() const { return m_bucketKeyEnabledHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with a PUT operation doesn’t affect
+ * bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabledHasBeenSet = true; m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ * with server-side encryption using AWS KMS (SSE-KMS). Setting this header to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption
+ * with SSE-KMS.</p> <p>Specifying this header with a PUT operation doesn’t affect
+ * bucket-level settings for S3 Bucket Key.</p>
+ */
+ inline PutObjectRequest& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline PutObjectRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline PutObjectRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline const Aws::String& GetTagging() const{ return m_tagging; }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline bool TaggingHasBeenSet() const { return m_taggingHasBeenSet; }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline void SetTagging(const Aws::String& value) { m_taggingHasBeenSet = true; m_tagging = value; }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline void SetTagging(Aws::String&& value) { m_taggingHasBeenSet = true; m_tagging = std::move(value); }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline void SetTagging(const char* value) { m_taggingHasBeenSet = true; m_tagging.assign(value); }
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline PutObjectRequest& WithTagging(const Aws::String& value) { SetTagging(value); return *this;}
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline PutObjectRequest& WithTagging(Aws::String&& value) { SetTagging(std::move(value)); return *this;}
+
+ /**
+ * <p>The tag-set for the object. The tag-set must be encoded as URL Query
+ * parameters. (For example, "Key1=Value1")</p>
+ */
+ inline PutObjectRequest& WithTagging(const char* value) { SetTagging(value); return *this;}
+
+
+ /**
+ * <p>The Object Lock mode that you want to apply to this object.</p>
+ */
+ inline const ObjectLockMode& GetObjectLockMode() const{ return m_objectLockMode; }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to this object.</p>
+ */
+ inline bool ObjectLockModeHasBeenSet() const { return m_objectLockModeHasBeenSet; }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to this object.</p>
+ */
+ inline void SetObjectLockMode(const ObjectLockMode& value) { m_objectLockModeHasBeenSet = true; m_objectLockMode = value; }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to this object.</p>
+ */
+ inline void SetObjectLockMode(ObjectLockMode&& value) { m_objectLockModeHasBeenSet = true; m_objectLockMode = std::move(value); }
+
+ /**
+ * <p>The Object Lock mode that you want to apply to this object.</p>
+ */
+ inline PutObjectRequest& WithObjectLockMode(const ObjectLockMode& value) { SetObjectLockMode(value); return *this;}
+
+ /**
+ * <p>The Object Lock mode that you want to apply to this object.</p>
+ */
+ inline PutObjectRequest& WithObjectLockMode(ObjectLockMode&& value) { SetObjectLockMode(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The date and time when you want this object's Object Lock to expire.</p>
+ */
+ inline const Aws::Utils::DateTime& GetObjectLockRetainUntilDate() const{ return m_objectLockRetainUntilDate; }
+
+ /**
+ * <p>The date and time when you want this object's Object Lock to expire.</p>
+ */
+ inline bool ObjectLockRetainUntilDateHasBeenSet() const { return m_objectLockRetainUntilDateHasBeenSet; }
+
+ /**
+ * <p>The date and time when you want this object's Object Lock to expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { m_objectLockRetainUntilDateHasBeenSet = true; m_objectLockRetainUntilDate = value; }
+
+ /**
+ * <p>The date and time when you want this object's Object Lock to expire.</p>
+ */
+ inline void SetObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { m_objectLockRetainUntilDateHasBeenSet = true; m_objectLockRetainUntilDate = std::move(value); }
+
+ /**
+ * <p>The date and time when you want this object's Object Lock to expire.</p>
+ */
+ inline PutObjectRequest& WithObjectLockRetainUntilDate(const Aws::Utils::DateTime& value) { SetObjectLockRetainUntilDate(value); return *this;}
+
+ /**
+ * <p>The date and time when you want this object's Object Lock to expire.</p>
+ */
+ inline PutObjectRequest& WithObjectLockRetainUntilDate(Aws::Utils::DateTime&& value) { SetObjectLockRetainUntilDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether a legal hold will be applied to this object. For more
+ * information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline const ObjectLockLegalHoldStatus& GetObjectLockLegalHoldStatus() const{ return m_objectLockLegalHoldStatus; }
+
+ /**
+ * <p>Specifies whether a legal hold will be applied to this object. For more
+ * information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline bool ObjectLockLegalHoldStatusHasBeenSet() const { return m_objectLockLegalHoldStatusHasBeenSet; }
+
+ /**
+ * <p>Specifies whether a legal hold will be applied to this object. For more
+ * information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { m_objectLockLegalHoldStatusHasBeenSet = true; m_objectLockLegalHoldStatus = value; }
+
+ /**
+ * <p>Specifies whether a legal hold will be applied to this object. For more
+ * information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline void SetObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { m_objectLockLegalHoldStatusHasBeenSet = true; m_objectLockLegalHoldStatus = std::move(value); }
+
+ /**
+ * <p>Specifies whether a legal hold will be applied to this object. For more
+ * information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline PutObjectRequest& WithObjectLockLegalHoldStatus(const ObjectLockLegalHoldStatus& value) { SetObjectLockLegalHoldStatus(value); return *this;}
+
+ /**
+ * <p>Specifies whether a legal hold will be applied to this object. For more
+ * information about S3 Object Lock, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object
+ * Lock</a>.</p>
+ */
+ inline PutObjectRequest& WithObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus&& value) { SetObjectLockLegalHoldStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutObjectRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutObjectRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutObjectRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ ObjectCannedACL m_aCL;
+ bool m_aCLHasBeenSet;
+
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_cacheControl;
+ bool m_cacheControlHasBeenSet;
+
+ Aws::String m_contentDisposition;
+ bool m_contentDispositionHasBeenSet;
+
+ Aws::String m_contentEncoding;
+ bool m_contentEncodingHasBeenSet;
+
+ Aws::String m_contentLanguage;
+ bool m_contentLanguageHasBeenSet;
+
+ long long m_contentLength;
+ bool m_contentLengthHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::Utils::DateTime m_expires;
+ bool m_expiresHasBeenSet;
+
+ Aws::String m_grantFullControl;
+ bool m_grantFullControlHasBeenSet;
+
+ Aws::String m_grantRead;
+ bool m_grantReadHasBeenSet;
+
+ Aws::String m_grantReadACP;
+ bool m_grantReadACPHasBeenSet;
+
+ Aws::String m_grantWriteACP;
+ bool m_grantWriteACPHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_metadata;
+ bool m_metadataHasBeenSet;
+
+ ServerSideEncryption m_serverSideEncryption;
+ bool m_serverSideEncryptionHasBeenSet;
+
+ StorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+
+ Aws::String m_websiteRedirectLocation;
+ bool m_websiteRedirectLocationHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ Aws::String m_sSEKMSKeyId;
+ bool m_sSEKMSKeyIdHasBeenSet;
+
+ Aws::String m_sSEKMSEncryptionContext;
+ bool m_sSEKMSEncryptionContextHasBeenSet;
+
+ bool m_bucketKeyEnabled;
+ bool m_bucketKeyEnabledHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_tagging;
+ bool m_taggingHasBeenSet;
+
+ ObjectLockMode m_objectLockMode;
+ bool m_objectLockModeHasBeenSet;
+
+ Aws::Utils::DateTime m_objectLockRetainUntilDate;
+ bool m_objectLockRetainUntilDateHasBeenSet;
+
+ ObjectLockLegalHoldStatus m_objectLockLegalHoldStatus;
+ bool m_objectLockLegalHoldStatusHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectResult.h
new file mode 100644
index 00000000000..f8b5bf13e7a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectResult.h
@@ -0,0 +1,480 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API PutObjectResult
+ {
+ public:
+ PutObjectResult();
+ PutObjectResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ PutObjectResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p> If the expiration is configured for the object (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>),
+ * the response includes this header. It includes the expiry-date and rule-id
+ * key-value pairs that provide information about object expiration. The value of
+ * the rule-id is URL encoded.</p>
+ */
+ inline const Aws::String& GetExpiration() const{ return m_expiration; }
+
+ /**
+ * <p> If the expiration is configured for the object (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>),
+ * the response includes this header. It includes the expiry-date and rule-id
+ * key-value pairs that provide information about object expiration. The value of
+ * the rule-id is URL encoded.</p>
+ */
+ inline void SetExpiration(const Aws::String& value) { m_expiration = value; }
+
+ /**
+ * <p> If the expiration is configured for the object (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>),
+ * the response includes this header. It includes the expiry-date and rule-id
+ * key-value pairs that provide information about object expiration. The value of
+ * the rule-id is URL encoded.</p>
+ */
+ inline void SetExpiration(Aws::String&& value) { m_expiration = std::move(value); }
+
+ /**
+ * <p> If the expiration is configured for the object (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>),
+ * the response includes this header. It includes the expiry-date and rule-id
+ * key-value pairs that provide information about object expiration. The value of
+ * the rule-id is URL encoded.</p>
+ */
+ inline void SetExpiration(const char* value) { m_expiration.assign(value); }
+
+ /**
+ * <p> If the expiration is configured for the object (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>),
+ * the response includes this header. It includes the expiry-date and rule-id
+ * key-value pairs that provide information about object expiration. The value of
+ * the rule-id is URL encoded.</p>
+ */
+ inline PutObjectResult& WithExpiration(const Aws::String& value) { SetExpiration(value); return *this;}
+
+ /**
+ * <p> If the expiration is configured for the object (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>),
+ * the response includes this header. It includes the expiry-date and rule-id
+ * key-value pairs that provide information about object expiration. The value of
+ * the rule-id is URL encoded.</p>
+ */
+ inline PutObjectResult& WithExpiration(Aws::String&& value) { SetExpiration(std::move(value)); return *this;}
+
+ /**
+ * <p> If the expiration is configured for the object (see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html">PutBucketLifecycleConfiguration</a>),
+ * the response includes this header. It includes the expiry-date and rule-id
+ * key-value pairs that provide information about object expiration. The value of
+ * the rule-id is URL encoded.</p>
+ */
+ inline PutObjectResult& WithExpiration(const char* value) { SetExpiration(value); return *this;}
+
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTag = value; }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTag = std::move(value); }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline void SetETag(const char* value) { m_eTag.assign(value); }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline PutObjectResult& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline PutObjectResult& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline PutObjectResult& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>If you specified server-side encryption either with an AWS KMS customer
+ * master key (CMK) or Amazon S3-managed encryption key in your PUT request, the
+ * response includes this header. It confirms the encryption algorithm that Amazon
+ * S3 used to encrypt the object.</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>If you specified server-side encryption either with an AWS KMS customer
+ * master key (CMK) or Amazon S3-managed encryption key in your PUT request, the
+ * response includes this header. It confirms the encryption algorithm that Amazon
+ * S3 used to encrypt the object.</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>If you specified server-side encryption either with an AWS KMS customer
+ * master key (CMK) or Amazon S3-managed encryption key in your PUT request, the
+ * response includes this header. It confirms the encryption algorithm that Amazon
+ * S3 used to encrypt the object.</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>If you specified server-side encryption either with an AWS KMS customer
+ * master key (CMK) or Amazon S3-managed encryption key in your PUT request, the
+ * response includes this header. It confirms the encryption algorithm that Amazon
+ * S3 used to encrypt the object.</p>
+ */
+ inline PutObjectResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>If you specified server-side encryption either with an AWS KMS customer
+ * master key (CMK) or Amazon S3-managed encryption key in your PUT request, the
+ * response includes this header. It confirms the encryption algorithm that Amazon
+ * S3 used to encrypt the object.</p>
+ */
+ inline PutObjectResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline PutObjectResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline PutObjectResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>Version of the object.</p>
+ */
+ inline PutObjectResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline PutObjectResult& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline PutObjectResult& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline PutObjectResult& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline PutObjectResult& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline PutObjectResult& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline PutObjectResult& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetric customer managed customer master key (CMK) that was
+ * used for the object. </p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetric customer managed customer master key (CMK) that was
+ * used for the object. </p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetric customer managed customer master key (CMK) that was
+ * used for the object. </p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetric customer managed customer master key (CMK) that was
+ * used for the object. </p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetric customer managed customer master key (CMK) that was
+ * used for the object. </p>
+ */
+ inline PutObjectResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetric customer managed customer master key (CMK) that was
+ * used for the object. </p>
+ */
+ inline PutObjectResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If <code>x-amz-server-side-encryption</code> is present and has the value of
+ * <code>aws:kms</code>, this header specifies the ID of the AWS Key Management
+ * Service (AWS KMS) symmetric customer managed customer master key (CMK) that was
+ * used for the object. </p>
+ */
+ inline PutObjectResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline const Aws::String& GetSSEKMSEncryptionContext() const{ return m_sSEKMSEncryptionContext; }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const Aws::String& value) { m_sSEKMSEncryptionContext = value; }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(Aws::String&& value) { m_sSEKMSEncryptionContext = std::move(value); }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline void SetSSEKMSEncryptionContext(const char* value) { m_sSEKMSEncryptionContext.assign(value); }
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline PutObjectResult& WithSSEKMSEncryptionContext(const Aws::String& value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline PutObjectResult& WithSSEKMSEncryptionContext(Aws::String&& value) { SetSSEKMSEncryptionContext(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the AWS KMS Encryption Context to use for object
+ * encryption. The value of this header is a base64-encoded UTF-8 string holding
+ * JSON with the encryption context key-value pairs.</p>
+ */
+ inline PutObjectResult& WithSSEKMSEncryptionContext(const char* value) { SetSSEKMSEncryptionContext(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the uploaded object uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the uploaded object uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the uploaded object uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline PutObjectResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline PutObjectResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline PutObjectResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_expiration;
+
+ Aws::String m_eTag;
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::String m_versionId;
+
+ Aws::String m_sSECustomerAlgorithm;
+
+ Aws::String m_sSECustomerKeyMD5;
+
+ Aws::String m_sSEKMSKeyId;
+
+ Aws::String m_sSEKMSEncryptionContext;
+
+ bool m_bucketKeyEnabled;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionRequest.h
new file mode 100644
index 00000000000..6efb8470e0a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionRequest.h
@@ -0,0 +1,527 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ObjectLockRetention.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutObjectRetentionRequest : public S3Request
+ {
+ public:
+ PutObjectRetentionRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutObjectRetention"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectRetentionRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectRetentionRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name that contains the object you want to apply this Object
+ * Retention configuration to. </p> <p>When using this API with an access point,
+ * you must direct requests to the access point hostname. The access point hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectRetentionRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline PutObjectRetentionRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline PutObjectRetentionRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The key name for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline PutObjectRetentionRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The container element for the Object Retention configuration.</p>
+ */
+ inline const ObjectLockRetention& GetRetention() const{ return m_retention; }
+
+ /**
+ * <p>The container element for the Object Retention configuration.</p>
+ */
+ inline bool RetentionHasBeenSet() const { return m_retentionHasBeenSet; }
+
+ /**
+ * <p>The container element for the Object Retention configuration.</p>
+ */
+ inline void SetRetention(const ObjectLockRetention& value) { m_retentionHasBeenSet = true; m_retention = value; }
+
+ /**
+ * <p>The container element for the Object Retention configuration.</p>
+ */
+ inline void SetRetention(ObjectLockRetention&& value) { m_retentionHasBeenSet = true; m_retention = std::move(value); }
+
+ /**
+ * <p>The container element for the Object Retention configuration.</p>
+ */
+ inline PutObjectRetentionRequest& WithRetention(const ObjectLockRetention& value) { SetRetention(value); return *this;}
+
+ /**
+ * <p>The container element for the Object Retention configuration.</p>
+ */
+ inline PutObjectRetentionRequest& WithRetention(ObjectLockRetention&& value) { SetRetention(std::move(value)); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline PutObjectRetentionRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline PutObjectRetentionRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline PutObjectRetentionRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline PutObjectRetentionRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version ID for the object that you want to apply this Object Retention
+ * configuration to.</p>
+ */
+ inline PutObjectRetentionRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether this operation should bypass Governance-mode
+ * restrictions.</p>
+ */
+ inline bool GetBypassGovernanceRetention() const{ return m_bypassGovernanceRetention; }
+
+ /**
+ * <p>Indicates whether this operation should bypass Governance-mode
+ * restrictions.</p>
+ */
+ inline bool BypassGovernanceRetentionHasBeenSet() const { return m_bypassGovernanceRetentionHasBeenSet; }
+
+ /**
+ * <p>Indicates whether this operation should bypass Governance-mode
+ * restrictions.</p>
+ */
+ inline void SetBypassGovernanceRetention(bool value) { m_bypassGovernanceRetentionHasBeenSet = true; m_bypassGovernanceRetention = value; }
+
+ /**
+ * <p>Indicates whether this operation should bypass Governance-mode
+ * restrictions.</p>
+ */
+ inline PutObjectRetentionRequest& WithBypassGovernanceRetention(bool value) { SetBypassGovernanceRetention(value); return *this;}
+
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectRetentionRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectRetentionRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectRetentionRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectRetentionRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectRetentionRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectRetentionRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutObjectRetentionRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutObjectRetentionRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutObjectRetentionRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutObjectRetentionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectRetentionRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectRetentionRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutObjectRetentionRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectRetentionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectRetentionRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ ObjectLockRetention m_retention;
+ bool m_retentionHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ bool m_bypassGovernanceRetention;
+ bool m_bypassGovernanceRetentionHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionResult.h
new file mode 100644
index 00000000000..c35bdbd1108
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectRetentionResult.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API PutObjectRetentionResult
+ {
+ public:
+ PutObjectRetentionResult();
+ PutObjectRetentionResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ PutObjectRetentionResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline PutObjectRetentionResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline PutObjectRetentionResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingRequest.h
new file mode 100644
index 00000000000..272b1130588
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingRequest.h
@@ -0,0 +1,524 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Tagging.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutObjectTaggingRequest : public S3Request
+ {
+ public:
+ PutObjectTaggingRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutObjectTagging"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectTaggingRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectTaggingRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the object. </p> <p>When using this API with an
+ * access point, you must direct requests to the access point hostname. The access
+ * point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutObjectTaggingRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline PutObjectTaggingRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline PutObjectTaggingRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline PutObjectTaggingRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline PutObjectTaggingRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline PutObjectTaggingRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The versionId of the object that the tag-set will be added to.</p>
+ */
+ inline PutObjectTaggingRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectTaggingRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectTaggingRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash for the request body.</p> <p>For requests made using the AWS
+ * Command Line Interface (CLI) or AWS SDKs, this field is calculated
+ * automatically.</p>
+ */
+ inline PutObjectTaggingRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements</p>
+ */
+ inline const Tagging& GetTagging() const{ return m_tagging; }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements</p>
+ */
+ inline bool TaggingHasBeenSet() const { return m_taggingHasBeenSet; }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements</p>
+ */
+ inline void SetTagging(const Tagging& value) { m_taggingHasBeenSet = true; m_tagging = value; }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements</p>
+ */
+ inline void SetTagging(Tagging&& value) { m_taggingHasBeenSet = true; m_tagging = std::move(value); }
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements</p>
+ */
+ inline PutObjectTaggingRequest& WithTagging(const Tagging& value) { SetTagging(value); return *this;}
+
+ /**
+ * <p>Container for the <code>TagSet</code> and <code>Tag</code> elements</p>
+ */
+ inline PutObjectTaggingRequest& WithTagging(Tagging&& value) { SetTagging(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectTaggingRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectTaggingRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutObjectTaggingRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutObjectTaggingRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutObjectTaggingRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutObjectTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectTaggingRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutObjectTaggingRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutObjectTaggingRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutObjectTaggingRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Tagging m_tagging;
+ bool m_taggingHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingResult.h
new file mode 100644
index 00000000000..7a48440e896
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutObjectTaggingResult.h
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API PutObjectTaggingResult
+ {
+ public:
+ PutObjectTaggingResult();
+ PutObjectTaggingResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ PutObjectTaggingResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The versionId of the object the tag-set was added to.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>The versionId of the object the tag-set was added to.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionId = value; }
+
+ /**
+ * <p>The versionId of the object the tag-set was added to.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionId = std::move(value); }
+
+ /**
+ * <p>The versionId of the object the tag-set was added to.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionId.assign(value); }
+
+ /**
+ * <p>The versionId of the object the tag-set was added to.</p>
+ */
+ inline PutObjectTaggingResult& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>The versionId of the object the tag-set was added to.</p>
+ */
+ inline PutObjectTaggingResult& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The versionId of the object the tag-set was added to.</p>
+ */
+ inline PutObjectTaggingResult& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+ private:
+
+ Aws::String m_versionId;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutPublicAccessBlockRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutPublicAccessBlockRequest.h
new file mode 100644
index 00000000000..ab558c00d60
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/PutPublicAccessBlockRequest.h
@@ -0,0 +1,336 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/PublicAccessBlockConfiguration.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API PutPublicAccessBlockRequest : public S3Request
+ {
+ public:
+ PutPublicAccessBlockRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "PutPublicAccessBlock"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ inline bool ShouldComputeContentMd5() const override { return true; }
+
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the Amazon S3 bucket whose <code>PublicAccessBlock</code>
+ * configuration you want to set.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The MD5 hash of the <code>PutPublicAccessBlock</code> request body. </p>
+ * <p>For requests made using the AWS Command Line Interface (CLI) or AWS SDKs,
+ * this field is calculated automatically.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration that you want to apply to
+ * this Amazon S3 bucket. You can enable the configuration options in any
+ * combination. For more information about when Amazon S3 considers a bucket or
+ * object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const PublicAccessBlockConfiguration& GetPublicAccessBlockConfiguration() const{ return m_publicAccessBlockConfiguration; }
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration that you want to apply to
+ * this Amazon S3 bucket. You can enable the configuration options in any
+ * combination. For more information about when Amazon S3 considers a bucket or
+ * object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool PublicAccessBlockConfigurationHasBeenSet() const { return m_publicAccessBlockConfigurationHasBeenSet; }
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration that you want to apply to
+ * this Amazon S3 bucket. You can enable the configuration options in any
+ * combination. For more information about when Amazon S3 considers a bucket or
+ * object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetPublicAccessBlockConfiguration(const PublicAccessBlockConfiguration& value) { m_publicAccessBlockConfigurationHasBeenSet = true; m_publicAccessBlockConfiguration = value; }
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration that you want to apply to
+ * this Amazon S3 bucket. You can enable the configuration options in any
+ * combination. For more information about when Amazon S3 considers a bucket or
+ * object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetPublicAccessBlockConfiguration(PublicAccessBlockConfiguration&& value) { m_publicAccessBlockConfigurationHasBeenSet = true; m_publicAccessBlockConfiguration = std::move(value); }
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration that you want to apply to
+ * this Amazon S3 bucket. You can enable the configuration options in any
+ * combination. For more information about when Amazon S3 considers a bucket or
+ * object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithPublicAccessBlockConfiguration(const PublicAccessBlockConfiguration& value) { SetPublicAccessBlockConfiguration(value); return *this;}
+
+ /**
+ * <p>The <code>PublicAccessBlock</code> configuration that you want to apply to
+ * this Amazon S3 bucket. You can enable the configuration options in any
+ * combination. For more information about when Amazon S3 considers a bucket or
+ * object public, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status">The
+ * Meaning of "Public"</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithPublicAccessBlockConfiguration(PublicAccessBlockConfiguration&& value) { SetPublicAccessBlockConfiguration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline PutPublicAccessBlockRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline PutPublicAccessBlockRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline PutPublicAccessBlockRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline PutPublicAccessBlockRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline PutPublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutPublicAccessBlockRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutPublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline PutPublicAccessBlockRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline PutPublicAccessBlockRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline PutPublicAccessBlockRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ PublicAccessBlockConfiguration m_publicAccessBlockConfiguration;
+ bool m_publicAccessBlockConfigurationHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfiguration.h
new file mode 100644
index 00000000000..41cc3d2d704
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfiguration.h
@@ -0,0 +1,195 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/NotificationConfigurationFilter.h>
+#include <aws/s3/model/Event.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the configuration for publishing messages to an Amazon Simple Queue
+ * Service (Amazon SQS) queue when Amazon S3 detects specified
+ * events.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/QueueConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API QueueConfiguration
+ {
+ public:
+ QueueConfiguration();
+ QueueConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ QueueConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const Aws::String& GetId() const{ return m_id; }
+
+
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+
+ inline QueueConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+
+ inline QueueConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+
+ inline QueueConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline const Aws::String& GetQueueArn() const{ return m_queueArn; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline bool QueueArnHasBeenSet() const { return m_queueArnHasBeenSet; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline void SetQueueArn(const Aws::String& value) { m_queueArnHasBeenSet = true; m_queueArn = value; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline void SetQueueArn(Aws::String&& value) { m_queueArnHasBeenSet = true; m_queueArn = std::move(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline void SetQueueArn(const char* value) { m_queueArnHasBeenSet = true; m_queueArn.assign(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline QueueConfiguration& WithQueueArn(const Aws::String& value) { SetQueueArn(value); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline QueueConfiguration& WithQueueArn(Aws::String&& value) { SetQueueArn(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline QueueConfiguration& WithQueueArn(const char* value) { SetQueueArn(value); return *this;}
+
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline const Aws::Vector<Event>& GetEvents() const{ return m_events; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline bool EventsHasBeenSet() const { return m_eventsHasBeenSet; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline void SetEvents(const Aws::Vector<Event>& value) { m_eventsHasBeenSet = true; m_events = value; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline void SetEvents(Aws::Vector<Event>&& value) { m_eventsHasBeenSet = true; m_events = std::move(value); }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfiguration& WithEvents(const Aws::Vector<Event>& value) { SetEvents(value); return *this;}
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfiguration& WithEvents(Aws::Vector<Event>&& value) { SetEvents(std::move(value)); return *this;}
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfiguration& AddEvents(const Event& value) { m_eventsHasBeenSet = true; m_events.push_back(value); return *this; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfiguration& AddEvents(Event&& value) { m_eventsHasBeenSet = true; m_events.push_back(std::move(value)); return *this; }
+
+
+
+ inline const NotificationConfigurationFilter& GetFilter() const{ return m_filter; }
+
+
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+
+ inline void SetFilter(const NotificationConfigurationFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+
+ inline void SetFilter(NotificationConfigurationFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+
+ inline QueueConfiguration& WithFilter(const NotificationConfigurationFilter& value) { SetFilter(value); return *this;}
+
+
+ inline QueueConfiguration& WithFilter(NotificationConfigurationFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_queueArn;
+ bool m_queueArnHasBeenSet;
+
+ Aws::Vector<Event> m_events;
+ bool m_eventsHasBeenSet;
+
+ NotificationConfigurationFilter m_filter;
+ bool m_filterHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfigurationDeprecated.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfigurationDeprecated.h
new file mode 100644
index 00000000000..9f99c6a4160
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QueueConfigurationDeprecated.h
@@ -0,0 +1,174 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Event.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>This data type is deprecated. Use <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_QueueConfiguration.html">QueueConfiguration</a>
+ * for the same purposes. This data type specifies the configuration for publishing
+ * messages to an Amazon Simple Queue Service (Amazon SQS) queue when Amazon S3
+ * detects specified events. </p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/QueueConfigurationDeprecated">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API QueueConfigurationDeprecated
+ {
+ public:
+ QueueConfigurationDeprecated();
+ QueueConfigurationDeprecated(const Aws::Utils::Xml::XmlNode& xmlNode);
+ QueueConfigurationDeprecated& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const Aws::String& GetId() const{ return m_id; }
+
+
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+
+ inline QueueConfigurationDeprecated& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+
+ inline QueueConfigurationDeprecated& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+
+ inline QueueConfigurationDeprecated& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline const Aws::Vector<Event>& GetEvents() const{ return m_events; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline bool EventsHasBeenSet() const { return m_eventsHasBeenSet; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline void SetEvents(const Aws::Vector<Event>& value) { m_eventsHasBeenSet = true; m_events = value; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline void SetEvents(Aws::Vector<Event>&& value) { m_eventsHasBeenSet = true; m_events = std::move(value); }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfigurationDeprecated& WithEvents(const Aws::Vector<Event>& value) { SetEvents(value); return *this;}
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfigurationDeprecated& WithEvents(Aws::Vector<Event>&& value) { SetEvents(std::move(value)); return *this;}
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfigurationDeprecated& AddEvents(const Event& value) { m_eventsHasBeenSet = true; m_events.push_back(value); return *this; }
+
+ /**
+ * <p>A collection of bucket events for which to send notifications</p>
+ */
+ inline QueueConfigurationDeprecated& AddEvents(Event&& value) { m_eventsHasBeenSet = true; m_events.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline const Aws::String& GetQueue() const{ return m_queue; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline bool QueueHasBeenSet() const { return m_queueHasBeenSet; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline void SetQueue(const Aws::String& value) { m_queueHasBeenSet = true; m_queue = value; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline void SetQueue(Aws::String&& value) { m_queueHasBeenSet = true; m_queue = std::move(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline void SetQueue(const char* value) { m_queueHasBeenSet = true; m_queue.assign(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline QueueConfigurationDeprecated& WithQueue(const Aws::String& value) { SetQueue(value); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline QueueConfigurationDeprecated& WithQueue(Aws::String&& value) { SetQueue(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3
+ * publishes a message when it detects events of the specified type. </p>
+ */
+ inline QueueConfigurationDeprecated& WithQueue(const char* value) { SetQueue(value); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::Vector<Event> m_events;
+ bool m_eventsHasBeenSet;
+
+ Aws::String m_queue;
+ bool m_queueHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QuoteFields.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QuoteFields.h
new file mode 100644
index 00000000000..5b233ab1379
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/QuoteFields.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class QuoteFields
+ {
+ NOT_SET,
+ ALWAYS,
+ ASNEEDED
+ };
+
+namespace QuoteFieldsMapper
+{
+AWS_S3_API QuoteFields GetQuoteFieldsForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForQuoteFields(QuoteFields value);
+} // namespace QuoteFieldsMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RecordsEvent.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RecordsEvent.h
new file mode 100644
index 00000000000..30ef211adbe
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RecordsEvent.h
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/Array.h>
+#include <utility>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ /**
+ * <p>The container for the records event.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RecordsEvent">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API RecordsEvent
+ {
+ public:
+ RecordsEvent() = default;
+ RecordsEvent(Aws::Vector<unsigned char>&& value) { m_payload = std::move(value); }
+
+ /**
+ * <p>The byte array of partial, one or more result records.</p>
+ */
+ inline const Aws::Vector<unsigned char>& GetPayload() const { return m_payload; }
+
+ /**
+ * <p>The byte array of partial, one or more result records.</p>
+ */
+ inline Aws::Vector<unsigned char>&& GetPayloadWithOwnership() { return std::move(m_payload); }
+
+ /**
+ * <p>The byte array of partial, one or more result records.</p>
+ */
+ inline void SetPayload(const Aws::Vector<unsigned char>& value) { m_payloadHasBeenSet = true; m_payload = value; }
+
+ /**
+ * <p>The byte array of partial, one or more result records.</p>
+ */
+ inline void SetPayload(Aws::Vector<unsigned char>&& value) { m_payloadHasBeenSet = true; m_payload = std::move(value); }
+
+ /**
+ * <p>The byte array of partial, one or more result records.</p>
+ */
+ inline RecordsEvent& WithPayload(const Aws::Vector<unsigned char>& value) { SetPayload(value); return *this;}
+
+ /**
+ * <p>The byte array of partial, one or more result records.</p>
+ */
+ inline RecordsEvent& WithPayload(Aws::Vector<unsigned char>&& value) { SetPayload(std::move(value)); return *this;}
+
+ private:
+
+ Aws::Vector<unsigned char> m_payload;
+ bool m_payloadHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Redirect.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Redirect.h
new file mode 100644
index 00000000000..bda92937fe5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Redirect.h
@@ -0,0 +1,342 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Protocol.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies how requests are redirected. In the event of an error, you can
+ * specify a different error code to return.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Redirect">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Redirect
+ {
+ public:
+ Redirect();
+ Redirect(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Redirect& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline const Aws::String& GetHostName() const{ return m_hostName; }
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline bool HostNameHasBeenSet() const { return m_hostNameHasBeenSet; }
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline void SetHostName(const Aws::String& value) { m_hostNameHasBeenSet = true; m_hostName = value; }
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline void SetHostName(Aws::String&& value) { m_hostNameHasBeenSet = true; m_hostName = std::move(value); }
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline void SetHostName(const char* value) { m_hostNameHasBeenSet = true; m_hostName.assign(value); }
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline Redirect& WithHostName(const Aws::String& value) { SetHostName(value); return *this;}
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline Redirect& WithHostName(Aws::String&& value) { SetHostName(std::move(value)); return *this;}
+
+ /**
+ * <p>The host name to use in the redirect request.</p>
+ */
+ inline Redirect& WithHostName(const char* value) { SetHostName(value); return *this;}
+
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline const Aws::String& GetHttpRedirectCode() const{ return m_httpRedirectCode; }
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline bool HttpRedirectCodeHasBeenSet() const { return m_httpRedirectCodeHasBeenSet; }
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline void SetHttpRedirectCode(const Aws::String& value) { m_httpRedirectCodeHasBeenSet = true; m_httpRedirectCode = value; }
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline void SetHttpRedirectCode(Aws::String&& value) { m_httpRedirectCodeHasBeenSet = true; m_httpRedirectCode = std::move(value); }
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline void SetHttpRedirectCode(const char* value) { m_httpRedirectCodeHasBeenSet = true; m_httpRedirectCode.assign(value); }
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline Redirect& WithHttpRedirectCode(const Aws::String& value) { SetHttpRedirectCode(value); return *this;}
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline Redirect& WithHttpRedirectCode(Aws::String&& value) { SetHttpRedirectCode(std::move(value)); return *this;}
+
+ /**
+ * <p>The HTTP redirect code to use on the response. Not required if one of the
+ * siblings is present.</p>
+ */
+ inline Redirect& WithHttpRedirectCode(const char* value) { SetHttpRedirectCode(value); return *this;}
+
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline const Protocol& GetProtocol() const{ return m_protocol; }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline bool ProtocolHasBeenSet() const { return m_protocolHasBeenSet; }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline void SetProtocol(const Protocol& value) { m_protocolHasBeenSet = true; m_protocol = value; }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline void SetProtocol(Protocol&& value) { m_protocolHasBeenSet = true; m_protocol = std::move(value); }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline Redirect& WithProtocol(const Protocol& value) { SetProtocol(value); return *this;}
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline Redirect& WithProtocol(Protocol&& value) { SetProtocol(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline const Aws::String& GetReplaceKeyPrefixWith() const{ return m_replaceKeyPrefixWith; }
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline bool ReplaceKeyPrefixWithHasBeenSet() const { return m_replaceKeyPrefixWithHasBeenSet; }
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline void SetReplaceKeyPrefixWith(const Aws::String& value) { m_replaceKeyPrefixWithHasBeenSet = true; m_replaceKeyPrefixWith = value; }
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline void SetReplaceKeyPrefixWith(Aws::String&& value) { m_replaceKeyPrefixWithHasBeenSet = true; m_replaceKeyPrefixWith = std::move(value); }
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline void SetReplaceKeyPrefixWith(const char* value) { m_replaceKeyPrefixWithHasBeenSet = true; m_replaceKeyPrefixWith.assign(value); }
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline Redirect& WithReplaceKeyPrefixWith(const Aws::String& value) { SetReplaceKeyPrefixWith(value); return *this;}
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline Redirect& WithReplaceKeyPrefixWith(Aws::String&& value) { SetReplaceKeyPrefixWith(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key prefix to use in the redirect request. For example, to
+ * redirect requests for all pages with prefix <code>docs/</code> (objects in the
+ * <code>docs/</code> folder) to <code>documents/</code>, you can set a condition
+ * block with <code>KeyPrefixEquals</code> set to <code>docs/</code> and in the
+ * Redirect set <code>ReplaceKeyPrefixWith</code> to <code>/documents</code>. Not
+ * required if one of the siblings is present. Can be present only if
+ * <code>ReplaceKeyWith</code> is not provided.</p>
+ */
+ inline Redirect& WithReplaceKeyPrefixWith(const char* value) { SetReplaceKeyPrefixWith(value); return *this;}
+
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline const Aws::String& GetReplaceKeyWith() const{ return m_replaceKeyWith; }
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline bool ReplaceKeyWithHasBeenSet() const { return m_replaceKeyWithHasBeenSet; }
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline void SetReplaceKeyWith(const Aws::String& value) { m_replaceKeyWithHasBeenSet = true; m_replaceKeyWith = value; }
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline void SetReplaceKeyWith(Aws::String&& value) { m_replaceKeyWithHasBeenSet = true; m_replaceKeyWith = std::move(value); }
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline void SetReplaceKeyWith(const char* value) { m_replaceKeyWithHasBeenSet = true; m_replaceKeyWith.assign(value); }
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline Redirect& WithReplaceKeyWith(const Aws::String& value) { SetReplaceKeyWith(value); return *this;}
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline Redirect& WithReplaceKeyWith(Aws::String&& value) { SetReplaceKeyWith(std::move(value)); return *this;}
+
+ /**
+ * <p>The specific object key to use in the redirect request. For example, redirect
+ * request to <code>error.html</code>. Not required if one of the siblings is
+ * present. Can be present only if <code>ReplaceKeyPrefixWith</code> is not
+ * provided.</p>
+ */
+ inline Redirect& WithReplaceKeyWith(const char* value) { SetReplaceKeyWith(value); return *this;}
+
+ private:
+
+ Aws::String m_hostName;
+ bool m_hostNameHasBeenSet;
+
+ Aws::String m_httpRedirectCode;
+ bool m_httpRedirectCodeHasBeenSet;
+
+ Protocol m_protocol;
+ bool m_protocolHasBeenSet;
+
+ Aws::String m_replaceKeyPrefixWith;
+ bool m_replaceKeyPrefixWithHasBeenSet;
+
+ Aws::String m_replaceKeyWith;
+ bool m_replaceKeyWithHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RedirectAllRequestsTo.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RedirectAllRequestsTo.h
new file mode 100644
index 00000000000..73d5a96f6db
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RedirectAllRequestsTo.h
@@ -0,0 +1,130 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Protocol.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the redirect behavior of all requests to a website endpoint of an
+ * Amazon S3 bucket.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RedirectAllRequestsTo">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API RedirectAllRequestsTo
+ {
+ public:
+ RedirectAllRequestsTo();
+ RedirectAllRequestsTo(const Aws::Utils::Xml::XmlNode& xmlNode);
+ RedirectAllRequestsTo& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline const Aws::String& GetHostName() const{ return m_hostName; }
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline bool HostNameHasBeenSet() const { return m_hostNameHasBeenSet; }
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline void SetHostName(const Aws::String& value) { m_hostNameHasBeenSet = true; m_hostName = value; }
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline void SetHostName(Aws::String&& value) { m_hostNameHasBeenSet = true; m_hostName = std::move(value); }
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline void SetHostName(const char* value) { m_hostNameHasBeenSet = true; m_hostName.assign(value); }
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline RedirectAllRequestsTo& WithHostName(const Aws::String& value) { SetHostName(value); return *this;}
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline RedirectAllRequestsTo& WithHostName(Aws::String&& value) { SetHostName(std::move(value)); return *this;}
+
+ /**
+ * <p>Name of the host where requests are redirected.</p>
+ */
+ inline RedirectAllRequestsTo& WithHostName(const char* value) { SetHostName(value); return *this;}
+
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline const Protocol& GetProtocol() const{ return m_protocol; }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline bool ProtocolHasBeenSet() const { return m_protocolHasBeenSet; }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline void SetProtocol(const Protocol& value) { m_protocolHasBeenSet = true; m_protocol = value; }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline void SetProtocol(Protocol&& value) { m_protocolHasBeenSet = true; m_protocol = std::move(value); }
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline RedirectAllRequestsTo& WithProtocol(const Protocol& value) { SetProtocol(value); return *this;}
+
+ /**
+ * <p>Protocol to use when redirecting requests. The default is the protocol that
+ * is used in the original request.</p>
+ */
+ inline RedirectAllRequestsTo& WithProtocol(Protocol&& value) { SetProtocol(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_hostName;
+ bool m_hostNameHasBeenSet;
+
+ Protocol m_protocol;
+ bool m_protocolHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModifications.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModifications.h
new file mode 100644
index 00000000000..e9685d62581
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModifications.h
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ReplicaModificationsStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A filter that you can specify for selection for modifications on replicas.
+ * Amazon S3 doesn't replicate replica modifications by default. In the latest
+ * version of replication configuration (when <code>Filter</code> is specified),
+ * you can specify this element and set the status to <code>Enabled</code> to
+ * replicate modifications on replicas. </p> <p> If you don't specify the
+ * <code>Filter</code> element, Amazon S3 assumes that the replication
+ * configuration is the earlier version, V1. In the earlier version, this element
+ * is not allowed.</p> <p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicaModifications">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ReplicaModifications
+ {
+ public:
+ ReplicaModifications();
+ ReplicaModifications(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ReplicaModifications& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates modifications on replicas.</p>
+ */
+ inline const ReplicaModificationsStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates modifications on replicas.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates modifications on replicas.</p>
+ */
+ inline void SetStatus(const ReplicaModificationsStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates modifications on replicas.</p>
+ */
+ inline void SetStatus(ReplicaModificationsStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates modifications on replicas.</p>
+ */
+ inline ReplicaModifications& WithStatus(const ReplicaModificationsStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates modifications on replicas.</p>
+ */
+ inline ReplicaModifications& WithStatus(ReplicaModificationsStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ ReplicaModificationsStatus m_status;
+ bool m_statusHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModificationsStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModificationsStatus.h
new file mode 100644
index 00000000000..9f8902d8472
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicaModificationsStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ReplicaModificationsStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace ReplicaModificationsStatusMapper
+{
+AWS_S3_API ReplicaModificationsStatus GetReplicaModificationsStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForReplicaModificationsStatus(ReplicaModificationsStatus value);
+} // namespace ReplicaModificationsStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationConfiguration.h
new file mode 100644
index 00000000000..2ffc3e3f518
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationConfiguration.h
@@ -0,0 +1,183 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/ReplicationRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for replication rules. You can add up to 1,000 rules. The maximum
+ * size of a replication configuration is 2 MB.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ReplicationConfiguration
+ {
+ public:
+ ReplicationConfiguration();
+ ReplicationConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ReplicationConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetRole() const{ return m_role; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool RoleHasBeenSet() const { return m_roleHasBeenSet; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetRole(const Aws::String& value) { m_roleHasBeenSet = true; m_role = value; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetRole(Aws::String&& value) { m_roleHasBeenSet = true; m_role = std::move(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetRole(const char* value) { m_roleHasBeenSet = true; m_role.assign(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ReplicationConfiguration& WithRole(const Aws::String& value) { SetRole(value); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ReplicationConfiguration& WithRole(Aws::String&& value) { SetRole(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+ * (IAM) role that Amazon S3 assumes when replicating objects. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html">How
+ * to Set Up Replication</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline ReplicationConfiguration& WithRole(const char* value) { SetRole(value); return *this;}
+
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline const Aws::Vector<ReplicationRule>& GetRules() const{ return m_rules; }
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline bool RulesHasBeenSet() const { return m_rulesHasBeenSet; }
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline void SetRules(const Aws::Vector<ReplicationRule>& value) { m_rulesHasBeenSet = true; m_rules = value; }
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline void SetRules(Aws::Vector<ReplicationRule>&& value) { m_rulesHasBeenSet = true; m_rules = std::move(value); }
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline ReplicationConfiguration& WithRules(const Aws::Vector<ReplicationRule>& value) { SetRules(value); return *this;}
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline ReplicationConfiguration& WithRules(Aws::Vector<ReplicationRule>&& value) { SetRules(std::move(value)); return *this;}
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline ReplicationConfiguration& AddRules(const ReplicationRule& value) { m_rulesHasBeenSet = true; m_rules.push_back(value); return *this; }
+
+ /**
+ * <p>A container for one or more replication rules. A replication configuration
+ * must have at least one rule and can contain a maximum of 1,000 rules. </p>
+ */
+ inline ReplicationConfiguration& AddRules(ReplicationRule&& value) { m_rulesHasBeenSet = true; m_rules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_role;
+ bool m_roleHasBeenSet;
+
+ Aws::Vector<ReplicationRule> m_rules;
+ bool m_rulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRule.h
new file mode 100644
index 00000000000..ae8671f8747
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRule.h
@@ -0,0 +1,357 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ReplicationRuleFilter.h>
+#include <aws/s3/model/ReplicationRuleStatus.h>
+#include <aws/s3/model/SourceSelectionCriteria.h>
+#include <aws/s3/model/ExistingObjectReplication.h>
+#include <aws/s3/model/Destination.h>
+#include <aws/s3/model/DeleteMarkerReplication.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies which Amazon S3 objects to replicate and where to store the
+ * replicas.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationRule">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ReplicationRule
+ {
+ public:
+ ReplicationRule();
+ ReplicationRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ReplicationRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline const Aws::String& GetID() const{ return m_iD; }
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline bool IDHasBeenSet() const { return m_iDHasBeenSet; }
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline void SetID(const Aws::String& value) { m_iDHasBeenSet = true; m_iD = value; }
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline void SetID(Aws::String&& value) { m_iDHasBeenSet = true; m_iD = std::move(value); }
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline void SetID(const char* value) { m_iDHasBeenSet = true; m_iD.assign(value); }
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline ReplicationRule& WithID(const Aws::String& value) { SetID(value); return *this;}
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline ReplicationRule& WithID(Aws::String&& value) { SetID(std::move(value)); return *this;}
+
+ /**
+ * <p>A unique identifier for the rule. The maximum value is 255 characters.</p>
+ */
+ inline ReplicationRule& WithID(const char* value) { SetID(value); return *this;}
+
+
+ /**
+ * <p>The priority indicates which rule has precedence whenever two or more
+ * replication rules conflict. Amazon S3 will attempt to replicate objects
+ * according to all replication rules. However, if there are two or more rules with
+ * the same destination bucket, then objects will be replicated according to the
+ * rule with the highest priority. The higher the number, the higher the priority.
+ * </p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline int GetPriority() const{ return m_priority; }
+
+ /**
+ * <p>The priority indicates which rule has precedence whenever two or more
+ * replication rules conflict. Amazon S3 will attempt to replicate objects
+ * according to all replication rules. However, if there are two or more rules with
+ * the same destination bucket, then objects will be replicated according to the
+ * rule with the highest priority. The higher the number, the higher the priority.
+ * </p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline bool PriorityHasBeenSet() const { return m_priorityHasBeenSet; }
+
+ /**
+ * <p>The priority indicates which rule has precedence whenever two or more
+ * replication rules conflict. Amazon S3 will attempt to replicate objects
+ * according to all replication rules. However, if there are two or more rules with
+ * the same destination bucket, then objects will be replicated according to the
+ * rule with the highest priority. The higher the number, the higher the priority.
+ * </p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetPriority(int value) { m_priorityHasBeenSet = true; m_priority = value; }
+
+ /**
+ * <p>The priority indicates which rule has precedence whenever two or more
+ * replication rules conflict. Amazon S3 will attempt to replicate objects
+ * according to all replication rules. However, if there are two or more rules with
+ * the same destination bucket, then objects will be replicated according to the
+ * rule with the highest priority. The higher the number, the higher the priority.
+ * </p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html">Replication</a>
+ * in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline ReplicationRule& WithPriority(int value) { SetPriority(value); return *this;}
+
+
+
+ inline const ReplicationRuleFilter& GetFilter() const{ return m_filter; }
+
+
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+
+ inline void SetFilter(const ReplicationRuleFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+
+ inline void SetFilter(ReplicationRuleFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+
+ inline ReplicationRule& WithFilter(const ReplicationRuleFilter& value) { SetFilter(value); return *this;}
+
+
+ inline ReplicationRule& WithFilter(ReplicationRuleFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether the rule is enabled.</p>
+ */
+ inline const ReplicationRuleStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>Specifies whether the rule is enabled.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>Specifies whether the rule is enabled.</p>
+ */
+ inline void SetStatus(const ReplicationRuleStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>Specifies whether the rule is enabled.</p>
+ */
+ inline void SetStatus(ReplicationRuleStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>Specifies whether the rule is enabled.</p>
+ */
+ inline ReplicationRule& WithStatus(const ReplicationRuleStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>Specifies whether the rule is enabled.</p>
+ */
+ inline ReplicationRule& WithStatus(ReplicationRuleStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A container that describes additional filters for identifying the source
+ * objects that you want to replicate. You can choose to enable or disable the
+ * replication of these objects. Currently, Amazon S3 supports only the filter that
+ * you can specify for objects created with server-side encryption using a customer
+ * master key (CMK) stored in AWS Key Management Service (SSE-KMS).</p>
+ */
+ inline const SourceSelectionCriteria& GetSourceSelectionCriteria() const{ return m_sourceSelectionCriteria; }
+
+ /**
+ * <p>A container that describes additional filters for identifying the source
+ * objects that you want to replicate. You can choose to enable or disable the
+ * replication of these objects. Currently, Amazon S3 supports only the filter that
+ * you can specify for objects created with server-side encryption using a customer
+ * master key (CMK) stored in AWS Key Management Service (SSE-KMS).</p>
+ */
+ inline bool SourceSelectionCriteriaHasBeenSet() const { return m_sourceSelectionCriteriaHasBeenSet; }
+
+ /**
+ * <p>A container that describes additional filters for identifying the source
+ * objects that you want to replicate. You can choose to enable or disable the
+ * replication of these objects. Currently, Amazon S3 supports only the filter that
+ * you can specify for objects created with server-side encryption using a customer
+ * master key (CMK) stored in AWS Key Management Service (SSE-KMS).</p>
+ */
+ inline void SetSourceSelectionCriteria(const SourceSelectionCriteria& value) { m_sourceSelectionCriteriaHasBeenSet = true; m_sourceSelectionCriteria = value; }
+
+ /**
+ * <p>A container that describes additional filters for identifying the source
+ * objects that you want to replicate. You can choose to enable or disable the
+ * replication of these objects. Currently, Amazon S3 supports only the filter that
+ * you can specify for objects created with server-side encryption using a customer
+ * master key (CMK) stored in AWS Key Management Service (SSE-KMS).</p>
+ */
+ inline void SetSourceSelectionCriteria(SourceSelectionCriteria&& value) { m_sourceSelectionCriteriaHasBeenSet = true; m_sourceSelectionCriteria = std::move(value); }
+
+ /**
+ * <p>A container that describes additional filters for identifying the source
+ * objects that you want to replicate. You can choose to enable or disable the
+ * replication of these objects. Currently, Amazon S3 supports only the filter that
+ * you can specify for objects created with server-side encryption using a customer
+ * master key (CMK) stored in AWS Key Management Service (SSE-KMS).</p>
+ */
+ inline ReplicationRule& WithSourceSelectionCriteria(const SourceSelectionCriteria& value) { SetSourceSelectionCriteria(value); return *this;}
+
+ /**
+ * <p>A container that describes additional filters for identifying the source
+ * objects that you want to replicate. You can choose to enable or disable the
+ * replication of these objects. Currently, Amazon S3 supports only the filter that
+ * you can specify for objects created with server-side encryption using a customer
+ * master key (CMK) stored in AWS Key Management Service (SSE-KMS).</p>
+ */
+ inline ReplicationRule& WithSourceSelectionCriteria(SourceSelectionCriteria&& value) { SetSourceSelectionCriteria(std::move(value)); return *this;}
+
+
+ /**
+ * <p/>
+ */
+ inline const ExistingObjectReplication& GetExistingObjectReplication() const{ return m_existingObjectReplication; }
+
+ /**
+ * <p/>
+ */
+ inline bool ExistingObjectReplicationHasBeenSet() const { return m_existingObjectReplicationHasBeenSet; }
+
+ /**
+ * <p/>
+ */
+ inline void SetExistingObjectReplication(const ExistingObjectReplication& value) { m_existingObjectReplicationHasBeenSet = true; m_existingObjectReplication = value; }
+
+ /**
+ * <p/>
+ */
+ inline void SetExistingObjectReplication(ExistingObjectReplication&& value) { m_existingObjectReplicationHasBeenSet = true; m_existingObjectReplication = std::move(value); }
+
+ /**
+ * <p/>
+ */
+ inline ReplicationRule& WithExistingObjectReplication(const ExistingObjectReplication& value) { SetExistingObjectReplication(value); return *this;}
+
+ /**
+ * <p/>
+ */
+ inline ReplicationRule& WithExistingObjectReplication(ExistingObjectReplication&& value) { SetExistingObjectReplication(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A container for information about the replication destination and its
+ * configurations including enabling the S3 Replication Time Control (S3 RTC).</p>
+ */
+ inline const Destination& GetDestination() const{ return m_destination; }
+
+ /**
+ * <p>A container for information about the replication destination and its
+ * configurations including enabling the S3 Replication Time Control (S3 RTC).</p>
+ */
+ inline bool DestinationHasBeenSet() const { return m_destinationHasBeenSet; }
+
+ /**
+ * <p>A container for information about the replication destination and its
+ * configurations including enabling the S3 Replication Time Control (S3 RTC).</p>
+ */
+ inline void SetDestination(const Destination& value) { m_destinationHasBeenSet = true; m_destination = value; }
+
+ /**
+ * <p>A container for information about the replication destination and its
+ * configurations including enabling the S3 Replication Time Control (S3 RTC).</p>
+ */
+ inline void SetDestination(Destination&& value) { m_destinationHasBeenSet = true; m_destination = std::move(value); }
+
+ /**
+ * <p>A container for information about the replication destination and its
+ * configurations including enabling the S3 Replication Time Control (S3 RTC).</p>
+ */
+ inline ReplicationRule& WithDestination(const Destination& value) { SetDestination(value); return *this;}
+
+ /**
+ * <p>A container for information about the replication destination and its
+ * configurations including enabling the S3 Replication Time Control (S3 RTC).</p>
+ */
+ inline ReplicationRule& WithDestination(Destination&& value) { SetDestination(std::move(value)); return *this;}
+
+
+
+ inline const DeleteMarkerReplication& GetDeleteMarkerReplication() const{ return m_deleteMarkerReplication; }
+
+
+ inline bool DeleteMarkerReplicationHasBeenSet() const { return m_deleteMarkerReplicationHasBeenSet; }
+
+
+ inline void SetDeleteMarkerReplication(const DeleteMarkerReplication& value) { m_deleteMarkerReplicationHasBeenSet = true; m_deleteMarkerReplication = value; }
+
+
+ inline void SetDeleteMarkerReplication(DeleteMarkerReplication&& value) { m_deleteMarkerReplicationHasBeenSet = true; m_deleteMarkerReplication = std::move(value); }
+
+
+ inline ReplicationRule& WithDeleteMarkerReplication(const DeleteMarkerReplication& value) { SetDeleteMarkerReplication(value); return *this;}
+
+
+ inline ReplicationRule& WithDeleteMarkerReplication(DeleteMarkerReplication&& value) { SetDeleteMarkerReplication(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_iD;
+ bool m_iDHasBeenSet;
+
+ int m_priority;
+ bool m_priorityHasBeenSet;
+
+ ReplicationRuleFilter m_filter;
+ bool m_filterHasBeenSet;
+
+ ReplicationRuleStatus m_status;
+ bool m_statusHasBeenSet;
+
+ SourceSelectionCriteria m_sourceSelectionCriteria;
+ bool m_sourceSelectionCriteriaHasBeenSet;
+
+ ExistingObjectReplication m_existingObjectReplication;
+ bool m_existingObjectReplicationHasBeenSet;
+
+ Destination m_destination;
+ bool m_destinationHasBeenSet;
+
+ DeleteMarkerReplication m_deleteMarkerReplication;
+ bool m_deleteMarkerReplicationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleAndOperator.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleAndOperator.h
new file mode 100644
index 00000000000..900e8738691
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleAndOperator.h
@@ -0,0 +1,148 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for specifying rule filters. The filters determine the subset of
+ * objects to which the rule applies. This element is required only if you specify
+ * more than one filter. </p> <p>For example:</p> <ul> <li> <p>If you specify both
+ * a <code>Prefix</code> and a <code>Tag</code> filter, wrap these filters in an
+ * <code>And</code> tag. </p> </li> <li> <p>If you specify a filter based on
+ * multiple tags, wrap the <code>Tag</code> elements in an <code>And</code> tag</p>
+ * </li> </ul><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationRuleAndOperator">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ReplicationRuleAndOperator
+ {
+ public:
+ ReplicationRuleAndOperator();
+ ReplicationRuleAndOperator(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ReplicationRuleAndOperator& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline ReplicationRuleAndOperator& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline ReplicationRuleAndOperator& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline ReplicationRuleAndOperator& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline const Aws::Vector<Tag>& GetTags() const{ return m_tags; }
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline void SetTags(const Aws::Vector<Tag>& value) { m_tagsHasBeenSet = true; m_tags = value; }
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline void SetTags(Aws::Vector<Tag>&& value) { m_tagsHasBeenSet = true; m_tags = std::move(value); }
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline ReplicationRuleAndOperator& WithTags(const Aws::Vector<Tag>& value) { SetTags(value); return *this;}
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline ReplicationRuleAndOperator& WithTags(Aws::Vector<Tag>&& value) { SetTags(std::move(value)); return *this;}
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline ReplicationRuleAndOperator& AddTags(const Tag& value) { m_tagsHasBeenSet = true; m_tags.push_back(value); return *this; }
+
+ /**
+ * <p>An array of tags containing key and value pairs.</p>
+ */
+ inline ReplicationRuleAndOperator& AddTags(Tag&& value) { m_tagsHasBeenSet = true; m_tags.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Aws::Vector<Tag> m_tags;
+ bool m_tagsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleFilter.h
new file mode 100644
index 00000000000..f8d7e698c09
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleFilter.h
@@ -0,0 +1,211 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Tag.h>
+#include <aws/s3/model/ReplicationRuleAndOperator.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A filter that identifies the subset of objects to which the replication rule
+ * applies. A <code>Filter</code> must specify exactly one <code>Prefix</code>,
+ * <code>Tag</code>, or an <code>And</code> child element.</p><p><h3>See Also:</h3>
+ * <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationRuleFilter">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ReplicationRuleFilter
+ {
+ public:
+ ReplicationRuleFilter();
+ ReplicationRuleFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ReplicationRuleFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline ReplicationRuleFilter& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline ReplicationRuleFilter& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>An object key name prefix that identifies the subset of objects to which the
+ * rule applies.</p>
+ */
+ inline ReplicationRuleFilter& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>A container for specifying a tag key and value. </p> <p>The rule applies only
+ * to objects that have the tag in their tag set.</p>
+ */
+ inline const Tag& GetTag() const{ return m_tag; }
+
+ /**
+ * <p>A container for specifying a tag key and value. </p> <p>The rule applies only
+ * to objects that have the tag in their tag set.</p>
+ */
+ inline bool TagHasBeenSet() const { return m_tagHasBeenSet; }
+
+ /**
+ * <p>A container for specifying a tag key and value. </p> <p>The rule applies only
+ * to objects that have the tag in their tag set.</p>
+ */
+ inline void SetTag(const Tag& value) { m_tagHasBeenSet = true; m_tag = value; }
+
+ /**
+ * <p>A container for specifying a tag key and value. </p> <p>The rule applies only
+ * to objects that have the tag in their tag set.</p>
+ */
+ inline void SetTag(Tag&& value) { m_tagHasBeenSet = true; m_tag = std::move(value); }
+
+ /**
+ * <p>A container for specifying a tag key and value. </p> <p>The rule applies only
+ * to objects that have the tag in their tag set.</p>
+ */
+ inline ReplicationRuleFilter& WithTag(const Tag& value) { SetTag(value); return *this;}
+
+ /**
+ * <p>A container for specifying a tag key and value. </p> <p>The rule applies only
+ * to objects that have the tag in their tag set.</p>
+ */
+ inline ReplicationRuleFilter& WithTag(Tag&& value) { SetTag(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A container for specifying rule filters. The filters determine the subset of
+ * objects to which the rule applies. This element is required only if you specify
+ * more than one filter. For example: </p> <ul> <li> <p>If you specify both a
+ * <code>Prefix</code> and a <code>Tag</code> filter, wrap these filters in an
+ * <code>And</code> tag.</p> </li> <li> <p>If you specify a filter based on
+ * multiple tags, wrap the <code>Tag</code> elements in an <code>And</code>
+ * tag.</p> </li> </ul>
+ */
+ inline const ReplicationRuleAndOperator& GetAnd() const{ return m_and; }
+
+ /**
+ * <p>A container for specifying rule filters. The filters determine the subset of
+ * objects to which the rule applies. This element is required only if you specify
+ * more than one filter. For example: </p> <ul> <li> <p>If you specify both a
+ * <code>Prefix</code> and a <code>Tag</code> filter, wrap these filters in an
+ * <code>And</code> tag.</p> </li> <li> <p>If you specify a filter based on
+ * multiple tags, wrap the <code>Tag</code> elements in an <code>And</code>
+ * tag.</p> </li> </ul>
+ */
+ inline bool AndHasBeenSet() const { return m_andHasBeenSet; }
+
+ /**
+ * <p>A container for specifying rule filters. The filters determine the subset of
+ * objects to which the rule applies. This element is required only if you specify
+ * more than one filter. For example: </p> <ul> <li> <p>If you specify both a
+ * <code>Prefix</code> and a <code>Tag</code> filter, wrap these filters in an
+ * <code>And</code> tag.</p> </li> <li> <p>If you specify a filter based on
+ * multiple tags, wrap the <code>Tag</code> elements in an <code>And</code>
+ * tag.</p> </li> </ul>
+ */
+ inline void SetAnd(const ReplicationRuleAndOperator& value) { m_andHasBeenSet = true; m_and = value; }
+
+ /**
+ * <p>A container for specifying rule filters. The filters determine the subset of
+ * objects to which the rule applies. This element is required only if you specify
+ * more than one filter. For example: </p> <ul> <li> <p>If you specify both a
+ * <code>Prefix</code> and a <code>Tag</code> filter, wrap these filters in an
+ * <code>And</code> tag.</p> </li> <li> <p>If you specify a filter based on
+ * multiple tags, wrap the <code>Tag</code> elements in an <code>And</code>
+ * tag.</p> </li> </ul>
+ */
+ inline void SetAnd(ReplicationRuleAndOperator&& value) { m_andHasBeenSet = true; m_and = std::move(value); }
+
+ /**
+ * <p>A container for specifying rule filters. The filters determine the subset of
+ * objects to which the rule applies. This element is required only if you specify
+ * more than one filter. For example: </p> <ul> <li> <p>If you specify both a
+ * <code>Prefix</code> and a <code>Tag</code> filter, wrap these filters in an
+ * <code>And</code> tag.</p> </li> <li> <p>If you specify a filter based on
+ * multiple tags, wrap the <code>Tag</code> elements in an <code>And</code>
+ * tag.</p> </li> </ul>
+ */
+ inline ReplicationRuleFilter& WithAnd(const ReplicationRuleAndOperator& value) { SetAnd(value); return *this;}
+
+ /**
+ * <p>A container for specifying rule filters. The filters determine the subset of
+ * objects to which the rule applies. This element is required only if you specify
+ * more than one filter. For example: </p> <ul> <li> <p>If you specify both a
+ * <code>Prefix</code> and a <code>Tag</code> filter, wrap these filters in an
+ * <code>And</code> tag.</p> </li> <li> <p>If you specify a filter based on
+ * multiple tags, wrap the <code>Tag</code> elements in an <code>And</code>
+ * tag.</p> </li> </ul>
+ */
+ inline ReplicationRuleFilter& WithAnd(ReplicationRuleAndOperator&& value) { SetAnd(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Tag m_tag;
+ bool m_tagHasBeenSet;
+
+ ReplicationRuleAndOperator m_and;
+ bool m_andHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleStatus.h
new file mode 100644
index 00000000000..a977fb6e3b5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationRuleStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ReplicationRuleStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace ReplicationRuleStatusMapper
+{
+AWS_S3_API ReplicationRuleStatus GetReplicationRuleStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForReplicationRuleStatus(ReplicationRuleStatus value);
+} // namespace ReplicationRuleStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationStatus.h
new file mode 100644
index 00000000000..ec89d045a5d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationStatus.h
@@ -0,0 +1,33 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ReplicationStatus
+ {
+ NOT_SET,
+ COMPLETED,
+ PENDING,
+ FAILED,
+ REPLICA
+ };
+
+namespace ReplicationStatusMapper
+{
+AWS_S3_API ReplicationStatus GetReplicationStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForReplicationStatus(ReplicationStatus value);
+} // namespace ReplicationStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTime.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTime.h
new file mode 100644
index 00000000000..fa5cfd6008e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTime.h
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ReplicationTimeStatus.h>
+#include <aws/s3/model/ReplicationTimeValue.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p> A container specifying S3 Replication Time Control (S3 RTC) related
+ * information, including whether S3 RTC is enabled and the time when all objects
+ * and operations on objects must be replicated. Must be specified together with a
+ * <code>Metrics</code> block. </p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationTime">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ReplicationTime
+ {
+ public:
+ ReplicationTime();
+ ReplicationTime(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ReplicationTime& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p> Specifies whether the replication time is enabled. </p>
+ */
+ inline const ReplicationTimeStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p> Specifies whether the replication time is enabled. </p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p> Specifies whether the replication time is enabled. </p>
+ */
+ inline void SetStatus(const ReplicationTimeStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p> Specifies whether the replication time is enabled. </p>
+ */
+ inline void SetStatus(ReplicationTimeStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p> Specifies whether the replication time is enabled. </p>
+ */
+ inline ReplicationTime& WithStatus(const ReplicationTimeStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p> Specifies whether the replication time is enabled. </p>
+ */
+ inline ReplicationTime& WithStatus(ReplicationTimeStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p> A container specifying the time by which replication should be complete for
+ * all objects and operations on objects. </p>
+ */
+ inline const ReplicationTimeValue& GetTime() const{ return m_time; }
+
+ /**
+ * <p> A container specifying the time by which replication should be complete for
+ * all objects and operations on objects. </p>
+ */
+ inline bool TimeHasBeenSet() const { return m_timeHasBeenSet; }
+
+ /**
+ * <p> A container specifying the time by which replication should be complete for
+ * all objects and operations on objects. </p>
+ */
+ inline void SetTime(const ReplicationTimeValue& value) { m_timeHasBeenSet = true; m_time = value; }
+
+ /**
+ * <p> A container specifying the time by which replication should be complete for
+ * all objects and operations on objects. </p>
+ */
+ inline void SetTime(ReplicationTimeValue&& value) { m_timeHasBeenSet = true; m_time = std::move(value); }
+
+ /**
+ * <p> A container specifying the time by which replication should be complete for
+ * all objects and operations on objects. </p>
+ */
+ inline ReplicationTime& WithTime(const ReplicationTimeValue& value) { SetTime(value); return *this;}
+
+ /**
+ * <p> A container specifying the time by which replication should be complete for
+ * all objects and operations on objects. </p>
+ */
+ inline ReplicationTime& WithTime(ReplicationTimeValue&& value) { SetTime(std::move(value)); return *this;}
+
+ private:
+
+ ReplicationTimeStatus m_status;
+ bool m_statusHasBeenSet;
+
+ ReplicationTimeValue m_time;
+ bool m_timeHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeStatus.h
new file mode 100644
index 00000000000..8a74cf56384
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ReplicationTimeStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace ReplicationTimeStatusMapper
+{
+AWS_S3_API ReplicationTimeStatus GetReplicationTimeStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForReplicationTimeStatus(ReplicationTimeStatus value);
+} // namespace ReplicationTimeStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeValue.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeValue.h
new file mode 100644
index 00000000000..846b5f88b91
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ReplicationTimeValue.h
@@ -0,0 +1,72 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p> A container specifying the time value for S3 Replication Time Control (S3
+ * RTC) and replication metrics <code>EventThreshold</code>. </p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationTimeValue">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ReplicationTimeValue
+ {
+ public:
+ ReplicationTimeValue();
+ ReplicationTimeValue(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ReplicationTimeValue& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p> Contains an integer specifying time in minutes. </p> <p> Valid values: 15
+ * minutes. </p>
+ */
+ inline int GetMinutes() const{ return m_minutes; }
+
+ /**
+ * <p> Contains an integer specifying time in minutes. </p> <p> Valid values: 15
+ * minutes. </p>
+ */
+ inline bool MinutesHasBeenSet() const { return m_minutesHasBeenSet; }
+
+ /**
+ * <p> Contains an integer specifying time in minutes. </p> <p> Valid values: 15
+ * minutes. </p>
+ */
+ inline void SetMinutes(int value) { m_minutesHasBeenSet = true; m_minutes = value; }
+
+ /**
+ * <p> Contains an integer specifying time in minutes. </p> <p> Valid values: 15
+ * minutes. </p>
+ */
+ inline ReplicationTimeValue& WithMinutes(int value) { SetMinutes(value); return *this;}
+
+ private:
+
+ int m_minutes;
+ bool m_minutesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestCharged.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestCharged.h
new file mode 100644
index 00000000000..6b8d9e93f85
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestCharged.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class RequestCharged
+ {
+ NOT_SET,
+ requester
+ };
+
+namespace RequestChargedMapper
+{
+AWS_S3_API RequestCharged GetRequestChargedForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForRequestCharged(RequestCharged value);
+} // namespace RequestChargedMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPayer.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPayer.h
new file mode 100644
index 00000000000..4c388c33814
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPayer.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class RequestPayer
+ {
+ NOT_SET,
+ requester
+ };
+
+namespace RequestPayerMapper
+{
+AWS_S3_API RequestPayer GetRequestPayerForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForRequestPayer(RequestPayer value);
+} // namespace RequestPayerMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPaymentConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPaymentConfiguration.h
new file mode 100644
index 00000000000..72861dbe7bb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestPaymentConfiguration.h
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Payer.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for Payer.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RequestPaymentConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API RequestPaymentConfiguration
+ {
+ public:
+ RequestPaymentConfiguration();
+ RequestPaymentConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ RequestPaymentConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline const Payer& GetPayer() const{ return m_payer; }
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline bool PayerHasBeenSet() const { return m_payerHasBeenSet; }
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline void SetPayer(const Payer& value) { m_payerHasBeenSet = true; m_payer = value; }
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline void SetPayer(Payer&& value) { m_payerHasBeenSet = true; m_payer = std::move(value); }
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline RequestPaymentConfiguration& WithPayer(const Payer& value) { SetPayer(value); return *this;}
+
+ /**
+ * <p>Specifies who pays for the download and request fees.</p>
+ */
+ inline RequestPaymentConfiguration& WithPayer(Payer&& value) { SetPayer(std::move(value)); return *this;}
+
+ private:
+
+ Payer m_payer;
+ bool m_payerHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestProgress.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestProgress.h
new file mode 100644
index 00000000000..717ad47c6f9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RequestProgress.h
@@ -0,0 +1,71 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for specifying if periodic <code>QueryProgress</code> messages
+ * should be sent.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RequestProgress">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API RequestProgress
+ {
+ public:
+ RequestProgress();
+ RequestProgress(const Aws::Utils::Xml::XmlNode& xmlNode);
+ RequestProgress& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies whether periodic QueryProgress frames should be sent. Valid values:
+ * TRUE, FALSE. Default value: FALSE.</p>
+ */
+ inline bool GetEnabled() const{ return m_enabled; }
+
+ /**
+ * <p>Specifies whether periodic QueryProgress frames should be sent. Valid values:
+ * TRUE, FALSE. Default value: FALSE.</p>
+ */
+ inline bool EnabledHasBeenSet() const { return m_enabledHasBeenSet; }
+
+ /**
+ * <p>Specifies whether periodic QueryProgress frames should be sent. Valid values:
+ * TRUE, FALSE. Default value: FALSE.</p>
+ */
+ inline void SetEnabled(bool value) { m_enabledHasBeenSet = true; m_enabled = value; }
+
+ /**
+ * <p>Specifies whether periodic QueryProgress frames should be sent. Valid values:
+ * TRUE, FALSE. Default value: FALSE.</p>
+ */
+ inline RequestProgress& WithEnabled(bool value) { SetEnabled(value); return *this;}
+
+ private:
+
+ bool m_enabled;
+ bool m_enabledHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectRequest.h
new file mode 100644
index 00000000000..157b6db7c39
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectRequest.h
@@ -0,0 +1,473 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RestoreRequest.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API RestoreObjectRequest : public S3Request
+ {
+ public:
+ RestoreObjectRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "RestoreObject"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline RestoreObjectRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline RestoreObjectRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name containing the object to restore. </p> <p>When using this API
+ * with an access point, you must direct requests to the access point hostname. The
+ * access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline RestoreObjectRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline RestoreObjectRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline RestoreObjectRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the operation was initiated.</p>
+ */
+ inline RestoreObjectRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline const Aws::String& GetVersionId() const{ return m_versionId; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline bool VersionIdHasBeenSet() const { return m_versionIdHasBeenSet; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const Aws::String& value) { m_versionIdHasBeenSet = true; m_versionId = value; }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(Aws::String&& value) { m_versionIdHasBeenSet = true; m_versionId = std::move(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline void SetVersionId(const char* value) { m_versionIdHasBeenSet = true; m_versionId.assign(value); }
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline RestoreObjectRequest& WithVersionId(const Aws::String& value) { SetVersionId(value); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline RestoreObjectRequest& WithVersionId(Aws::String&& value) { SetVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>VersionId used to reference a specific version of the object.</p>
+ */
+ inline RestoreObjectRequest& WithVersionId(const char* value) { SetVersionId(value); return *this;}
+
+
+
+ inline const RestoreRequest& GetRestoreRequest() const{ return m_restoreRequest; }
+
+
+ inline bool RestoreRequestHasBeenSet() const { return m_restoreRequestHasBeenSet; }
+
+
+ inline void SetRestoreRequest(const RestoreRequest& value) { m_restoreRequestHasBeenSet = true; m_restoreRequest = value; }
+
+
+ inline void SetRestoreRequest(RestoreRequest&& value) { m_restoreRequestHasBeenSet = true; m_restoreRequest = std::move(value); }
+
+
+ inline RestoreObjectRequest& WithRestoreRequest(const RestoreRequest& value) { SetRestoreRequest(value); return *this;}
+
+
+ inline RestoreObjectRequest& WithRestoreRequest(RestoreRequest&& value) { SetRestoreRequest(std::move(value)); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline RestoreObjectRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline RestoreObjectRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline RestoreObjectRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline RestoreObjectRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline RestoreObjectRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline RestoreObjectRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline RestoreObjectRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline RestoreObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline RestoreObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline RestoreObjectRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline RestoreObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline RestoreObjectRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline RestoreObjectRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline RestoreObjectRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_versionId;
+ bool m_versionIdHasBeenSet;
+
+ RestoreRequest m_restoreRequest;
+ bool m_restoreRequestHasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectResult.h
new file mode 100644
index 00000000000..2cadd53189e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreObjectResult.h
@@ -0,0 +1,103 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API RestoreObjectResult
+ {
+ public:
+ RestoreObjectResult();
+ RestoreObjectResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ RestoreObjectResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline RestoreObjectResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline RestoreObjectResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Indicates the path in the provided S3 output location where Select results
+ * will be restored to.</p>
+ */
+ inline const Aws::String& GetRestoreOutputPath() const{ return m_restoreOutputPath; }
+
+ /**
+ * <p>Indicates the path in the provided S3 output location where Select results
+ * will be restored to.</p>
+ */
+ inline void SetRestoreOutputPath(const Aws::String& value) { m_restoreOutputPath = value; }
+
+ /**
+ * <p>Indicates the path in the provided S3 output location where Select results
+ * will be restored to.</p>
+ */
+ inline void SetRestoreOutputPath(Aws::String&& value) { m_restoreOutputPath = std::move(value); }
+
+ /**
+ * <p>Indicates the path in the provided S3 output location where Select results
+ * will be restored to.</p>
+ */
+ inline void SetRestoreOutputPath(const char* value) { m_restoreOutputPath.assign(value); }
+
+ /**
+ * <p>Indicates the path in the provided S3 output location where Select results
+ * will be restored to.</p>
+ */
+ inline RestoreObjectResult& WithRestoreOutputPath(const Aws::String& value) { SetRestoreOutputPath(value); return *this;}
+
+ /**
+ * <p>Indicates the path in the provided S3 output location where Select results
+ * will be restored to.</p>
+ */
+ inline RestoreObjectResult& WithRestoreOutputPath(Aws::String&& value) { SetRestoreOutputPath(std::move(value)); return *this;}
+
+ /**
+ * <p>Indicates the path in the provided S3 output location where Select results
+ * will be restored to.</p>
+ */
+ inline RestoreObjectResult& WithRestoreOutputPath(const char* value) { SetRestoreOutputPath(value); return *this;}
+
+ private:
+
+ RequestCharged m_requestCharged;
+
+ Aws::String m_restoreOutputPath;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequest.h
new file mode 100644
index 00000000000..f2460fbc85b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequest.h
@@ -0,0 +1,301 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/GlacierJobParameters.h>
+#include <aws/s3/model/RestoreRequestType.h>
+#include <aws/s3/model/Tier.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/SelectParameters.h>
+#include <aws/s3/model/OutputLocation.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for restore job parameters.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreRequest">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API RestoreRequest
+ {
+ public:
+ RestoreRequest();
+ RestoreRequest(const Aws::Utils::Xml::XmlNode& xmlNode);
+ RestoreRequest& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Lifetime of the active copy in days. Do not use with restores that specify
+ * <code>OutputLocation</code>.</p> <p>The Days element is required for regular
+ * restores, and must not be provided for select requests.</p>
+ */
+ inline int GetDays() const{ return m_days; }
+
+ /**
+ * <p>Lifetime of the active copy in days. Do not use with restores that specify
+ * <code>OutputLocation</code>.</p> <p>The Days element is required for regular
+ * restores, and must not be provided for select requests.</p>
+ */
+ inline bool DaysHasBeenSet() const { return m_daysHasBeenSet; }
+
+ /**
+ * <p>Lifetime of the active copy in days. Do not use with restores that specify
+ * <code>OutputLocation</code>.</p> <p>The Days element is required for regular
+ * restores, and must not be provided for select requests.</p>
+ */
+ inline void SetDays(int value) { m_daysHasBeenSet = true; m_days = value; }
+
+ /**
+ * <p>Lifetime of the active copy in days. Do not use with restores that specify
+ * <code>OutputLocation</code>.</p> <p>The Days element is required for regular
+ * restores, and must not be provided for select requests.</p>
+ */
+ inline RestoreRequest& WithDays(int value) { SetDays(value); return *this;}
+
+
+ /**
+ * <p>S3 Glacier related parameters pertaining to this job. Do not use with
+ * restores that specify <code>OutputLocation</code>.</p>
+ */
+ inline const GlacierJobParameters& GetGlacierJobParameters() const{ return m_glacierJobParameters; }
+
+ /**
+ * <p>S3 Glacier related parameters pertaining to this job. Do not use with
+ * restores that specify <code>OutputLocation</code>.</p>
+ */
+ inline bool GlacierJobParametersHasBeenSet() const { return m_glacierJobParametersHasBeenSet; }
+
+ /**
+ * <p>S3 Glacier related parameters pertaining to this job. Do not use with
+ * restores that specify <code>OutputLocation</code>.</p>
+ */
+ inline void SetGlacierJobParameters(const GlacierJobParameters& value) { m_glacierJobParametersHasBeenSet = true; m_glacierJobParameters = value; }
+
+ /**
+ * <p>S3 Glacier related parameters pertaining to this job. Do not use with
+ * restores that specify <code>OutputLocation</code>.</p>
+ */
+ inline void SetGlacierJobParameters(GlacierJobParameters&& value) { m_glacierJobParametersHasBeenSet = true; m_glacierJobParameters = std::move(value); }
+
+ /**
+ * <p>S3 Glacier related parameters pertaining to this job. Do not use with
+ * restores that specify <code>OutputLocation</code>.</p>
+ */
+ inline RestoreRequest& WithGlacierJobParameters(const GlacierJobParameters& value) { SetGlacierJobParameters(value); return *this;}
+
+ /**
+ * <p>S3 Glacier related parameters pertaining to this job. Do not use with
+ * restores that specify <code>OutputLocation</code>.</p>
+ */
+ inline RestoreRequest& WithGlacierJobParameters(GlacierJobParameters&& value) { SetGlacierJobParameters(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Type of restore request.</p>
+ */
+ inline const RestoreRequestType& GetType() const{ return m_type; }
+
+ /**
+ * <p>Type of restore request.</p>
+ */
+ inline bool TypeHasBeenSet() const { return m_typeHasBeenSet; }
+
+ /**
+ * <p>Type of restore request.</p>
+ */
+ inline void SetType(const RestoreRequestType& value) { m_typeHasBeenSet = true; m_type = value; }
+
+ /**
+ * <p>Type of restore request.</p>
+ */
+ inline void SetType(RestoreRequestType&& value) { m_typeHasBeenSet = true; m_type = std::move(value); }
+
+ /**
+ * <p>Type of restore request.</p>
+ */
+ inline RestoreRequest& WithType(const RestoreRequestType& value) { SetType(value); return *this;}
+
+ /**
+ * <p>Type of restore request.</p>
+ */
+ inline RestoreRequest& WithType(RestoreRequestType&& value) { SetType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline const Tier& GetTier() const{ return m_tier; }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline bool TierHasBeenSet() const { return m_tierHasBeenSet; }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline void SetTier(const Tier& value) { m_tierHasBeenSet = true; m_tier = value; }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline void SetTier(Tier&& value) { m_tierHasBeenSet = true; m_tier = std::move(value); }
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline RestoreRequest& WithTier(const Tier& value) { SetTier(value); return *this;}
+
+ /**
+ * <p>Retrieval tier at which the restore will be processed.</p>
+ */
+ inline RestoreRequest& WithTier(Tier&& value) { SetTier(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline const Aws::String& GetDescription() const{ return m_description; }
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline bool DescriptionHasBeenSet() const { return m_descriptionHasBeenSet; }
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline void SetDescription(const Aws::String& value) { m_descriptionHasBeenSet = true; m_description = value; }
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline void SetDescription(Aws::String&& value) { m_descriptionHasBeenSet = true; m_description = std::move(value); }
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline void SetDescription(const char* value) { m_descriptionHasBeenSet = true; m_description.assign(value); }
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline RestoreRequest& WithDescription(const Aws::String& value) { SetDescription(value); return *this;}
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline RestoreRequest& WithDescription(Aws::String&& value) { SetDescription(std::move(value)); return *this;}
+
+ /**
+ * <p>The optional description for the job.</p>
+ */
+ inline RestoreRequest& WithDescription(const char* value) { SetDescription(value); return *this;}
+
+
+ /**
+ * <p>Describes the parameters for Select job types.</p>
+ */
+ inline const SelectParameters& GetSelectParameters() const{ return m_selectParameters; }
+
+ /**
+ * <p>Describes the parameters for Select job types.</p>
+ */
+ inline bool SelectParametersHasBeenSet() const { return m_selectParametersHasBeenSet; }
+
+ /**
+ * <p>Describes the parameters for Select job types.</p>
+ */
+ inline void SetSelectParameters(const SelectParameters& value) { m_selectParametersHasBeenSet = true; m_selectParameters = value; }
+
+ /**
+ * <p>Describes the parameters for Select job types.</p>
+ */
+ inline void SetSelectParameters(SelectParameters&& value) { m_selectParametersHasBeenSet = true; m_selectParameters = std::move(value); }
+
+ /**
+ * <p>Describes the parameters for Select job types.</p>
+ */
+ inline RestoreRequest& WithSelectParameters(const SelectParameters& value) { SetSelectParameters(value); return *this;}
+
+ /**
+ * <p>Describes the parameters for Select job types.</p>
+ */
+ inline RestoreRequest& WithSelectParameters(SelectParameters&& value) { SetSelectParameters(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Describes the location where the restore job's output is stored.</p>
+ */
+ inline const OutputLocation& GetOutputLocation() const{ return m_outputLocation; }
+
+ /**
+ * <p>Describes the location where the restore job's output is stored.</p>
+ */
+ inline bool OutputLocationHasBeenSet() const { return m_outputLocationHasBeenSet; }
+
+ /**
+ * <p>Describes the location where the restore job's output is stored.</p>
+ */
+ inline void SetOutputLocation(const OutputLocation& value) { m_outputLocationHasBeenSet = true; m_outputLocation = value; }
+
+ /**
+ * <p>Describes the location where the restore job's output is stored.</p>
+ */
+ inline void SetOutputLocation(OutputLocation&& value) { m_outputLocationHasBeenSet = true; m_outputLocation = std::move(value); }
+
+ /**
+ * <p>Describes the location where the restore job's output is stored.</p>
+ */
+ inline RestoreRequest& WithOutputLocation(const OutputLocation& value) { SetOutputLocation(value); return *this;}
+
+ /**
+ * <p>Describes the location where the restore job's output is stored.</p>
+ */
+ inline RestoreRequest& WithOutputLocation(OutputLocation&& value) { SetOutputLocation(std::move(value)); return *this;}
+
+ private:
+
+ int m_days;
+ bool m_daysHasBeenSet;
+
+ GlacierJobParameters m_glacierJobParameters;
+ bool m_glacierJobParametersHasBeenSet;
+
+ RestoreRequestType m_type;
+ bool m_typeHasBeenSet;
+
+ Tier m_tier;
+ bool m_tierHasBeenSet;
+
+ Aws::String m_description;
+ bool m_descriptionHasBeenSet;
+
+ SelectParameters m_selectParameters;
+ bool m_selectParametersHasBeenSet;
+
+ OutputLocation m_outputLocation;
+ bool m_outputLocationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequestType.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequestType.h
new file mode 100644
index 00000000000..654c8c38a6f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RestoreRequestType.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class RestoreRequestType
+ {
+ NOT_SET,
+ SELECT
+ };
+
+namespace RestoreRequestTypeMapper
+{
+AWS_S3_API RestoreRequestType GetRestoreRequestTypeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForRestoreRequestType(RestoreRequestType value);
+} // namespace RestoreRequestTypeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RoutingRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RoutingRule.h
new file mode 100644
index 00000000000..ff37fa473ec
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/RoutingRule.h
@@ -0,0 +1,153 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Condition.h>
+#include <aws/s3/model/Redirect.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the redirect behavior and when a redirect is applied. For more
+ * information about routing rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html#advanced-conditional-redirects">Configuring
+ * advanced conditional redirects</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RoutingRule">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API RoutingRule
+ {
+ public:
+ RoutingRule();
+ RoutingRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ RoutingRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A container for describing a condition that must be met for the specified
+ * redirect to apply. For example, 1. If request is for pages in the
+ * <code>/docs</code> folder, redirect to the <code>/documents</code> folder. 2. If
+ * request results in HTTP error 4xx, redirect request to another host where you
+ * might process the error.</p>
+ */
+ inline const Condition& GetCondition() const{ return m_condition; }
+
+ /**
+ * <p>A container for describing a condition that must be met for the specified
+ * redirect to apply. For example, 1. If request is for pages in the
+ * <code>/docs</code> folder, redirect to the <code>/documents</code> folder. 2. If
+ * request results in HTTP error 4xx, redirect request to another host where you
+ * might process the error.</p>
+ */
+ inline bool ConditionHasBeenSet() const { return m_conditionHasBeenSet; }
+
+ /**
+ * <p>A container for describing a condition that must be met for the specified
+ * redirect to apply. For example, 1. If request is for pages in the
+ * <code>/docs</code> folder, redirect to the <code>/documents</code> folder. 2. If
+ * request results in HTTP error 4xx, redirect request to another host where you
+ * might process the error.</p>
+ */
+ inline void SetCondition(const Condition& value) { m_conditionHasBeenSet = true; m_condition = value; }
+
+ /**
+ * <p>A container for describing a condition that must be met for the specified
+ * redirect to apply. For example, 1. If request is for pages in the
+ * <code>/docs</code> folder, redirect to the <code>/documents</code> folder. 2. If
+ * request results in HTTP error 4xx, redirect request to another host where you
+ * might process the error.</p>
+ */
+ inline void SetCondition(Condition&& value) { m_conditionHasBeenSet = true; m_condition = std::move(value); }
+
+ /**
+ * <p>A container for describing a condition that must be met for the specified
+ * redirect to apply. For example, 1. If request is for pages in the
+ * <code>/docs</code> folder, redirect to the <code>/documents</code> folder. 2. If
+ * request results in HTTP error 4xx, redirect request to another host where you
+ * might process the error.</p>
+ */
+ inline RoutingRule& WithCondition(const Condition& value) { SetCondition(value); return *this;}
+
+ /**
+ * <p>A container for describing a condition that must be met for the specified
+ * redirect to apply. For example, 1. If request is for pages in the
+ * <code>/docs</code> folder, redirect to the <code>/documents</code> folder. 2. If
+ * request results in HTTP error 4xx, redirect request to another host where you
+ * might process the error.</p>
+ */
+ inline RoutingRule& WithCondition(Condition&& value) { SetCondition(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Container for redirect information. You can redirect requests to another
+ * host, to another page, or with another protocol. In the event of an error, you
+ * can specify a different error code to return.</p>
+ */
+ inline const Redirect& GetRedirect() const{ return m_redirect; }
+
+ /**
+ * <p>Container for redirect information. You can redirect requests to another
+ * host, to another page, or with another protocol. In the event of an error, you
+ * can specify a different error code to return.</p>
+ */
+ inline bool RedirectHasBeenSet() const { return m_redirectHasBeenSet; }
+
+ /**
+ * <p>Container for redirect information. You can redirect requests to another
+ * host, to another page, or with another protocol. In the event of an error, you
+ * can specify a different error code to return.</p>
+ */
+ inline void SetRedirect(const Redirect& value) { m_redirectHasBeenSet = true; m_redirect = value; }
+
+ /**
+ * <p>Container for redirect information. You can redirect requests to another
+ * host, to another page, or with another protocol. In the event of an error, you
+ * can specify a different error code to return.</p>
+ */
+ inline void SetRedirect(Redirect&& value) { m_redirectHasBeenSet = true; m_redirect = std::move(value); }
+
+ /**
+ * <p>Container for redirect information. You can redirect requests to another
+ * host, to another page, or with another protocol. In the event of an error, you
+ * can specify a different error code to return.</p>
+ */
+ inline RoutingRule& WithRedirect(const Redirect& value) { SetRedirect(value); return *this;}
+
+ /**
+ * <p>Container for redirect information. You can redirect requests to another
+ * host, to another page, or with another protocol. In the event of an error, you
+ * can specify a different error code to return.</p>
+ */
+ inline RoutingRule& WithRedirect(Redirect&& value) { SetRedirect(std::move(value)); return *this;}
+
+ private:
+
+ Condition m_condition;
+ bool m_conditionHasBeenSet;
+
+ Redirect m_redirect;
+ bool m_redirectHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Rule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Rule.h
new file mode 100644
index 00000000000..649d14ceb3f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Rule.h
@@ -0,0 +1,358 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/LifecycleExpiration.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ExpirationStatus.h>
+#include <aws/s3/model/Transition.h>
+#include <aws/s3/model/NoncurrentVersionTransition.h>
+#include <aws/s3/model/NoncurrentVersionExpiration.h>
+#include <aws/s3/model/AbortIncompleteMultipartUpload.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies lifecycle rules for an Amazon S3 bucket. For more information, see
+ * <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html">Put
+ * Bucket Lifecycle Configuration</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>. For examples, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html#API_PutBucketLifecycleConfiguration_Examples">Put
+ * Bucket Lifecycle Configuration Examples</a> </p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Rule">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Rule
+ {
+ public:
+ Rule();
+ Rule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Rule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object.</p>
+ */
+ inline const LifecycleExpiration& GetExpiration() const{ return m_expiration; }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object.</p>
+ */
+ inline bool ExpirationHasBeenSet() const { return m_expirationHasBeenSet; }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object.</p>
+ */
+ inline void SetExpiration(const LifecycleExpiration& value) { m_expirationHasBeenSet = true; m_expiration = value; }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object.</p>
+ */
+ inline void SetExpiration(LifecycleExpiration&& value) { m_expirationHasBeenSet = true; m_expiration = std::move(value); }
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object.</p>
+ */
+ inline Rule& WithExpiration(const LifecycleExpiration& value) { SetExpiration(value); return *this;}
+
+ /**
+ * <p>Specifies the expiration for the lifecycle of the object.</p>
+ */
+ inline Rule& WithExpiration(LifecycleExpiration&& value) { SetExpiration(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline const Aws::String& GetID() const{ return m_iD; }
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline bool IDHasBeenSet() const { return m_iDHasBeenSet; }
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline void SetID(const Aws::String& value) { m_iDHasBeenSet = true; m_iD = value; }
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline void SetID(Aws::String&& value) { m_iDHasBeenSet = true; m_iD = std::move(value); }
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline void SetID(const char* value) { m_iDHasBeenSet = true; m_iD.assign(value); }
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline Rule& WithID(const Aws::String& value) { SetID(value); return *this;}
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline Rule& WithID(Aws::String&& value) { SetID(std::move(value)); return *this;}
+
+ /**
+ * <p>Unique identifier for the rule. The value can't be longer than 255
+ * characters.</p>
+ */
+ inline Rule& WithID(const char* value) { SetID(value); return *this;}
+
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline Rule& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline Rule& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key prefix that identifies one or more objects to which this rule
+ * applies.</p>
+ */
+ inline Rule& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+ /**
+ * <p>If <code>Enabled</code>, the rule is currently being applied. If
+ * <code>Disabled</code>, the rule is not currently being applied.</p>
+ */
+ inline const ExpirationStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>If <code>Enabled</code>, the rule is currently being applied. If
+ * <code>Disabled</code>, the rule is not currently being applied.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>If <code>Enabled</code>, the rule is currently being applied. If
+ * <code>Disabled</code>, the rule is not currently being applied.</p>
+ */
+ inline void SetStatus(const ExpirationStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>If <code>Enabled</code>, the rule is currently being applied. If
+ * <code>Disabled</code>, the rule is not currently being applied.</p>
+ */
+ inline void SetStatus(ExpirationStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>If <code>Enabled</code>, the rule is currently being applied. If
+ * <code>Disabled</code>, the rule is not currently being applied.</p>
+ */
+ inline Rule& WithStatus(const ExpirationStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>If <code>Enabled</code>, the rule is currently being applied. If
+ * <code>Disabled</code>, the rule is not currently being applied.</p>
+ */
+ inline Rule& WithStatus(ExpirationStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies when an object transitions to a specified storage class. For more
+ * information about Amazon S3 lifecycle configuration rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html">Transitioning
+ * Objects Using Amazon S3 Lifecycle</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline const Transition& GetTransition() const{ return m_transition; }
+
+ /**
+ * <p>Specifies when an object transitions to a specified storage class. For more
+ * information about Amazon S3 lifecycle configuration rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html">Transitioning
+ * Objects Using Amazon S3 Lifecycle</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline bool TransitionHasBeenSet() const { return m_transitionHasBeenSet; }
+
+ /**
+ * <p>Specifies when an object transitions to a specified storage class. For more
+ * information about Amazon S3 lifecycle configuration rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html">Transitioning
+ * Objects Using Amazon S3 Lifecycle</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline void SetTransition(const Transition& value) { m_transitionHasBeenSet = true; m_transition = value; }
+
+ /**
+ * <p>Specifies when an object transitions to a specified storage class. For more
+ * information about Amazon S3 lifecycle configuration rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html">Transitioning
+ * Objects Using Amazon S3 Lifecycle</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline void SetTransition(Transition&& value) { m_transitionHasBeenSet = true; m_transition = std::move(value); }
+
+ /**
+ * <p>Specifies when an object transitions to a specified storage class. For more
+ * information about Amazon S3 lifecycle configuration rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html">Transitioning
+ * Objects Using Amazon S3 Lifecycle</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline Rule& WithTransition(const Transition& value) { SetTransition(value); return *this;}
+
+ /**
+ * <p>Specifies when an object transitions to a specified storage class. For more
+ * information about Amazon S3 lifecycle configuration rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html">Transitioning
+ * Objects Using Amazon S3 Lifecycle</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p>
+ */
+ inline Rule& WithTransition(Transition&& value) { SetTransition(std::move(value)); return *this;}
+
+
+
+ inline const NoncurrentVersionTransition& GetNoncurrentVersionTransition() const{ return m_noncurrentVersionTransition; }
+
+
+ inline bool NoncurrentVersionTransitionHasBeenSet() const { return m_noncurrentVersionTransitionHasBeenSet; }
+
+
+ inline void SetNoncurrentVersionTransition(const NoncurrentVersionTransition& value) { m_noncurrentVersionTransitionHasBeenSet = true; m_noncurrentVersionTransition = value; }
+
+
+ inline void SetNoncurrentVersionTransition(NoncurrentVersionTransition&& value) { m_noncurrentVersionTransitionHasBeenSet = true; m_noncurrentVersionTransition = std::move(value); }
+
+
+ inline Rule& WithNoncurrentVersionTransition(const NoncurrentVersionTransition& value) { SetNoncurrentVersionTransition(value); return *this;}
+
+
+ inline Rule& WithNoncurrentVersionTransition(NoncurrentVersionTransition&& value) { SetNoncurrentVersionTransition(std::move(value)); return *this;}
+
+
+
+ inline const NoncurrentVersionExpiration& GetNoncurrentVersionExpiration() const{ return m_noncurrentVersionExpiration; }
+
+
+ inline bool NoncurrentVersionExpirationHasBeenSet() const { return m_noncurrentVersionExpirationHasBeenSet; }
+
+
+ inline void SetNoncurrentVersionExpiration(const NoncurrentVersionExpiration& value) { m_noncurrentVersionExpirationHasBeenSet = true; m_noncurrentVersionExpiration = value; }
+
+
+ inline void SetNoncurrentVersionExpiration(NoncurrentVersionExpiration&& value) { m_noncurrentVersionExpirationHasBeenSet = true; m_noncurrentVersionExpiration = std::move(value); }
+
+
+ inline Rule& WithNoncurrentVersionExpiration(const NoncurrentVersionExpiration& value) { SetNoncurrentVersionExpiration(value); return *this;}
+
+
+ inline Rule& WithNoncurrentVersionExpiration(NoncurrentVersionExpiration&& value) { SetNoncurrentVersionExpiration(std::move(value)); return *this;}
+
+
+
+ inline const AbortIncompleteMultipartUpload& GetAbortIncompleteMultipartUpload() const{ return m_abortIncompleteMultipartUpload; }
+
+
+ inline bool AbortIncompleteMultipartUploadHasBeenSet() const { return m_abortIncompleteMultipartUploadHasBeenSet; }
+
+
+ inline void SetAbortIncompleteMultipartUpload(const AbortIncompleteMultipartUpload& value) { m_abortIncompleteMultipartUploadHasBeenSet = true; m_abortIncompleteMultipartUpload = value; }
+
+
+ inline void SetAbortIncompleteMultipartUpload(AbortIncompleteMultipartUpload&& value) { m_abortIncompleteMultipartUploadHasBeenSet = true; m_abortIncompleteMultipartUpload = std::move(value); }
+
+
+ inline Rule& WithAbortIncompleteMultipartUpload(const AbortIncompleteMultipartUpload& value) { SetAbortIncompleteMultipartUpload(value); return *this;}
+
+
+ inline Rule& WithAbortIncompleteMultipartUpload(AbortIncompleteMultipartUpload&& value) { SetAbortIncompleteMultipartUpload(std::move(value)); return *this;}
+
+ private:
+
+ LifecycleExpiration m_expiration;
+ bool m_expirationHasBeenSet;
+
+ Aws::String m_iD;
+ bool m_iDHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ ExpirationStatus m_status;
+ bool m_statusHasBeenSet;
+
+ Transition m_transition;
+ bool m_transitionHasBeenSet;
+
+ NoncurrentVersionTransition m_noncurrentVersionTransition;
+ bool m_noncurrentVersionTransitionHasBeenSet;
+
+ NoncurrentVersionExpiration m_noncurrentVersionExpiration;
+ bool m_noncurrentVersionExpirationHasBeenSet;
+
+ AbortIncompleteMultipartUpload m_abortIncompleteMultipartUpload;
+ bool m_abortIncompleteMultipartUploadHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3KeyFilter.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3KeyFilter.h
new file mode 100644
index 00000000000..0f22a9524e5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3KeyFilter.h
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/FilterRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for object key name prefix and suffix filtering
+ * rules.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/S3KeyFilter">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API S3KeyFilter
+ {
+ public:
+ S3KeyFilter();
+ S3KeyFilter(const Aws::Utils::Xml::XmlNode& xmlNode);
+ S3KeyFilter& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const Aws::Vector<FilterRule>& GetFilterRules() const{ return m_filterRules; }
+
+
+ inline bool FilterRulesHasBeenSet() const { return m_filterRulesHasBeenSet; }
+
+
+ inline void SetFilterRules(const Aws::Vector<FilterRule>& value) { m_filterRulesHasBeenSet = true; m_filterRules = value; }
+
+
+ inline void SetFilterRules(Aws::Vector<FilterRule>&& value) { m_filterRulesHasBeenSet = true; m_filterRules = std::move(value); }
+
+
+ inline S3KeyFilter& WithFilterRules(const Aws::Vector<FilterRule>& value) { SetFilterRules(value); return *this;}
+
+
+ inline S3KeyFilter& WithFilterRules(Aws::Vector<FilterRule>&& value) { SetFilterRules(std::move(value)); return *this;}
+
+
+ inline S3KeyFilter& AddFilterRules(const FilterRule& value) { m_filterRulesHasBeenSet = true; m_filterRules.push_back(value); return *this; }
+
+
+ inline S3KeyFilter& AddFilterRules(FilterRule&& value) { m_filterRulesHasBeenSet = true; m_filterRules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<FilterRule> m_filterRules;
+ bool m_filterRulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3Location.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3Location.h
new file mode 100644
index 00000000000..8f0eab338b5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/S3Location.h
@@ -0,0 +1,352 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/Encryption.h>
+#include <aws/s3/model/ObjectCannedACL.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tagging.h>
+#include <aws/s3/model/StorageClass.h>
+#include <aws/s3/model/Grant.h>
+#include <aws/s3/model/MetadataEntry.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes an Amazon S3 location that will receive the results of the restore
+ * request.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/S3Location">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API S3Location
+ {
+ public:
+ S3Location();
+ S3Location(const Aws::Utils::Xml::XmlNode& xmlNode);
+ S3Location& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline const Aws::String& GetBucketName() const{ return m_bucketName; }
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline bool BucketNameHasBeenSet() const { return m_bucketNameHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline void SetBucketName(const Aws::String& value) { m_bucketNameHasBeenSet = true; m_bucketName = value; }
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline void SetBucketName(Aws::String&& value) { m_bucketNameHasBeenSet = true; m_bucketName = std::move(value); }
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline void SetBucketName(const char* value) { m_bucketNameHasBeenSet = true; m_bucketName.assign(value); }
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline S3Location& WithBucketName(const Aws::String& value) { SetBucketName(value); return *this;}
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline S3Location& WithBucketName(Aws::String&& value) { SetBucketName(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket where the restore results will be placed.</p>
+ */
+ inline S3Location& WithBucketName(const char* value) { SetBucketName(value); return *this;}
+
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline const Aws::String& GetPrefix() const{ return m_prefix; }
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline bool PrefixHasBeenSet() const { return m_prefixHasBeenSet; }
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline void SetPrefix(const Aws::String& value) { m_prefixHasBeenSet = true; m_prefix = value; }
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline void SetPrefix(Aws::String&& value) { m_prefixHasBeenSet = true; m_prefix = std::move(value); }
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline void SetPrefix(const char* value) { m_prefixHasBeenSet = true; m_prefix.assign(value); }
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline S3Location& WithPrefix(const Aws::String& value) { SetPrefix(value); return *this;}
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline S3Location& WithPrefix(Aws::String&& value) { SetPrefix(std::move(value)); return *this;}
+
+ /**
+ * <p>The prefix that is prepended to the restore results for this request.</p>
+ */
+ inline S3Location& WithPrefix(const char* value) { SetPrefix(value); return *this;}
+
+
+
+ inline const Encryption& GetEncryption() const{ return m_encryption; }
+
+
+ inline bool EncryptionHasBeenSet() const { return m_encryptionHasBeenSet; }
+
+
+ inline void SetEncryption(const Encryption& value) { m_encryptionHasBeenSet = true; m_encryption = value; }
+
+
+ inline void SetEncryption(Encryption&& value) { m_encryptionHasBeenSet = true; m_encryption = std::move(value); }
+
+
+ inline S3Location& WithEncryption(const Encryption& value) { SetEncryption(value); return *this;}
+
+
+ inline S3Location& WithEncryption(Encryption&& value) { SetEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The canned ACL to apply to the restore results.</p>
+ */
+ inline const ObjectCannedACL& GetCannedACL() const{ return m_cannedACL; }
+
+ /**
+ * <p>The canned ACL to apply to the restore results.</p>
+ */
+ inline bool CannedACLHasBeenSet() const { return m_cannedACLHasBeenSet; }
+
+ /**
+ * <p>The canned ACL to apply to the restore results.</p>
+ */
+ inline void SetCannedACL(const ObjectCannedACL& value) { m_cannedACLHasBeenSet = true; m_cannedACL = value; }
+
+ /**
+ * <p>The canned ACL to apply to the restore results.</p>
+ */
+ inline void SetCannedACL(ObjectCannedACL&& value) { m_cannedACLHasBeenSet = true; m_cannedACL = std::move(value); }
+
+ /**
+ * <p>The canned ACL to apply to the restore results.</p>
+ */
+ inline S3Location& WithCannedACL(const ObjectCannedACL& value) { SetCannedACL(value); return *this;}
+
+ /**
+ * <p>The canned ACL to apply to the restore results.</p>
+ */
+ inline S3Location& WithCannedACL(ObjectCannedACL&& value) { SetCannedACL(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline const Aws::Vector<Grant>& GetAccessControlList() const{ return m_accessControlList; }
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline bool AccessControlListHasBeenSet() const { return m_accessControlListHasBeenSet; }
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline void SetAccessControlList(const Aws::Vector<Grant>& value) { m_accessControlListHasBeenSet = true; m_accessControlList = value; }
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline void SetAccessControlList(Aws::Vector<Grant>&& value) { m_accessControlListHasBeenSet = true; m_accessControlList = std::move(value); }
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline S3Location& WithAccessControlList(const Aws::Vector<Grant>& value) { SetAccessControlList(value); return *this;}
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline S3Location& WithAccessControlList(Aws::Vector<Grant>&& value) { SetAccessControlList(std::move(value)); return *this;}
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline S3Location& AddAccessControlList(const Grant& value) { m_accessControlListHasBeenSet = true; m_accessControlList.push_back(value); return *this; }
+
+ /**
+ * <p>A list of grants that control access to the staged results.</p>
+ */
+ inline S3Location& AddAccessControlList(Grant&& value) { m_accessControlListHasBeenSet = true; m_accessControlList.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The tag-set that is applied to the restore results.</p>
+ */
+ inline const Tagging& GetTagging() const{ return m_tagging; }
+
+ /**
+ * <p>The tag-set that is applied to the restore results.</p>
+ */
+ inline bool TaggingHasBeenSet() const { return m_taggingHasBeenSet; }
+
+ /**
+ * <p>The tag-set that is applied to the restore results.</p>
+ */
+ inline void SetTagging(const Tagging& value) { m_taggingHasBeenSet = true; m_tagging = value; }
+
+ /**
+ * <p>The tag-set that is applied to the restore results.</p>
+ */
+ inline void SetTagging(Tagging&& value) { m_taggingHasBeenSet = true; m_tagging = std::move(value); }
+
+ /**
+ * <p>The tag-set that is applied to the restore results.</p>
+ */
+ inline S3Location& WithTagging(const Tagging& value) { SetTagging(value); return *this;}
+
+ /**
+ * <p>The tag-set that is applied to the restore results.</p>
+ */
+ inline S3Location& WithTagging(Tagging&& value) { SetTagging(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline const Aws::Vector<MetadataEntry>& GetUserMetadata() const{ return m_userMetadata; }
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline bool UserMetadataHasBeenSet() const { return m_userMetadataHasBeenSet; }
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline void SetUserMetadata(const Aws::Vector<MetadataEntry>& value) { m_userMetadataHasBeenSet = true; m_userMetadata = value; }
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline void SetUserMetadata(Aws::Vector<MetadataEntry>&& value) { m_userMetadataHasBeenSet = true; m_userMetadata = std::move(value); }
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline S3Location& WithUserMetadata(const Aws::Vector<MetadataEntry>& value) { SetUserMetadata(value); return *this;}
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline S3Location& WithUserMetadata(Aws::Vector<MetadataEntry>&& value) { SetUserMetadata(std::move(value)); return *this;}
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline S3Location& AddUserMetadata(const MetadataEntry& value) { m_userMetadataHasBeenSet = true; m_userMetadata.push_back(value); return *this; }
+
+ /**
+ * <p>A list of metadata to store with the restore results in S3.</p>
+ */
+ inline S3Location& AddUserMetadata(MetadataEntry&& value) { m_userMetadataHasBeenSet = true; m_userMetadata.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>The class of storage used to store the restore results.</p>
+ */
+ inline const StorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>The class of storage used to store the restore results.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>The class of storage used to store the restore results.</p>
+ */
+ inline void SetStorageClass(const StorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>The class of storage used to store the restore results.</p>
+ */
+ inline void SetStorageClass(StorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>The class of storage used to store the restore results.</p>
+ */
+ inline S3Location& WithStorageClass(const StorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>The class of storage used to store the restore results.</p>
+ */
+ inline S3Location& WithStorageClass(StorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_bucketName;
+ bool m_bucketNameHasBeenSet;
+
+ Aws::String m_prefix;
+ bool m_prefixHasBeenSet;
+
+ Encryption m_encryption;
+ bool m_encryptionHasBeenSet;
+
+ ObjectCannedACL m_cannedACL;
+ bool m_cannedACLHasBeenSet;
+
+ Aws::Vector<Grant> m_accessControlList;
+ bool m_accessControlListHasBeenSet;
+
+ Tagging m_tagging;
+ bool m_taggingHasBeenSet;
+
+ Aws::Vector<MetadataEntry> m_userMetadata;
+ bool m_userMetadataHasBeenSet;
+
+ StorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSEKMS.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSEKMS.h
new file mode 100644
index 00000000000..b7b1ac25bef
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSEKMS.h
@@ -0,0 +1,105 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the use of SSE-KMS to encrypt delivered inventory
+ * reports.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SSEKMS">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API SSEKMS
+ {
+ public:
+ SSEKMS();
+ SSEKMS(const Aws::Utils::Xml::XmlNode& xmlNode);
+ SSEKMS& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline const Aws::String& GetKeyId() const{ return m_keyId; }
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline bool KeyIdHasBeenSet() const { return m_keyIdHasBeenSet; }
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline void SetKeyId(const Aws::String& value) { m_keyIdHasBeenSet = true; m_keyId = value; }
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline void SetKeyId(Aws::String&& value) { m_keyIdHasBeenSet = true; m_keyId = std::move(value); }
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline void SetKeyId(const char* value) { m_keyIdHasBeenSet = true; m_keyId.assign(value); }
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline SSEKMS& WithKeyId(const Aws::String& value) { SetKeyId(value); return *this;}
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline SSEKMS& WithKeyId(Aws::String&& value) { SetKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the ID of the AWS Key Management Service (AWS KMS) symmetric
+ * customer managed customer master key (CMK) to use for encrypting inventory
+ * reports.</p>
+ */
+ inline SSEKMS& WithKeyId(const char* value) { SetKeyId(value); return *this;}
+
+ private:
+
+ Aws::String m_keyId;
+ bool m_keyIdHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSES3.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSES3.h
new file mode 100644
index 00000000000..7312fd29170
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SSES3.h
@@ -0,0 +1,42 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the use of SSE-S3 to encrypt delivered inventory
+ * reports.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SSES3">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API SSES3
+ {
+ public:
+ SSES3();
+ SSES3(const Aws::Utils::Xml::XmlNode& xmlNode);
+ SSES3& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ScanRange.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ScanRange.h
new file mode 100644
index 00000000000..dd964d0441f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ScanRange.h
@@ -0,0 +1,130 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the byte range of the object to get the records from. A record is
+ * processed when its first byte is contained by the range. This parameter is
+ * optional, but when specified, it must not be empty. See RFC 2616, Section
+ * 14.35.1 about how to specify the start and end of the range.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ScanRange">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API ScanRange
+ {
+ public:
+ ScanRange();
+ ScanRange(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ScanRange& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the start of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is 0. If only start is
+ * supplied, it means scan from that point to the end of the file.For example;
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code>
+ * means scan from byte 50 until the end of the file.</p>
+ */
+ inline long long GetStart() const{ return m_start; }
+
+ /**
+ * <p>Specifies the start of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is 0. If only start is
+ * supplied, it means scan from that point to the end of the file.For example;
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code>
+ * means scan from byte 50 until the end of the file.</p>
+ */
+ inline bool StartHasBeenSet() const { return m_startHasBeenSet; }
+
+ /**
+ * <p>Specifies the start of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is 0. If only start is
+ * supplied, it means scan from that point to the end of the file.For example;
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code>
+ * means scan from byte 50 until the end of the file.</p>
+ */
+ inline void SetStart(long long value) { m_startHasBeenSet = true; m_start = value; }
+
+ /**
+ * <p>Specifies the start of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is 0. If only start is
+ * supplied, it means scan from that point to the end of the file.For example;
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code>
+ * means scan from byte 50 until the end of the file.</p>
+ */
+ inline ScanRange& WithStart(long long value) { SetStart(value); return *this;}
+
+
+ /**
+ * <p>Specifies the end of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is one less than the size of
+ * the object being queried. If only the End parameter is supplied, it is
+ * interpreted to mean scan the last N bytes of the file. For example,
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> means
+ * scan the last 50 bytes.</p>
+ */
+ inline long long GetEnd() const{ return m_end; }
+
+ /**
+ * <p>Specifies the end of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is one less than the size of
+ * the object being queried. If only the End parameter is supplied, it is
+ * interpreted to mean scan the last N bytes of the file. For example,
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> means
+ * scan the last 50 bytes.</p>
+ */
+ inline bool EndHasBeenSet() const { return m_endHasBeenSet; }
+
+ /**
+ * <p>Specifies the end of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is one less than the size of
+ * the object being queried. If only the End parameter is supplied, it is
+ * interpreted to mean scan the last N bytes of the file. For example,
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> means
+ * scan the last 50 bytes.</p>
+ */
+ inline void SetEnd(long long value) { m_endHasBeenSet = true; m_end = value; }
+
+ /**
+ * <p>Specifies the end of the byte range. This parameter is optional. Valid
+ * values: non-negative integers. The default value is one less than the size of
+ * the object being queried. If only the End parameter is supplied, it is
+ * interpreted to mean scan the last N bytes of the file. For example,
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> means
+ * scan the last 50 bytes.</p>
+ */
+ inline ScanRange& WithEnd(long long value) { SetEnd(value); return *this;}
+
+ private:
+
+ long long m_start;
+ bool m_startHasBeenSet;
+
+ long long m_end;
+ bool m_endHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentHandler.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentHandler.h
new file mode 100644
index 00000000000..3b04be1d0d9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentHandler.h
@@ -0,0 +1,76 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/event/EventStreamHandler.h>
+#include <aws/core/client/AWSError.h>
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Errors.h>
+
+#include <aws/s3/model/RecordsEvent.h>
+#include <aws/s3/model/StatsEvent.h>
+#include <aws/s3/model/ProgressEvent.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class SelectObjectContentEventType
+ {
+ RECORDS,
+ STATS,
+ PROGRESS,
+ CONT,
+ END,
+ UNKNOWN
+ };
+
+ class AWS_S3_API SelectObjectContentHandler : public Aws::Utils::Event::EventStreamHandler
+ {
+ typedef std::function<void(const RecordsEvent&)> RecordsEventCallback;
+ typedef std::function<void(const StatsEvent&)> StatsEventCallback;
+ typedef std::function<void(const ProgressEvent&)> ProgressEventCallback;
+ typedef std::function<void()> ContinuationEventCallback;
+ typedef std::function<void()> EndEventCallback;
+ typedef std::function<void(const Aws::Client::AWSError<S3Errors>& error)> ErrorCallback;
+
+ public:
+ SelectObjectContentHandler();
+ SelectObjectContentHandler& operator=(const SelectObjectContentHandler& handler) = default;
+
+ virtual void OnEvent() override;
+
+ inline void SetRecordsEventCallback(const RecordsEventCallback& callback) { m_onRecordsEvent = callback; }
+ inline void SetStatsEventCallback(const StatsEventCallback& callback) { m_onStatsEvent = callback; }
+ inline void SetProgressEventCallback(const ProgressEventCallback& callback) { m_onProgressEvent = callback; }
+ inline void SetContinuationEventCallback(const ContinuationEventCallback& callback) { m_onContinuationEvent = callback; }
+ inline void SetEndEventCallback(const EndEventCallback& callback) { m_onEndEvent = callback; }
+ inline void SetOnErrorCallback(const ErrorCallback& callback) { m_onError = callback; }
+
+ private:
+ void HandleEventInMessage();
+ void HandleErrorInMessage();
+ void MarshallError(const Aws::String& errorCode, const Aws::String& errorMessage);
+
+ RecordsEventCallback m_onRecordsEvent;
+ StatsEventCallback m_onStatsEvent;
+ ProgressEventCallback m_onProgressEvent;
+ ContinuationEventCallback m_onContinuationEvent;
+ EndEventCallback m_onEndEvent;
+ ErrorCallback m_onError;
+ };
+
+namespace SelectObjectContentEventMapper
+{
+ AWS_S3_API SelectObjectContentEventType GetSelectObjectContentEventTypeForName(const Aws::String& name);
+
+ AWS_S3_API Aws::String GetNameForSelectObjectContentEventType(SelectObjectContentEventType value);
+} // namespace SelectObjectContentEventMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentRequest.h
new file mode 100644
index 00000000000..c10e515adfb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectObjectContentRequest.h
@@ -0,0 +1,745 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/s3/model/SelectObjectContentHandler.h>
+#include <aws/core/utils/event/EventStreamDecoder.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/ExpressionType.h>
+#include <aws/s3/model/RequestProgress.h>
+#include <aws/s3/model/InputSerialization.h>
+#include <aws/s3/model/OutputSerialization.h>
+#include <aws/s3/model/ScanRange.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Request to filter the contents of an Amazon S3 object based on a simple
+ * Structured Query Language (SQL) statement. In the request, along with the SQL
+ * expression, you must specify a data serialization format (JSON or CSV) of the
+ * object. Amazon S3 uses this to parse object data into records. It returns only
+ * records that match the specified SQL expression. You must also specify the data
+ * serialization format for the response. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html">S3Select
+ * API Documentation</a>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContentRequest">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API SelectObjectContentRequest : public S3Request
+ {
+ public:
+ SelectObjectContentRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "SelectObjectContent"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+ /**
+ * Underlying Event Stream Decoder.
+ */
+ inline Aws::Utils::Event::EventStreamDecoder& GetEventStreamDecoder() { return m_decoder; }
+
+ /**
+ * Underlying Event Stream Handler which is used to define callback functions.
+ */
+ inline const SelectObjectContentHandler& GetEventStreamHandler() const { return m_handler; }
+
+ /**
+ * Underlying Event Stream Handler which is used to define callback functions.
+ */
+ inline void SetEventStreamHandler(const SelectObjectContentHandler& value) { m_handler = value; m_decoder.ResetEventStreamHandler(&m_handler); }
+
+ /**
+ * Underlying Event Stream Handler which is used to define callback functions.
+ */
+ inline SelectObjectContentRequest& WithEventStreamHandler(const SelectObjectContentHandler& value) { SetEventStreamHandler(value); return *this; }
+
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline SelectObjectContentRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline SelectObjectContentRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The S3 bucket.</p>
+ */
+ inline SelectObjectContentRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline SelectObjectContentRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline SelectObjectContentRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The object key.</p>
+ */
+ inline SelectObjectContentRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>The SSE Algorithm used to encrypt the object. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>The SSE Customer Key. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The SSE Customer Key MD5. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">Server-Side
+ * Encryption (Using Customer-Provided Encryption Keys</a>. </p>
+ */
+ inline SelectObjectContentRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline const Aws::String& GetExpression() const{ return m_expression; }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline bool ExpressionHasBeenSet() const { return m_expressionHasBeenSet; }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline void SetExpression(const Aws::String& value) { m_expressionHasBeenSet = true; m_expression = value; }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline void SetExpression(Aws::String&& value) { m_expressionHasBeenSet = true; m_expression = std::move(value); }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline void SetExpression(const char* value) { m_expressionHasBeenSet = true; m_expression.assign(value); }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline SelectObjectContentRequest& WithExpression(const Aws::String& value) { SetExpression(value); return *this;}
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline SelectObjectContentRequest& WithExpression(Aws::String&& value) { SetExpression(std::move(value)); return *this;}
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline SelectObjectContentRequest& WithExpression(const char* value) { SetExpression(value); return *this;}
+
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline const ExpressionType& GetExpressionType() const{ return m_expressionType; }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline bool ExpressionTypeHasBeenSet() const { return m_expressionTypeHasBeenSet; }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline void SetExpressionType(const ExpressionType& value) { m_expressionTypeHasBeenSet = true; m_expressionType = value; }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline void SetExpressionType(ExpressionType&& value) { m_expressionTypeHasBeenSet = true; m_expressionType = std::move(value); }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline SelectObjectContentRequest& WithExpressionType(const ExpressionType& value) { SetExpressionType(value); return *this;}
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline SelectObjectContentRequest& WithExpressionType(ExpressionType&& value) { SetExpressionType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies if periodic request progress information should be enabled.</p>
+ */
+ inline const RequestProgress& GetRequestProgress() const{ return m_requestProgress; }
+
+ /**
+ * <p>Specifies if periodic request progress information should be enabled.</p>
+ */
+ inline bool RequestProgressHasBeenSet() const { return m_requestProgressHasBeenSet; }
+
+ /**
+ * <p>Specifies if periodic request progress information should be enabled.</p>
+ */
+ inline void SetRequestProgress(const RequestProgress& value) { m_requestProgressHasBeenSet = true; m_requestProgress = value; }
+
+ /**
+ * <p>Specifies if periodic request progress information should be enabled.</p>
+ */
+ inline void SetRequestProgress(RequestProgress&& value) { m_requestProgressHasBeenSet = true; m_requestProgress = std::move(value); }
+
+ /**
+ * <p>Specifies if periodic request progress information should be enabled.</p>
+ */
+ inline SelectObjectContentRequest& WithRequestProgress(const RequestProgress& value) { SetRequestProgress(value); return *this;}
+
+ /**
+ * <p>Specifies if periodic request progress information should be enabled.</p>
+ */
+ inline SelectObjectContentRequest& WithRequestProgress(RequestProgress&& value) { SetRequestProgress(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Describes the format of the data in the object that is being queried.</p>
+ */
+ inline const InputSerialization& GetInputSerialization() const{ return m_inputSerialization; }
+
+ /**
+ * <p>Describes the format of the data in the object that is being queried.</p>
+ */
+ inline bool InputSerializationHasBeenSet() const { return m_inputSerializationHasBeenSet; }
+
+ /**
+ * <p>Describes the format of the data in the object that is being queried.</p>
+ */
+ inline void SetInputSerialization(const InputSerialization& value) { m_inputSerializationHasBeenSet = true; m_inputSerialization = value; }
+
+ /**
+ * <p>Describes the format of the data in the object that is being queried.</p>
+ */
+ inline void SetInputSerialization(InputSerialization&& value) { m_inputSerializationHasBeenSet = true; m_inputSerialization = std::move(value); }
+
+ /**
+ * <p>Describes the format of the data in the object that is being queried.</p>
+ */
+ inline SelectObjectContentRequest& WithInputSerialization(const InputSerialization& value) { SetInputSerialization(value); return *this;}
+
+ /**
+ * <p>Describes the format of the data in the object that is being queried.</p>
+ */
+ inline SelectObjectContentRequest& WithInputSerialization(InputSerialization&& value) { SetInputSerialization(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Describes the format of the data that you want Amazon S3 to return in
+ * response.</p>
+ */
+ inline const OutputSerialization& GetOutputSerialization() const{ return m_outputSerialization; }
+
+ /**
+ * <p>Describes the format of the data that you want Amazon S3 to return in
+ * response.</p>
+ */
+ inline bool OutputSerializationHasBeenSet() const { return m_outputSerializationHasBeenSet; }
+
+ /**
+ * <p>Describes the format of the data that you want Amazon S3 to return in
+ * response.</p>
+ */
+ inline void SetOutputSerialization(const OutputSerialization& value) { m_outputSerializationHasBeenSet = true; m_outputSerialization = value; }
+
+ /**
+ * <p>Describes the format of the data that you want Amazon S3 to return in
+ * response.</p>
+ */
+ inline void SetOutputSerialization(OutputSerialization&& value) { m_outputSerializationHasBeenSet = true; m_outputSerialization = std::move(value); }
+
+ /**
+ * <p>Describes the format of the data that you want Amazon S3 to return in
+ * response.</p>
+ */
+ inline SelectObjectContentRequest& WithOutputSerialization(const OutputSerialization& value) { SetOutputSerialization(value); return *this;}
+
+ /**
+ * <p>Describes the format of the data that you want Amazon S3 to return in
+ * response.</p>
+ */
+ inline SelectObjectContentRequest& WithOutputSerialization(OutputSerialization&& value) { SetOutputSerialization(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies the byte range of the object to get the records from. A record is
+ * processed when its first byte is contained by the range. This parameter is
+ * optional, but when specified, it must not be empty. See RFC 2616, Section
+ * 14.35.1 about how to specify the start and end of the range.</p> <p>
+ * <code>ScanRange</code>may be used in the following ways:</p> <ul> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;end&gt;100&lt;/end&gt;&lt;/scanrange&gt;</code>
+ * - process only the records starting between the bytes 50 and 100 (inclusive,
+ * counting from zero)</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code> -
+ * process only the records starting after the byte 50</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> -
+ * process only the records within the last 50 bytes of the file.</p> </li> </ul>
+ */
+ inline const ScanRange& GetScanRange() const{ return m_scanRange; }
+
+ /**
+ * <p>Specifies the byte range of the object to get the records from. A record is
+ * processed when its first byte is contained by the range. This parameter is
+ * optional, but when specified, it must not be empty. See RFC 2616, Section
+ * 14.35.1 about how to specify the start and end of the range.</p> <p>
+ * <code>ScanRange</code>may be used in the following ways:</p> <ul> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;end&gt;100&lt;/end&gt;&lt;/scanrange&gt;</code>
+ * - process only the records starting between the bytes 50 and 100 (inclusive,
+ * counting from zero)</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code> -
+ * process only the records starting after the byte 50</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> -
+ * process only the records within the last 50 bytes of the file.</p> </li> </ul>
+ */
+ inline bool ScanRangeHasBeenSet() const { return m_scanRangeHasBeenSet; }
+
+ /**
+ * <p>Specifies the byte range of the object to get the records from. A record is
+ * processed when its first byte is contained by the range. This parameter is
+ * optional, but when specified, it must not be empty. See RFC 2616, Section
+ * 14.35.1 about how to specify the start and end of the range.</p> <p>
+ * <code>ScanRange</code>may be used in the following ways:</p> <ul> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;end&gt;100&lt;/end&gt;&lt;/scanrange&gt;</code>
+ * - process only the records starting between the bytes 50 and 100 (inclusive,
+ * counting from zero)</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code> -
+ * process only the records starting after the byte 50</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> -
+ * process only the records within the last 50 bytes of the file.</p> </li> </ul>
+ */
+ inline void SetScanRange(const ScanRange& value) { m_scanRangeHasBeenSet = true; m_scanRange = value; }
+
+ /**
+ * <p>Specifies the byte range of the object to get the records from. A record is
+ * processed when its first byte is contained by the range. This parameter is
+ * optional, but when specified, it must not be empty. See RFC 2616, Section
+ * 14.35.1 about how to specify the start and end of the range.</p> <p>
+ * <code>ScanRange</code>may be used in the following ways:</p> <ul> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;end&gt;100&lt;/end&gt;&lt;/scanrange&gt;</code>
+ * - process only the records starting between the bytes 50 and 100 (inclusive,
+ * counting from zero)</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code> -
+ * process only the records starting after the byte 50</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> -
+ * process only the records within the last 50 bytes of the file.</p> </li> </ul>
+ */
+ inline void SetScanRange(ScanRange&& value) { m_scanRangeHasBeenSet = true; m_scanRange = std::move(value); }
+
+ /**
+ * <p>Specifies the byte range of the object to get the records from. A record is
+ * processed when its first byte is contained by the range. This parameter is
+ * optional, but when specified, it must not be empty. See RFC 2616, Section
+ * 14.35.1 about how to specify the start and end of the range.</p> <p>
+ * <code>ScanRange</code>may be used in the following ways:</p> <ul> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;end&gt;100&lt;/end&gt;&lt;/scanrange&gt;</code>
+ * - process only the records starting between the bytes 50 and 100 (inclusive,
+ * counting from zero)</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code> -
+ * process only the records starting after the byte 50</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> -
+ * process only the records within the last 50 bytes of the file.</p> </li> </ul>
+ */
+ inline SelectObjectContentRequest& WithScanRange(const ScanRange& value) { SetScanRange(value); return *this;}
+
+ /**
+ * <p>Specifies the byte range of the object to get the records from. A record is
+ * processed when its first byte is contained by the range. This parameter is
+ * optional, but when specified, it must not be empty. See RFC 2616, Section
+ * 14.35.1 about how to specify the start and end of the range.</p> <p>
+ * <code>ScanRange</code>may be used in the following ways:</p> <ul> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;end&gt;100&lt;/end&gt;&lt;/scanrange&gt;</code>
+ * - process only the records starting between the bytes 50 and 100 (inclusive,
+ * counting from zero)</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;start&gt;50&lt;/start&gt;&lt;/scanrange&gt;</code> -
+ * process only the records starting after the byte 50</p> </li> <li> <p>
+ * <code>&lt;scanrange&gt;&lt;end&gt;50&lt;/end&gt;&lt;/scanrange&gt;</code> -
+ * process only the records within the last 50 bytes of the file.</p> </li> </ul>
+ */
+ inline SelectObjectContentRequest& WithScanRange(ScanRange&& value) { SetScanRange(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline SelectObjectContentRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline SelectObjectContentRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline SelectObjectContentRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline SelectObjectContentRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline SelectObjectContentRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline SelectObjectContentRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline SelectObjectContentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline SelectObjectContentRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline SelectObjectContentRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline SelectObjectContentRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline SelectObjectContentRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline SelectObjectContentRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ Aws::String m_expression;
+ bool m_expressionHasBeenSet;
+
+ ExpressionType m_expressionType;
+ bool m_expressionTypeHasBeenSet;
+
+ RequestProgress m_requestProgress;
+ bool m_requestProgressHasBeenSet;
+
+ InputSerialization m_inputSerialization;
+ bool m_inputSerializationHasBeenSet;
+
+ OutputSerialization m_outputSerialization;
+ bool m_outputSerializationHasBeenSet;
+
+ ScanRange m_scanRange;
+ bool m_scanRangeHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ Aws::Utils::Event::EventStreamDecoder m_decoder;
+ SelectObjectContentHandler m_handler;
+
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectParameters.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectParameters.h
new file mode 100644
index 00000000000..b9ddc3073df
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SelectParameters.h
@@ -0,0 +1,193 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/InputSerialization.h>
+#include <aws/s3/model/ExpressionType.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/OutputSerialization.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes the parameters for Select job types.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectParameters">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API SelectParameters
+ {
+ public:
+ SelectParameters();
+ SelectParameters(const Aws::Utils::Xml::XmlNode& xmlNode);
+ SelectParameters& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Describes the serialization format of the object.</p>
+ */
+ inline const InputSerialization& GetInputSerialization() const{ return m_inputSerialization; }
+
+ /**
+ * <p>Describes the serialization format of the object.</p>
+ */
+ inline bool InputSerializationHasBeenSet() const { return m_inputSerializationHasBeenSet; }
+
+ /**
+ * <p>Describes the serialization format of the object.</p>
+ */
+ inline void SetInputSerialization(const InputSerialization& value) { m_inputSerializationHasBeenSet = true; m_inputSerialization = value; }
+
+ /**
+ * <p>Describes the serialization format of the object.</p>
+ */
+ inline void SetInputSerialization(InputSerialization&& value) { m_inputSerializationHasBeenSet = true; m_inputSerialization = std::move(value); }
+
+ /**
+ * <p>Describes the serialization format of the object.</p>
+ */
+ inline SelectParameters& WithInputSerialization(const InputSerialization& value) { SetInputSerialization(value); return *this;}
+
+ /**
+ * <p>Describes the serialization format of the object.</p>
+ */
+ inline SelectParameters& WithInputSerialization(InputSerialization&& value) { SetInputSerialization(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline const ExpressionType& GetExpressionType() const{ return m_expressionType; }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline bool ExpressionTypeHasBeenSet() const { return m_expressionTypeHasBeenSet; }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline void SetExpressionType(const ExpressionType& value) { m_expressionTypeHasBeenSet = true; m_expressionType = value; }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline void SetExpressionType(ExpressionType&& value) { m_expressionTypeHasBeenSet = true; m_expressionType = std::move(value); }
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline SelectParameters& WithExpressionType(const ExpressionType& value) { SetExpressionType(value); return *this;}
+
+ /**
+ * <p>The type of the provided expression (for example, SQL).</p>
+ */
+ inline SelectParameters& WithExpressionType(ExpressionType&& value) { SetExpressionType(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline const Aws::String& GetExpression() const{ return m_expression; }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline bool ExpressionHasBeenSet() const { return m_expressionHasBeenSet; }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline void SetExpression(const Aws::String& value) { m_expressionHasBeenSet = true; m_expression = value; }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline void SetExpression(Aws::String&& value) { m_expressionHasBeenSet = true; m_expression = std::move(value); }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline void SetExpression(const char* value) { m_expressionHasBeenSet = true; m_expression.assign(value); }
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline SelectParameters& WithExpression(const Aws::String& value) { SetExpression(value); return *this;}
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline SelectParameters& WithExpression(Aws::String&& value) { SetExpression(std::move(value)); return *this;}
+
+ /**
+ * <p>The expression that is used to query the object.</p>
+ */
+ inline SelectParameters& WithExpression(const char* value) { SetExpression(value); return *this;}
+
+
+ /**
+ * <p>Describes how the results of the Select job are serialized.</p>
+ */
+ inline const OutputSerialization& GetOutputSerialization() const{ return m_outputSerialization; }
+
+ /**
+ * <p>Describes how the results of the Select job are serialized.</p>
+ */
+ inline bool OutputSerializationHasBeenSet() const { return m_outputSerializationHasBeenSet; }
+
+ /**
+ * <p>Describes how the results of the Select job are serialized.</p>
+ */
+ inline void SetOutputSerialization(const OutputSerialization& value) { m_outputSerializationHasBeenSet = true; m_outputSerialization = value; }
+
+ /**
+ * <p>Describes how the results of the Select job are serialized.</p>
+ */
+ inline void SetOutputSerialization(OutputSerialization&& value) { m_outputSerializationHasBeenSet = true; m_outputSerialization = std::move(value); }
+
+ /**
+ * <p>Describes how the results of the Select job are serialized.</p>
+ */
+ inline SelectParameters& WithOutputSerialization(const OutputSerialization& value) { SetOutputSerialization(value); return *this;}
+
+ /**
+ * <p>Describes how the results of the Select job are serialized.</p>
+ */
+ inline SelectParameters& WithOutputSerialization(OutputSerialization&& value) { SetOutputSerialization(std::move(value)); return *this;}
+
+ private:
+
+ InputSerialization m_inputSerialization;
+ bool m_inputSerializationHasBeenSet;
+
+ ExpressionType m_expressionType;
+ bool m_expressionTypeHasBeenSet;
+
+ Aws::String m_expression;
+ bool m_expressionHasBeenSet;
+
+ OutputSerialization m_outputSerialization;
+ bool m_outputSerializationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryption.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryption.h
new file mode 100644
index 00000000000..24c5073561f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryption.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class ServerSideEncryption
+ {
+ NOT_SET,
+ AES256,
+ aws_kms
+ };
+
+namespace ServerSideEncryptionMapper
+{
+AWS_S3_API ServerSideEncryption GetServerSideEncryptionForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForServerSideEncryption(ServerSideEncryption value);
+} // namespace ServerSideEncryptionMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionByDefault.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionByDefault.h
new file mode 100644
index 00000000000..273cb34fbe9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionByDefault.h
@@ -0,0 +1,248 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes the default server-side encryption to apply to new objects in the
+ * bucket. If a PUT Object request doesn't specify any server-side encryption, this
+ * default encryption will be applied. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html">PUT
+ * Bucket encryption</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ServerSideEncryptionByDefault">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ServerSideEncryptionByDefault
+ {
+ public:
+ ServerSideEncryptionByDefault();
+ ServerSideEncryptionByDefault(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ServerSideEncryptionByDefault& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Server-side encryption algorithm to use for the default encryption.</p>
+ */
+ inline const ServerSideEncryption& GetSSEAlgorithm() const{ return m_sSEAlgorithm; }
+
+ /**
+ * <p>Server-side encryption algorithm to use for the default encryption.</p>
+ */
+ inline bool SSEAlgorithmHasBeenSet() const { return m_sSEAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Server-side encryption algorithm to use for the default encryption.</p>
+ */
+ inline void SetSSEAlgorithm(const ServerSideEncryption& value) { m_sSEAlgorithmHasBeenSet = true; m_sSEAlgorithm = value; }
+
+ /**
+ * <p>Server-side encryption algorithm to use for the default encryption.</p>
+ */
+ inline void SetSSEAlgorithm(ServerSideEncryption&& value) { m_sSEAlgorithmHasBeenSet = true; m_sSEAlgorithm = std::move(value); }
+
+ /**
+ * <p>Server-side encryption algorithm to use for the default encryption.</p>
+ */
+ inline ServerSideEncryptionByDefault& WithSSEAlgorithm(const ServerSideEncryption& value) { SetSSEAlgorithm(value); return *this;}
+
+ /**
+ * <p>Server-side encryption algorithm to use for the default encryption.</p>
+ */
+ inline ServerSideEncryptionByDefault& WithSSEAlgorithm(ServerSideEncryption&& value) { SetSSEAlgorithm(std::move(value)); return *this;}
+
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetKMSMasterKeyID() const{ return m_kMSMasterKeyID; }
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool KMSMasterKeyIDHasBeenSet() const { return m_kMSMasterKeyIDHasBeenSet; }
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKMSMasterKeyID(const Aws::String& value) { m_kMSMasterKeyIDHasBeenSet = true; m_kMSMasterKeyID = value; }
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKMSMasterKeyID(Aws::String&& value) { m_kMSMasterKeyIDHasBeenSet = true; m_kMSMasterKeyID = std::move(value); }
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetKMSMasterKeyID(const char* value) { m_kMSMasterKeyIDHasBeenSet = true; m_kMSMasterKeyID.assign(value); }
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline ServerSideEncryptionByDefault& WithKMSMasterKeyID(const Aws::String& value) { SetKMSMasterKeyID(value); return *this;}
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline ServerSideEncryptionByDefault& WithKMSMasterKeyID(Aws::String&& value) { SetKMSMasterKeyID(std::move(value)); return *this;}
+
+ /**
+ * <p>AWS Key Management Service (KMS) customer master key ID to use for the
+ * default encryption. This parameter is allowed if and only if
+ * <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> <p>You can specify
+ * the key ID or the Amazon Resource Name (ARN) of the CMK. However, if you are
+ * using encryption with cross-account operations, you must use a fully qualified
+ * CMK ARN. For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy">Using
+ * encryption for cross-account operations</a>. </p> <p> <b>For example:</b> </p>
+ * <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>
+ * </li> <li> <p>Key ARN:
+ * <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>
+ * </p> </li> </ul> <p>Amazon S3 only supports symmetric CMKs and not
+ * asymmetric CMKs. For more information, see <a
+ * href="https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html">Using
+ * Symmetric and Asymmetric Keys</a> in the <i>AWS Key Management Service Developer
+ * Guide</i>.</p>
+ */
+ inline ServerSideEncryptionByDefault& WithKMSMasterKeyID(const char* value) { SetKMSMasterKeyID(value); return *this;}
+
+ private:
+
+ ServerSideEncryption m_sSEAlgorithm;
+ bool m_sSEAlgorithmHasBeenSet;
+
+ Aws::String m_kMSMasterKeyID;
+ bool m_kMSMasterKeyIDHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionConfiguration.h
new file mode 100644
index 00000000000..7b96441c897
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionConfiguration.h
@@ -0,0 +1,98 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/ServerSideEncryptionRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the default server-side-encryption configuration.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ServerSideEncryptionConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ServerSideEncryptionConfiguration
+ {
+ public:
+ ServerSideEncryptionConfiguration();
+ ServerSideEncryptionConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ServerSideEncryptionConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline const Aws::Vector<ServerSideEncryptionRule>& GetRules() const{ return m_rules; }
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline bool RulesHasBeenSet() const { return m_rulesHasBeenSet; }
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline void SetRules(const Aws::Vector<ServerSideEncryptionRule>& value) { m_rulesHasBeenSet = true; m_rules = value; }
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline void SetRules(Aws::Vector<ServerSideEncryptionRule>&& value) { m_rulesHasBeenSet = true; m_rules = std::move(value); }
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline ServerSideEncryptionConfiguration& WithRules(const Aws::Vector<ServerSideEncryptionRule>& value) { SetRules(value); return *this;}
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline ServerSideEncryptionConfiguration& WithRules(Aws::Vector<ServerSideEncryptionRule>&& value) { SetRules(std::move(value)); return *this;}
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline ServerSideEncryptionConfiguration& AddRules(const ServerSideEncryptionRule& value) { m_rulesHasBeenSet = true; m_rules.push_back(value); return *this; }
+
+ /**
+ * <p>Container for information about a particular server-side encryption
+ * configuration rule.</p>
+ */
+ inline ServerSideEncryptionConfiguration& AddRules(ServerSideEncryptionRule&& value) { m_rulesHasBeenSet = true; m_rules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<ServerSideEncryptionRule> m_rules;
+ bool m_rulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionRule.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionRule.h
new file mode 100644
index 00000000000..75505b8a520
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/ServerSideEncryptionRule.h
@@ -0,0 +1,139 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ServerSideEncryptionByDefault.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies the default server-side encryption configuration.</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ServerSideEncryptionRule">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API ServerSideEncryptionRule
+ {
+ public:
+ ServerSideEncryptionRule();
+ ServerSideEncryptionRule(const Aws::Utils::Xml::XmlNode& xmlNode);
+ ServerSideEncryptionRule& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies the default server-side encryption to apply to new objects in the
+ * bucket. If a PUT Object request doesn't specify any server-side encryption, this
+ * default encryption will be applied.</p>
+ */
+ inline const ServerSideEncryptionByDefault& GetApplyServerSideEncryptionByDefault() const{ return m_applyServerSideEncryptionByDefault; }
+
+ /**
+ * <p>Specifies the default server-side encryption to apply to new objects in the
+ * bucket. If a PUT Object request doesn't specify any server-side encryption, this
+ * default encryption will be applied.</p>
+ */
+ inline bool ApplyServerSideEncryptionByDefaultHasBeenSet() const { return m_applyServerSideEncryptionByDefaultHasBeenSet; }
+
+ /**
+ * <p>Specifies the default server-side encryption to apply to new objects in the
+ * bucket. If a PUT Object request doesn't specify any server-side encryption, this
+ * default encryption will be applied.</p>
+ */
+ inline void SetApplyServerSideEncryptionByDefault(const ServerSideEncryptionByDefault& value) { m_applyServerSideEncryptionByDefaultHasBeenSet = true; m_applyServerSideEncryptionByDefault = value; }
+
+ /**
+ * <p>Specifies the default server-side encryption to apply to new objects in the
+ * bucket. If a PUT Object request doesn't specify any server-side encryption, this
+ * default encryption will be applied.</p>
+ */
+ inline void SetApplyServerSideEncryptionByDefault(ServerSideEncryptionByDefault&& value) { m_applyServerSideEncryptionByDefaultHasBeenSet = true; m_applyServerSideEncryptionByDefault = std::move(value); }
+
+ /**
+ * <p>Specifies the default server-side encryption to apply to new objects in the
+ * bucket. If a PUT Object request doesn't specify any server-side encryption, this
+ * default encryption will be applied.</p>
+ */
+ inline ServerSideEncryptionRule& WithApplyServerSideEncryptionByDefault(const ServerSideEncryptionByDefault& value) { SetApplyServerSideEncryptionByDefault(value); return *this;}
+
+ /**
+ * <p>Specifies the default server-side encryption to apply to new objects in the
+ * bucket. If a PUT Object request doesn't specify any server-side encryption, this
+ * default encryption will be applied.</p>
+ */
+ inline ServerSideEncryptionRule& WithApplyServerSideEncryptionByDefault(ServerSideEncryptionByDefault&& value) { SetApplyServerSideEncryptionByDefault(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key with server-side
+ * encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects
+ * are not affected. Setting the <code>BucketKeyEnabled</code> element to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key. By default, S3
+ * Bucket Key is not enabled.</p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key with server-side
+ * encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects
+ * are not affected. Setting the <code>BucketKeyEnabled</code> element to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key. By default, S3
+ * Bucket Key is not enabled.</p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline bool BucketKeyEnabledHasBeenSet() const { return m_bucketKeyEnabledHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key with server-side
+ * encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects
+ * are not affected. Setting the <code>BucketKeyEnabled</code> element to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key. By default, S3
+ * Bucket Key is not enabled.</p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabledHasBeenSet = true; m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 should use an S3 Bucket Key with server-side
+ * encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects
+ * are not affected. Setting the <code>BucketKeyEnabled</code> element to
+ * <code>true</code> causes Amazon S3 to use an S3 Bucket Key. By default, S3
+ * Bucket Key is not enabled.</p> <p>For more information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html">Amazon S3
+ * Bucket Keys</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline ServerSideEncryptionRule& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+ private:
+
+ ServerSideEncryptionByDefault m_applyServerSideEncryptionByDefault;
+ bool m_applyServerSideEncryptionByDefaultHasBeenSet;
+
+ bool m_bucketKeyEnabled;
+ bool m_bucketKeyEnabledHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SourceSelectionCriteria.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SourceSelectionCriteria.h
new file mode 100644
index 00000000000..0395f9089bf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SourceSelectionCriteria.h
@@ -0,0 +1,172 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/SseKmsEncryptedObjects.h>
+#include <aws/s3/model/ReplicaModifications.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container that describes additional filters for identifying the source
+ * objects that you want to replicate. You can choose to enable or disable the
+ * replication of these objects. Currently, Amazon S3 supports only the filter that
+ * you can specify for objects created with server-side encryption using a customer
+ * master key (CMK) stored in AWS Key Management Service (SSE-KMS).</p><p><h3>See
+ * Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SourceSelectionCriteria">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API SourceSelectionCriteria
+ {
+ public:
+ SourceSelectionCriteria();
+ SourceSelectionCriteria(const Aws::Utils::Xml::XmlNode& xmlNode);
+ SourceSelectionCriteria& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p> A container for filter information for the selection of Amazon S3 objects
+ * encrypted with AWS KMS. If you include <code>SourceSelectionCriteria</code> in
+ * the replication configuration, this element is required. </p>
+ */
+ inline const SseKmsEncryptedObjects& GetSseKmsEncryptedObjects() const{ return m_sseKmsEncryptedObjects; }
+
+ /**
+ * <p> A container for filter information for the selection of Amazon S3 objects
+ * encrypted with AWS KMS. If you include <code>SourceSelectionCriteria</code> in
+ * the replication configuration, this element is required. </p>
+ */
+ inline bool SseKmsEncryptedObjectsHasBeenSet() const { return m_sseKmsEncryptedObjectsHasBeenSet; }
+
+ /**
+ * <p> A container for filter information for the selection of Amazon S3 objects
+ * encrypted with AWS KMS. If you include <code>SourceSelectionCriteria</code> in
+ * the replication configuration, this element is required. </p>
+ */
+ inline void SetSseKmsEncryptedObjects(const SseKmsEncryptedObjects& value) { m_sseKmsEncryptedObjectsHasBeenSet = true; m_sseKmsEncryptedObjects = value; }
+
+ /**
+ * <p> A container for filter information for the selection of Amazon S3 objects
+ * encrypted with AWS KMS. If you include <code>SourceSelectionCriteria</code> in
+ * the replication configuration, this element is required. </p>
+ */
+ inline void SetSseKmsEncryptedObjects(SseKmsEncryptedObjects&& value) { m_sseKmsEncryptedObjectsHasBeenSet = true; m_sseKmsEncryptedObjects = std::move(value); }
+
+ /**
+ * <p> A container for filter information for the selection of Amazon S3 objects
+ * encrypted with AWS KMS. If you include <code>SourceSelectionCriteria</code> in
+ * the replication configuration, this element is required. </p>
+ */
+ inline SourceSelectionCriteria& WithSseKmsEncryptedObjects(const SseKmsEncryptedObjects& value) { SetSseKmsEncryptedObjects(value); return *this;}
+
+ /**
+ * <p> A container for filter information for the selection of Amazon S3 objects
+ * encrypted with AWS KMS. If you include <code>SourceSelectionCriteria</code> in
+ * the replication configuration, this element is required. </p>
+ */
+ inline SourceSelectionCriteria& WithSseKmsEncryptedObjects(SseKmsEncryptedObjects&& value) { SetSseKmsEncryptedObjects(std::move(value)); return *this;}
+
+
+ /**
+ * <p>A filter that you can specify for selections for modifications on replicas.
+ * Amazon S3 doesn't replicate replica modifications by default. In the latest
+ * version of replication configuration (when <code>Filter</code> is specified),
+ * you can specify this element and set the status to <code>Enabled</code> to
+ * replicate modifications on replicas. </p> <p> If you don't specify the
+ * <code>Filter</code> element, Amazon S3 assumes that the replication
+ * configuration is the earlier version, V1. In the earlier version, this element
+ * is not allowed</p>
+ */
+ inline const ReplicaModifications& GetReplicaModifications() const{ return m_replicaModifications; }
+
+ /**
+ * <p>A filter that you can specify for selections for modifications on replicas.
+ * Amazon S3 doesn't replicate replica modifications by default. In the latest
+ * version of replication configuration (when <code>Filter</code> is specified),
+ * you can specify this element and set the status to <code>Enabled</code> to
+ * replicate modifications on replicas. </p> <p> If you don't specify the
+ * <code>Filter</code> element, Amazon S3 assumes that the replication
+ * configuration is the earlier version, V1. In the earlier version, this element
+ * is not allowed</p>
+ */
+ inline bool ReplicaModificationsHasBeenSet() const { return m_replicaModificationsHasBeenSet; }
+
+ /**
+ * <p>A filter that you can specify for selections for modifications on replicas.
+ * Amazon S3 doesn't replicate replica modifications by default. In the latest
+ * version of replication configuration (when <code>Filter</code> is specified),
+ * you can specify this element and set the status to <code>Enabled</code> to
+ * replicate modifications on replicas. </p> <p> If you don't specify the
+ * <code>Filter</code> element, Amazon S3 assumes that the replication
+ * configuration is the earlier version, V1. In the earlier version, this element
+ * is not allowed</p>
+ */
+ inline void SetReplicaModifications(const ReplicaModifications& value) { m_replicaModificationsHasBeenSet = true; m_replicaModifications = value; }
+
+ /**
+ * <p>A filter that you can specify for selections for modifications on replicas.
+ * Amazon S3 doesn't replicate replica modifications by default. In the latest
+ * version of replication configuration (when <code>Filter</code> is specified),
+ * you can specify this element and set the status to <code>Enabled</code> to
+ * replicate modifications on replicas. </p> <p> If you don't specify the
+ * <code>Filter</code> element, Amazon S3 assumes that the replication
+ * configuration is the earlier version, V1. In the earlier version, this element
+ * is not allowed</p>
+ */
+ inline void SetReplicaModifications(ReplicaModifications&& value) { m_replicaModificationsHasBeenSet = true; m_replicaModifications = std::move(value); }
+
+ /**
+ * <p>A filter that you can specify for selections for modifications on replicas.
+ * Amazon S3 doesn't replicate replica modifications by default. In the latest
+ * version of replication configuration (when <code>Filter</code> is specified),
+ * you can specify this element and set the status to <code>Enabled</code> to
+ * replicate modifications on replicas. </p> <p> If you don't specify the
+ * <code>Filter</code> element, Amazon S3 assumes that the replication
+ * configuration is the earlier version, V1. In the earlier version, this element
+ * is not allowed</p>
+ */
+ inline SourceSelectionCriteria& WithReplicaModifications(const ReplicaModifications& value) { SetReplicaModifications(value); return *this;}
+
+ /**
+ * <p>A filter that you can specify for selections for modifications on replicas.
+ * Amazon S3 doesn't replicate replica modifications by default. In the latest
+ * version of replication configuration (when <code>Filter</code> is specified),
+ * you can specify this element and set the status to <code>Enabled</code> to
+ * replicate modifications on replicas. </p> <p> If you don't specify the
+ * <code>Filter</code> element, Amazon S3 assumes that the replication
+ * configuration is the earlier version, V1. In the earlier version, this element
+ * is not allowed</p>
+ */
+ inline SourceSelectionCriteria& WithReplicaModifications(ReplicaModifications&& value) { SetReplicaModifications(std::move(value)); return *this;}
+
+ private:
+
+ SseKmsEncryptedObjects m_sseKmsEncryptedObjects;
+ bool m_sseKmsEncryptedObjectsHasBeenSet;
+
+ ReplicaModifications m_replicaModifications;
+ bool m_replicaModificationsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjects.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjects.h
new file mode 100644
index 00000000000..451d3b5e697
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjects.h
@@ -0,0 +1,91 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/SseKmsEncryptedObjectsStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for filter information for the selection of S3 objects encrypted
+ * with AWS KMS.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SseKmsEncryptedObjects">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API SseKmsEncryptedObjects
+ {
+ public:
+ SseKmsEncryptedObjects();
+ SseKmsEncryptedObjects(const Aws::Utils::Xml::XmlNode& xmlNode);
+ SseKmsEncryptedObjects& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates objects created with server-side
+ * encryption using a customer master key (CMK) stored in AWS Key Management
+ * Service.</p>
+ */
+ inline const SseKmsEncryptedObjectsStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates objects created with server-side
+ * encryption using a customer master key (CMK) stored in AWS Key Management
+ * Service.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates objects created with server-side
+ * encryption using a customer master key (CMK) stored in AWS Key Management
+ * Service.</p>
+ */
+ inline void SetStatus(const SseKmsEncryptedObjectsStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates objects created with server-side
+ * encryption using a customer master key (CMK) stored in AWS Key Management
+ * Service.</p>
+ */
+ inline void SetStatus(SseKmsEncryptedObjectsStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates objects created with server-side
+ * encryption using a customer master key (CMK) stored in AWS Key Management
+ * Service.</p>
+ */
+ inline SseKmsEncryptedObjects& WithStatus(const SseKmsEncryptedObjectsStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>Specifies whether Amazon S3 replicates objects created with server-side
+ * encryption using a customer master key (CMK) stored in AWS Key Management
+ * Service.</p>
+ */
+ inline SseKmsEncryptedObjects& WithStatus(SseKmsEncryptedObjectsStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ SseKmsEncryptedObjectsStatus m_status;
+ bool m_statusHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjectsStatus.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjectsStatus.h
new file mode 100644
index 00000000000..c7790bf7030
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/SseKmsEncryptedObjectsStatus.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class SseKmsEncryptedObjectsStatus
+ {
+ NOT_SET,
+ Enabled,
+ Disabled
+ };
+
+namespace SseKmsEncryptedObjectsStatusMapper
+{
+AWS_S3_API SseKmsEncryptedObjectsStatus GetSseKmsEncryptedObjectsStatusForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForSseKmsEncryptedObjectsStatus(SseKmsEncryptedObjectsStatus value);
+} // namespace SseKmsEncryptedObjectsStatusMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Stats.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Stats.h
new file mode 100644
index 00000000000..fd077b88721
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Stats.h
@@ -0,0 +1,114 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the stats details.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Stats">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Stats
+ {
+ public:
+ Stats();
+ Stats(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Stats& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The total number of object bytes scanned.</p>
+ */
+ inline long long GetBytesScanned() const{ return m_bytesScanned; }
+
+ /**
+ * <p>The total number of object bytes scanned.</p>
+ */
+ inline bool BytesScannedHasBeenSet() const { return m_bytesScannedHasBeenSet; }
+
+ /**
+ * <p>The total number of object bytes scanned.</p>
+ */
+ inline void SetBytesScanned(long long value) { m_bytesScannedHasBeenSet = true; m_bytesScanned = value; }
+
+ /**
+ * <p>The total number of object bytes scanned.</p>
+ */
+ inline Stats& WithBytesScanned(long long value) { SetBytesScanned(value); return *this;}
+
+
+ /**
+ * <p>The total number of uncompressed object bytes processed.</p>
+ */
+ inline long long GetBytesProcessed() const{ return m_bytesProcessed; }
+
+ /**
+ * <p>The total number of uncompressed object bytes processed.</p>
+ */
+ inline bool BytesProcessedHasBeenSet() const { return m_bytesProcessedHasBeenSet; }
+
+ /**
+ * <p>The total number of uncompressed object bytes processed.</p>
+ */
+ inline void SetBytesProcessed(long long value) { m_bytesProcessedHasBeenSet = true; m_bytesProcessed = value; }
+
+ /**
+ * <p>The total number of uncompressed object bytes processed.</p>
+ */
+ inline Stats& WithBytesProcessed(long long value) { SetBytesProcessed(value); return *this;}
+
+
+ /**
+ * <p>The total number of bytes of records payload data returned.</p>
+ */
+ inline long long GetBytesReturned() const{ return m_bytesReturned; }
+
+ /**
+ * <p>The total number of bytes of records payload data returned.</p>
+ */
+ inline bool BytesReturnedHasBeenSet() const { return m_bytesReturnedHasBeenSet; }
+
+ /**
+ * <p>The total number of bytes of records payload data returned.</p>
+ */
+ inline void SetBytesReturned(long long value) { m_bytesReturnedHasBeenSet = true; m_bytesReturned = value; }
+
+ /**
+ * <p>The total number of bytes of records payload data returned.</p>
+ */
+ inline Stats& WithBytesReturned(long long value) { SetBytesReturned(value); return *this;}
+
+ private:
+
+ long long m_bytesScanned;
+ bool m_bytesScannedHasBeenSet;
+
+ long long m_bytesProcessed;
+ bool m_bytesProcessedHasBeenSet;
+
+ long long m_bytesReturned;
+ bool m_bytesReturnedHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StatsEvent.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StatsEvent.h
new file mode 100644
index 00000000000..02674cafca2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StatsEvent.h
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Stats.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for the Stats Event.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/StatsEvent">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API StatsEvent
+ {
+ public:
+ StatsEvent();
+ StatsEvent(const Aws::Utils::Xml::XmlNode& xmlNode);
+ StatsEvent& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The Stats event details.</p>
+ */
+ inline const Stats& GetDetails() const{ return m_details; }
+
+ /**
+ * <p>The Stats event details.</p>
+ */
+ inline bool DetailsHasBeenSet() const { return m_detailsHasBeenSet; }
+
+ /**
+ * <p>The Stats event details.</p>
+ */
+ inline void SetDetails(const Stats& value) { m_detailsHasBeenSet = true; m_details = value; }
+
+ /**
+ * <p>The Stats event details.</p>
+ */
+ inline void SetDetails(Stats&& value) { m_detailsHasBeenSet = true; m_details = std::move(value); }
+
+ /**
+ * <p>The Stats event details.</p>
+ */
+ inline StatsEvent& WithDetails(const Stats& value) { SetDetails(value); return *this;}
+
+ /**
+ * <p>The Stats event details.</p>
+ */
+ inline StatsEvent& WithDetails(Stats&& value) { SetDetails(std::move(value)); return *this;}
+
+ private:
+
+ Stats m_details;
+ bool m_detailsHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClass.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClass.h
new file mode 100644
index 00000000000..b0cda25f4de
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClass.h
@@ -0,0 +1,37 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class StorageClass
+ {
+ NOT_SET,
+ STANDARD,
+ REDUCED_REDUNDANCY,
+ STANDARD_IA,
+ ONEZONE_IA,
+ INTELLIGENT_TIERING,
+ GLACIER,
+ DEEP_ARCHIVE,
+ OUTPOSTS
+ };
+
+namespace StorageClassMapper
+{
+AWS_S3_API StorageClass GetStorageClassForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForStorageClass(StorageClass value);
+} // namespace StorageClassMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysis.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysis.h
new file mode 100644
index 00000000000..741db0e5f17
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysis.h
@@ -0,0 +1,86 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/StorageClassAnalysisDataExport.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies data related to access patterns to be collected and made available
+ * to analyze the tradeoffs between different storage classes for an Amazon S3
+ * bucket.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/StorageClassAnalysis">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API StorageClassAnalysis
+ {
+ public:
+ StorageClassAnalysis();
+ StorageClassAnalysis(const Aws::Utils::Xml::XmlNode& xmlNode);
+ StorageClassAnalysis& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies how data related to the storage class analysis for an Amazon S3
+ * bucket should be exported.</p>
+ */
+ inline const StorageClassAnalysisDataExport& GetDataExport() const{ return m_dataExport; }
+
+ /**
+ * <p>Specifies how data related to the storage class analysis for an Amazon S3
+ * bucket should be exported.</p>
+ */
+ inline bool DataExportHasBeenSet() const { return m_dataExportHasBeenSet; }
+
+ /**
+ * <p>Specifies how data related to the storage class analysis for an Amazon S3
+ * bucket should be exported.</p>
+ */
+ inline void SetDataExport(const StorageClassAnalysisDataExport& value) { m_dataExportHasBeenSet = true; m_dataExport = value; }
+
+ /**
+ * <p>Specifies how data related to the storage class analysis for an Amazon S3
+ * bucket should be exported.</p>
+ */
+ inline void SetDataExport(StorageClassAnalysisDataExport&& value) { m_dataExportHasBeenSet = true; m_dataExport = std::move(value); }
+
+ /**
+ * <p>Specifies how data related to the storage class analysis for an Amazon S3
+ * bucket should be exported.</p>
+ */
+ inline StorageClassAnalysis& WithDataExport(const StorageClassAnalysisDataExport& value) { SetDataExport(value); return *this;}
+
+ /**
+ * <p>Specifies how data related to the storage class analysis for an Amazon S3
+ * bucket should be exported.</p>
+ */
+ inline StorageClassAnalysis& WithDataExport(StorageClassAnalysisDataExport&& value) { SetDataExport(std::move(value)); return *this;}
+
+ private:
+
+ StorageClassAnalysisDataExport m_dataExport;
+ bool m_dataExportHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisDataExport.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisDataExport.h
new file mode 100644
index 00000000000..4a6382b3ecf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisDataExport.h
@@ -0,0 +1,120 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/StorageClassAnalysisSchemaVersion.h>
+#include <aws/s3/model/AnalyticsExportDestination.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for data related to the storage class analysis for an Amazon S3
+ * bucket for export.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/StorageClassAnalysisDataExport">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API StorageClassAnalysisDataExport
+ {
+ public:
+ StorageClassAnalysisDataExport();
+ StorageClassAnalysisDataExport(const Aws::Utils::Xml::XmlNode& xmlNode);
+ StorageClassAnalysisDataExport& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The version of the output schema to use when exporting data. Must be
+ * <code>V_1</code>.</p>
+ */
+ inline const StorageClassAnalysisSchemaVersion& GetOutputSchemaVersion() const{ return m_outputSchemaVersion; }
+
+ /**
+ * <p>The version of the output schema to use when exporting data. Must be
+ * <code>V_1</code>.</p>
+ */
+ inline bool OutputSchemaVersionHasBeenSet() const { return m_outputSchemaVersionHasBeenSet; }
+
+ /**
+ * <p>The version of the output schema to use when exporting data. Must be
+ * <code>V_1</code>.</p>
+ */
+ inline void SetOutputSchemaVersion(const StorageClassAnalysisSchemaVersion& value) { m_outputSchemaVersionHasBeenSet = true; m_outputSchemaVersion = value; }
+
+ /**
+ * <p>The version of the output schema to use when exporting data. Must be
+ * <code>V_1</code>.</p>
+ */
+ inline void SetOutputSchemaVersion(StorageClassAnalysisSchemaVersion&& value) { m_outputSchemaVersionHasBeenSet = true; m_outputSchemaVersion = std::move(value); }
+
+ /**
+ * <p>The version of the output schema to use when exporting data. Must be
+ * <code>V_1</code>.</p>
+ */
+ inline StorageClassAnalysisDataExport& WithOutputSchemaVersion(const StorageClassAnalysisSchemaVersion& value) { SetOutputSchemaVersion(value); return *this;}
+
+ /**
+ * <p>The version of the output schema to use when exporting data. Must be
+ * <code>V_1</code>.</p>
+ */
+ inline StorageClassAnalysisDataExport& WithOutputSchemaVersion(StorageClassAnalysisSchemaVersion&& value) { SetOutputSchemaVersion(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The place to store the data for an analysis.</p>
+ */
+ inline const AnalyticsExportDestination& GetDestination() const{ return m_destination; }
+
+ /**
+ * <p>The place to store the data for an analysis.</p>
+ */
+ inline bool DestinationHasBeenSet() const { return m_destinationHasBeenSet; }
+
+ /**
+ * <p>The place to store the data for an analysis.</p>
+ */
+ inline void SetDestination(const AnalyticsExportDestination& value) { m_destinationHasBeenSet = true; m_destination = value; }
+
+ /**
+ * <p>The place to store the data for an analysis.</p>
+ */
+ inline void SetDestination(AnalyticsExportDestination&& value) { m_destinationHasBeenSet = true; m_destination = std::move(value); }
+
+ /**
+ * <p>The place to store the data for an analysis.</p>
+ */
+ inline StorageClassAnalysisDataExport& WithDestination(const AnalyticsExportDestination& value) { SetDestination(value); return *this;}
+
+ /**
+ * <p>The place to store the data for an analysis.</p>
+ */
+ inline StorageClassAnalysisDataExport& WithDestination(AnalyticsExportDestination&& value) { SetDestination(std::move(value)); return *this;}
+
+ private:
+
+ StorageClassAnalysisSchemaVersion m_outputSchemaVersion;
+ bool m_outputSchemaVersionHasBeenSet;
+
+ AnalyticsExportDestination m_destination;
+ bool m_destinationHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisSchemaVersion.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisSchemaVersion.h
new file mode 100644
index 00000000000..cdf61d3d12e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/StorageClassAnalysisSchemaVersion.h
@@ -0,0 +1,30 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class StorageClassAnalysisSchemaVersion
+ {
+ NOT_SET,
+ V_1
+ };
+
+namespace StorageClassAnalysisSchemaVersionMapper
+{
+AWS_S3_API StorageClassAnalysisSchemaVersion GetStorageClassAnalysisSchemaVersionForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForStorageClassAnalysisSchemaVersion(StorageClassAnalysisSchemaVersion value);
+} // namespace StorageClassAnalysisSchemaVersionMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tag.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tag.h
new file mode 100644
index 00000000000..68d57a3ec04
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tag.h
@@ -0,0 +1,132 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container of a key value name pair.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Tag">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Tag
+ {
+ public:
+ Tag();
+ Tag(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Tag& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline Tag& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline Tag& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Name of the object key.</p>
+ */
+ inline Tag& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline const Aws::String& GetValue() const{ return m_value; }
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline bool ValueHasBeenSet() const { return m_valueHasBeenSet; }
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline void SetValue(const Aws::String& value) { m_valueHasBeenSet = true; m_value = value; }
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline void SetValue(Aws::String&& value) { m_valueHasBeenSet = true; m_value = std::move(value); }
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline void SetValue(const char* value) { m_valueHasBeenSet = true; m_value.assign(value); }
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline Tag& WithValue(const Aws::String& value) { SetValue(value); return *this;}
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline Tag& WithValue(Aws::String&& value) { SetValue(std::move(value)); return *this;}
+
+ /**
+ * <p>Value of the tag.</p>
+ */
+ inline Tag& WithValue(const char* value) { SetValue(value); return *this;}
+
+ private:
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ Aws::String m_value;
+ bool m_valueHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tagging.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tagging.h
new file mode 100644
index 00000000000..198cc2669bd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tagging.h
@@ -0,0 +1,89 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Tag.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for <code>TagSet</code> elements.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Tagging">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Tagging
+ {
+ public:
+ Tagging();
+ Tagging(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Tagging& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline const Aws::Vector<Tag>& GetTagSet() const{ return m_tagSet; }
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline bool TagSetHasBeenSet() const { return m_tagSetHasBeenSet; }
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline void SetTagSet(const Aws::Vector<Tag>& value) { m_tagSetHasBeenSet = true; m_tagSet = value; }
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline void SetTagSet(Aws::Vector<Tag>&& value) { m_tagSetHasBeenSet = true; m_tagSet = std::move(value); }
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline Tagging& WithTagSet(const Aws::Vector<Tag>& value) { SetTagSet(value); return *this;}
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline Tagging& WithTagSet(Aws::Vector<Tag>&& value) { SetTagSet(std::move(value)); return *this;}
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline Tagging& AddTagSet(const Tag& value) { m_tagSetHasBeenSet = true; m_tagSet.push_back(value); return *this; }
+
+ /**
+ * <p>A collection for a set of tags</p>
+ */
+ inline Tagging& AddTagSet(Tag&& value) { m_tagSetHasBeenSet = true; m_tagSet.push_back(std::move(value)); return *this; }
+
+ private:
+
+ Aws::Vector<Tag> m_tagSet;
+ bool m_tagSetHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TaggingDirective.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TaggingDirective.h
new file mode 100644
index 00000000000..b17bc80f2b7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TaggingDirective.h
@@ -0,0 +1,31 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class TaggingDirective
+ {
+ NOT_SET,
+ COPY,
+ REPLACE
+ };
+
+namespace TaggingDirectiveMapper
+{
+AWS_S3_API TaggingDirective GetTaggingDirectiveForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForTaggingDirective(TaggingDirective value);
+} // namespace TaggingDirectiveMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TargetGrant.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TargetGrant.h
new file mode 100644
index 00000000000..c8d1edafbde
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TargetGrant.h
@@ -0,0 +1,113 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/Grantee.h>
+#include <aws/s3/model/BucketLogsPermission.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Container for granting information.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/TargetGrant">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API TargetGrant
+ {
+ public:
+ TargetGrant();
+ TargetGrant(const Aws::Utils::Xml::XmlNode& xmlNode);
+ TargetGrant& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Container for the person being granted permissions.</p>
+ */
+ inline const Grantee& GetGrantee() const{ return m_grantee; }
+
+ /**
+ * <p>Container for the person being granted permissions.</p>
+ */
+ inline bool GranteeHasBeenSet() const { return m_granteeHasBeenSet; }
+
+ /**
+ * <p>Container for the person being granted permissions.</p>
+ */
+ inline void SetGrantee(const Grantee& value) { m_granteeHasBeenSet = true; m_grantee = value; }
+
+ /**
+ * <p>Container for the person being granted permissions.</p>
+ */
+ inline void SetGrantee(Grantee&& value) { m_granteeHasBeenSet = true; m_grantee = std::move(value); }
+
+ /**
+ * <p>Container for the person being granted permissions.</p>
+ */
+ inline TargetGrant& WithGrantee(const Grantee& value) { SetGrantee(value); return *this;}
+
+ /**
+ * <p>Container for the person being granted permissions.</p>
+ */
+ inline TargetGrant& WithGrantee(Grantee&& value) { SetGrantee(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Logging permissions assigned to the grantee for the bucket.</p>
+ */
+ inline const BucketLogsPermission& GetPermission() const{ return m_permission; }
+
+ /**
+ * <p>Logging permissions assigned to the grantee for the bucket.</p>
+ */
+ inline bool PermissionHasBeenSet() const { return m_permissionHasBeenSet; }
+
+ /**
+ * <p>Logging permissions assigned to the grantee for the bucket.</p>
+ */
+ inline void SetPermission(const BucketLogsPermission& value) { m_permissionHasBeenSet = true; m_permission = value; }
+
+ /**
+ * <p>Logging permissions assigned to the grantee for the bucket.</p>
+ */
+ inline void SetPermission(BucketLogsPermission&& value) { m_permissionHasBeenSet = true; m_permission = std::move(value); }
+
+ /**
+ * <p>Logging permissions assigned to the grantee for the bucket.</p>
+ */
+ inline TargetGrant& WithPermission(const BucketLogsPermission& value) { SetPermission(value); return *this;}
+
+ /**
+ * <p>Logging permissions assigned to the grantee for the bucket.</p>
+ */
+ inline TargetGrant& WithPermission(BucketLogsPermission&& value) { SetPermission(std::move(value)); return *this;}
+
+ private:
+
+ Grantee m_grantee;
+ bool m_granteeHasBeenSet;
+
+ BucketLogsPermission m_permission;
+ bool m_permissionHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tier.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tier.h
new file mode 100644
index 00000000000..6ca39feb442
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tier.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class Tier
+ {
+ NOT_SET,
+ Standard,
+ Bulk,
+ Expedited
+ };
+
+namespace TierMapper
+{
+AWS_S3_API Tier GetTierForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForTier(Tier value);
+} // namespace TierMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tiering.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tiering.h
new file mode 100644
index 00000000000..0d8f5b8802a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Tiering.h
@@ -0,0 +1,144 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/IntelligentTieringAccessTier.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>The S3 Intelligent-Tiering storage class is designed to optimize storage
+ * costs by automatically moving data to the most cost-effective storage access
+ * tier, without additional operational overhead.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Tiering">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Tiering
+ {
+ public:
+ Tiering();
+ Tiering(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Tiering& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The number of consecutive days of no access after which an object will be
+ * eligible to be transitioned to the corresponding tier. The minimum number of
+ * days specified for Archive Access tier must be at least 90 days and Deep Archive
+ * Access tier must be at least 180 days. The maximum can be up to 2 years (730
+ * days).</p>
+ */
+ inline int GetDays() const{ return m_days; }
+
+ /**
+ * <p>The number of consecutive days of no access after which an object will be
+ * eligible to be transitioned to the corresponding tier. The minimum number of
+ * days specified for Archive Access tier must be at least 90 days and Deep Archive
+ * Access tier must be at least 180 days. The maximum can be up to 2 years (730
+ * days).</p>
+ */
+ inline bool DaysHasBeenSet() const { return m_daysHasBeenSet; }
+
+ /**
+ * <p>The number of consecutive days of no access after which an object will be
+ * eligible to be transitioned to the corresponding tier. The minimum number of
+ * days specified for Archive Access tier must be at least 90 days and Deep Archive
+ * Access tier must be at least 180 days. The maximum can be up to 2 years (730
+ * days).</p>
+ */
+ inline void SetDays(int value) { m_daysHasBeenSet = true; m_days = value; }
+
+ /**
+ * <p>The number of consecutive days of no access after which an object will be
+ * eligible to be transitioned to the corresponding tier. The minimum number of
+ * days specified for Archive Access tier must be at least 90 days and Deep Archive
+ * Access tier must be at least 180 days. The maximum can be up to 2 years (730
+ * days).</p>
+ */
+ inline Tiering& WithDays(int value) { SetDays(value); return *this;}
+
+
+ /**
+ * <p>S3 Intelligent-Tiering access tier. See <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a> for a list of access tiers in the S3 Intelligent-Tiering storage
+ * class.</p>
+ */
+ inline const IntelligentTieringAccessTier& GetAccessTier() const{ return m_accessTier; }
+
+ /**
+ * <p>S3 Intelligent-Tiering access tier. See <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a> for a list of access tiers in the S3 Intelligent-Tiering storage
+ * class.</p>
+ */
+ inline bool AccessTierHasBeenSet() const { return m_accessTierHasBeenSet; }
+
+ /**
+ * <p>S3 Intelligent-Tiering access tier. See <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a> for a list of access tiers in the S3 Intelligent-Tiering storage
+ * class.</p>
+ */
+ inline void SetAccessTier(const IntelligentTieringAccessTier& value) { m_accessTierHasBeenSet = true; m_accessTier = value; }
+
+ /**
+ * <p>S3 Intelligent-Tiering access tier. See <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a> for a list of access tiers in the S3 Intelligent-Tiering storage
+ * class.</p>
+ */
+ inline void SetAccessTier(IntelligentTieringAccessTier&& value) { m_accessTierHasBeenSet = true; m_accessTier = std::move(value); }
+
+ /**
+ * <p>S3 Intelligent-Tiering access tier. See <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a> for a list of access tiers in the S3 Intelligent-Tiering storage
+ * class.</p>
+ */
+ inline Tiering& WithAccessTier(const IntelligentTieringAccessTier& value) { SetAccessTier(value); return *this;}
+
+ /**
+ * <p>S3 Intelligent-Tiering access tier. See <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
+ * class for automatically optimizing frequently and infrequently accessed
+ * objects</a> for a list of access tiers in the S3 Intelligent-Tiering storage
+ * class.</p>
+ */
+ inline Tiering& WithAccessTier(IntelligentTieringAccessTier&& value) { SetAccessTier(std::move(value)); return *this;}
+
+ private:
+
+ int m_days;
+ bool m_daysHasBeenSet;
+
+ IntelligentTieringAccessTier m_accessTier;
+ bool m_accessTierHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfiguration.h
new file mode 100644
index 00000000000..7a4f9d95363
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfiguration.h
@@ -0,0 +1,219 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/NotificationConfigurationFilter.h>
+#include <aws/s3/model/Event.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for specifying the configuration for publication of messages to
+ * an Amazon Simple Notification Service (Amazon SNS) topic when Amazon S3 detects
+ * specified events.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/TopicConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API TopicConfiguration
+ {
+ public:
+ TopicConfiguration();
+ TopicConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ TopicConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const Aws::String& GetId() const{ return m_id; }
+
+
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+
+ inline TopicConfiguration& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+
+ inline TopicConfiguration& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+
+ inline TopicConfiguration& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline const Aws::String& GetTopicArn() const{ return m_topicArn; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline bool TopicArnHasBeenSet() const { return m_topicArnHasBeenSet; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline void SetTopicArn(const Aws::String& value) { m_topicArnHasBeenSet = true; m_topicArn = value; }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline void SetTopicArn(Aws::String&& value) { m_topicArnHasBeenSet = true; m_topicArn = std::move(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline void SetTopicArn(const char* value) { m_topicArnHasBeenSet = true; m_topicArn.assign(value); }
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline TopicConfiguration& WithTopicArn(const Aws::String& value) { SetTopicArn(value); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline TopicConfiguration& WithTopicArn(Aws::String&& value) { SetTopicArn(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3
+ * publishes a message when it detects events of the specified type.</p>
+ */
+ inline TopicConfiguration& WithTopicArn(const char* value) { SetTopicArn(value); return *this;}
+
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline const Aws::Vector<Event>& GetEvents() const{ return m_events; }
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline bool EventsHasBeenSet() const { return m_eventsHasBeenSet; }
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetEvents(const Aws::Vector<Event>& value) { m_eventsHasBeenSet = true; m_events = value; }
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline void SetEvents(Aws::Vector<Event>&& value) { m_eventsHasBeenSet = true; m_events = std::move(value); }
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline TopicConfiguration& WithEvents(const Aws::Vector<Event>& value) { SetEvents(value); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline TopicConfiguration& WithEvents(Aws::Vector<Event>&& value) { SetEvents(std::move(value)); return *this;}
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline TopicConfiguration& AddEvents(const Event& value) { m_eventsHasBeenSet = true; m_events.push_back(value); return *this; }
+
+ /**
+ * <p>The Amazon S3 bucket event about which to send notifications. For more
+ * information, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html">Supported
+ * Event Types</a> in the <i>Amazon Simple Storage Service Developer Guide</i>.</p>
+ */
+ inline TopicConfiguration& AddEvents(Event&& value) { m_eventsHasBeenSet = true; m_events.push_back(std::move(value)); return *this; }
+
+
+
+ inline const NotificationConfigurationFilter& GetFilter() const{ return m_filter; }
+
+
+ inline bool FilterHasBeenSet() const { return m_filterHasBeenSet; }
+
+
+ inline void SetFilter(const NotificationConfigurationFilter& value) { m_filterHasBeenSet = true; m_filter = value; }
+
+
+ inline void SetFilter(NotificationConfigurationFilter&& value) { m_filterHasBeenSet = true; m_filter = std::move(value); }
+
+
+ inline TopicConfiguration& WithFilter(const NotificationConfigurationFilter& value) { SetFilter(value); return *this;}
+
+
+ inline TopicConfiguration& WithFilter(NotificationConfigurationFilter&& value) { SetFilter(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::String m_topicArn;
+ bool m_topicArnHasBeenSet;
+
+ Aws::Vector<Event> m_events;
+ bool m_eventsHasBeenSet;
+
+ NotificationConfigurationFilter m_filter;
+ bool m_filterHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfigurationDeprecated.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfigurationDeprecated.h
new file mode 100644
index 00000000000..23592ee28ea
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TopicConfigurationDeprecated.h
@@ -0,0 +1,174 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/Event.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>A container for specifying the configuration for publication of messages to
+ * an Amazon Simple Notification Service (Amazon SNS) topic when Amazon S3 detects
+ * specified events. This data type is deprecated. Use <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_TopicConfiguration.html">TopicConfiguration</a>
+ * instead.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/TopicConfigurationDeprecated">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API TopicConfigurationDeprecated
+ {
+ public:
+ TopicConfigurationDeprecated();
+ TopicConfigurationDeprecated(const Aws::Utils::Xml::XmlNode& xmlNode);
+ TopicConfigurationDeprecated& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+
+ inline const Aws::String& GetId() const{ return m_id; }
+
+
+ inline bool IdHasBeenSet() const { return m_idHasBeenSet; }
+
+
+ inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }
+
+
+ inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }
+
+
+ inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }
+
+
+ inline TopicConfigurationDeprecated& WithId(const Aws::String& value) { SetId(value); return *this;}
+
+
+ inline TopicConfigurationDeprecated& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}
+
+
+ inline TopicConfigurationDeprecated& WithId(const char* value) { SetId(value); return *this;}
+
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline const Aws::Vector<Event>& GetEvents() const{ return m_events; }
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline bool EventsHasBeenSet() const { return m_eventsHasBeenSet; }
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline void SetEvents(const Aws::Vector<Event>& value) { m_eventsHasBeenSet = true; m_events = value; }
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline void SetEvents(Aws::Vector<Event>&& value) { m_eventsHasBeenSet = true; m_events = std::move(value); }
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline TopicConfigurationDeprecated& WithEvents(const Aws::Vector<Event>& value) { SetEvents(value); return *this;}
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline TopicConfigurationDeprecated& WithEvents(Aws::Vector<Event>&& value) { SetEvents(std::move(value)); return *this;}
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline TopicConfigurationDeprecated& AddEvents(const Event& value) { m_eventsHasBeenSet = true; m_events.push_back(value); return *this; }
+
+ /**
+ * <p>A collection of events related to objects</p>
+ */
+ inline TopicConfigurationDeprecated& AddEvents(Event&& value) { m_eventsHasBeenSet = true; m_events.push_back(std::move(value)); return *this; }
+
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline const Aws::String& GetTopic() const{ return m_topic; }
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline bool TopicHasBeenSet() const { return m_topicHasBeenSet; }
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline void SetTopic(const Aws::String& value) { m_topicHasBeenSet = true; m_topic = value; }
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline void SetTopic(Aws::String&& value) { m_topicHasBeenSet = true; m_topic = std::move(value); }
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline void SetTopic(const char* value) { m_topicHasBeenSet = true; m_topic.assign(value); }
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline TopicConfigurationDeprecated& WithTopic(const Aws::String& value) { SetTopic(value); return *this;}
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline TopicConfigurationDeprecated& WithTopic(Aws::String&& value) { SetTopic(std::move(value)); return *this;}
+
+ /**
+ * <p>Amazon SNS topic to which Amazon S3 will publish a message to report the
+ * specified events for the bucket.</p>
+ */
+ inline TopicConfigurationDeprecated& WithTopic(const char* value) { SetTopic(value); return *this;}
+
+ private:
+
+ Aws::String m_id;
+ bool m_idHasBeenSet;
+
+ Aws::Vector<Event> m_events;
+ bool m_eventsHasBeenSet;
+
+ Aws::String m_topic;
+ bool m_topicHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Transition.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Transition.h
new file mode 100644
index 00000000000..153b1e6e158
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Transition.h
@@ -0,0 +1,151 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/TransitionStorageClass.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies when an object transitions to a specified storage class. For more
+ * information about Amazon S3 lifecycle configuration rules, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html">Transitioning
+ * Objects Using Amazon S3 Lifecycle</a> in the <i>Amazon Simple Storage Service
+ * Developer Guide</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Transition">AWS API
+ * Reference</a></p>
+ */
+ class AWS_S3_API Transition
+ {
+ public:
+ Transition();
+ Transition(const Aws::Utils::Xml::XmlNode& xmlNode);
+ Transition& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Indicates when objects are transitioned to the specified storage class. The
+ * date value must be in ISO 8601 format. The time is always midnight UTC.</p>
+ */
+ inline const Aws::Utils::DateTime& GetDate() const{ return m_date; }
+
+ /**
+ * <p>Indicates when objects are transitioned to the specified storage class. The
+ * date value must be in ISO 8601 format. The time is always midnight UTC.</p>
+ */
+ inline bool DateHasBeenSet() const { return m_dateHasBeenSet; }
+
+ /**
+ * <p>Indicates when objects are transitioned to the specified storage class. The
+ * date value must be in ISO 8601 format. The time is always midnight UTC.</p>
+ */
+ inline void SetDate(const Aws::Utils::DateTime& value) { m_dateHasBeenSet = true; m_date = value; }
+
+ /**
+ * <p>Indicates when objects are transitioned to the specified storage class. The
+ * date value must be in ISO 8601 format. The time is always midnight UTC.</p>
+ */
+ inline void SetDate(Aws::Utils::DateTime&& value) { m_dateHasBeenSet = true; m_date = std::move(value); }
+
+ /**
+ * <p>Indicates when objects are transitioned to the specified storage class. The
+ * date value must be in ISO 8601 format. The time is always midnight UTC.</p>
+ */
+ inline Transition& WithDate(const Aws::Utils::DateTime& value) { SetDate(value); return *this;}
+
+ /**
+ * <p>Indicates when objects are transitioned to the specified storage class. The
+ * date value must be in ISO 8601 format. The time is always midnight UTC.</p>
+ */
+ inline Transition& WithDate(Aws::Utils::DateTime&& value) { SetDate(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Indicates the number of days after creation when objects are transitioned to
+ * the specified storage class. The value must be a positive integer.</p>
+ */
+ inline int GetDays() const{ return m_days; }
+
+ /**
+ * <p>Indicates the number of days after creation when objects are transitioned to
+ * the specified storage class. The value must be a positive integer.</p>
+ */
+ inline bool DaysHasBeenSet() const { return m_daysHasBeenSet; }
+
+ /**
+ * <p>Indicates the number of days after creation when objects are transitioned to
+ * the specified storage class. The value must be a positive integer.</p>
+ */
+ inline void SetDays(int value) { m_daysHasBeenSet = true; m_days = value; }
+
+ /**
+ * <p>Indicates the number of days after creation when objects are transitioned to
+ * the specified storage class. The value must be a positive integer.</p>
+ */
+ inline Transition& WithDays(int value) { SetDays(value); return *this;}
+
+
+ /**
+ * <p>The storage class to which you want the object to transition.</p>
+ */
+ inline const TransitionStorageClass& GetStorageClass() const{ return m_storageClass; }
+
+ /**
+ * <p>The storage class to which you want the object to transition.</p>
+ */
+ inline bool StorageClassHasBeenSet() const { return m_storageClassHasBeenSet; }
+
+ /**
+ * <p>The storage class to which you want the object to transition.</p>
+ */
+ inline void SetStorageClass(const TransitionStorageClass& value) { m_storageClassHasBeenSet = true; m_storageClass = value; }
+
+ /**
+ * <p>The storage class to which you want the object to transition.</p>
+ */
+ inline void SetStorageClass(TransitionStorageClass&& value) { m_storageClassHasBeenSet = true; m_storageClass = std::move(value); }
+
+ /**
+ * <p>The storage class to which you want the object to transition.</p>
+ */
+ inline Transition& WithStorageClass(const TransitionStorageClass& value) { SetStorageClass(value); return *this;}
+
+ /**
+ * <p>The storage class to which you want the object to transition.</p>
+ */
+ inline Transition& WithStorageClass(TransitionStorageClass&& value) { SetStorageClass(std::move(value)); return *this;}
+
+ private:
+
+ Aws::Utils::DateTime m_date;
+ bool m_dateHasBeenSet;
+
+ int m_days;
+ bool m_daysHasBeenSet;
+
+ TransitionStorageClass m_storageClass;
+ bool m_storageClassHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TransitionStorageClass.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TransitionStorageClass.h
new file mode 100644
index 00000000000..7eb5efa762f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/TransitionStorageClass.h
@@ -0,0 +1,34 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class TransitionStorageClass
+ {
+ NOT_SET,
+ GLACIER,
+ STANDARD_IA,
+ ONEZONE_IA,
+ INTELLIGENT_TIERING,
+ DEEP_ARCHIVE
+ };
+
+namespace TransitionStorageClassMapper
+{
+AWS_S3_API TransitionStorageClass GetTransitionStorageClassForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForTransitionStorageClass(TransitionStorageClass value);
+} // namespace TransitionStorageClassMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Type.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Type.h
new file mode 100644
index 00000000000..863af2bca69
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/Type.h
@@ -0,0 +1,32 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ enum class Type
+ {
+ NOT_SET,
+ CanonicalUser,
+ AmazonCustomerByEmail,
+ Group
+ };
+
+namespace TypeMapper
+{
+AWS_S3_API Type GetTypeForName(const Aws::String& name);
+
+AWS_S3_API Aws::String GetNameForType(Type value);
+} // namespace TypeMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyRequest.h
new file mode 100644
index 00000000000..def68dbeaa6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyRequest.h
@@ -0,0 +1,1447 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/core/utils/DateTime.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API UploadPartCopyRequest : public S3Request
+ {
+ public:
+ UploadPartCopyRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "UploadPartCopy"; }
+
+ Aws::String SerializePayload() const override;
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline UploadPartCopyRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline UploadPartCopyRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The bucket name.</p> <p>When using this API with an access point, you must
+ * direct requests to the access point hostname. The access point hostname takes
+ * the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline UploadPartCopyRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline const Aws::String& GetCopySource() const{ return m_copySource; }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline bool CopySourceHasBeenSet() const { return m_copySourceHasBeenSet; }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline void SetCopySource(const Aws::String& value) { m_copySourceHasBeenSet = true; m_copySource = value; }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline void SetCopySource(Aws::String&& value) { m_copySourceHasBeenSet = true; m_copySource = std::move(value); }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline void SetCopySource(const char* value) { m_copySourceHasBeenSet = true; m_copySource.assign(value); }
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySource(const Aws::String& value) { SetCopySource(value); return *this;}
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySource(Aws::String&& value) { SetCopySource(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the source object for the copy operation. You specify the value in
+ * one of two formats, depending on whether you want to access the source object
+ * through an <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points.html">access
+ * point</a>:</p> <ul> <li> <p>For objects not accessed through an access point,
+ * specify the name of the source bucket and key of the source object, separated by
+ * a slash (/). For example, to copy the object <code>reports/january.pdf</code>
+ * from the bucket <code>awsexamplebucket</code>, use
+ * <code>awsexamplebucket/reports/january.pdf</code>. The value must be URL
+ * encoded.</p> </li> <li> <p>For objects accessed through access points, specify
+ * the Amazon Resource Name (ARN) of the object as accessed through the access
+ * point, in the format
+ * <code>arn:aws:s3:&lt;Region&gt;:&lt;account-id&gt;:accesspoint/&lt;access-point-name&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through access
+ * point <code>my-access-point</code> owned by account <code>123456789012</code> in
+ * Region <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf</code>.
+ * The value must be URL encoded.</p> <p>Amazon S3 supports copy operations
+ * using access points only when the source and destination buckets are in the same
+ * AWS Region.</p> <p>Alternatively, for objects accessed through Amazon S3
+ * on Outposts, specify the ARN of the object as accessed in the format
+ * <code>arn:aws:s3-outposts:&lt;Region&gt;:&lt;account-id&gt;:outpost/&lt;outpost-id&gt;/object/&lt;key&gt;</code>.
+ * For example, to copy the object <code>reports/january.pdf</code> through outpost
+ * <code>my-outpost</code> owned by account <code>123456789012</code> in Region
+ * <code>us-west-2</code>, use the URL encoding of
+ * <code>arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf</code>.
+ * The value must be URL encoded. </p> </li> </ul> <p>To copy a specific version of
+ * an object, append <code>?versionId=&lt;version-id&gt;</code> to the value (for
+ * example,
+ * <code>awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893</code>).
+ * If you don't specify a version ID, Amazon S3 copies the latest version of the
+ * source object.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySource(const char* value) { SetCopySource(value); return *this;}
+
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline const Aws::String& GetCopySourceIfMatch() const{ return m_copySourceIfMatch; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline bool CopySourceIfMatchHasBeenSet() const { return m_copySourceIfMatchHasBeenSet; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline void SetCopySourceIfMatch(const Aws::String& value) { m_copySourceIfMatchHasBeenSet = true; m_copySourceIfMatch = value; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline void SetCopySourceIfMatch(Aws::String&& value) { m_copySourceIfMatchHasBeenSet = true; m_copySourceIfMatch = std::move(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline void SetCopySourceIfMatch(const char* value) { m_copySourceIfMatchHasBeenSet = true; m_copySourceIfMatch.assign(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfMatch(const Aws::String& value) { SetCopySourceIfMatch(value); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfMatch(Aws::String&& value) { SetCopySourceIfMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) matches the specified tag.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfMatch(const char* value) { SetCopySourceIfMatch(value); return *this;}
+
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline const Aws::Utils::DateTime& GetCopySourceIfModifiedSince() const{ return m_copySourceIfModifiedSince; }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline bool CopySourceIfModifiedSinceHasBeenSet() const { return m_copySourceIfModifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfModifiedSince(const Aws::Utils::DateTime& value) { m_copySourceIfModifiedSinceHasBeenSet = true; m_copySourceIfModifiedSince = value; }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfModifiedSince(Aws::Utils::DateTime&& value) { m_copySourceIfModifiedSinceHasBeenSet = true; m_copySourceIfModifiedSince = std::move(value); }
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfModifiedSince(const Aws::Utils::DateTime& value) { SetCopySourceIfModifiedSince(value); return *this;}
+
+ /**
+ * <p>Copies the object if it has been modified since the specified time.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfModifiedSince(Aws::Utils::DateTime&& value) { SetCopySourceIfModifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline const Aws::String& GetCopySourceIfNoneMatch() const{ return m_copySourceIfNoneMatch; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline bool CopySourceIfNoneMatchHasBeenSet() const { return m_copySourceIfNoneMatchHasBeenSet; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline void SetCopySourceIfNoneMatch(const Aws::String& value) { m_copySourceIfNoneMatchHasBeenSet = true; m_copySourceIfNoneMatch = value; }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline void SetCopySourceIfNoneMatch(Aws::String&& value) { m_copySourceIfNoneMatchHasBeenSet = true; m_copySourceIfNoneMatch = std::move(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline void SetCopySourceIfNoneMatch(const char* value) { m_copySourceIfNoneMatchHasBeenSet = true; m_copySourceIfNoneMatch.assign(value); }
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfNoneMatch(const Aws::String& value) { SetCopySourceIfNoneMatch(value); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfNoneMatch(Aws::String&& value) { SetCopySourceIfNoneMatch(std::move(value)); return *this;}
+
+ /**
+ * <p>Copies the object if its entity tag (ETag) is different than the specified
+ * ETag.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfNoneMatch(const char* value) { SetCopySourceIfNoneMatch(value); return *this;}
+
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline const Aws::Utils::DateTime& GetCopySourceIfUnmodifiedSince() const{ return m_copySourceIfUnmodifiedSince; }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline bool CopySourceIfUnmodifiedSinceHasBeenSet() const { return m_copySourceIfUnmodifiedSinceHasBeenSet; }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfUnmodifiedSince(const Aws::Utils::DateTime& value) { m_copySourceIfUnmodifiedSinceHasBeenSet = true; m_copySourceIfUnmodifiedSince = value; }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline void SetCopySourceIfUnmodifiedSince(Aws::Utils::DateTime&& value) { m_copySourceIfUnmodifiedSinceHasBeenSet = true; m_copySourceIfUnmodifiedSince = std::move(value); }
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfUnmodifiedSince(const Aws::Utils::DateTime& value) { SetCopySourceIfUnmodifiedSince(value); return *this;}
+
+ /**
+ * <p>Copies the object if it hasn't been modified since the specified time.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceIfUnmodifiedSince(Aws::Utils::DateTime&& value) { SetCopySourceIfUnmodifiedSince(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline const Aws::String& GetCopySourceRange() const{ return m_copySourceRange; }
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline bool CopySourceRangeHasBeenSet() const { return m_copySourceRangeHasBeenSet; }
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline void SetCopySourceRange(const Aws::String& value) { m_copySourceRangeHasBeenSet = true; m_copySourceRange = value; }
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline void SetCopySourceRange(Aws::String&& value) { m_copySourceRangeHasBeenSet = true; m_copySourceRange = std::move(value); }
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline void SetCopySourceRange(const char* value) { m_copySourceRangeHasBeenSet = true; m_copySourceRange.assign(value); }
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceRange(const Aws::String& value) { SetCopySourceRange(value); return *this;}
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceRange(Aws::String&& value) { SetCopySourceRange(std::move(value)); return *this;}
+
+ /**
+ * <p>The range of bytes to copy from the source object. The range value must use
+ * the form bytes=first-last, where the first and last are the zero-based byte
+ * offsets to copy. For example, bytes=0-9 indicates that you want to copy the
+ * first 10 bytes of the source. You can copy a range only if the source object is
+ * greater than 5 MB.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceRange(const char* value) { SetCopySourceRange(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline UploadPartCopyRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline UploadPartCopyRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline UploadPartCopyRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Part number of part being copied. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline int GetPartNumber() const{ return m_partNumber; }
+
+ /**
+ * <p>Part number of part being copied. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline bool PartNumberHasBeenSet() const { return m_partNumberHasBeenSet; }
+
+ /**
+ * <p>Part number of part being copied. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline void SetPartNumber(int value) { m_partNumberHasBeenSet = true; m_partNumber = value; }
+
+ /**
+ * <p>Part number of part being copied. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline UploadPartCopyRequest& WithPartNumber(int value) { SetPartNumber(value); return *this;}
+
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline bool UploadIdHasBeenSet() const { return m_uploadIdHasBeenSet; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadIdHasBeenSet = true; m_uploadId = value; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadIdHasBeenSet = true; m_uploadId = std::move(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadIdHasBeenSet = true; m_uploadId.assign(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline UploadPartCopyRequest& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline UploadPartCopyRequest& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being copied.</p>
+ */
+ inline UploadPartCopyRequest& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm</code> header. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartCopyRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline const Aws::String& GetCopySourceSSECustomerAlgorithm() const{ return m_copySourceSSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline bool CopySourceSSECustomerAlgorithmHasBeenSet() const { return m_copySourceSSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline void SetCopySourceSSECustomerAlgorithm(const Aws::String& value) { m_copySourceSSECustomerAlgorithmHasBeenSet = true; m_copySourceSSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline void SetCopySourceSSECustomerAlgorithm(Aws::String&& value) { m_copySourceSSECustomerAlgorithmHasBeenSet = true; m_copySourceSSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline void SetCopySourceSSECustomerAlgorithm(const char* value) { m_copySourceSSECustomerAlgorithmHasBeenSet = true; m_copySourceSSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerAlgorithm(const Aws::String& value) { SetCopySourceSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerAlgorithm(Aws::String&& value) { SetCopySourceSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use when decrypting the source object (for
+ * example, AES256).</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerAlgorithm(const char* value) { SetCopySourceSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline const Aws::String& GetCopySourceSSECustomerKey() const{ return m_copySourceSSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline bool CopySourceSSECustomerKeyHasBeenSet() const { return m_copySourceSSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline void SetCopySourceSSECustomerKey(const Aws::String& value) { m_copySourceSSECustomerKeyHasBeenSet = true; m_copySourceSSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline void SetCopySourceSSECustomerKey(Aws::String&& value) { m_copySourceSSECustomerKeyHasBeenSet = true; m_copySourceSSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline void SetCopySourceSSECustomerKey(const char* value) { m_copySourceSSECustomerKeyHasBeenSet = true; m_copySourceSSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerKey(const Aws::String& value) { SetCopySourceSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerKey(Aws::String&& value) { SetCopySourceSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use to
+ * decrypt the source object. The encryption key provided in this header must be
+ * one that was used when the source object was created.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerKey(const char* value) { SetCopySourceSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetCopySourceSSECustomerKeyMD5() const{ return m_copySourceSSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool CopySourceSSECustomerKeyMD5HasBeenSet() const { return m_copySourceSSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetCopySourceSSECustomerKeyMD5(const Aws::String& value) { m_copySourceSSECustomerKeyMD5HasBeenSet = true; m_copySourceSSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetCopySourceSSECustomerKeyMD5(Aws::String&& value) { m_copySourceSSECustomerKeyMD5HasBeenSet = true; m_copySourceSSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetCopySourceSSECustomerKeyMD5(const char* value) { m_copySourceSSECustomerKeyMD5HasBeenSet = true; m_copySourceSSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerKeyMD5(const Aws::String& value) { SetCopySourceSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerKeyMD5(Aws::String&& value) { SetCopySourceSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartCopyRequest& WithCopySourceSSECustomerKeyMD5(const char* value) { SetCopySourceSSECustomerKeyMD5(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline UploadPartCopyRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline UploadPartCopyRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline UploadPartCopyRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline UploadPartCopyRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected destination bucket owner. If the destination
+ * bucket is owned by a different account, the request will fail with an HTTP
+ * <code>403 (Access Denied)</code> error.</p>
+ */
+ inline UploadPartCopyRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedSourceBucketOwner() const{ return m_expectedSourceBucketOwner; }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline bool ExpectedSourceBucketOwnerHasBeenSet() const { return m_expectedSourceBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedSourceBucketOwner(const Aws::String& value) { m_expectedSourceBucketOwnerHasBeenSet = true; m_expectedSourceBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedSourceBucketOwner(Aws::String&& value) { m_expectedSourceBucketOwnerHasBeenSet = true; m_expectedSourceBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline void SetExpectedSourceBucketOwner(const char* value) { m_expectedSourceBucketOwnerHasBeenSet = true; m_expectedSourceBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline UploadPartCopyRequest& WithExpectedSourceBucketOwner(const Aws::String& value) { SetExpectedSourceBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline UploadPartCopyRequest& WithExpectedSourceBucketOwner(Aws::String&& value) { SetExpectedSourceBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected source bucket owner. If the source bucket is
+ * owned by a different account, the request will fail with an HTTP <code>403
+ * (Access Denied)</code> error.</p>
+ */
+ inline UploadPartCopyRequest& WithExpectedSourceBucketOwner(const char* value) { SetExpectedSourceBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline UploadPartCopyRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline UploadPartCopyRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline UploadPartCopyRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline UploadPartCopyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline UploadPartCopyRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline UploadPartCopyRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline UploadPartCopyRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline UploadPartCopyRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline UploadPartCopyRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ Aws::String m_copySource;
+ bool m_copySourceHasBeenSet;
+
+ Aws::String m_copySourceIfMatch;
+ bool m_copySourceIfMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_copySourceIfModifiedSince;
+ bool m_copySourceIfModifiedSinceHasBeenSet;
+
+ Aws::String m_copySourceIfNoneMatch;
+ bool m_copySourceIfNoneMatchHasBeenSet;
+
+ Aws::Utils::DateTime m_copySourceIfUnmodifiedSince;
+ bool m_copySourceIfUnmodifiedSinceHasBeenSet;
+
+ Aws::String m_copySourceRange;
+ bool m_copySourceRangeHasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ int m_partNumber;
+ bool m_partNumberHasBeenSet;
+
+ Aws::String m_uploadId;
+ bool m_uploadIdHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ Aws::String m_copySourceSSECustomerAlgorithm;
+ bool m_copySourceSSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_copySourceSSECustomerKey;
+ bool m_copySourceSSECustomerKeyHasBeenSet;
+
+ Aws::String m_copySourceSSECustomerKeyMD5;
+ bool m_copySourceSSECustomerKeyMD5HasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::String m_expectedSourceBucketOwner;
+ bool m_expectedSourceBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyResult.h
new file mode 100644
index 00000000000..ee8933482f3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartCopyResult.h
@@ -0,0 +1,343 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/CopyPartResult.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API UploadPartCopyResult
+ {
+ public:
+ UploadPartCopyResult();
+ UploadPartCopyResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ UploadPartCopyResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The version of the source object that was copied, if you have enabled
+ * versioning on the source bucket.</p>
+ */
+ inline const Aws::String& GetCopySourceVersionId() const{ return m_copySourceVersionId; }
+
+ /**
+ * <p>The version of the source object that was copied, if you have enabled
+ * versioning on the source bucket.</p>
+ */
+ inline void SetCopySourceVersionId(const Aws::String& value) { m_copySourceVersionId = value; }
+
+ /**
+ * <p>The version of the source object that was copied, if you have enabled
+ * versioning on the source bucket.</p>
+ */
+ inline void SetCopySourceVersionId(Aws::String&& value) { m_copySourceVersionId = std::move(value); }
+
+ /**
+ * <p>The version of the source object that was copied, if you have enabled
+ * versioning on the source bucket.</p>
+ */
+ inline void SetCopySourceVersionId(const char* value) { m_copySourceVersionId.assign(value); }
+
+ /**
+ * <p>The version of the source object that was copied, if you have enabled
+ * versioning on the source bucket.</p>
+ */
+ inline UploadPartCopyResult& WithCopySourceVersionId(const Aws::String& value) { SetCopySourceVersionId(value); return *this;}
+
+ /**
+ * <p>The version of the source object that was copied, if you have enabled
+ * versioning on the source bucket.</p>
+ */
+ inline UploadPartCopyResult& WithCopySourceVersionId(Aws::String&& value) { SetCopySourceVersionId(std::move(value)); return *this;}
+
+ /**
+ * <p>The version of the source object that was copied, if you have enabled
+ * versioning on the source bucket.</p>
+ */
+ inline UploadPartCopyResult& WithCopySourceVersionId(const char* value) { SetCopySourceVersionId(value); return *this;}
+
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline const CopyPartResult& GetCopyPartResult() const{ return m_copyPartResult; }
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline void SetCopyPartResult(const CopyPartResult& value) { m_copyPartResult = value; }
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline void SetCopyPartResult(CopyPartResult&& value) { m_copyPartResult = std::move(value); }
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline UploadPartCopyResult& WithCopyPartResult(const CopyPartResult& value) { SetCopyPartResult(value); return *this;}
+
+ /**
+ * <p>Container for all response elements.</p>
+ */
+ inline UploadPartCopyResult& WithCopyPartResult(CopyPartResult&& value) { SetCopyPartResult(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline UploadPartCopyResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline UploadPartCopyResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline UploadPartCopyResult& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline UploadPartCopyResult& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline UploadPartCopyResult& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline UploadPartCopyResult& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline UploadPartCopyResult& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline UploadPartCopyResult& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline UploadPartCopyResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline UploadPartCopyResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) that was used for the
+ * object.</p>
+ */
+ inline UploadPartCopyResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline UploadPartCopyResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline UploadPartCopyResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline UploadPartCopyResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ Aws::String m_copySourceVersionId;
+
+ CopyPartResult m_copyPartResult;
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::String m_sSECustomerAlgorithm;
+
+ Aws::String m_sSECustomerKeyMD5;
+
+ Aws::String m_sSEKMSKeyId;
+
+ bool m_bucketKeyEnabled;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartRequest.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartRequest.h
new file mode 100644
index 00000000000..ecdba22f401
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartRequest.h
@@ -0,0 +1,770 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/S3Request.h>
+#include <aws/core/utils/Array.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/memory/stl/AWSMap.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Http
+{
+ class URI;
+} //namespace Http
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ */
+ class AWS_S3_API UploadPartRequest : public StreamingS3Request
+ {
+ public:
+ UploadPartRequest();
+
+ // Service request name is the Operation name which will send this request out,
+ // each operation should has unique request name, so that we can get operation's name from this request.
+ // Note: this is not true for response, multiple operations may have the same response name,
+ // so we can not get operation's name from response.
+ inline virtual const char* GetServiceRequestName() const override { return "UploadPart"; }
+
+ void AddQueryStringParameters(Aws::Http::URI& uri) const override;
+
+ Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
+
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline const Aws::String& GetBucket() const{ return m_bucket; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline UploadPartRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline UploadPartRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
+
+ /**
+ * <p>The name of the bucket to which the multipart upload was initiated.</p>
+ * <p>When using this API with an access point, you must direct requests to the
+ * access point hostname. The access point hostname takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com.
+ * When using this operation with an access point through the AWS SDKs, you provide
+ * the access point ARN in place of the bucket name. For more information about
+ * access point ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html">Using
+ * Access Points</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p> <p>When using this API with Amazon S3 on Outposts, you must
+ * direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname
+ * takes the form
+ * <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com.
+ * When using this operation using S3 on Outposts through the AWS SDKs, you provide
+ * the Outposts bucket ARN in place of the bucket name. For more information about
+ * S3 on Outposts ARNs, see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html">Using
+ * S3 on Outposts</a> in the <i>Amazon Simple Storage Service Developer
+ * Guide</i>.</p>
+ */
+ inline UploadPartRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
+
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically.</p>
+ */
+ inline long long GetContentLength() const{ return m_contentLength; }
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically.</p>
+ */
+ inline bool ContentLengthHasBeenSet() const { return m_contentLengthHasBeenSet; }
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically.</p>
+ */
+ inline void SetContentLength(long long value) { m_contentLengthHasBeenSet = true; m_contentLength = value; }
+
+ /**
+ * <p>Size of the body in bytes. This parameter is useful when the size of the body
+ * cannot be determined automatically.</p>
+ */
+ inline UploadPartRequest& WithContentLength(long long value) { SetContentLength(value); return *this;}
+
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline const Aws::String& GetContentMD5() const{ return m_contentMD5; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline bool ContentMD5HasBeenSet() const { return m_contentMD5HasBeenSet; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline void SetContentMD5(const Aws::String& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = value; }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline void SetContentMD5(Aws::String&& value) { m_contentMD5HasBeenSet = true; m_contentMD5 = std::move(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline void SetContentMD5(const char* value) { m_contentMD5HasBeenSet = true; m_contentMD5.assign(value); }
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline UploadPartRequest& WithContentMD5(const Aws::String& value) { SetContentMD5(value); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline UploadPartRequest& WithContentMD5(Aws::String&& value) { SetContentMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>The base64-encoded 128-bit MD5 digest of the part data. This parameter is
+ * auto-populated when using the command from the CLI. This parameter is required
+ * if object lock parameters are specified.</p>
+ */
+ inline UploadPartRequest& WithContentMD5(const char* value) { SetContentMD5(value); return *this;}
+
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline const Aws::String& GetKey() const{ return m_key; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline bool KeyHasBeenSet() const { return m_keyHasBeenSet; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const Aws::String& value) { m_keyHasBeenSet = true; m_key = value; }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(Aws::String&& value) { m_keyHasBeenSet = true; m_key = std::move(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline void SetKey(const char* value) { m_keyHasBeenSet = true; m_key.assign(value); }
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline UploadPartRequest& WithKey(const Aws::String& value) { SetKey(value); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline UploadPartRequest& WithKey(Aws::String&& value) { SetKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Object key for which the multipart upload was initiated.</p>
+ */
+ inline UploadPartRequest& WithKey(const char* value) { SetKey(value); return *this;}
+
+
+ /**
+ * <p>Part number of part being uploaded. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline int GetPartNumber() const{ return m_partNumber; }
+
+ /**
+ * <p>Part number of part being uploaded. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline bool PartNumberHasBeenSet() const { return m_partNumberHasBeenSet; }
+
+ /**
+ * <p>Part number of part being uploaded. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline void SetPartNumber(int value) { m_partNumberHasBeenSet = true; m_partNumber = value; }
+
+ /**
+ * <p>Part number of part being uploaded. This is a positive integer between 1 and
+ * 10,000.</p>
+ */
+ inline UploadPartRequest& WithPartNumber(int value) { SetPartNumber(value); return *this;}
+
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline const Aws::String& GetUploadId() const{ return m_uploadId; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline bool UploadIdHasBeenSet() const { return m_uploadIdHasBeenSet; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline void SetUploadId(const Aws::String& value) { m_uploadIdHasBeenSet = true; m_uploadId = value; }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline void SetUploadId(Aws::String&& value) { m_uploadIdHasBeenSet = true; m_uploadId = std::move(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline void SetUploadId(const char* value) { m_uploadIdHasBeenSet = true; m_uploadId.assign(value); }
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline UploadPartRequest& WithUploadId(const Aws::String& value) { SetUploadId(value); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline UploadPartRequest& WithUploadId(Aws::String&& value) { SetUploadId(std::move(value)); return *this;}
+
+ /**
+ * <p>Upload ID identifying the multipart upload whose part is being uploaded.</p>
+ */
+ inline UploadPartRequest& WithUploadId(const char* value) { SetUploadId(value); return *this;}
+
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline bool SSECustomerAlgorithmHasBeenSet() const { return m_sSECustomerAlgorithmHasBeenSet; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithmHasBeenSet = true; m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline UploadPartRequest& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline UploadPartRequest& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the algorithm to use to when encrypting the object (for example,
+ * AES256).</p>
+ */
+ inline UploadPartRequest& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline const Aws::String& GetSSECustomerKey() const{ return m_sSECustomerKey; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline bool SSECustomerKeyHasBeenSet() const { return m_sSECustomerKeyHasBeenSet; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline void SetSSECustomerKey(const Aws::String& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = value; }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline void SetSSECustomerKey(Aws::String&& value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey = std::move(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline void SetSSECustomerKey(const char* value) { m_sSECustomerKeyHasBeenSet = true; m_sSECustomerKey.assign(value); }
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline UploadPartRequest& WithSSECustomerKey(const Aws::String& value) { SetSSECustomerKey(value); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline UploadPartRequest& WithSSECustomerKey(Aws::String&& value) { SetSSECustomerKey(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the customer-provided encryption key for Amazon S3 to use in
+ * encrypting data. This value is used to store the object and then it is
+ * discarded; Amazon S3 does not store the encryption key. The key must be
+ * appropriate for use with the algorithm specified in the
+ * <code>x-amz-server-side-encryption-customer-algorithm header</code>. This must
+ * be the same encryption key specified in the initiate multipart upload
+ * request.</p>
+ */
+ inline UploadPartRequest& WithSSECustomerKey(const char* value) { SetSSECustomerKey(value); return *this;}
+
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline bool SSECustomerKeyMD5HasBeenSet() const { return m_sSECustomerKeyMD5HasBeenSet; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5HasBeenSet = true; m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartRequest& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartRequest& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ * Amazon S3 uses this header for a message integrity check to ensure that the
+ * encryption key was transmitted without error.</p>
+ */
+ inline UploadPartRequest& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+
+ inline const RequestPayer& GetRequestPayer() const{ return m_requestPayer; }
+
+
+ inline bool RequestPayerHasBeenSet() const { return m_requestPayerHasBeenSet; }
+
+
+ inline void SetRequestPayer(const RequestPayer& value) { m_requestPayerHasBeenSet = true; m_requestPayer = value; }
+
+
+ inline void SetRequestPayer(RequestPayer&& value) { m_requestPayerHasBeenSet = true; m_requestPayer = std::move(value); }
+
+
+ inline UploadPartRequest& WithRequestPayer(const RequestPayer& value) { SetRequestPayer(value); return *this;}
+
+
+ inline UploadPartRequest& WithRequestPayer(RequestPayer&& value) { SetRequestPayer(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline const Aws::String& GetExpectedBucketOwner() const{ return m_expectedBucketOwner; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline bool ExpectedBucketOwnerHasBeenSet() const { return m_expectedBucketOwnerHasBeenSet; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const Aws::String& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = value; }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(Aws::String&& value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner = std::move(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline void SetExpectedBucketOwner(const char* value) { m_expectedBucketOwnerHasBeenSet = true; m_expectedBucketOwner.assign(value); }
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline UploadPartRequest& WithExpectedBucketOwner(const Aws::String& value) { SetExpectedBucketOwner(value); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline UploadPartRequest& WithExpectedBucketOwner(Aws::String&& value) { SetExpectedBucketOwner(std::move(value)); return *this;}
+
+ /**
+ * <p>The account id of the expected bucket owner. If the bucket is owned by a
+ * different account, the request will fail with an HTTP <code>403 (Access
+ * Denied)</code> error.</p>
+ */
+ inline UploadPartRequest& WithExpectedBucketOwner(const char* value) { SetExpectedBucketOwner(value); return *this;}
+
+
+
+ inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
+
+
+ inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
+
+
+ inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
+
+
+ inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
+
+
+ inline UploadPartRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
+
+
+ inline UploadPartRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
+
+
+ inline UploadPartRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+
+ inline UploadPartRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline UploadPartRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline UploadPartRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
+
+
+ inline UploadPartRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
+
+
+ inline UploadPartRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
+
+
+ inline UploadPartRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
+
+ private:
+
+
+ Aws::String m_bucket;
+ bool m_bucketHasBeenSet;
+
+ long long m_contentLength;
+ bool m_contentLengthHasBeenSet;
+
+ Aws::String m_contentMD5;
+ bool m_contentMD5HasBeenSet;
+
+ Aws::String m_key;
+ bool m_keyHasBeenSet;
+
+ int m_partNumber;
+ bool m_partNumberHasBeenSet;
+
+ Aws::String m_uploadId;
+ bool m_uploadIdHasBeenSet;
+
+ Aws::String m_sSECustomerAlgorithm;
+ bool m_sSECustomerAlgorithmHasBeenSet;
+
+ Aws::String m_sSECustomerKey;
+ bool m_sSECustomerKeyHasBeenSet;
+
+ Aws::String m_sSECustomerKeyMD5;
+ bool m_sSECustomerKeyMD5HasBeenSet;
+
+ RequestPayer m_requestPayer;
+ bool m_requestPayerHasBeenSet;
+
+ Aws::String m_expectedBucketOwner;
+ bool m_expectedBucketOwnerHasBeenSet;
+
+ Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
+ bool m_customizedAccessLogTagHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartResult.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartResult.h
new file mode 100644
index 00000000000..146a25021b8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/UploadPartResult.h
@@ -0,0 +1,307 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/core/utils/memory/stl/AWSString.h>
+#include <aws/s3/model/RequestCharged.h>
+#include <utility>
+
+namespace Aws
+{
+template<typename RESULT_TYPE>
+class AmazonWebServiceResult;
+
+namespace Utils
+{
+namespace Xml
+{
+ class XmlDocument;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+ class AWS_S3_API UploadPartResult
+ {
+ public:
+ UploadPartResult();
+ UploadPartResult(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+ UploadPartResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Xml::XmlDocument>& result);
+
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryption = value; }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryption = std::move(value); }
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline UploadPartResult& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
+
+ /**
+ * <p>The server-side encryption algorithm used when storing this object in Amazon
+ * S3 (for example, AES256, aws:kms).</p>
+ */
+ inline UploadPartResult& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline const Aws::String& GetETag() const{ return m_eTag; }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline void SetETag(const Aws::String& value) { m_eTag = value; }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline void SetETag(Aws::String&& value) { m_eTag = std::move(value); }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline void SetETag(const char* value) { m_eTag.assign(value); }
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline UploadPartResult& WithETag(const Aws::String& value) { SetETag(value); return *this;}
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline UploadPartResult& WithETag(Aws::String&& value) { SetETag(std::move(value)); return *this;}
+
+ /**
+ * <p>Entity tag for the uploaded object.</p>
+ */
+ inline UploadPartResult& WithETag(const char* value) { SetETag(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline const Aws::String& GetSSECustomerAlgorithm() const{ return m_sSECustomerAlgorithm; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const Aws::String& value) { m_sSECustomerAlgorithm = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(Aws::String&& value) { m_sSECustomerAlgorithm = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline void SetSSECustomerAlgorithm(const char* value) { m_sSECustomerAlgorithm.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline UploadPartResult& WithSSECustomerAlgorithm(const Aws::String& value) { SetSSECustomerAlgorithm(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline UploadPartResult& WithSSECustomerAlgorithm(Aws::String&& value) { SetSSECustomerAlgorithm(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header confirming the encryption
+ * algorithm used.</p>
+ */
+ inline UploadPartResult& WithSSECustomerAlgorithm(const char* value) { SetSSECustomerAlgorithm(value); return *this;}
+
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline const Aws::String& GetSSECustomerKeyMD5() const{ return m_sSECustomerKeyMD5; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const Aws::String& value) { m_sSECustomerKeyMD5 = value; }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(Aws::String&& value) { m_sSECustomerKeyMD5 = std::move(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline void SetSSECustomerKeyMD5(const char* value) { m_sSECustomerKeyMD5.assign(value); }
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline UploadPartResult& WithSSECustomerKeyMD5(const Aws::String& value) { SetSSECustomerKeyMD5(value); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline UploadPartResult& WithSSECustomerKeyMD5(Aws::String&& value) { SetSSECustomerKeyMD5(std::move(value)); return *this;}
+
+ /**
+ * <p>If server-side encryption with a customer-provided encryption key was
+ * requested, the response will include this header to provide round-trip message
+ * integrity verification of the customer-provided encryption key.</p>
+ */
+ inline UploadPartResult& WithSSECustomerKeyMD5(const char* value) { SetSSECustomerKeyMD5(value); return *this;}
+
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) was used for the
+ * object.</p>
+ */
+ inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyId = value; }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyId = std::move(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) was used for the
+ * object.</p>
+ */
+ inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyId.assign(value); }
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) was used for the
+ * object.</p>
+ */
+ inline UploadPartResult& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) was used for the
+ * object.</p>
+ */
+ inline UploadPartResult& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
+
+ /**
+ * <p>If present, specifies the ID of the AWS Key Management Service (AWS KMS)
+ * symmetric customer managed customer master key (CMK) was used for the
+ * object.</p>
+ */
+ inline UploadPartResult& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
+
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabled = value; }
+
+ /**
+ * <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ * encryption with AWS KMS (SSE-KMS).</p>
+ */
+ inline UploadPartResult& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
+
+
+
+ inline const RequestCharged& GetRequestCharged() const{ return m_requestCharged; }
+
+
+ inline void SetRequestCharged(const RequestCharged& value) { m_requestCharged = value; }
+
+
+ inline void SetRequestCharged(RequestCharged&& value) { m_requestCharged = std::move(value); }
+
+
+ inline UploadPartResult& WithRequestCharged(const RequestCharged& value) { SetRequestCharged(value); return *this;}
+
+
+ inline UploadPartResult& WithRequestCharged(RequestCharged&& value) { SetRequestCharged(std::move(value)); return *this;}
+
+ private:
+
+ ServerSideEncryption m_serverSideEncryption;
+
+ Aws::String m_eTag;
+
+ Aws::String m_sSECustomerAlgorithm;
+
+ Aws::String m_sSECustomerKeyMD5;
+
+ Aws::String m_sSEKMSKeyId;
+
+ bool m_bucketKeyEnabled;
+
+ RequestCharged m_requestCharged;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/VersioningConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/VersioningConfiguration.h
new file mode 100644
index 00000000000..b30cfbd698c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/VersioningConfiguration.h
@@ -0,0 +1,135 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/MFADelete.h>
+#include <aws/s3/model/BucketVersioningStatus.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Describes the versioning state of an Amazon S3 bucket. For more information,
+ * see <a
+ * href="https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html">PUT
+ * Bucket versioning</a> in the <i>Amazon Simple Storage Service API
+ * Reference</i>.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/VersioningConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API VersioningConfiguration
+ {
+ public:
+ VersioningConfiguration();
+ VersioningConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ VersioningConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline const MFADelete& GetMFADelete() const{ return m_mFADelete; }
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline bool MFADeleteHasBeenSet() const { return m_mFADeleteHasBeenSet; }
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline void SetMFADelete(const MFADelete& value) { m_mFADeleteHasBeenSet = true; m_mFADelete = value; }
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline void SetMFADelete(MFADelete&& value) { m_mFADeleteHasBeenSet = true; m_mFADelete = std::move(value); }
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline VersioningConfiguration& WithMFADelete(const MFADelete& value) { SetMFADelete(value); return *this;}
+
+ /**
+ * <p>Specifies whether MFA delete is enabled in the bucket versioning
+ * configuration. This element is only returned if the bucket has been configured
+ * with MFA delete. If the bucket has never been so configured, this element is not
+ * returned.</p>
+ */
+ inline VersioningConfiguration& WithMFADelete(MFADelete&& value) { SetMFADelete(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline const BucketVersioningStatus& GetStatus() const{ return m_status; }
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline void SetStatus(const BucketVersioningStatus& value) { m_statusHasBeenSet = true; m_status = value; }
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline void SetStatus(BucketVersioningStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline VersioningConfiguration& WithStatus(const BucketVersioningStatus& value) { SetStatus(value); return *this;}
+
+ /**
+ * <p>The versioning state of the bucket.</p>
+ */
+ inline VersioningConfiguration& WithStatus(BucketVersioningStatus&& value) { SetStatus(std::move(value)); return *this;}
+
+ private:
+
+ MFADelete m_mFADelete;
+ bool m_mFADeleteHasBeenSet;
+
+ BucketVersioningStatus m_status;
+ bool m_statusHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/WebsiteConfiguration.h b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/WebsiteConfiguration.h
new file mode 100644
index 00000000000..d862c3e2304
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include/aws/s3/model/WebsiteConfiguration.h
@@ -0,0 +1,207 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#pragma once
+#include <aws/s3/S3_EXPORTS.h>
+#include <aws/s3/model/ErrorDocument.h>
+#include <aws/s3/model/IndexDocument.h>
+#include <aws/s3/model/RedirectAllRequestsTo.h>
+#include <aws/core/utils/memory/stl/AWSVector.h>
+#include <aws/s3/model/RoutingRule.h>
+#include <utility>
+
+namespace Aws
+{
+namespace Utils
+{
+namespace Xml
+{
+ class XmlNode;
+} // namespace Xml
+} // namespace Utils
+namespace S3
+{
+namespace Model
+{
+
+ /**
+ * <p>Specifies website configuration parameters for an Amazon S3
+ * bucket.</p><p><h3>See Also:</h3> <a
+ * href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/WebsiteConfiguration">AWS
+ * API Reference</a></p>
+ */
+ class AWS_S3_API WebsiteConfiguration
+ {
+ public:
+ WebsiteConfiguration();
+ WebsiteConfiguration(const Aws::Utils::Xml::XmlNode& xmlNode);
+ WebsiteConfiguration& operator=(const Aws::Utils::Xml::XmlNode& xmlNode);
+
+ void AddToNode(Aws::Utils::Xml::XmlNode& parentNode) const;
+
+
+ /**
+ * <p>The name of the error document for the website.</p>
+ */
+ inline const ErrorDocument& GetErrorDocument() const{ return m_errorDocument; }
+
+ /**
+ * <p>The name of the error document for the website.</p>
+ */
+ inline bool ErrorDocumentHasBeenSet() const { return m_errorDocumentHasBeenSet; }
+
+ /**
+ * <p>The name of the error document for the website.</p>
+ */
+ inline void SetErrorDocument(const ErrorDocument& value) { m_errorDocumentHasBeenSet = true; m_errorDocument = value; }
+
+ /**
+ * <p>The name of the error document for the website.</p>
+ */
+ inline void SetErrorDocument(ErrorDocument&& value) { m_errorDocumentHasBeenSet = true; m_errorDocument = std::move(value); }
+
+ /**
+ * <p>The name of the error document for the website.</p>
+ */
+ inline WebsiteConfiguration& WithErrorDocument(const ErrorDocument& value) { SetErrorDocument(value); return *this;}
+
+ /**
+ * <p>The name of the error document for the website.</p>
+ */
+ inline WebsiteConfiguration& WithErrorDocument(ErrorDocument&& value) { SetErrorDocument(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The name of the index document for the website.</p>
+ */
+ inline const IndexDocument& GetIndexDocument() const{ return m_indexDocument; }
+
+ /**
+ * <p>The name of the index document for the website.</p>
+ */
+ inline bool IndexDocumentHasBeenSet() const { return m_indexDocumentHasBeenSet; }
+
+ /**
+ * <p>The name of the index document for the website.</p>
+ */
+ inline void SetIndexDocument(const IndexDocument& value) { m_indexDocumentHasBeenSet = true; m_indexDocument = value; }
+
+ /**
+ * <p>The name of the index document for the website.</p>
+ */
+ inline void SetIndexDocument(IndexDocument&& value) { m_indexDocumentHasBeenSet = true; m_indexDocument = std::move(value); }
+
+ /**
+ * <p>The name of the index document for the website.</p>
+ */
+ inline WebsiteConfiguration& WithIndexDocument(const IndexDocument& value) { SetIndexDocument(value); return *this;}
+
+ /**
+ * <p>The name of the index document for the website.</p>
+ */
+ inline WebsiteConfiguration& WithIndexDocument(IndexDocument&& value) { SetIndexDocument(std::move(value)); return *this;}
+
+
+ /**
+ * <p>The redirect behavior for every request to this bucket's website
+ * endpoint.</p> <p>If you specify this property, you can't specify any
+ * other property.</p>
+ */
+ inline const RedirectAllRequestsTo& GetRedirectAllRequestsTo() const{ return m_redirectAllRequestsTo; }
+
+ /**
+ * <p>The redirect behavior for every request to this bucket's website
+ * endpoint.</p> <p>If you specify this property, you can't specify any
+ * other property.</p>
+ */
+ inline bool RedirectAllRequestsToHasBeenSet() const { return m_redirectAllRequestsToHasBeenSet; }
+
+ /**
+ * <p>The redirect behavior for every request to this bucket's website
+ * endpoint.</p> <p>If you specify this property, you can't specify any
+ * other property.</p>
+ */
+ inline void SetRedirectAllRequestsTo(const RedirectAllRequestsTo& value) { m_redirectAllRequestsToHasBeenSet = true; m_redirectAllRequestsTo = value; }
+
+ /**
+ * <p>The redirect behavior for every request to this bucket's website
+ * endpoint.</p> <p>If you specify this property, you can't specify any
+ * other property.</p>
+ */
+ inline void SetRedirectAllRequestsTo(RedirectAllRequestsTo&& value) { m_redirectAllRequestsToHasBeenSet = true; m_redirectAllRequestsTo = std::move(value); }
+
+ /**
+ * <p>The redirect behavior for every request to this bucket's website
+ * endpoint.</p> <p>If you specify this property, you can't specify any
+ * other property.</p>
+ */
+ inline WebsiteConfiguration& WithRedirectAllRequestsTo(const RedirectAllRequestsTo& value) { SetRedirectAllRequestsTo(value); return *this;}
+
+ /**
+ * <p>The redirect behavior for every request to this bucket's website
+ * endpoint.</p> <p>If you specify this property, you can't specify any
+ * other property.</p>
+ */
+ inline WebsiteConfiguration& WithRedirectAllRequestsTo(RedirectAllRequestsTo&& value) { SetRedirectAllRequestsTo(std::move(value)); return *this;}
+
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline const Aws::Vector<RoutingRule>& GetRoutingRules() const{ return m_routingRules; }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline bool RoutingRulesHasBeenSet() const { return m_routingRulesHasBeenSet; }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline void SetRoutingRules(const Aws::Vector<RoutingRule>& value) { m_routingRulesHasBeenSet = true; m_routingRules = value; }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline void SetRoutingRules(Aws::Vector<RoutingRule>&& value) { m_routingRulesHasBeenSet = true; m_routingRules = std::move(value); }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline WebsiteConfiguration& WithRoutingRules(const Aws::Vector<RoutingRule>& value) { SetRoutingRules(value); return *this;}
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline WebsiteConfiguration& WithRoutingRules(Aws::Vector<RoutingRule>&& value) { SetRoutingRules(std::move(value)); return *this;}
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline WebsiteConfiguration& AddRoutingRules(const RoutingRule& value) { m_routingRulesHasBeenSet = true; m_routingRules.push_back(value); return *this; }
+
+ /**
+ * <p>Rules that define when a redirect is applied and the redirect behavior.</p>
+ */
+ inline WebsiteConfiguration& AddRoutingRules(RoutingRule&& value) { m_routingRulesHasBeenSet = true; m_routingRules.push_back(std::move(value)); return *this; }
+
+ private:
+
+ ErrorDocument m_errorDocument;
+ bool m_errorDocumentHasBeenSet;
+
+ IndexDocument m_indexDocument;
+ bool m_indexDocumentHasBeenSet;
+
+ RedirectAllRequestsTo m_redirectAllRequestsTo;
+ bool m_redirectAllRequestsToHasBeenSet;
+
+ Aws::Vector<RoutingRule> m_routingRules;
+ bool m_routingRulesHasBeenSet;
+ };
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ARN.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ARN.cpp
new file mode 100644
index 00000000000..c774bcd3804
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ARN.cpp
@@ -0,0 +1,210 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <cassert>
+#include <aws/core/Region.h>
+#include <aws/core/utils/DNS.h>
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/s3/S3ARN.h>
+
+namespace Aws
+{
+ namespace S3
+ {
+ S3ARN::S3ARN(const Aws::String& arn) : Utils::ARN(arn)
+ {
+ ParseARNResource();
+ }
+
+ S3ARNOutcome S3ARN::Validate(const char* clientRegion) const
+ {
+ // Take pseudo region into consideration here.
+ Aws::String region = clientRegion ? clientRegion : "";
+ Aws::StringStream ss;
+ if (this->GetResourceType() == ARNResourceType::OUTPOST && region.find("fips") != Aws::String::npos)
+ {
+ ss.str("");
+ ss << "Outposts ARN do not support fips regions right now.";
+ return S3ARNOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::VALIDATION, "VALIDATION", ss.str(), false));
+ }
+ else if (this->GetRegion() != Aws::Region::ComputeSignerRegion(clientRegion))
+ {
+ ss.str("");
+ ss << "Region mismatch between \"" << this->GetRegion() << "\" defined in ARN and \""
+ << clientRegion << "\" defined in client configuration. "
+ << "You can specify AWS_S3_USE_ARN_REGION to ignore region defined in client configuration.";
+ return S3ARNOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::VALIDATION, "VALIDATION", ss.str(), false));
+ }
+ else
+ {
+ return Validate();
+ }
+ }
+
+ S3ARNOutcome S3ARN::Validate() const
+ {
+ Aws::String errorMessage;
+ bool success = false;
+ Aws::StringStream ss;
+
+ if (!*this)
+ {
+ errorMessage = "Invalid ARN.";
+ }
+ // Validation on partition.
+ else if (this->GetPartition().find("aws") != 0)
+ {
+ ss.str("");
+ ss << "Invalid partition in ARN: " << this->GetPartition() << ". Valid options: aws, aws-cn, and etc.";
+ }
+ // Validation on service.
+ else if (this->GetService() != "s3" && this->GetService() != "s3-outposts")
+ {
+ ss.str("");
+ ss << "Invalid service in ARN: " << this->GetService() << ". Valid options: s3, s3-outposts";
+ errorMessage = ss.str();
+ }
+ // Validation on region.
+ // TODO: Failure on different partitions.
+ else if (this->GetRegion().empty())
+ {
+ errorMessage = "Invalid ARN with empty region.";
+ }
+ else if (!Utils::IsValidDnsLabel(this->GetRegion()))
+ {
+ ss.str("");
+ ss << "Invalid region in ARN: " << this->GetRegion() << ". Region should be a RFC 3986 Host label.";
+ errorMessage = ss.str();
+ }
+ // Validation on account ID
+ else if (!Utils::IsValidDnsLabel(this->GetAccountId()))
+ {
+ ss.str("");
+ ss << "Invalid account ID in ARN: " << this->GetAccountId() << ". Account ID should be a RFC 3986 Host label.";
+ errorMessage = ss.str();
+ }
+ // Validation on Access Point ARN:
+ else if (this->GetResourceType() == ARNResourceType::ACCESSPOINT)
+ {
+ if (!Utils::IsValidDnsLabel(this->GetResourceId()))
+ {
+ ss.str("");
+ ss << "Invalid resource ID in accesspoint ARN: " << this->GetResourceId() << ". Resource ID should be a RFC 3986 Host label.";
+ errorMessage = ss.str();
+ }
+ else if (!this->GetResourceQualifier().empty())
+ {
+ ss.str("");
+ ss << "Invalid accesspoint ARN with non empty resource qualifier: " << this->GetResourceQualifier();
+ errorMessage = ss.str();
+ }
+ else if (!this->GetSubResourceType().empty() || !this->GetSubResourceId().empty())
+ {
+ ss.str("");
+ ss << "Invalid accesspoint ARN with non empty sub resource type: " << this->GetSubResourceType() << ", sub resource ID: " << this->GetSubResourceId();
+ errorMessage = ss.str();
+ }
+ else
+ {
+ success = true;
+ }
+ }
+ // Validation on Outposts ARN:
+ else if (this->GetResourceType() == ARNResourceType::OUTPOST)
+ {
+ if (this->GetRegion().find("fips") != Aws::String::npos)
+ {
+ ss.str("");
+ ss << "Outposts ARN do not support fips regions right now.";
+ errorMessage = ss.str();
+ }
+ else if (!Utils::IsValidDnsLabel(this->GetResourceId()))
+ {
+ ss.str("");
+ ss << "Invalid outpost ID in Outposts ARN: " << this->GetResourceId() << ". Outpost ID should be a RFC 3986 Host label.";
+ errorMessage = ss.str();
+ }
+ else if (this->GetSubResourceType() != ARNResourceType::ACCESSPOINT)
+ {
+ ss.str("");
+ ss << "Invalid sub resource type in Outposts ARN: " << this->GetSubResourceType() << ". Valid options: " << ARNResourceType::ACCESSPOINT;
+ errorMessage = ss.str();
+ }
+ else if (!Utils::IsValidDnsLabel(this->GetSubResourceId()))
+ {
+ ss.str("");
+ ss << "Invalid accesspoint name in Outposts ARN: " << this->GetSubResourceId() << ", accesspoint name should be a RFC 3986 Host label.";
+ errorMessage = ss.str();
+ }
+ else
+ {
+ success = true;
+ }
+ }
+ // Neither Access Point ARN nor Outposts ARN.
+ else
+ {
+ ss.str("");
+ ss << "Invalid resource type in ARN: " << this->GetResourceType() << ". Valid options: " << ARNResourceType::ACCESSPOINT << ", " << ARNResourceType::OUTPOST;
+ errorMessage = ss.str();
+ }
+
+ if (success)
+ {
+ return S3ARNOutcome(success);
+ }
+ else
+ {
+ return S3ARNOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::VALIDATION, "VALIDATION", errorMessage, false));
+ }
+ }
+
+ void S3ARN::ParseARNResource()
+ {
+ if (!*this) return;
+
+ Aws::String resource = this->GetResource();
+ Aws::Vector<Aws::String> resourceSegments;
+ if (resource.find(':') != std::string::npos)
+ {
+ resourceSegments = Utils::StringUtils::Split(resource, ':', 4, Utils::StringUtils::SplitOptions::INCLUDE_EMPTY_ENTRIES);
+ }
+ else if (resource.find('/') != std::string::npos)
+ {
+ resourceSegments = Utils::StringUtils::Split(resource, '/', 4, Utils::StringUtils::SplitOptions::INCLUDE_EMPTY_ENTRIES);
+ }
+ else
+ {
+ resourceSegments.emplace_back(resource);
+ }
+
+ switch (resourceSegments.size())
+ {
+ case 1:
+ m_resourceId = resourceSegments[0];
+ break;
+ case 2:
+ m_resourceType = resourceSegments[0];
+ m_resourceId = resourceSegments[1];
+ break;
+ case 3:
+ m_resourceType = resourceSegments[0];
+ m_resourceId = resourceSegments[1];
+ m_resourceQualifier = resourceSegments[2];
+ break;
+ case 4:
+ m_resourceType = resourceSegments[0];
+ m_resourceId = resourceSegments[1];
+ m_subResourceType = resourceSegments[2];
+ m_subResourceId = resourceSegments[3];
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ }
+ }
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Client.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Client.cpp
new file mode 100644
index 00000000000..ca21d88bb2f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Client.cpp
@@ -0,0 +1,4085 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/utils/Outcome.h>
+#include <aws/core/auth/AWSAuthSigner.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/client/RetryStrategy.h>
+#include <aws/core/http/HttpClient.h>
+#include <aws/core/http/HttpResponse.h>
+#include <aws/core/http/HttpClientFactory.h>
+#include <aws/core/auth/AWSCredentialsProviderChain.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/threading/Executor.h>
+#include <aws/core/utils/DNS.h>
+#include <aws/core/utils/logging/LogMacros.h>
+
+#include <aws/core/utils/event/EventStream.h>
+#include <aws/s3/S3Client.h>
+#include <aws/s3/S3Endpoint.h>
+#include <aws/s3/S3ErrorMarshaller.h>
+#include <aws/s3/S3ARN.h>
+#include <aws/s3/model/AbortMultipartUploadRequest.h>
+#include <aws/s3/model/CompleteMultipartUploadRequest.h>
+#include <aws/s3/model/CopyObjectRequest.h>
+#include <aws/s3/model/CreateBucketRequest.h>
+#include <aws/s3/model/CreateMultipartUploadRequest.h>
+#include <aws/s3/model/DeleteBucketRequest.h>
+#include <aws/s3/model/DeleteBucketAnalyticsConfigurationRequest.h>
+#include <aws/s3/model/DeleteBucketCorsRequest.h>
+#include <aws/s3/model/DeleteBucketEncryptionRequest.h>
+#include <aws/s3/model/DeleteBucketIntelligentTieringConfigurationRequest.h>
+#include <aws/s3/model/DeleteBucketInventoryConfigurationRequest.h>
+#include <aws/s3/model/DeleteBucketLifecycleRequest.h>
+#include <aws/s3/model/DeleteBucketMetricsConfigurationRequest.h>
+#include <aws/s3/model/DeleteBucketOwnershipControlsRequest.h>
+#include <aws/s3/model/DeleteBucketPolicyRequest.h>
+#include <aws/s3/model/DeleteBucketReplicationRequest.h>
+#include <aws/s3/model/DeleteBucketTaggingRequest.h>
+#include <aws/s3/model/DeleteBucketWebsiteRequest.h>
+#include <aws/s3/model/DeleteObjectRequest.h>
+#include <aws/s3/model/DeleteObjectTaggingRequest.h>
+#include <aws/s3/model/DeleteObjectsRequest.h>
+#include <aws/s3/model/DeletePublicAccessBlockRequest.h>
+#include <aws/s3/model/GetBucketAccelerateConfigurationRequest.h>
+#include <aws/s3/model/GetBucketAclRequest.h>
+#include <aws/s3/model/GetBucketAnalyticsConfigurationRequest.h>
+#include <aws/s3/model/GetBucketCorsRequest.h>
+#include <aws/s3/model/GetBucketEncryptionRequest.h>
+#include <aws/s3/model/GetBucketIntelligentTieringConfigurationRequest.h>
+#include <aws/s3/model/GetBucketInventoryConfigurationRequest.h>
+#include <aws/s3/model/GetBucketLifecycleConfigurationRequest.h>
+#include <aws/s3/model/GetBucketLocationRequest.h>
+#include <aws/s3/model/GetBucketLoggingRequest.h>
+#include <aws/s3/model/GetBucketMetricsConfigurationRequest.h>
+#include <aws/s3/model/GetBucketNotificationConfigurationRequest.h>
+#include <aws/s3/model/GetBucketOwnershipControlsRequest.h>
+#include <aws/s3/model/GetBucketPolicyRequest.h>
+#include <aws/s3/model/GetBucketPolicyStatusRequest.h>
+#include <aws/s3/model/GetBucketReplicationRequest.h>
+#include <aws/s3/model/GetBucketRequestPaymentRequest.h>
+#include <aws/s3/model/GetBucketTaggingRequest.h>
+#include <aws/s3/model/GetBucketVersioningRequest.h>
+#include <aws/s3/model/GetBucketWebsiteRequest.h>
+#include <aws/s3/model/GetObjectRequest.h>
+#include <aws/s3/model/GetObjectAclRequest.h>
+#include <aws/s3/model/GetObjectLegalHoldRequest.h>
+#include <aws/s3/model/GetObjectLockConfigurationRequest.h>
+#include <aws/s3/model/GetObjectRetentionRequest.h>
+#include <aws/s3/model/GetObjectTaggingRequest.h>
+#include <aws/s3/model/GetObjectTorrentRequest.h>
+#include <aws/s3/model/GetPublicAccessBlockRequest.h>
+#include <aws/s3/model/HeadBucketRequest.h>
+#include <aws/s3/model/HeadObjectRequest.h>
+#include <aws/s3/model/ListBucketAnalyticsConfigurationsRequest.h>
+#include <aws/s3/model/ListBucketIntelligentTieringConfigurationsRequest.h>
+#include <aws/s3/model/ListBucketInventoryConfigurationsRequest.h>
+#include <aws/s3/model/ListBucketMetricsConfigurationsRequest.h>
+#include <aws/s3/model/ListMultipartUploadsRequest.h>
+#include <aws/s3/model/ListObjectVersionsRequest.h>
+#include <aws/s3/model/ListObjectsRequest.h>
+#include <aws/s3/model/ListObjectsV2Request.h>
+#include <aws/s3/model/ListPartsRequest.h>
+#include <aws/s3/model/PutBucketAccelerateConfigurationRequest.h>
+#include <aws/s3/model/PutBucketAclRequest.h>
+#include <aws/s3/model/PutBucketAnalyticsConfigurationRequest.h>
+#include <aws/s3/model/PutBucketCorsRequest.h>
+#include <aws/s3/model/PutBucketEncryptionRequest.h>
+#include <aws/s3/model/PutBucketIntelligentTieringConfigurationRequest.h>
+#include <aws/s3/model/PutBucketInventoryConfigurationRequest.h>
+#include <aws/s3/model/PutBucketLifecycleConfigurationRequest.h>
+#include <aws/s3/model/PutBucketLoggingRequest.h>
+#include <aws/s3/model/PutBucketMetricsConfigurationRequest.h>
+#include <aws/s3/model/PutBucketNotificationConfigurationRequest.h>
+#include <aws/s3/model/PutBucketOwnershipControlsRequest.h>
+#include <aws/s3/model/PutBucketPolicyRequest.h>
+#include <aws/s3/model/PutBucketReplicationRequest.h>
+#include <aws/s3/model/PutBucketRequestPaymentRequest.h>
+#include <aws/s3/model/PutBucketTaggingRequest.h>
+#include <aws/s3/model/PutBucketVersioningRequest.h>
+#include <aws/s3/model/PutBucketWebsiteRequest.h>
+#include <aws/s3/model/PutObjectRequest.h>
+#include <aws/s3/model/PutObjectAclRequest.h>
+#include <aws/s3/model/PutObjectLegalHoldRequest.h>
+#include <aws/s3/model/PutObjectLockConfigurationRequest.h>
+#include <aws/s3/model/PutObjectRetentionRequest.h>
+#include <aws/s3/model/PutObjectTaggingRequest.h>
+#include <aws/s3/model/PutPublicAccessBlockRequest.h>
+#include <aws/s3/model/RestoreObjectRequest.h>
+#include <aws/s3/model/SelectObjectContentRequest.h>
+#include <aws/s3/model/UploadPartRequest.h>
+#include <aws/s3/model/UploadPartCopyRequest.h>
+
+using namespace Aws;
+using namespace Aws::Auth;
+using namespace Aws::Client;
+using namespace Aws::S3;
+using namespace Aws::S3::Model;
+using namespace Aws::Http;
+using namespace Aws::Utils::Xml;
+
+
+static const char* SERVICE_NAME = "s3";
+static const char* ALLOCATION_TAG = "S3Client";
+
+
+S3Client::S3Client(const Client::ClientConfiguration& clientConfiguration, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy signPayloads, bool useVirtualAddressing, Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION USEast1RegionalEndPointOption) :
+ BASECLASS(clientConfiguration,
+ Aws::MakeShared<AWSAuthV4Signer>(ALLOCATION_TAG, Aws::MakeShared<DefaultAWSCredentialsProviderChain>(ALLOCATION_TAG),
+ SERVICE_NAME, Aws::Region::ComputeSignerRegion(clientConfiguration.region), signPayloads, false),
+ Aws::MakeShared<S3ErrorMarshaller>(ALLOCATION_TAG)),
+ m_executor(clientConfiguration.executor), m_useVirtualAddressing(useVirtualAddressing), m_USEast1RegionalEndpointOption(USEast1RegionalEndPointOption)
+{
+ init(clientConfiguration);
+}
+
+S3Client::S3Client(const AWSCredentials& credentials, const Client::ClientConfiguration& clientConfiguration, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy signPayloads, bool useVirtualAddressing, Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION USEast1RegionalEndPointOption) :
+ BASECLASS(clientConfiguration,
+ Aws::MakeShared<AWSAuthV4Signer>(ALLOCATION_TAG, Aws::MakeShared<SimpleAWSCredentialsProvider>(ALLOCATION_TAG, credentials),
+ SERVICE_NAME, Aws::Region::ComputeSignerRegion(clientConfiguration.region), signPayloads, false),
+ Aws::MakeShared<S3ErrorMarshaller>(ALLOCATION_TAG)),
+ m_executor(clientConfiguration.executor), m_useVirtualAddressing(useVirtualAddressing), m_USEast1RegionalEndpointOption(USEast1RegionalEndPointOption)
+{
+ init(clientConfiguration);
+}
+
+S3Client::S3Client(const std::shared_ptr<AWSCredentialsProvider>& credentialsProvider,
+ const Client::ClientConfiguration& clientConfiguration, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy signPayloads, bool useVirtualAddressing, Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION USEast1RegionalEndPointOption) :
+ BASECLASS(clientConfiguration,
+ Aws::MakeShared<AWSAuthV4Signer>(ALLOCATION_TAG, credentialsProvider,
+ SERVICE_NAME, Aws::Region::ComputeSignerRegion(clientConfiguration.region), signPayloads, false),
+ Aws::MakeShared<S3ErrorMarshaller>(ALLOCATION_TAG)),
+ m_executor(clientConfiguration.executor), m_useVirtualAddressing(useVirtualAddressing), m_USEast1RegionalEndpointOption(USEast1RegionalEndPointOption)
+{
+ init(clientConfiguration);
+}
+
+S3Client::~S3Client()
+{
+}
+
+void S3Client::init(const ClientConfiguration& config)
+{
+ SetServiceClientName("S3");
+ LoadS3SpecificConfig(config.profileName);
+ m_configScheme = SchemeMapper::ToString(config.scheme);
+ m_scheme = m_configScheme;
+ m_useDualStack = config.useDualStack;
+ if (config.endpointOverride.empty())
+ {
+ m_useCustomEndpoint = false;
+ m_baseUri = S3Endpoint::ForRegion(config.region, config.useDualStack, m_USEast1RegionalEndpointOption == Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::REGIONAL);
+ }
+ else
+ {
+ m_useCustomEndpoint = true;
+ OverrideEndpoint(config.endpointOverride);
+ }
+}
+
+void S3Client::OverrideEndpoint(const Aws::String& endpoint)
+{
+ if (endpoint.compare(0, 7, "http://") == 0)
+ {
+ m_scheme = "http";
+ m_baseUri = endpoint.substr(7);
+ }
+ else if (endpoint.compare(0, 8, "https://") == 0)
+ {
+ m_scheme = "https";
+ m_baseUri = endpoint.substr(8);
+ }
+ else
+ {
+ m_scheme = m_configScheme;
+ m_baseUri = endpoint;
+ }
+}
+
+AbortMultipartUploadOutcome S3Client::AbortMultipartUpload(const AbortMultipartUploadRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("AbortMultipartUpload", "Required field: Bucket, is not set");
+ return AbortMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("AbortMultipartUpload", "Required field: Key, is not set");
+ return AbortMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ if (!request.UploadIdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("AbortMultipartUpload", "Required field: UploadId, is not set");
+ return AbortMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [UploadId]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return AbortMultipartUploadOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return AbortMultipartUploadOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+AbortMultipartUploadOutcomeCallable S3Client::AbortMultipartUploadCallable(const AbortMultipartUploadRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< AbortMultipartUploadOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->AbortMultipartUpload(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::AbortMultipartUploadAsync(const AbortMultipartUploadRequest& request, const AbortMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->AbortMultipartUploadAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::AbortMultipartUploadAsyncHelper(const AbortMultipartUploadRequest& request, const AbortMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, AbortMultipartUpload(request), context);
+}
+
+CompleteMultipartUploadOutcome S3Client::CompleteMultipartUpload(const CompleteMultipartUploadRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CompleteMultipartUpload", "Required field: Bucket, is not set");
+ return CompleteMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CompleteMultipartUpload", "Required field: Key, is not set");
+ return CompleteMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ if (!request.UploadIdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CompleteMultipartUpload", "Required field: UploadId, is not set");
+ return CompleteMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [UploadId]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return CompleteMultipartUploadOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return CompleteMultipartUploadOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_POST, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+CompleteMultipartUploadOutcomeCallable S3Client::CompleteMultipartUploadCallable(const CompleteMultipartUploadRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< CompleteMultipartUploadOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->CompleteMultipartUpload(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::CompleteMultipartUploadAsync(const CompleteMultipartUploadRequest& request, const CompleteMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->CompleteMultipartUploadAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::CompleteMultipartUploadAsyncHelper(const CompleteMultipartUploadRequest& request, const CompleteMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, CompleteMultipartUpload(request), context);
+}
+
+CopyObjectOutcome S3Client::CopyObject(const CopyObjectRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CopyObject", "Required field: Bucket, is not set");
+ return CopyObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.CopySourceHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CopyObject", "Required field: CopySource, is not set");
+ return CopyObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [CopySource]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CopyObject", "Required field: Key, is not set");
+ return CopyObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return CopyObjectOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return CopyObjectOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+CopyObjectOutcomeCallable S3Client::CopyObjectCallable(const CopyObjectRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< CopyObjectOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->CopyObject(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::CopyObjectAsync(const CopyObjectRequest& request, const CopyObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->CopyObjectAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::CopyObjectAsyncHelper(const CopyObjectRequest& request, const CopyObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, CopyObject(request), context);
+}
+
+CreateBucketOutcome S3Client::CreateBucket(const CreateBucketRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CreateBucket", "Required field: Bucket, is not set");
+ return CreateBucketOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString();
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return CreateBucketOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetBucket();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return CreateBucketOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+CreateBucketOutcomeCallable S3Client::CreateBucketCallable(const CreateBucketRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< CreateBucketOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->CreateBucket(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::CreateBucketAsync(const CreateBucketRequest& request, const CreateBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->CreateBucketAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::CreateBucketAsyncHelper(const CreateBucketRequest& request, const CreateBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, CreateBucket(request), context);
+}
+
+CreateMultipartUploadOutcome S3Client::CreateMultipartUpload(const CreateMultipartUploadRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CreateMultipartUpload", "Required field: Bucket, is not set");
+ return CreateMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("CreateMultipartUpload", "Required field: Key, is not set");
+ return CreateMultipartUploadOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return CreateMultipartUploadOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?uploads");
+ uri.SetQueryString(ss.str());
+ return CreateMultipartUploadOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_POST, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+CreateMultipartUploadOutcomeCallable S3Client::CreateMultipartUploadCallable(const CreateMultipartUploadRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< CreateMultipartUploadOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->CreateMultipartUpload(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::CreateMultipartUploadAsync(const CreateMultipartUploadRequest& request, const CreateMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->CreateMultipartUploadAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::CreateMultipartUploadAsyncHelper(const CreateMultipartUploadRequest& request, const CreateMultipartUploadResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, CreateMultipartUpload(request), context);
+}
+
+DeleteBucketOutcome S3Client::DeleteBucket(const DeleteBucketRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucket", "Required field: Bucket, is not set");
+ return DeleteBucketOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ uri.SetPath(uri.GetPath() + ss.str());
+ return DeleteBucketOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketOutcomeCallable S3Client::DeleteBucketCallable(const DeleteBucketRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucket(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketAsync(const DeleteBucketRequest& request, const DeleteBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketAsyncHelper(const DeleteBucketRequest& request, const DeleteBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucket(request), context);
+}
+
+DeleteBucketAnalyticsConfigurationOutcome S3Client::DeleteBucketAnalyticsConfiguration(const DeleteBucketAnalyticsConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketAnalyticsConfiguration", "Required field: Bucket, is not set");
+ return DeleteBucketAnalyticsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketAnalyticsConfiguration", "Required field: Id, is not set");
+ return DeleteBucketAnalyticsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketAnalyticsConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?analytics");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketAnalyticsConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketAnalyticsConfigurationOutcomeCallable S3Client::DeleteBucketAnalyticsConfigurationCallable(const DeleteBucketAnalyticsConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketAnalyticsConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketAnalyticsConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketAnalyticsConfigurationAsync(const DeleteBucketAnalyticsConfigurationRequest& request, const DeleteBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketAnalyticsConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketAnalyticsConfigurationAsyncHelper(const DeleteBucketAnalyticsConfigurationRequest& request, const DeleteBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketAnalyticsConfiguration(request), context);
+}
+
+DeleteBucketCorsOutcome S3Client::DeleteBucketCors(const DeleteBucketCorsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketCors", "Required field: Bucket, is not set");
+ return DeleteBucketCorsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketCorsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?cors");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketCorsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketCorsOutcomeCallable S3Client::DeleteBucketCorsCallable(const DeleteBucketCorsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketCorsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketCors(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketCorsAsync(const DeleteBucketCorsRequest& request, const DeleteBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketCorsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketCorsAsyncHelper(const DeleteBucketCorsRequest& request, const DeleteBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketCors(request), context);
+}
+
+DeleteBucketEncryptionOutcome S3Client::DeleteBucketEncryption(const DeleteBucketEncryptionRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketEncryption", "Required field: Bucket, is not set");
+ return DeleteBucketEncryptionOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketEncryptionOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?encryption");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketEncryptionOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketEncryptionOutcomeCallable S3Client::DeleteBucketEncryptionCallable(const DeleteBucketEncryptionRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketEncryptionOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketEncryption(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketEncryptionAsync(const DeleteBucketEncryptionRequest& request, const DeleteBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketEncryptionAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketEncryptionAsyncHelper(const DeleteBucketEncryptionRequest& request, const DeleteBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketEncryption(request), context);
+}
+
+DeleteBucketIntelligentTieringConfigurationOutcome S3Client::DeleteBucketIntelligentTieringConfiguration(const DeleteBucketIntelligentTieringConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketIntelligentTieringConfiguration", "Required field: Bucket, is not set");
+ return DeleteBucketIntelligentTieringConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketIntelligentTieringConfiguration", "Required field: Id, is not set");
+ return DeleteBucketIntelligentTieringConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketIntelligentTieringConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?intelligent-tiering");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketIntelligentTieringConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketIntelligentTieringConfigurationOutcomeCallable S3Client::DeleteBucketIntelligentTieringConfigurationCallable(const DeleteBucketIntelligentTieringConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketIntelligentTieringConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketIntelligentTieringConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketIntelligentTieringConfigurationAsync(const DeleteBucketIntelligentTieringConfigurationRequest& request, const DeleteBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketIntelligentTieringConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketIntelligentTieringConfigurationAsyncHelper(const DeleteBucketIntelligentTieringConfigurationRequest& request, const DeleteBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketIntelligentTieringConfiguration(request), context);
+}
+
+DeleteBucketInventoryConfigurationOutcome S3Client::DeleteBucketInventoryConfiguration(const DeleteBucketInventoryConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketInventoryConfiguration", "Required field: Bucket, is not set");
+ return DeleteBucketInventoryConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketInventoryConfiguration", "Required field: Id, is not set");
+ return DeleteBucketInventoryConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketInventoryConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?inventory");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketInventoryConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketInventoryConfigurationOutcomeCallable S3Client::DeleteBucketInventoryConfigurationCallable(const DeleteBucketInventoryConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketInventoryConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketInventoryConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketInventoryConfigurationAsync(const DeleteBucketInventoryConfigurationRequest& request, const DeleteBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketInventoryConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketInventoryConfigurationAsyncHelper(const DeleteBucketInventoryConfigurationRequest& request, const DeleteBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketInventoryConfiguration(request), context);
+}
+
+DeleteBucketLifecycleOutcome S3Client::DeleteBucketLifecycle(const DeleteBucketLifecycleRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketLifecycle", "Required field: Bucket, is not set");
+ return DeleteBucketLifecycleOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketLifecycleOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?lifecycle");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketLifecycleOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketLifecycleOutcomeCallable S3Client::DeleteBucketLifecycleCallable(const DeleteBucketLifecycleRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketLifecycleOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketLifecycle(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketLifecycleAsync(const DeleteBucketLifecycleRequest& request, const DeleteBucketLifecycleResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketLifecycleAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketLifecycleAsyncHelper(const DeleteBucketLifecycleRequest& request, const DeleteBucketLifecycleResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketLifecycle(request), context);
+}
+
+DeleteBucketMetricsConfigurationOutcome S3Client::DeleteBucketMetricsConfiguration(const DeleteBucketMetricsConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketMetricsConfiguration", "Required field: Bucket, is not set");
+ return DeleteBucketMetricsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketMetricsConfiguration", "Required field: Id, is not set");
+ return DeleteBucketMetricsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketMetricsConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?metrics");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketMetricsConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketMetricsConfigurationOutcomeCallable S3Client::DeleteBucketMetricsConfigurationCallable(const DeleteBucketMetricsConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketMetricsConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketMetricsConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketMetricsConfigurationAsync(const DeleteBucketMetricsConfigurationRequest& request, const DeleteBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketMetricsConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketMetricsConfigurationAsyncHelper(const DeleteBucketMetricsConfigurationRequest& request, const DeleteBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketMetricsConfiguration(request), context);
+}
+
+DeleteBucketOwnershipControlsOutcome S3Client::DeleteBucketOwnershipControls(const DeleteBucketOwnershipControlsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketOwnershipControls", "Required field: Bucket, is not set");
+ return DeleteBucketOwnershipControlsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketOwnershipControlsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?ownershipControls");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketOwnershipControlsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketOwnershipControlsOutcomeCallable S3Client::DeleteBucketOwnershipControlsCallable(const DeleteBucketOwnershipControlsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketOwnershipControlsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketOwnershipControls(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketOwnershipControlsAsync(const DeleteBucketOwnershipControlsRequest& request, const DeleteBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketOwnershipControlsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketOwnershipControlsAsyncHelper(const DeleteBucketOwnershipControlsRequest& request, const DeleteBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketOwnershipControls(request), context);
+}
+
+DeleteBucketPolicyOutcome S3Client::DeleteBucketPolicy(const DeleteBucketPolicyRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketPolicy", "Required field: Bucket, is not set");
+ return DeleteBucketPolicyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketPolicyOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?policy");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketPolicyOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketPolicyOutcomeCallable S3Client::DeleteBucketPolicyCallable(const DeleteBucketPolicyRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketPolicyOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketPolicy(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketPolicyAsync(const DeleteBucketPolicyRequest& request, const DeleteBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketPolicyAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketPolicyAsyncHelper(const DeleteBucketPolicyRequest& request, const DeleteBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketPolicy(request), context);
+}
+
+DeleteBucketReplicationOutcome S3Client::DeleteBucketReplication(const DeleteBucketReplicationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketReplication", "Required field: Bucket, is not set");
+ return DeleteBucketReplicationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketReplicationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?replication");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketReplicationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketReplicationOutcomeCallable S3Client::DeleteBucketReplicationCallable(const DeleteBucketReplicationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketReplicationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketReplication(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketReplicationAsync(const DeleteBucketReplicationRequest& request, const DeleteBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketReplicationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketReplicationAsyncHelper(const DeleteBucketReplicationRequest& request, const DeleteBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketReplication(request), context);
+}
+
+DeleteBucketTaggingOutcome S3Client::DeleteBucketTagging(const DeleteBucketTaggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketTagging", "Required field: Bucket, is not set");
+ return DeleteBucketTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketTaggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?tagging");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketTaggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketTaggingOutcomeCallable S3Client::DeleteBucketTaggingCallable(const DeleteBucketTaggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketTaggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketTagging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketTaggingAsync(const DeleteBucketTaggingRequest& request, const DeleteBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketTaggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketTaggingAsyncHelper(const DeleteBucketTaggingRequest& request, const DeleteBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketTagging(request), context);
+}
+
+DeleteBucketWebsiteOutcome S3Client::DeleteBucketWebsite(const DeleteBucketWebsiteRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteBucketWebsite", "Required field: Bucket, is not set");
+ return DeleteBucketWebsiteOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteBucketWebsiteOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?website");
+ uri.SetQueryString(ss.str());
+ return DeleteBucketWebsiteOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteBucketWebsiteOutcomeCallable S3Client::DeleteBucketWebsiteCallable(const DeleteBucketWebsiteRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteBucketWebsiteOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteBucketWebsite(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteBucketWebsiteAsync(const DeleteBucketWebsiteRequest& request, const DeleteBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteBucketWebsiteAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteBucketWebsiteAsyncHelper(const DeleteBucketWebsiteRequest& request, const DeleteBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteBucketWebsite(request), context);
+}
+
+DeleteObjectOutcome S3Client::DeleteObject(const DeleteObjectRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteObject", "Required field: Bucket, is not set");
+ return DeleteObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteObject", "Required field: Key, is not set");
+ return DeleteObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteObjectOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return DeleteObjectOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteObjectOutcomeCallable S3Client::DeleteObjectCallable(const DeleteObjectRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteObjectOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteObject(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteObjectAsync(const DeleteObjectRequest& request, const DeleteObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteObjectAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteObjectAsyncHelper(const DeleteObjectRequest& request, const DeleteObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteObject(request), context);
+}
+
+DeleteObjectTaggingOutcome S3Client::DeleteObjectTagging(const DeleteObjectTaggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteObjectTagging", "Required field: Bucket, is not set");
+ return DeleteObjectTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteObjectTagging", "Required field: Key, is not set");
+ return DeleteObjectTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteObjectTaggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?tagging");
+ uri.SetQueryString(ss.str());
+ return DeleteObjectTaggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteObjectTaggingOutcomeCallable S3Client::DeleteObjectTaggingCallable(const DeleteObjectTaggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteObjectTaggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteObjectTagging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteObjectTaggingAsync(const DeleteObjectTaggingRequest& request, const DeleteObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteObjectTaggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteObjectTaggingAsyncHelper(const DeleteObjectTaggingRequest& request, const DeleteObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteObjectTagging(request), context);
+}
+
+DeleteObjectsOutcome S3Client::DeleteObjects(const DeleteObjectsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeleteObjects", "Required field: Bucket, is not set");
+ return DeleteObjectsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeleteObjectsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?delete");
+ uri.SetQueryString(ss.str());
+ return DeleteObjectsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_POST, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeleteObjectsOutcomeCallable S3Client::DeleteObjectsCallable(const DeleteObjectsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeleteObjectsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeleteObjects(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeleteObjectsAsync(const DeleteObjectsRequest& request, const DeleteObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeleteObjectsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeleteObjectsAsyncHelper(const DeleteObjectsRequest& request, const DeleteObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeleteObjects(request), context);
+}
+
+DeletePublicAccessBlockOutcome S3Client::DeletePublicAccessBlock(const DeletePublicAccessBlockRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("DeletePublicAccessBlock", "Required field: Bucket, is not set");
+ return DeletePublicAccessBlockOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return DeletePublicAccessBlockOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?publicAccessBlock");
+ uri.SetQueryString(ss.str());
+ return DeletePublicAccessBlockOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_DELETE, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+DeletePublicAccessBlockOutcomeCallable S3Client::DeletePublicAccessBlockCallable(const DeletePublicAccessBlockRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< DeletePublicAccessBlockOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->DeletePublicAccessBlock(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::DeletePublicAccessBlockAsync(const DeletePublicAccessBlockRequest& request, const DeletePublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->DeletePublicAccessBlockAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::DeletePublicAccessBlockAsyncHelper(const DeletePublicAccessBlockRequest& request, const DeletePublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, DeletePublicAccessBlock(request), context);
+}
+
+GetBucketAccelerateConfigurationOutcome S3Client::GetBucketAccelerateConfiguration(const GetBucketAccelerateConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketAccelerateConfiguration", "Required field: Bucket, is not set");
+ return GetBucketAccelerateConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketAccelerateConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?accelerate");
+ uri.SetQueryString(ss.str());
+ return GetBucketAccelerateConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketAccelerateConfigurationOutcomeCallable S3Client::GetBucketAccelerateConfigurationCallable(const GetBucketAccelerateConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketAccelerateConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketAccelerateConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketAccelerateConfigurationAsync(const GetBucketAccelerateConfigurationRequest& request, const GetBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketAccelerateConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketAccelerateConfigurationAsyncHelper(const GetBucketAccelerateConfigurationRequest& request, const GetBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketAccelerateConfiguration(request), context);
+}
+
+GetBucketAclOutcome S3Client::GetBucketAcl(const GetBucketAclRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketAcl", "Required field: Bucket, is not set");
+ return GetBucketAclOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketAclOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?acl");
+ uri.SetQueryString(ss.str());
+ return GetBucketAclOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketAclOutcomeCallable S3Client::GetBucketAclCallable(const GetBucketAclRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketAclOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketAcl(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketAclAsync(const GetBucketAclRequest& request, const GetBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketAclAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketAclAsyncHelper(const GetBucketAclRequest& request, const GetBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketAcl(request), context);
+}
+
+GetBucketAnalyticsConfigurationOutcome S3Client::GetBucketAnalyticsConfiguration(const GetBucketAnalyticsConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketAnalyticsConfiguration", "Required field: Bucket, is not set");
+ return GetBucketAnalyticsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketAnalyticsConfiguration", "Required field: Id, is not set");
+ return GetBucketAnalyticsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketAnalyticsConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?analytics");
+ uri.SetQueryString(ss.str());
+ return GetBucketAnalyticsConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketAnalyticsConfigurationOutcomeCallable S3Client::GetBucketAnalyticsConfigurationCallable(const GetBucketAnalyticsConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketAnalyticsConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketAnalyticsConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketAnalyticsConfigurationAsync(const GetBucketAnalyticsConfigurationRequest& request, const GetBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketAnalyticsConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketAnalyticsConfigurationAsyncHelper(const GetBucketAnalyticsConfigurationRequest& request, const GetBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketAnalyticsConfiguration(request), context);
+}
+
+GetBucketCorsOutcome S3Client::GetBucketCors(const GetBucketCorsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketCors", "Required field: Bucket, is not set");
+ return GetBucketCorsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketCorsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?cors");
+ uri.SetQueryString(ss.str());
+ return GetBucketCorsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketCorsOutcomeCallable S3Client::GetBucketCorsCallable(const GetBucketCorsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketCorsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketCors(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketCorsAsync(const GetBucketCorsRequest& request, const GetBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketCorsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketCorsAsyncHelper(const GetBucketCorsRequest& request, const GetBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketCors(request), context);
+}
+
+GetBucketEncryptionOutcome S3Client::GetBucketEncryption(const GetBucketEncryptionRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketEncryption", "Required field: Bucket, is not set");
+ return GetBucketEncryptionOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketEncryptionOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?encryption");
+ uri.SetQueryString(ss.str());
+ return GetBucketEncryptionOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketEncryptionOutcomeCallable S3Client::GetBucketEncryptionCallable(const GetBucketEncryptionRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketEncryptionOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketEncryption(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketEncryptionAsync(const GetBucketEncryptionRequest& request, const GetBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketEncryptionAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketEncryptionAsyncHelper(const GetBucketEncryptionRequest& request, const GetBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketEncryption(request), context);
+}
+
+GetBucketIntelligentTieringConfigurationOutcome S3Client::GetBucketIntelligentTieringConfiguration(const GetBucketIntelligentTieringConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketIntelligentTieringConfiguration", "Required field: Bucket, is not set");
+ return GetBucketIntelligentTieringConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketIntelligentTieringConfiguration", "Required field: Id, is not set");
+ return GetBucketIntelligentTieringConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketIntelligentTieringConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?intelligent-tiering");
+ uri.SetQueryString(ss.str());
+ return GetBucketIntelligentTieringConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketIntelligentTieringConfigurationOutcomeCallable S3Client::GetBucketIntelligentTieringConfigurationCallable(const GetBucketIntelligentTieringConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketIntelligentTieringConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketIntelligentTieringConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketIntelligentTieringConfigurationAsync(const GetBucketIntelligentTieringConfigurationRequest& request, const GetBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketIntelligentTieringConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketIntelligentTieringConfigurationAsyncHelper(const GetBucketIntelligentTieringConfigurationRequest& request, const GetBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketIntelligentTieringConfiguration(request), context);
+}
+
+GetBucketInventoryConfigurationOutcome S3Client::GetBucketInventoryConfiguration(const GetBucketInventoryConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketInventoryConfiguration", "Required field: Bucket, is not set");
+ return GetBucketInventoryConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketInventoryConfiguration", "Required field: Id, is not set");
+ return GetBucketInventoryConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketInventoryConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?inventory");
+ uri.SetQueryString(ss.str());
+ return GetBucketInventoryConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketInventoryConfigurationOutcomeCallable S3Client::GetBucketInventoryConfigurationCallable(const GetBucketInventoryConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketInventoryConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketInventoryConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketInventoryConfigurationAsync(const GetBucketInventoryConfigurationRequest& request, const GetBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketInventoryConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketInventoryConfigurationAsyncHelper(const GetBucketInventoryConfigurationRequest& request, const GetBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketInventoryConfiguration(request), context);
+}
+
+GetBucketLifecycleConfigurationOutcome S3Client::GetBucketLifecycleConfiguration(const GetBucketLifecycleConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketLifecycleConfiguration", "Required field: Bucket, is not set");
+ return GetBucketLifecycleConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketLifecycleConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?lifecycle");
+ uri.SetQueryString(ss.str());
+ return GetBucketLifecycleConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketLifecycleConfigurationOutcomeCallable S3Client::GetBucketLifecycleConfigurationCallable(const GetBucketLifecycleConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketLifecycleConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketLifecycleConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketLifecycleConfigurationAsync(const GetBucketLifecycleConfigurationRequest& request, const GetBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketLifecycleConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketLifecycleConfigurationAsyncHelper(const GetBucketLifecycleConfigurationRequest& request, const GetBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketLifecycleConfiguration(request), context);
+}
+
+GetBucketLocationOutcome S3Client::GetBucketLocation(const GetBucketLocationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketLocation", "Required field: Bucket, is not set");
+ return GetBucketLocationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketLocationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?location");
+ uri.SetQueryString(ss.str());
+ return GetBucketLocationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketLocationOutcomeCallable S3Client::GetBucketLocationCallable(const GetBucketLocationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketLocationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketLocation(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketLocationAsync(const GetBucketLocationRequest& request, const GetBucketLocationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketLocationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketLocationAsyncHelper(const GetBucketLocationRequest& request, const GetBucketLocationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketLocation(request), context);
+}
+
+GetBucketLoggingOutcome S3Client::GetBucketLogging(const GetBucketLoggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketLogging", "Required field: Bucket, is not set");
+ return GetBucketLoggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketLoggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?logging");
+ uri.SetQueryString(ss.str());
+ return GetBucketLoggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketLoggingOutcomeCallable S3Client::GetBucketLoggingCallable(const GetBucketLoggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketLoggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketLogging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketLoggingAsync(const GetBucketLoggingRequest& request, const GetBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketLoggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketLoggingAsyncHelper(const GetBucketLoggingRequest& request, const GetBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketLogging(request), context);
+}
+
+GetBucketMetricsConfigurationOutcome S3Client::GetBucketMetricsConfiguration(const GetBucketMetricsConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketMetricsConfiguration", "Required field: Bucket, is not set");
+ return GetBucketMetricsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketMetricsConfiguration", "Required field: Id, is not set");
+ return GetBucketMetricsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketMetricsConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?metrics");
+ uri.SetQueryString(ss.str());
+ return GetBucketMetricsConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketMetricsConfigurationOutcomeCallable S3Client::GetBucketMetricsConfigurationCallable(const GetBucketMetricsConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketMetricsConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketMetricsConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketMetricsConfigurationAsync(const GetBucketMetricsConfigurationRequest& request, const GetBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketMetricsConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketMetricsConfigurationAsyncHelper(const GetBucketMetricsConfigurationRequest& request, const GetBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketMetricsConfiguration(request), context);
+}
+
+GetBucketNotificationConfigurationOutcome S3Client::GetBucketNotificationConfiguration(const GetBucketNotificationConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketNotificationConfiguration", "Required field: Bucket, is not set");
+ return GetBucketNotificationConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketNotificationConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?notification");
+ uri.SetQueryString(ss.str());
+ return GetBucketNotificationConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketNotificationConfigurationOutcomeCallable S3Client::GetBucketNotificationConfigurationCallable(const GetBucketNotificationConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketNotificationConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketNotificationConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketNotificationConfigurationAsync(const GetBucketNotificationConfigurationRequest& request, const GetBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketNotificationConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketNotificationConfigurationAsyncHelper(const GetBucketNotificationConfigurationRequest& request, const GetBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketNotificationConfiguration(request), context);
+}
+
+GetBucketOwnershipControlsOutcome S3Client::GetBucketOwnershipControls(const GetBucketOwnershipControlsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketOwnershipControls", "Required field: Bucket, is not set");
+ return GetBucketOwnershipControlsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketOwnershipControlsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?ownershipControls");
+ uri.SetQueryString(ss.str());
+ return GetBucketOwnershipControlsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketOwnershipControlsOutcomeCallable S3Client::GetBucketOwnershipControlsCallable(const GetBucketOwnershipControlsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketOwnershipControlsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketOwnershipControls(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketOwnershipControlsAsync(const GetBucketOwnershipControlsRequest& request, const GetBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketOwnershipControlsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketOwnershipControlsAsyncHelper(const GetBucketOwnershipControlsRequest& request, const GetBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketOwnershipControls(request), context);
+}
+
+GetBucketPolicyOutcome S3Client::GetBucketPolicy(const GetBucketPolicyRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketPolicy", "Required field: Bucket, is not set");
+ return GetBucketPolicyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketPolicyOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?policy");
+ uri.SetQueryString(ss.str());
+ return GetBucketPolicyOutcome(MakeRequestWithUnparsedResponse(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketPolicyOutcomeCallable S3Client::GetBucketPolicyCallable(const GetBucketPolicyRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketPolicyOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketPolicy(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketPolicyAsync(const GetBucketPolicyRequest& request, const GetBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketPolicyAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketPolicyAsyncHelper(const GetBucketPolicyRequest& request, const GetBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketPolicy(request), context);
+}
+
+GetBucketPolicyStatusOutcome S3Client::GetBucketPolicyStatus(const GetBucketPolicyStatusRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketPolicyStatus", "Required field: Bucket, is not set");
+ return GetBucketPolicyStatusOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketPolicyStatusOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?policyStatus");
+ uri.SetQueryString(ss.str());
+ return GetBucketPolicyStatusOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketPolicyStatusOutcomeCallable S3Client::GetBucketPolicyStatusCallable(const GetBucketPolicyStatusRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketPolicyStatusOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketPolicyStatus(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketPolicyStatusAsync(const GetBucketPolicyStatusRequest& request, const GetBucketPolicyStatusResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketPolicyStatusAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketPolicyStatusAsyncHelper(const GetBucketPolicyStatusRequest& request, const GetBucketPolicyStatusResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketPolicyStatus(request), context);
+}
+
+GetBucketReplicationOutcome S3Client::GetBucketReplication(const GetBucketReplicationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketReplication", "Required field: Bucket, is not set");
+ return GetBucketReplicationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketReplicationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?replication");
+ uri.SetQueryString(ss.str());
+ return GetBucketReplicationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketReplicationOutcomeCallable S3Client::GetBucketReplicationCallable(const GetBucketReplicationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketReplicationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketReplication(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketReplicationAsync(const GetBucketReplicationRequest& request, const GetBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketReplicationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketReplicationAsyncHelper(const GetBucketReplicationRequest& request, const GetBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketReplication(request), context);
+}
+
+GetBucketRequestPaymentOutcome S3Client::GetBucketRequestPayment(const GetBucketRequestPaymentRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketRequestPayment", "Required field: Bucket, is not set");
+ return GetBucketRequestPaymentOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketRequestPaymentOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?requestPayment");
+ uri.SetQueryString(ss.str());
+ return GetBucketRequestPaymentOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketRequestPaymentOutcomeCallable S3Client::GetBucketRequestPaymentCallable(const GetBucketRequestPaymentRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketRequestPaymentOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketRequestPayment(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketRequestPaymentAsync(const GetBucketRequestPaymentRequest& request, const GetBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketRequestPaymentAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketRequestPaymentAsyncHelper(const GetBucketRequestPaymentRequest& request, const GetBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketRequestPayment(request), context);
+}
+
+GetBucketTaggingOutcome S3Client::GetBucketTagging(const GetBucketTaggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketTagging", "Required field: Bucket, is not set");
+ return GetBucketTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketTaggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?tagging");
+ uri.SetQueryString(ss.str());
+ return GetBucketTaggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketTaggingOutcomeCallable S3Client::GetBucketTaggingCallable(const GetBucketTaggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketTaggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketTagging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketTaggingAsync(const GetBucketTaggingRequest& request, const GetBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketTaggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketTaggingAsyncHelper(const GetBucketTaggingRequest& request, const GetBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketTagging(request), context);
+}
+
+GetBucketVersioningOutcome S3Client::GetBucketVersioning(const GetBucketVersioningRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketVersioning", "Required field: Bucket, is not set");
+ return GetBucketVersioningOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketVersioningOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?versioning");
+ uri.SetQueryString(ss.str());
+ return GetBucketVersioningOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketVersioningOutcomeCallable S3Client::GetBucketVersioningCallable(const GetBucketVersioningRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketVersioningOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketVersioning(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketVersioningAsync(const GetBucketVersioningRequest& request, const GetBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketVersioningAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketVersioningAsyncHelper(const GetBucketVersioningRequest& request, const GetBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketVersioning(request), context);
+}
+
+GetBucketWebsiteOutcome S3Client::GetBucketWebsite(const GetBucketWebsiteRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetBucketWebsite", "Required field: Bucket, is not set");
+ return GetBucketWebsiteOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetBucketWebsiteOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?website");
+ uri.SetQueryString(ss.str());
+ return GetBucketWebsiteOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetBucketWebsiteOutcomeCallable S3Client::GetBucketWebsiteCallable(const GetBucketWebsiteRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetBucketWebsiteOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetBucketWebsite(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetBucketWebsiteAsync(const GetBucketWebsiteRequest& request, const GetBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetBucketWebsiteAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetBucketWebsiteAsyncHelper(const GetBucketWebsiteRequest& request, const GetBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetBucketWebsite(request), context);
+}
+
+GetObjectOutcome S3Client::GetObject(const GetObjectRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObject", "Required field: Bucket, is not set");
+ return GetObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObject", "Required field: Key, is not set");
+ return GetObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetObjectOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return GetObjectOutcome(MakeRequestWithUnparsedResponse(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetObjectOutcomeCallable S3Client::GetObjectCallable(const GetObjectRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetObjectOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetObject(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetObjectAsync(const GetObjectRequest& request, const GetObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetObjectAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetObjectAsyncHelper(const GetObjectRequest& request, const GetObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetObject(request), context);
+}
+
+GetObjectAclOutcome S3Client::GetObjectAcl(const GetObjectAclRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectAcl", "Required field: Bucket, is not set");
+ return GetObjectAclOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectAcl", "Required field: Key, is not set");
+ return GetObjectAclOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetObjectAclOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?acl");
+ uri.SetQueryString(ss.str());
+ return GetObjectAclOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetObjectAclOutcomeCallable S3Client::GetObjectAclCallable(const GetObjectAclRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetObjectAclOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetObjectAcl(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetObjectAclAsync(const GetObjectAclRequest& request, const GetObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetObjectAclAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetObjectAclAsyncHelper(const GetObjectAclRequest& request, const GetObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetObjectAcl(request), context);
+}
+
+GetObjectLegalHoldOutcome S3Client::GetObjectLegalHold(const GetObjectLegalHoldRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectLegalHold", "Required field: Bucket, is not set");
+ return GetObjectLegalHoldOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectLegalHold", "Required field: Key, is not set");
+ return GetObjectLegalHoldOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetObjectLegalHoldOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?legal-hold");
+ uri.SetQueryString(ss.str());
+ return GetObjectLegalHoldOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetObjectLegalHoldOutcomeCallable S3Client::GetObjectLegalHoldCallable(const GetObjectLegalHoldRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetObjectLegalHoldOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetObjectLegalHold(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetObjectLegalHoldAsync(const GetObjectLegalHoldRequest& request, const GetObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetObjectLegalHoldAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetObjectLegalHoldAsyncHelper(const GetObjectLegalHoldRequest& request, const GetObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetObjectLegalHold(request), context);
+}
+
+GetObjectLockConfigurationOutcome S3Client::GetObjectLockConfiguration(const GetObjectLockConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectLockConfiguration", "Required field: Bucket, is not set");
+ return GetObjectLockConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetObjectLockConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?object-lock");
+ uri.SetQueryString(ss.str());
+ return GetObjectLockConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetObjectLockConfigurationOutcomeCallable S3Client::GetObjectLockConfigurationCallable(const GetObjectLockConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetObjectLockConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetObjectLockConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetObjectLockConfigurationAsync(const GetObjectLockConfigurationRequest& request, const GetObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetObjectLockConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetObjectLockConfigurationAsyncHelper(const GetObjectLockConfigurationRequest& request, const GetObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetObjectLockConfiguration(request), context);
+}
+
+GetObjectRetentionOutcome S3Client::GetObjectRetention(const GetObjectRetentionRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectRetention", "Required field: Bucket, is not set");
+ return GetObjectRetentionOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectRetention", "Required field: Key, is not set");
+ return GetObjectRetentionOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetObjectRetentionOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?retention");
+ uri.SetQueryString(ss.str());
+ return GetObjectRetentionOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetObjectRetentionOutcomeCallable S3Client::GetObjectRetentionCallable(const GetObjectRetentionRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetObjectRetentionOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetObjectRetention(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetObjectRetentionAsync(const GetObjectRetentionRequest& request, const GetObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetObjectRetentionAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetObjectRetentionAsyncHelper(const GetObjectRetentionRequest& request, const GetObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetObjectRetention(request), context);
+}
+
+GetObjectTaggingOutcome S3Client::GetObjectTagging(const GetObjectTaggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectTagging", "Required field: Bucket, is not set");
+ return GetObjectTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectTagging", "Required field: Key, is not set");
+ return GetObjectTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetObjectTaggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?tagging");
+ uri.SetQueryString(ss.str());
+ return GetObjectTaggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetObjectTaggingOutcomeCallable S3Client::GetObjectTaggingCallable(const GetObjectTaggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetObjectTaggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetObjectTagging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetObjectTaggingAsync(const GetObjectTaggingRequest& request, const GetObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetObjectTaggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetObjectTaggingAsyncHelper(const GetObjectTaggingRequest& request, const GetObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetObjectTagging(request), context);
+}
+
+GetObjectTorrentOutcome S3Client::GetObjectTorrent(const GetObjectTorrentRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectTorrent", "Required field: Bucket, is not set");
+ return GetObjectTorrentOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetObjectTorrent", "Required field: Key, is not set");
+ return GetObjectTorrentOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetObjectTorrentOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?torrent");
+ uri.SetQueryString(ss.str());
+ return GetObjectTorrentOutcome(MakeRequestWithUnparsedResponse(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetObjectTorrentOutcomeCallable S3Client::GetObjectTorrentCallable(const GetObjectTorrentRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetObjectTorrentOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetObjectTorrent(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetObjectTorrentAsync(const GetObjectTorrentRequest& request, const GetObjectTorrentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetObjectTorrentAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetObjectTorrentAsyncHelper(const GetObjectTorrentRequest& request, const GetObjectTorrentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetObjectTorrent(request), context);
+}
+
+GetPublicAccessBlockOutcome S3Client::GetPublicAccessBlock(const GetPublicAccessBlockRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("GetPublicAccessBlock", "Required field: Bucket, is not set");
+ return GetPublicAccessBlockOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return GetPublicAccessBlockOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?publicAccessBlock");
+ uri.SetQueryString(ss.str());
+ return GetPublicAccessBlockOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+GetPublicAccessBlockOutcomeCallable S3Client::GetPublicAccessBlockCallable(const GetPublicAccessBlockRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< GetPublicAccessBlockOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->GetPublicAccessBlock(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::GetPublicAccessBlockAsync(const GetPublicAccessBlockRequest& request, const GetPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->GetPublicAccessBlockAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::GetPublicAccessBlockAsyncHelper(const GetPublicAccessBlockRequest& request, const GetPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, GetPublicAccessBlock(request), context);
+}
+
+HeadBucketOutcome S3Client::HeadBucket(const HeadBucketRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("HeadBucket", "Required field: Bucket, is not set");
+ return HeadBucketOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return HeadBucketOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ uri.SetPath(uri.GetPath() + ss.str());
+ return HeadBucketOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_HEAD, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+HeadBucketOutcomeCallable S3Client::HeadBucketCallable(const HeadBucketRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< HeadBucketOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->HeadBucket(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::HeadBucketAsync(const HeadBucketRequest& request, const HeadBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->HeadBucketAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::HeadBucketAsyncHelper(const HeadBucketRequest& request, const HeadBucketResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, HeadBucket(request), context);
+}
+
+HeadObjectOutcome S3Client::HeadObject(const HeadObjectRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("HeadObject", "Required field: Bucket, is not set");
+ return HeadObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("HeadObject", "Required field: Key, is not set");
+ return HeadObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return HeadObjectOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return HeadObjectOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_HEAD, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+HeadObjectOutcomeCallable S3Client::HeadObjectCallable(const HeadObjectRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< HeadObjectOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->HeadObject(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::HeadObjectAsync(const HeadObjectRequest& request, const HeadObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->HeadObjectAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::HeadObjectAsyncHelper(const HeadObjectRequest& request, const HeadObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, HeadObject(request), context);
+}
+
+ListBucketAnalyticsConfigurationsOutcome S3Client::ListBucketAnalyticsConfigurations(const ListBucketAnalyticsConfigurationsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListBucketAnalyticsConfigurations", "Required field: Bucket, is not set");
+ return ListBucketAnalyticsConfigurationsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListBucketAnalyticsConfigurationsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?analytics");
+ uri.SetQueryString(ss.str());
+ return ListBucketAnalyticsConfigurationsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListBucketAnalyticsConfigurationsOutcomeCallable S3Client::ListBucketAnalyticsConfigurationsCallable(const ListBucketAnalyticsConfigurationsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListBucketAnalyticsConfigurationsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListBucketAnalyticsConfigurations(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListBucketAnalyticsConfigurationsAsync(const ListBucketAnalyticsConfigurationsRequest& request, const ListBucketAnalyticsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListBucketAnalyticsConfigurationsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListBucketAnalyticsConfigurationsAsyncHelper(const ListBucketAnalyticsConfigurationsRequest& request, const ListBucketAnalyticsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListBucketAnalyticsConfigurations(request), context);
+}
+
+ListBucketIntelligentTieringConfigurationsOutcome S3Client::ListBucketIntelligentTieringConfigurations(const ListBucketIntelligentTieringConfigurationsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListBucketIntelligentTieringConfigurations", "Required field: Bucket, is not set");
+ return ListBucketIntelligentTieringConfigurationsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListBucketIntelligentTieringConfigurationsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?intelligent-tiering");
+ uri.SetQueryString(ss.str());
+ return ListBucketIntelligentTieringConfigurationsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListBucketIntelligentTieringConfigurationsOutcomeCallable S3Client::ListBucketIntelligentTieringConfigurationsCallable(const ListBucketIntelligentTieringConfigurationsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListBucketIntelligentTieringConfigurationsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListBucketIntelligentTieringConfigurations(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListBucketIntelligentTieringConfigurationsAsync(const ListBucketIntelligentTieringConfigurationsRequest& request, const ListBucketIntelligentTieringConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListBucketIntelligentTieringConfigurationsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListBucketIntelligentTieringConfigurationsAsyncHelper(const ListBucketIntelligentTieringConfigurationsRequest& request, const ListBucketIntelligentTieringConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListBucketIntelligentTieringConfigurations(request), context);
+}
+
+ListBucketInventoryConfigurationsOutcome S3Client::ListBucketInventoryConfigurations(const ListBucketInventoryConfigurationsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListBucketInventoryConfigurations", "Required field: Bucket, is not set");
+ return ListBucketInventoryConfigurationsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListBucketInventoryConfigurationsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?inventory");
+ uri.SetQueryString(ss.str());
+ return ListBucketInventoryConfigurationsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListBucketInventoryConfigurationsOutcomeCallable S3Client::ListBucketInventoryConfigurationsCallable(const ListBucketInventoryConfigurationsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListBucketInventoryConfigurationsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListBucketInventoryConfigurations(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListBucketInventoryConfigurationsAsync(const ListBucketInventoryConfigurationsRequest& request, const ListBucketInventoryConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListBucketInventoryConfigurationsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListBucketInventoryConfigurationsAsyncHelper(const ListBucketInventoryConfigurationsRequest& request, const ListBucketInventoryConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListBucketInventoryConfigurations(request), context);
+}
+
+ListBucketMetricsConfigurationsOutcome S3Client::ListBucketMetricsConfigurations(const ListBucketMetricsConfigurationsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListBucketMetricsConfigurations", "Required field: Bucket, is not set");
+ return ListBucketMetricsConfigurationsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListBucketMetricsConfigurationsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?metrics");
+ uri.SetQueryString(ss.str());
+ return ListBucketMetricsConfigurationsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListBucketMetricsConfigurationsOutcomeCallable S3Client::ListBucketMetricsConfigurationsCallable(const ListBucketMetricsConfigurationsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListBucketMetricsConfigurationsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListBucketMetricsConfigurations(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListBucketMetricsConfigurationsAsync(const ListBucketMetricsConfigurationsRequest& request, const ListBucketMetricsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListBucketMetricsConfigurationsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListBucketMetricsConfigurationsAsyncHelper(const ListBucketMetricsConfigurationsRequest& request, const ListBucketMetricsConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListBucketMetricsConfigurations(request), context);
+}
+
+ListBucketsOutcome S3Client::ListBuckets() const
+{
+ Aws::StringStream ss;
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString();
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListBucketsOutcome(computeEndpointOutcome.GetError());
+ }
+ ss << computeEndpointOutcome.GetResult().endpoint;
+ return ListBucketsOutcome(MakeRequest(ss.str(), Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, "ListBuckets", computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListBucketsOutcomeCallable S3Client::ListBucketsCallable() const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListBucketsOutcome() > >(ALLOCATION_TAG, [this](){ return this->ListBuckets(); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListBucketsAsync(const ListBucketsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, handler, context](){ this->ListBucketsAsyncHelper( handler, context ); } );
+}
+
+void S3Client::ListBucketsAsyncHelper(const ListBucketsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, ListBuckets(), context);
+}
+
+ListMultipartUploadsOutcome S3Client::ListMultipartUploads(const ListMultipartUploadsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListMultipartUploads", "Required field: Bucket, is not set");
+ return ListMultipartUploadsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListMultipartUploadsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?uploads");
+ uri.SetQueryString(ss.str());
+ return ListMultipartUploadsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListMultipartUploadsOutcomeCallable S3Client::ListMultipartUploadsCallable(const ListMultipartUploadsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListMultipartUploadsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListMultipartUploads(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListMultipartUploadsAsync(const ListMultipartUploadsRequest& request, const ListMultipartUploadsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListMultipartUploadsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListMultipartUploadsAsyncHelper(const ListMultipartUploadsRequest& request, const ListMultipartUploadsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListMultipartUploads(request), context);
+}
+
+ListObjectVersionsOutcome S3Client::ListObjectVersions(const ListObjectVersionsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListObjectVersions", "Required field: Bucket, is not set");
+ return ListObjectVersionsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListObjectVersionsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?versions");
+ uri.SetQueryString(ss.str());
+ return ListObjectVersionsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListObjectVersionsOutcomeCallable S3Client::ListObjectVersionsCallable(const ListObjectVersionsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListObjectVersionsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListObjectVersions(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListObjectVersionsAsync(const ListObjectVersionsRequest& request, const ListObjectVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListObjectVersionsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListObjectVersionsAsyncHelper(const ListObjectVersionsRequest& request, const ListObjectVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListObjectVersions(request), context);
+}
+
+ListObjectsOutcome S3Client::ListObjects(const ListObjectsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListObjects", "Required field: Bucket, is not set");
+ return ListObjectsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListObjectsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ uri.SetPath(uri.GetPath() + ss.str());
+ return ListObjectsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListObjectsOutcomeCallable S3Client::ListObjectsCallable(const ListObjectsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListObjectsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListObjects(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListObjectsAsync(const ListObjectsRequest& request, const ListObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListObjectsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListObjectsAsyncHelper(const ListObjectsRequest& request, const ListObjectsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListObjects(request), context);
+}
+
+ListObjectsV2Outcome S3Client::ListObjectsV2(const ListObjectsV2Request& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListObjectsV2", "Required field: Bucket, is not set");
+ return ListObjectsV2Outcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListObjectsV2Outcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?list-type=2");
+ uri.SetQueryString(ss.str());
+ return ListObjectsV2Outcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListObjectsV2OutcomeCallable S3Client::ListObjectsV2Callable(const ListObjectsV2Request& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListObjectsV2Outcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListObjectsV2(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListObjectsV2Async(const ListObjectsV2Request& request, const ListObjectsV2ResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListObjectsV2AsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListObjectsV2AsyncHelper(const ListObjectsV2Request& request, const ListObjectsV2ResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListObjectsV2(request), context);
+}
+
+ListPartsOutcome S3Client::ListParts(const ListPartsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListParts", "Required field: Bucket, is not set");
+ return ListPartsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListParts", "Required field: Key, is not set");
+ return ListPartsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ if (!request.UploadIdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("ListParts", "Required field: UploadId, is not set");
+ return ListPartsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [UploadId]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return ListPartsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return ListPartsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_GET, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+ListPartsOutcomeCallable S3Client::ListPartsCallable(const ListPartsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< ListPartsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->ListParts(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::ListPartsAsync(const ListPartsRequest& request, const ListPartsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->ListPartsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::ListPartsAsyncHelper(const ListPartsRequest& request, const ListPartsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, ListParts(request), context);
+}
+
+PutBucketAccelerateConfigurationOutcome S3Client::PutBucketAccelerateConfiguration(const PutBucketAccelerateConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketAccelerateConfiguration", "Required field: Bucket, is not set");
+ return PutBucketAccelerateConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketAccelerateConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?accelerate");
+ uri.SetQueryString(ss.str());
+ return PutBucketAccelerateConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketAccelerateConfigurationOutcomeCallable S3Client::PutBucketAccelerateConfigurationCallable(const PutBucketAccelerateConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketAccelerateConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketAccelerateConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketAccelerateConfigurationAsync(const PutBucketAccelerateConfigurationRequest& request, const PutBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketAccelerateConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketAccelerateConfigurationAsyncHelper(const PutBucketAccelerateConfigurationRequest& request, const PutBucketAccelerateConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketAccelerateConfiguration(request), context);
+}
+
+PutBucketAclOutcome S3Client::PutBucketAcl(const PutBucketAclRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketAcl", "Required field: Bucket, is not set");
+ return PutBucketAclOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketAclOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?acl");
+ uri.SetQueryString(ss.str());
+ return PutBucketAclOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketAclOutcomeCallable S3Client::PutBucketAclCallable(const PutBucketAclRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketAclOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketAcl(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketAclAsync(const PutBucketAclRequest& request, const PutBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketAclAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketAclAsyncHelper(const PutBucketAclRequest& request, const PutBucketAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketAcl(request), context);
+}
+
+PutBucketAnalyticsConfigurationOutcome S3Client::PutBucketAnalyticsConfiguration(const PutBucketAnalyticsConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketAnalyticsConfiguration", "Required field: Bucket, is not set");
+ return PutBucketAnalyticsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketAnalyticsConfiguration", "Required field: Id, is not set");
+ return PutBucketAnalyticsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketAnalyticsConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?analytics");
+ uri.SetQueryString(ss.str());
+ return PutBucketAnalyticsConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketAnalyticsConfigurationOutcomeCallable S3Client::PutBucketAnalyticsConfigurationCallable(const PutBucketAnalyticsConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketAnalyticsConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketAnalyticsConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketAnalyticsConfigurationAsync(const PutBucketAnalyticsConfigurationRequest& request, const PutBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketAnalyticsConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketAnalyticsConfigurationAsyncHelper(const PutBucketAnalyticsConfigurationRequest& request, const PutBucketAnalyticsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketAnalyticsConfiguration(request), context);
+}
+
+PutBucketCorsOutcome S3Client::PutBucketCors(const PutBucketCorsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketCors", "Required field: Bucket, is not set");
+ return PutBucketCorsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketCorsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?cors");
+ uri.SetQueryString(ss.str());
+ return PutBucketCorsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketCorsOutcomeCallable S3Client::PutBucketCorsCallable(const PutBucketCorsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketCorsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketCors(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketCorsAsync(const PutBucketCorsRequest& request, const PutBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketCorsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketCorsAsyncHelper(const PutBucketCorsRequest& request, const PutBucketCorsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketCors(request), context);
+}
+
+PutBucketEncryptionOutcome S3Client::PutBucketEncryption(const PutBucketEncryptionRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketEncryption", "Required field: Bucket, is not set");
+ return PutBucketEncryptionOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketEncryptionOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?encryption");
+ uri.SetQueryString(ss.str());
+ return PutBucketEncryptionOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketEncryptionOutcomeCallable S3Client::PutBucketEncryptionCallable(const PutBucketEncryptionRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketEncryptionOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketEncryption(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketEncryptionAsync(const PutBucketEncryptionRequest& request, const PutBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketEncryptionAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketEncryptionAsyncHelper(const PutBucketEncryptionRequest& request, const PutBucketEncryptionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketEncryption(request), context);
+}
+
+PutBucketIntelligentTieringConfigurationOutcome S3Client::PutBucketIntelligentTieringConfiguration(const PutBucketIntelligentTieringConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketIntelligentTieringConfiguration", "Required field: Bucket, is not set");
+ return PutBucketIntelligentTieringConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketIntelligentTieringConfiguration", "Required field: Id, is not set");
+ return PutBucketIntelligentTieringConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketIntelligentTieringConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?intelligent-tiering");
+ uri.SetQueryString(ss.str());
+ return PutBucketIntelligentTieringConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketIntelligentTieringConfigurationOutcomeCallable S3Client::PutBucketIntelligentTieringConfigurationCallable(const PutBucketIntelligentTieringConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketIntelligentTieringConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketIntelligentTieringConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketIntelligentTieringConfigurationAsync(const PutBucketIntelligentTieringConfigurationRequest& request, const PutBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketIntelligentTieringConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketIntelligentTieringConfigurationAsyncHelper(const PutBucketIntelligentTieringConfigurationRequest& request, const PutBucketIntelligentTieringConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketIntelligentTieringConfiguration(request), context);
+}
+
+PutBucketInventoryConfigurationOutcome S3Client::PutBucketInventoryConfiguration(const PutBucketInventoryConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketInventoryConfiguration", "Required field: Bucket, is not set");
+ return PutBucketInventoryConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketInventoryConfiguration", "Required field: Id, is not set");
+ return PutBucketInventoryConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketInventoryConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?inventory");
+ uri.SetQueryString(ss.str());
+ return PutBucketInventoryConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketInventoryConfigurationOutcomeCallable S3Client::PutBucketInventoryConfigurationCallable(const PutBucketInventoryConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketInventoryConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketInventoryConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketInventoryConfigurationAsync(const PutBucketInventoryConfigurationRequest& request, const PutBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketInventoryConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketInventoryConfigurationAsyncHelper(const PutBucketInventoryConfigurationRequest& request, const PutBucketInventoryConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketInventoryConfiguration(request), context);
+}
+
+PutBucketLifecycleConfigurationOutcome S3Client::PutBucketLifecycleConfiguration(const PutBucketLifecycleConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketLifecycleConfiguration", "Required field: Bucket, is not set");
+ return PutBucketLifecycleConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketLifecycleConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?lifecycle");
+ uri.SetQueryString(ss.str());
+ return PutBucketLifecycleConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketLifecycleConfigurationOutcomeCallable S3Client::PutBucketLifecycleConfigurationCallable(const PutBucketLifecycleConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketLifecycleConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketLifecycleConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketLifecycleConfigurationAsync(const PutBucketLifecycleConfigurationRequest& request, const PutBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketLifecycleConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketLifecycleConfigurationAsyncHelper(const PutBucketLifecycleConfigurationRequest& request, const PutBucketLifecycleConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketLifecycleConfiguration(request), context);
+}
+
+PutBucketLoggingOutcome S3Client::PutBucketLogging(const PutBucketLoggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketLogging", "Required field: Bucket, is not set");
+ return PutBucketLoggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketLoggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?logging");
+ uri.SetQueryString(ss.str());
+ return PutBucketLoggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketLoggingOutcomeCallable S3Client::PutBucketLoggingCallable(const PutBucketLoggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketLoggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketLogging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketLoggingAsync(const PutBucketLoggingRequest& request, const PutBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketLoggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketLoggingAsyncHelper(const PutBucketLoggingRequest& request, const PutBucketLoggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketLogging(request), context);
+}
+
+PutBucketMetricsConfigurationOutcome S3Client::PutBucketMetricsConfiguration(const PutBucketMetricsConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketMetricsConfiguration", "Required field: Bucket, is not set");
+ return PutBucketMetricsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.IdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketMetricsConfiguration", "Required field: Id, is not set");
+ return PutBucketMetricsConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Id]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketMetricsConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?metrics");
+ uri.SetQueryString(ss.str());
+ return PutBucketMetricsConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketMetricsConfigurationOutcomeCallable S3Client::PutBucketMetricsConfigurationCallable(const PutBucketMetricsConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketMetricsConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketMetricsConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketMetricsConfigurationAsync(const PutBucketMetricsConfigurationRequest& request, const PutBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketMetricsConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketMetricsConfigurationAsyncHelper(const PutBucketMetricsConfigurationRequest& request, const PutBucketMetricsConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketMetricsConfiguration(request), context);
+}
+
+PutBucketNotificationConfigurationOutcome S3Client::PutBucketNotificationConfiguration(const PutBucketNotificationConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketNotificationConfiguration", "Required field: Bucket, is not set");
+ return PutBucketNotificationConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketNotificationConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?notification");
+ uri.SetQueryString(ss.str());
+ return PutBucketNotificationConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketNotificationConfigurationOutcomeCallable S3Client::PutBucketNotificationConfigurationCallable(const PutBucketNotificationConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketNotificationConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketNotificationConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketNotificationConfigurationAsync(const PutBucketNotificationConfigurationRequest& request, const PutBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketNotificationConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketNotificationConfigurationAsyncHelper(const PutBucketNotificationConfigurationRequest& request, const PutBucketNotificationConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketNotificationConfiguration(request), context);
+}
+
+PutBucketOwnershipControlsOutcome S3Client::PutBucketOwnershipControls(const PutBucketOwnershipControlsRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketOwnershipControls", "Required field: Bucket, is not set");
+ return PutBucketOwnershipControlsOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketOwnershipControlsOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?ownershipControls");
+ uri.SetQueryString(ss.str());
+ return PutBucketOwnershipControlsOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketOwnershipControlsOutcomeCallable S3Client::PutBucketOwnershipControlsCallable(const PutBucketOwnershipControlsRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketOwnershipControlsOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketOwnershipControls(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketOwnershipControlsAsync(const PutBucketOwnershipControlsRequest& request, const PutBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketOwnershipControlsAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketOwnershipControlsAsyncHelper(const PutBucketOwnershipControlsRequest& request, const PutBucketOwnershipControlsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketOwnershipControls(request), context);
+}
+
+PutBucketPolicyOutcome S3Client::PutBucketPolicy(const PutBucketPolicyRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketPolicy", "Required field: Bucket, is not set");
+ return PutBucketPolicyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketPolicyOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?policy");
+ uri.SetQueryString(ss.str());
+ return PutBucketPolicyOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketPolicyOutcomeCallable S3Client::PutBucketPolicyCallable(const PutBucketPolicyRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketPolicyOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketPolicy(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketPolicyAsync(const PutBucketPolicyRequest& request, const PutBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketPolicyAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketPolicyAsyncHelper(const PutBucketPolicyRequest& request, const PutBucketPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketPolicy(request), context);
+}
+
+PutBucketReplicationOutcome S3Client::PutBucketReplication(const PutBucketReplicationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketReplication", "Required field: Bucket, is not set");
+ return PutBucketReplicationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketReplicationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?replication");
+ uri.SetQueryString(ss.str());
+ return PutBucketReplicationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketReplicationOutcomeCallable S3Client::PutBucketReplicationCallable(const PutBucketReplicationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketReplicationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketReplication(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketReplicationAsync(const PutBucketReplicationRequest& request, const PutBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketReplicationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketReplicationAsyncHelper(const PutBucketReplicationRequest& request, const PutBucketReplicationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketReplication(request), context);
+}
+
+PutBucketRequestPaymentOutcome S3Client::PutBucketRequestPayment(const PutBucketRequestPaymentRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketRequestPayment", "Required field: Bucket, is not set");
+ return PutBucketRequestPaymentOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketRequestPaymentOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?requestPayment");
+ uri.SetQueryString(ss.str());
+ return PutBucketRequestPaymentOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketRequestPaymentOutcomeCallable S3Client::PutBucketRequestPaymentCallable(const PutBucketRequestPaymentRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketRequestPaymentOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketRequestPayment(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketRequestPaymentAsync(const PutBucketRequestPaymentRequest& request, const PutBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketRequestPaymentAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketRequestPaymentAsyncHelper(const PutBucketRequestPaymentRequest& request, const PutBucketRequestPaymentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketRequestPayment(request), context);
+}
+
+PutBucketTaggingOutcome S3Client::PutBucketTagging(const PutBucketTaggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketTagging", "Required field: Bucket, is not set");
+ return PutBucketTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketTaggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?tagging");
+ uri.SetQueryString(ss.str());
+ return PutBucketTaggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketTaggingOutcomeCallable S3Client::PutBucketTaggingCallable(const PutBucketTaggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketTaggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketTagging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketTaggingAsync(const PutBucketTaggingRequest& request, const PutBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketTaggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketTaggingAsyncHelper(const PutBucketTaggingRequest& request, const PutBucketTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketTagging(request), context);
+}
+
+PutBucketVersioningOutcome S3Client::PutBucketVersioning(const PutBucketVersioningRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketVersioning", "Required field: Bucket, is not set");
+ return PutBucketVersioningOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketVersioningOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?versioning");
+ uri.SetQueryString(ss.str());
+ return PutBucketVersioningOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketVersioningOutcomeCallable S3Client::PutBucketVersioningCallable(const PutBucketVersioningRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketVersioningOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketVersioning(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketVersioningAsync(const PutBucketVersioningRequest& request, const PutBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketVersioningAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketVersioningAsyncHelper(const PutBucketVersioningRequest& request, const PutBucketVersioningResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketVersioning(request), context);
+}
+
+PutBucketWebsiteOutcome S3Client::PutBucketWebsite(const PutBucketWebsiteRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutBucketWebsite", "Required field: Bucket, is not set");
+ return PutBucketWebsiteOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutBucketWebsiteOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?website");
+ uri.SetQueryString(ss.str());
+ return PutBucketWebsiteOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutBucketWebsiteOutcomeCallable S3Client::PutBucketWebsiteCallable(const PutBucketWebsiteRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutBucketWebsiteOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutBucketWebsite(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutBucketWebsiteAsync(const PutBucketWebsiteRequest& request, const PutBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutBucketWebsiteAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutBucketWebsiteAsyncHelper(const PutBucketWebsiteRequest& request, const PutBucketWebsiteResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutBucketWebsite(request), context);
+}
+
+PutObjectOutcome S3Client::PutObject(const PutObjectRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObject", "Required field: Bucket, is not set");
+ return PutObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObject", "Required field: Key, is not set");
+ return PutObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutObjectOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return PutObjectOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutObjectOutcomeCallable S3Client::PutObjectCallable(const PutObjectRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutObjectOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutObject(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutObjectAsync(const PutObjectRequest& request, const PutObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutObjectAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutObjectAsyncHelper(const PutObjectRequest& request, const PutObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutObject(request), context);
+}
+
+PutObjectAclOutcome S3Client::PutObjectAcl(const PutObjectAclRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectAcl", "Required field: Bucket, is not set");
+ return PutObjectAclOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectAcl", "Required field: Key, is not set");
+ return PutObjectAclOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutObjectAclOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?acl");
+ uri.SetQueryString(ss.str());
+ return PutObjectAclOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutObjectAclOutcomeCallable S3Client::PutObjectAclCallable(const PutObjectAclRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutObjectAclOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutObjectAcl(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutObjectAclAsync(const PutObjectAclRequest& request, const PutObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutObjectAclAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutObjectAclAsyncHelper(const PutObjectAclRequest& request, const PutObjectAclResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutObjectAcl(request), context);
+}
+
+PutObjectLegalHoldOutcome S3Client::PutObjectLegalHold(const PutObjectLegalHoldRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectLegalHold", "Required field: Bucket, is not set");
+ return PutObjectLegalHoldOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectLegalHold", "Required field: Key, is not set");
+ return PutObjectLegalHoldOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutObjectLegalHoldOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?legal-hold");
+ uri.SetQueryString(ss.str());
+ return PutObjectLegalHoldOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutObjectLegalHoldOutcomeCallable S3Client::PutObjectLegalHoldCallable(const PutObjectLegalHoldRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutObjectLegalHoldOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutObjectLegalHold(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutObjectLegalHoldAsync(const PutObjectLegalHoldRequest& request, const PutObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutObjectLegalHoldAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutObjectLegalHoldAsyncHelper(const PutObjectLegalHoldRequest& request, const PutObjectLegalHoldResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutObjectLegalHold(request), context);
+}
+
+PutObjectLockConfigurationOutcome S3Client::PutObjectLockConfiguration(const PutObjectLockConfigurationRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectLockConfiguration", "Required field: Bucket, is not set");
+ return PutObjectLockConfigurationOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutObjectLockConfigurationOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?object-lock");
+ uri.SetQueryString(ss.str());
+ return PutObjectLockConfigurationOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutObjectLockConfigurationOutcomeCallable S3Client::PutObjectLockConfigurationCallable(const PutObjectLockConfigurationRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutObjectLockConfigurationOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutObjectLockConfiguration(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutObjectLockConfigurationAsync(const PutObjectLockConfigurationRequest& request, const PutObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutObjectLockConfigurationAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutObjectLockConfigurationAsyncHelper(const PutObjectLockConfigurationRequest& request, const PutObjectLockConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutObjectLockConfiguration(request), context);
+}
+
+PutObjectRetentionOutcome S3Client::PutObjectRetention(const PutObjectRetentionRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectRetention", "Required field: Bucket, is not set");
+ return PutObjectRetentionOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectRetention", "Required field: Key, is not set");
+ return PutObjectRetentionOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutObjectRetentionOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?retention");
+ uri.SetQueryString(ss.str());
+ return PutObjectRetentionOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutObjectRetentionOutcomeCallable S3Client::PutObjectRetentionCallable(const PutObjectRetentionRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutObjectRetentionOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutObjectRetention(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutObjectRetentionAsync(const PutObjectRetentionRequest& request, const PutObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutObjectRetentionAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutObjectRetentionAsyncHelper(const PutObjectRetentionRequest& request, const PutObjectRetentionResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutObjectRetention(request), context);
+}
+
+PutObjectTaggingOutcome S3Client::PutObjectTagging(const PutObjectTaggingRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectTagging", "Required field: Bucket, is not set");
+ return PutObjectTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutObjectTagging", "Required field: Key, is not set");
+ return PutObjectTaggingOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutObjectTaggingOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?tagging");
+ uri.SetQueryString(ss.str());
+ return PutObjectTaggingOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutObjectTaggingOutcomeCallable S3Client::PutObjectTaggingCallable(const PutObjectTaggingRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutObjectTaggingOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutObjectTagging(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutObjectTaggingAsync(const PutObjectTaggingRequest& request, const PutObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutObjectTaggingAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutObjectTaggingAsyncHelper(const PutObjectTaggingRequest& request, const PutObjectTaggingResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutObjectTagging(request), context);
+}
+
+PutPublicAccessBlockOutcome S3Client::PutPublicAccessBlock(const PutPublicAccessBlockRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("PutPublicAccessBlock", "Required field: Bucket, is not set");
+ return PutPublicAccessBlockOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return PutPublicAccessBlockOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss.str("?publicAccessBlock");
+ uri.SetQueryString(ss.str());
+ return PutPublicAccessBlockOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+PutPublicAccessBlockOutcomeCallable S3Client::PutPublicAccessBlockCallable(const PutPublicAccessBlockRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< PutPublicAccessBlockOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->PutPublicAccessBlock(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::PutPublicAccessBlockAsync(const PutPublicAccessBlockRequest& request, const PutPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->PutPublicAccessBlockAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::PutPublicAccessBlockAsyncHelper(const PutPublicAccessBlockRequest& request, const PutPublicAccessBlockResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, PutPublicAccessBlock(request), context);
+}
+
+RestoreObjectOutcome S3Client::RestoreObject(const RestoreObjectRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("RestoreObject", "Required field: Bucket, is not set");
+ return RestoreObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("RestoreObject", "Required field: Key, is not set");
+ return RestoreObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return RestoreObjectOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?restore");
+ uri.SetQueryString(ss.str());
+ return RestoreObjectOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_POST, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+RestoreObjectOutcomeCallable S3Client::RestoreObjectCallable(const RestoreObjectRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< RestoreObjectOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->RestoreObject(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::RestoreObjectAsync(const RestoreObjectRequest& request, const RestoreObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->RestoreObjectAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::RestoreObjectAsyncHelper(const RestoreObjectRequest& request, const RestoreObjectResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, RestoreObject(request), context);
+}
+
+SelectObjectContentOutcome S3Client::SelectObjectContent(SelectObjectContentRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("SelectObjectContent", "Required field: Bucket, is not set");
+ return SelectObjectContentOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("SelectObjectContent", "Required field: Key, is not set");
+ return SelectObjectContentOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return SelectObjectContentOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ ss.str("?select&select-type=2");
+ uri.SetQueryString(ss.str());
+ request.SetResponseStreamFactory(
+ [&] { request.GetEventStreamDecoder().Reset(); return Aws::New<Aws::Utils::Event::EventDecoderStream>(ALLOCATION_TAG, request.GetEventStreamDecoder()); }
+ );
+ return SelectObjectContentOutcome(MakeRequestWithEventStream(uri, request, Aws::Http::HttpMethod::HTTP_POST, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+SelectObjectContentOutcomeCallable S3Client::SelectObjectContentCallable(SelectObjectContentRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< SelectObjectContentOutcome() > >(ALLOCATION_TAG, [this, &request](){ return this->SelectObjectContent(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::SelectObjectContentAsync(SelectObjectContentRequest& request, const SelectObjectContentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, &request, handler, context](){ this->SelectObjectContentAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::SelectObjectContentAsyncHelper(SelectObjectContentRequest& request, const SelectObjectContentResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, SelectObjectContent(request), context);
+}
+
+UploadPartOutcome S3Client::UploadPart(const UploadPartRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPart", "Required field: Bucket, is not set");
+ return UploadPartOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPart", "Required field: Key, is not set");
+ return UploadPartOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ if (!request.PartNumberHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPart", "Required field: PartNumber, is not set");
+ return UploadPartOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [PartNumber]", false));
+ }
+ if (!request.UploadIdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPart", "Required field: UploadId, is not set");
+ return UploadPartOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [UploadId]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return UploadPartOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return UploadPartOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+UploadPartOutcomeCallable S3Client::UploadPartCallable(const UploadPartRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< UploadPartOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->UploadPart(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::UploadPartAsync(const UploadPartRequest& request, const UploadPartResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->UploadPartAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::UploadPartAsyncHelper(const UploadPartRequest& request, const UploadPartResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, UploadPart(request), context);
+}
+
+UploadPartCopyOutcome S3Client::UploadPartCopy(const UploadPartCopyRequest& request) const
+{
+ if (!request.BucketHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPartCopy", "Required field: Bucket, is not set");
+ return UploadPartCopyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Bucket]", false));
+ }
+ if (!request.CopySourceHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPartCopy", "Required field: CopySource, is not set");
+ return UploadPartCopyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [CopySource]", false));
+ }
+ if (!request.KeyHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPartCopy", "Required field: Key, is not set");
+ return UploadPartCopyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [Key]", false));
+ }
+ if (!request.PartNumberHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPartCopy", "Required field: PartNumber, is not set");
+ return UploadPartCopyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [PartNumber]", false));
+ }
+ if (!request.UploadIdHasBeenSet())
+ {
+ AWS_LOGSTREAM_ERROR("UploadPartCopy", "Required field: UploadId, is not set");
+ return UploadPartCopyOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::MISSING_PARAMETER, "MISSING_PARAMETER", "Missing required field [UploadId]", false));
+ }
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(request.GetBucket());
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ return UploadPartCopyOutcome(computeEndpointOutcome.GetError());
+ }
+ Aws::Http::URI uri = computeEndpointOutcome.GetResult().endpoint;
+ Aws::StringStream ss;
+ ss << "/";
+ ss << request.GetKey();
+ uri.SetPath(uri.GetPath() + ss.str());
+ return UploadPartCopyOutcome(MakeRequest(uri, request, Aws::Http::HttpMethod::HTTP_PUT, Aws::Auth::SIGV4_SIGNER, computeEndpointOutcome.GetResult().signerRegion.c_str() /*signerRegionOverride*/, computeEndpointOutcome.GetResult().signerServiceName.c_str() /*signerServiceNameOverride*/));
+}
+
+UploadPartCopyOutcomeCallable S3Client::UploadPartCopyCallable(const UploadPartCopyRequest& request) const
+{
+ auto task = Aws::MakeShared< std::packaged_task< UploadPartCopyOutcome() > >(ALLOCATION_TAG, [this, request](){ return this->UploadPartCopy(request); } );
+ auto packagedFunction = [task]() { (*task)(); };
+ m_executor->Submit(packagedFunction);
+ return task->get_future();
+}
+
+void S3Client::UploadPartCopyAsync(const UploadPartCopyRequest& request, const UploadPartCopyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ m_executor->Submit( [this, request, handler, context](){ this->UploadPartCopyAsyncHelper( request, handler, context ); } );
+}
+
+void S3Client::UploadPartCopyAsyncHelper(const UploadPartCopyRequest& request, const UploadPartCopyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const
+{
+ handler(this, request, UploadPartCopy(request), context);
+}
+
+
+
+#include<aws/core/platform/Environment.h>
+
+static const char US_EAST_1_REGIONAL_ENDPOINT_ENV_VAR[] = "AWS_S3_US_EAST_1_REGIONAL_ENDPOINT";
+static const char US_EAST_1_REGIONAL_ENDPOINT_CONFIG_VAR[] = "s3_us_east_1_regional_endpoint";
+static const char S3_USE_ARN_REGION_ENVIRONMENT_VARIABLE[] = "AWS_S3_USE_ARN_REGION";
+static const char S3_USE_ARN_REGION_CONFIG_FILE_OPTION[] = "s3_use_arn_region";
+
+void S3Client::LoadS3SpecificConfig(const Aws::String& profile)
+{
+ if (m_USEast1RegionalEndpointOption == Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::NOT_SET)
+ {
+ Aws::String option = Aws::Environment::GetEnv(US_EAST_1_REGIONAL_ENDPOINT_ENV_VAR);
+ if (option.empty())
+ {
+ option = Aws::Config::GetCachedConfigValue(profile, US_EAST_1_REGIONAL_ENDPOINT_CONFIG_VAR);
+ }
+
+ if (Aws::Utils::StringUtils::ToLower(option.c_str()) == "legacy")
+ {
+ m_USEast1RegionalEndpointOption = Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::LEGACY;
+ }
+ else // defaults is regional
+ {
+ m_USEast1RegionalEndpointOption = Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION::REGIONAL;
+ }
+ }
+
+ Aws::String s3UseArnRegion = Aws::Environment::GetEnv(S3_USE_ARN_REGION_ENVIRONMENT_VARIABLE);
+ if (s3UseArnRegion.empty())
+ {
+ s3UseArnRegion = Aws::Config::GetCachedConfigValue(profile, S3_USE_ARN_REGION_CONFIG_FILE_OPTION);
+ }
+
+ if (s3UseArnRegion == "true")
+ {
+ m_useArnRegion = true;
+ }
+ else
+ {
+ if (!s3UseArnRegion.empty() && s3UseArnRegion != "false")
+ {
+ AWS_LOGSTREAM_WARN("S3Client", "AWS_S3_USE_ARN_REGION in environment variables or s3_use_arn_region in config file"
+ << "should either be true of false if specified, otherwise turn off this flag by default.");
+ }
+ m_useArnRegion = false;
+ }
+}
+
+#include<aws/core/utils/HashingUtils.h>
+Aws::String S3Client::GeneratePresignedUrl(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), expirationInSeconds);
+}
+
+Aws::String S3Client::GeneratePresignedUrl(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, const Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), customizedHeaders, expirationInSeconds);
+}
+
+Aws::String S3Client::GeneratePresignedUrlWithSSES3(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ Aws::Http::HeaderValueCollection headers;
+ headers.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION, Aws::S3::Model::ServerSideEncryptionMapper::GetNameForServerSideEncryption(Aws::S3::Model::ServerSideEncryption::AES256));
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), headers, expirationInSeconds);
+}
+
+Aws::String S3Client::GeneratePresignedUrlWithSSES3(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, Http::HeaderValueCollection customizedHeaders, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ customizedHeaders.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION, Aws::S3::Model::ServerSideEncryptionMapper::GetNameForServerSideEncryption(Aws::S3::Model::ServerSideEncryption::AES256));
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), customizedHeaders, expirationInSeconds);
+}
+
+Aws::String S3Client::GeneratePresignedUrlWithSSEKMS(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, const Aws::String& kmsMasterKeyId, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ Aws::Http::HeaderValueCollection headers;
+ headers.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION, Aws::S3::Model::ServerSideEncryptionMapper::GetNameForServerSideEncryption(Aws::S3::Model::ServerSideEncryption::aws_kms));
+ headers.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_AWS_KMS_KEY_ID, kmsMasterKeyId);
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), headers, expirationInSeconds);
+}
+
+Aws::String S3Client::GeneratePresignedUrlWithSSEKMS(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, Http::HeaderValueCollection customizedHeaders, const Aws::String& kmsMasterKeyId, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ customizedHeaders.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION, Aws::S3::Model::ServerSideEncryptionMapper::GetNameForServerSideEncryption(Aws::S3::Model::ServerSideEncryption::aws_kms));
+ customizedHeaders.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_AWS_KMS_KEY_ID, kmsMasterKeyId);
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), customizedHeaders, expirationInSeconds);
+}
+
+Aws::String S3Client::GeneratePresignedUrlWithSSEC(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, const Aws::String& base64EncodedAES256Key, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ Aws::Http::HeaderValueCollection headers;
+ headers.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM, Aws::S3::Model::ServerSideEncryptionMapper::GetNameForServerSideEncryption(Aws::S3::Model::ServerSideEncryption::AES256));
+ headers.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY, base64EncodedAES256Key);
+ Aws::Utils::ByteBuffer buffer = Aws::Utils::HashingUtils::Base64Decode(base64EncodedAES256Key);
+ Aws::String strBuffer(reinterpret_cast<char*>(buffer.GetUnderlyingData()), buffer.GetLength());
+ headers.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5, Aws::Utils::HashingUtils::Base64Encode(Aws::Utils::HashingUtils::CalculateMD5(strBuffer)));
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), headers, expirationInSeconds);
+}
+
+Aws::String S3Client::GeneratePresignedUrlWithSSEC(const Aws::String& bucket, const Aws::String& key, Aws::Http::HttpMethod method, Http::HeaderValueCollection customizedHeaders, const Aws::String& base64EncodedAES256Key, long long expirationInSeconds)
+{
+ ComputeEndpointOutcome computeEndpointOutcome = ComputeEndpointString(bucket);
+ if (!computeEndpointOutcome.IsSuccess())
+ {
+ AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Presigned URL generating failed. Encountered error: " << computeEndpointOutcome.GetError());
+ return {};
+ }
+ Aws::StringStream ss;
+ ss << computeEndpointOutcome.GetResult().endpoint << "/" << key;
+ URI uri(ss.str());
+ customizedHeaders.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM, Aws::S3::Model::ServerSideEncryptionMapper::GetNameForServerSideEncryption(Aws::S3::Model::ServerSideEncryption::AES256));
+ customizedHeaders.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY, base64EncodedAES256Key);
+ Aws::Utils::ByteBuffer buffer = Aws::Utils::HashingUtils::Base64Decode(base64EncodedAES256Key);
+ Aws::String strBuffer(reinterpret_cast<char*>(buffer.GetUnderlyingData()), buffer.GetLength());
+ customizedHeaders.emplace(Aws::S3::SSEHeaders::SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5, Aws::Utils::HashingUtils::Base64Encode(Aws::Utils::HashingUtils::CalculateMD5(strBuffer)));
+ return AWSClient::GeneratePresignedUrl(uri, method, computeEndpointOutcome.GetResult().signerRegion.c_str(), computeEndpointOutcome.GetResult().signerServiceName.c_str(), customizedHeaders, expirationInSeconds);
+}
+
+ComputeEndpointOutcome S3Client::ComputeEndpointString(const Aws::String& bucketOrArn) const
+{
+ Aws::StringStream ss;
+ ss << m_scheme << "://";
+ Aws::String bucket = bucketOrArn;
+ Aws::String signerRegion = Aws::Region::ComputeSignerRegion(m_region);
+ S3ARN arn(bucketOrArn);
+
+ if (arn)
+ {
+ if (m_useCustomEndpoint)
+ {
+ return ComputeEndpointOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::VALIDATION, "VALIDATION",
+ "Custom endpoint is not compatible with Access Point ARN or Outposts ARN in Bucket field.", false));
+ }
+
+ if (!m_useVirtualAddressing)
+ {
+ return ComputeEndpointOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::VALIDATION, "VALIDATION",
+ "Path style addressing is not compatible with Access Point ARN or Outposts ARN in Bucket field, please consider using virtual addressing for this client instead.", false));
+ }
+
+ S3ARNOutcome s3ArnOutcome = m_useArnRegion ? arn.Validate() : arn.Validate(m_region.c_str());
+ if (!s3ArnOutcome.IsSuccess())
+ {
+ return ComputeEndpointOutcome(s3ArnOutcome.GetError());
+ }
+ signerRegion = m_useArnRegion ? arn.GetRegion() : signerRegion;
+ if (arn.GetResourceType() == ARNResourceType::ACCESSPOINT)
+ {
+ ss << S3Endpoint::ForAccessPointArn(arn, m_useArnRegion ? "" : m_region, m_useDualStack);
+ return ComputeEndpointOutcome(ComputeEndpointResult(ss.str(), signerRegion, SERVICE_NAME));
+ }
+ else if (arn.GetResourceType() == ARNResourceType::OUTPOST)
+ {
+ if (m_useDualStack)
+ {
+ return ComputeEndpointOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::VALIDATION, "VALIDATION",
+ "Outposts Access Points do not support dualstack right now.", false));
+ }
+ ss << S3Endpoint::ForOutpostsArn(arn, m_useArnRegion ? "" : m_region);
+ return ComputeEndpointOutcome(ComputeEndpointResult(ss.str(), signerRegion, "s3-outposts"));
+ }
+ }
+
+ // when using virtual hosting of buckets, the bucket name has to follow some rules.
+ // Mainly, it has to be a valid DNS label, and it must be lowercase.
+ // For more information see http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket
+ if(m_useVirtualAddressing && Aws::Utils::IsValidDnsLabel(bucket) &&
+ bucket == Aws::Utils::StringUtils::ToLower(bucket.c_str()))
+ {
+ ss << bucket << "." << m_baseUri;
+ }
+ else
+ {
+ ss << m_baseUri << "/" << bucket;
+ }
+
+ return ComputeEndpointOutcome(ComputeEndpointResult(ss.str(), signerRegion, SERVICE_NAME));
+}
+
+ComputeEndpointOutcome S3Client::ComputeEndpointString() const
+{
+ Aws::StringStream ss;
+ ss << m_scheme << "://" << m_baseUri;
+ return ComputeEndpointOutcome(ComputeEndpointResult(ss.str(), Aws::Region::ComputeSignerRegion(m_region), SERVICE_NAME));
+}
+
+bool S3Client::MultipartUploadSupported() const
+{
+ return true;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp
new file mode 100644
index 00000000000..c81556085fd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Endpoint.cpp
@@ -0,0 +1,133 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/S3Endpoint.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/HashingUtils.h>
+
+using namespace Aws;
+using namespace Aws::S3;
+
+namespace Aws
+{
+namespace S3
+{
+namespace S3Endpoint
+{
+ static const int CN_NORTH_1_HASH = Aws::Utils::HashingUtils::HashString("cn-north-1");
+ static const int CN_NORTHWEST_1_HASH = Aws::Utils::HashingUtils::HashString("cn-northwest-1");
+ static const int US_ISO_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-iso-east-1");
+ static const int US_ISOB_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-isob-east-1");
+
+ static const int FIPS_US_GOV_WEST_1_HASH = Aws::Utils::HashingUtils::HashString("fips-us-gov-west-1");
+ static const int US_GOV_WEST_1_HASH = Aws::Utils::HashingUtils::HashString("us-gov-west-1");
+ static const int US_GOV_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-gov-east-1");
+ static const int US_EAST_1_HASH = Aws::Utils::HashingUtils::HashString("us-east-1");
+ static const int AWS_GLOBAL_HASH = Aws::Utils::HashingUtils::HashString("aws-global");
+
+ Aws::String ForAccessPointArn(const S3ARN& arn, const Aws::String& regionNameOverride, bool useDualStack)
+ {
+ const Aws::String& region = regionNameOverride.empty() ? arn.GetRegion() : regionNameOverride;
+ auto hash = Aws::Utils::HashingUtils::HashString(region.c_str());
+
+ Aws::StringStream ss;
+ ss << arn.GetResourceId() << "-" << arn.GetAccountId() << ".s3-accesspoint.";
+ if (useDualStack)
+ {
+ ss << "dualstack.";
+ }
+ ss << region << "." << "amazonaws.com";
+
+ if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH)
+ {
+ ss << ".cn";
+ }
+
+ return ss.str();
+ }
+
+ Aws::String ForOutpostsArn(const S3ARN& arn, const Aws::String& regionNameOverride)
+ {
+ const Aws::String& region = regionNameOverride.empty() ? arn.GetRegion() : regionNameOverride;
+ auto hash = Aws::Utils::HashingUtils::HashString(region.c_str());
+
+ Aws::StringStream ss;
+ ss << arn.GetSubResourceId() << "-" << arn.GetAccountId() << "." << arn.GetResourceId() << ".s3-outposts." << region << "." << "amazonaws.com";
+
+ if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH)
+ {
+ ss << ".cn";
+ }
+
+ return ss.str();
+ }
+
+ Aws::String ForRegion(const Aws::String& regionName, bool useDualStack, bool USEast1UseRegionalEndpoint)
+ {
+ auto hash = Aws::Utils::HashingUtils::HashString(regionName.c_str());
+
+ if(!useDualStack)
+ {
+ if(hash == FIPS_US_GOV_WEST_1_HASH)
+ {
+ return "s3-fips-us-gov-west-1.amazonaws.com";
+ }
+ if(hash == US_GOV_WEST_1_HASH)
+ {
+ return "s3.us-gov-west-1.amazonaws.com";
+ }
+ if(hash == US_GOV_EAST_1_HASH)
+ {
+ return "s3.us-gov-east-1.amazonaws.com";
+ }
+ if (hash == AWS_GLOBAL_HASH)
+ {
+ return "s3.amazonaws.com";
+ }
+ if(hash == US_EAST_1_HASH)
+ {
+ if (USEast1UseRegionalEndpoint)
+ {
+ return "s3.us-east-1.amazonaws.com";
+ }
+ else
+ {
+ return "s3.amazonaws.com";
+ }
+ }
+ }
+ Aws::StringStream ss;
+ ss << "s3" << ".";
+
+ if(useDualStack)
+ {
+ ss << "dualstack.";
+ }
+
+ ss << regionName;
+
+ if (hash == CN_NORTH_1_HASH || hash == CN_NORTHWEST_1_HASH)
+ {
+ ss << ".amazonaws.com.cn";
+ }
+ else if (hash == US_ISO_EAST_1_HASH)
+ {
+ ss << ".c2s.ic.gov";
+ }
+ else if (hash == US_ISOB_EAST_1_HASH)
+ {
+ ss << ".sc2s.sgov.gov";
+ }
+ else
+ {
+ ss << ".amazonaws.com";
+ }
+
+ return ss.str();
+ }
+
+} // namespace S3Endpoint
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ErrorMarshaller.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ErrorMarshaller.cpp
new file mode 100644
index 00000000000..4fb648da257
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3ErrorMarshaller.cpp
@@ -0,0 +1,99 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/AWSError.h>
+#include <aws/s3/S3ErrorMarshaller.h>
+#include <aws/s3/S3Errors.h>
+
+using namespace Aws::Client;
+using namespace Aws::S3;
+
+AWSError<CoreErrors> S3ErrorMarshaller::FindErrorByName(const char* errorName) const
+{
+ AWSError<CoreErrors> error = S3ErrorMapper::GetErrorForName(errorName);
+ if(error.GetErrorType() != CoreErrors::UNKNOWN)
+ {
+ return error;
+ }
+
+ return AWSErrorMarshaller::FindErrorByName(errorName);
+}
+
+Aws::String S3ErrorMarshaller::ExtractRegion(const AWSError<CoreErrors>& error) const
+{
+ const auto& headers = error.GetResponseHeaders();
+ const auto& iter = headers.find("x-amz-bucket-region");
+ if (iter != headers.end())
+ {
+ return iter->second;
+ }
+
+ const Aws::Utils::Xml::XmlDocument& xmlDocument = GetXmlPayloadFromError(error);
+ Aws::Utils::Xml::XmlNode xmlNode = xmlDocument.GetRootElement();
+ if (!xmlNode.IsNull())
+ {
+ Aws::Utils::Xml::XmlNode regionNode = xmlNode.FirstChild("Region");
+ if (!regionNode.IsNull())
+ {
+ return regionNode.GetText().c_str();
+ }
+ }
+
+ // as a last choice, try finding region from endpoint.
+ const auto& locIter = headers.find("location");
+ if (locIter != headers.end())
+ {
+ Aws::Http::URI uri(locIter->second);
+ auto authority = uri.GetAuthority();
+ // virtual address example: <bucketname>.<[s3-]region>.amazonaws.com
+ // path style example: <[s3]-region>.amazonaws.com/<bucketname>
+ auto pos = authority.find(".amazonaws.com");
+ if (pos == 0 || pos == std::string::npos)
+ {
+ return {};
+ }
+ auto endPos = pos - 1;
+ while (pos > 0 && authority[pos - 1] != '.')
+ {
+ pos--;
+ }
+ auto region = authority.substr(pos, endPos + 1 - pos);
+ if (region.compare(0, 3, "s3-") == 0)
+ {
+ region = region.substr(3);
+ }
+ if (region.compare(0, 5, "fips-") == 0)
+ {
+ region = region.substr(5);
+ }
+ return region;
+ }
+ return {};
+}
+
+Aws::String S3ErrorMarshaller::ExtractEndpoint(const AWSError<CoreErrors>& error) const
+{
+ const auto& headers = error.GetResponseHeaders();
+ const auto& iter = headers.find("location");
+ if (iter != headers.end())
+ {
+ Aws::Http::URI uri(iter->second);
+ return uri.GetAuthority();
+ }
+
+ const Aws::Utils::Xml::XmlDocument& xmlDocument = GetXmlPayloadFromError(error);
+ Aws::Utils::Xml::XmlNode xmlNode = xmlDocument.GetRootElement();
+ if (!xmlNode.IsNull())
+ {
+ Aws::Utils::Xml::XmlNode endpointNode = xmlNode.FirstChild("Endpoint");
+ if (!endpointNode.IsNull())
+ {
+ Aws::Http::URI uri(endpointNode.GetText().c_str());
+ return uri.GetAuthority();
+ }
+ }
+
+ return {};
+} \ No newline at end of file
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Errors.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Errors.cpp
new file mode 100644
index 00000000000..cf227c92103
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/S3Errors.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/core/client/AWSError.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/s3/S3Errors.h>
+#include <aws/s3/model/InvalidObjectState.h>
+
+using namespace Aws::Client;
+using namespace Aws::Utils;
+using namespace Aws::S3;
+using namespace Aws::S3::Model;
+
+namespace Aws
+{
+namespace S3
+{
+template<> AWS_S3_API InvalidObjectState S3Error::GetModeledError()
+{
+ assert(this->GetErrorType() == S3Errors::INVALID_OBJECT_STATE);
+ return InvalidObjectState(this->GetXmlPayload().GetRootElement());
+}
+
+namespace S3ErrorMapper
+{
+
+static const int NO_SUCH_UPLOAD_HASH = HashingUtils::HashString("NoSuchUpload");
+static const int BUCKET_ALREADY_OWNED_BY_YOU_HASH = HashingUtils::HashString("BucketAlreadyOwnedByYou");
+static const int OBJECT_ALREADY_IN_ACTIVE_TIER_HASH = HashingUtils::HashString("ObjectAlreadyInActiveTierError");
+static const int NO_SUCH_BUCKET_HASH = HashingUtils::HashString("NoSuchBucket");
+static const int NO_SUCH_KEY_HASH = HashingUtils::HashString("NoSuchKey");
+static const int OBJECT_NOT_IN_ACTIVE_TIER_HASH = HashingUtils::HashString("ObjectNotInActiveTierError");
+static const int BUCKET_ALREADY_EXISTS_HASH = HashingUtils::HashString("BucketAlreadyExists");
+static const int INVALID_OBJECT_STATE_HASH = HashingUtils::HashString("InvalidObjectState");
+
+
+AWSError<CoreErrors> GetErrorForName(const char* errorName)
+{
+ int hashCode = HashingUtils::HashString(errorName);
+
+ if (hashCode == NO_SUCH_UPLOAD_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::NO_SUCH_UPLOAD), false);
+ }
+ else if (hashCode == BUCKET_ALREADY_OWNED_BY_YOU_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::BUCKET_ALREADY_OWNED_BY_YOU), false);
+ }
+ else if (hashCode == OBJECT_ALREADY_IN_ACTIVE_TIER_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::OBJECT_ALREADY_IN_ACTIVE_TIER), false);
+ }
+ else if (hashCode == NO_SUCH_BUCKET_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::NO_SUCH_BUCKET), false);
+ }
+ else if (hashCode == NO_SUCH_KEY_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::NO_SUCH_KEY), false);
+ }
+ else if (hashCode == OBJECT_NOT_IN_ACTIVE_TIER_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::OBJECT_NOT_IN_ACTIVE_TIER), false);
+ }
+ else if (hashCode == BUCKET_ALREADY_EXISTS_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::BUCKET_ALREADY_EXISTS), false);
+ }
+ else if (hashCode == INVALID_OBJECT_STATE_HASH)
+ {
+ return AWSError<CoreErrors>(static_cast<CoreErrors>(S3Errors::INVALID_OBJECT_STATE), false);
+ }
+ return AWSError<CoreErrors>(CoreErrors::UNKNOWN, false);
+}
+
+} // namespace S3ErrorMapper
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortIncompleteMultipartUpload.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortIncompleteMultipartUpload.cpp
new file mode 100644
index 00000000000..983062c1703
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortIncompleteMultipartUpload.cpp
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AbortIncompleteMultipartUpload.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AbortIncompleteMultipartUpload::AbortIncompleteMultipartUpload() :
+ m_daysAfterInitiation(0),
+ m_daysAfterInitiationHasBeenSet(false)
+{
+}
+
+AbortIncompleteMultipartUpload::AbortIncompleteMultipartUpload(const XmlNode& xmlNode) :
+ m_daysAfterInitiation(0),
+ m_daysAfterInitiationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AbortIncompleteMultipartUpload& AbortIncompleteMultipartUpload::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode daysAfterInitiationNode = resultNode.FirstChild("DaysAfterInitiation");
+ if(!daysAfterInitiationNode.IsNull())
+ {
+ m_daysAfterInitiation = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(daysAfterInitiationNode.GetText()).c_str()).c_str());
+ m_daysAfterInitiationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AbortIncompleteMultipartUpload::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_daysAfterInitiationHasBeenSet)
+ {
+ XmlNode daysAfterInitiationNode = parentNode.CreateChildElement("DaysAfterInitiation");
+ ss << m_daysAfterInitiation;
+ daysAfterInitiationNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadRequest.cpp
new file mode 100644
index 00000000000..4d8645caab2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadRequest.cpp
@@ -0,0 +1,81 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AbortMultipartUploadRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+AbortMultipartUploadRequest::AbortMultipartUploadRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_uploadIdHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String AbortMultipartUploadRequest::SerializePayload() const
+{
+ return {};
+}
+
+void AbortMultipartUploadRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_uploadIdHasBeenSet)
+ {
+ ss << m_uploadId;
+ uri.AddQueryStringParameter("uploadId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection AbortMultipartUploadRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadResult.cpp
new file mode 100644
index 00000000000..5372be5cc7c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AbortMultipartUploadResult.cpp
@@ -0,0 +1,47 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AbortMultipartUploadResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+AbortMultipartUploadResult::AbortMultipartUploadResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+AbortMultipartUploadResult::AbortMultipartUploadResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+AbortMultipartUploadResult& AbortMultipartUploadResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccelerateConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccelerateConfiguration.cpp
new file mode 100644
index 00000000000..67a01a288df
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccelerateConfiguration.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AccelerateConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AccelerateConfiguration::AccelerateConfiguration() :
+ m_status(BucketAccelerateStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+}
+
+AccelerateConfiguration::AccelerateConfiguration(const XmlNode& xmlNode) :
+ m_status(BucketAccelerateStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AccelerateConfiguration& AccelerateConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = BucketAccelerateStatusMapper::GetBucketAccelerateStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AccelerateConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(BucketAccelerateStatusMapper::GetNameForBucketAccelerateStatus(m_status));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlPolicy.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlPolicy.cpp
new file mode 100644
index 00000000000..78efb9809c4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlPolicy.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AccessControlPolicy.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AccessControlPolicy::AccessControlPolicy() :
+ m_grantsHasBeenSet(false),
+ m_ownerHasBeenSet(false)
+{
+}
+
+AccessControlPolicy::AccessControlPolicy(const XmlNode& xmlNode) :
+ m_grantsHasBeenSet(false),
+ m_ownerHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AccessControlPolicy& AccessControlPolicy::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode grantsNode = resultNode.FirstChild("AccessControlList");
+ if(!grantsNode.IsNull())
+ {
+ XmlNode grantsMember = grantsNode.FirstChild("Grant");
+ while(!grantsMember.IsNull())
+ {
+ m_grants.push_back(grantsMember);
+ grantsMember = grantsMember.NextNode("Grant");
+ }
+
+ m_grantsHasBeenSet = true;
+ }
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ m_ownerHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AccessControlPolicy::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_grantsHasBeenSet)
+ {
+ XmlNode grantsParentNode = parentNode.CreateChildElement("AccessControlList");
+ for(const auto& item : m_grants)
+ {
+ XmlNode grantsNode = grantsParentNode.CreateChildElement("Grant");
+ item.AddToNode(grantsNode);
+ }
+ }
+
+ if(m_ownerHasBeenSet)
+ {
+ XmlNode ownerNode = parentNode.CreateChildElement("Owner");
+ m_owner.AddToNode(ownerNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlTranslation.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlTranslation.cpp
new file mode 100644
index 00000000000..de34b1189bc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AccessControlTranslation.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AccessControlTranslation.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AccessControlTranslation::AccessControlTranslation() :
+ m_owner(OwnerOverride::NOT_SET),
+ m_ownerHasBeenSet(false)
+{
+}
+
+AccessControlTranslation::AccessControlTranslation(const XmlNode& xmlNode) :
+ m_owner(OwnerOverride::NOT_SET),
+ m_ownerHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AccessControlTranslation& AccessControlTranslation::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = OwnerOverrideMapper::GetOwnerOverrideForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(ownerNode.GetText()).c_str()).c_str());
+ m_ownerHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AccessControlTranslation::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_ownerHasBeenSet)
+ {
+ XmlNode ownerNode = parentNode.CreateChildElement("Owner");
+ ownerNode.SetText(OwnerOverrideMapper::GetNameForOwnerOverride(m_owner));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsAndOperator.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsAndOperator.cpp
new file mode 100644
index 00000000000..8c25c4e75f8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsAndOperator.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AnalyticsAndOperator.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AnalyticsAndOperator::AnalyticsAndOperator() :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+}
+
+AnalyticsAndOperator::AnalyticsAndOperator(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AnalyticsAndOperator& AnalyticsAndOperator::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagsNode = resultNode.FirstChild("Tag");
+ if(!tagsNode.IsNull())
+ {
+ XmlNode tagMember = tagsNode;
+ while(!tagMember.IsNull())
+ {
+ m_tags.push_back(tagMember);
+ tagMember = tagMember.NextNode("Tag");
+ }
+
+ m_tagsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AnalyticsAndOperator::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagsHasBeenSet)
+ {
+ XmlNode tagsParentNode = parentNode.CreateChildElement("Tags");
+ for(const auto& item : m_tags)
+ {
+ XmlNode tagsNode = tagsParentNode.CreateChildElement("Tag");
+ item.AddToNode(tagsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsConfiguration.cpp
new file mode 100644
index 00000000000..0ca8b9fef4b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsConfiguration.cpp
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AnalyticsConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AnalyticsConfiguration::AnalyticsConfiguration() :
+ m_idHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_storageClassAnalysisHasBeenSet(false)
+{
+}
+
+AnalyticsConfiguration::AnalyticsConfiguration(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_storageClassAnalysisHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AnalyticsConfiguration& AnalyticsConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ XmlNode storageClassAnalysisNode = resultNode.FirstChild("StorageClassAnalysis");
+ if(!storageClassAnalysisNode.IsNull())
+ {
+ m_storageClassAnalysis = storageClassAnalysisNode;
+ m_storageClassAnalysisHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AnalyticsConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+ if(m_storageClassAnalysisHasBeenSet)
+ {
+ XmlNode storageClassAnalysisNode = parentNode.CreateChildElement("StorageClassAnalysis");
+ m_storageClassAnalysis.AddToNode(storageClassAnalysisNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsExportDestination.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsExportDestination.cpp
new file mode 100644
index 00000000000..0993bf28b9b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsExportDestination.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AnalyticsExportDestination.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AnalyticsExportDestination::AnalyticsExportDestination() :
+ m_s3BucketDestinationHasBeenSet(false)
+{
+}
+
+AnalyticsExportDestination::AnalyticsExportDestination(const XmlNode& xmlNode) :
+ m_s3BucketDestinationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AnalyticsExportDestination& AnalyticsExportDestination::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode s3BucketDestinationNode = resultNode.FirstChild("S3BucketDestination");
+ if(!s3BucketDestinationNode.IsNull())
+ {
+ m_s3BucketDestination = s3BucketDestinationNode;
+ m_s3BucketDestinationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AnalyticsExportDestination::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_s3BucketDestinationHasBeenSet)
+ {
+ XmlNode s3BucketDestinationNode = parentNode.CreateChildElement("S3BucketDestination");
+ m_s3BucketDestination.AddToNode(s3BucketDestinationNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsFilter.cpp
new file mode 100644
index 00000000000..f4428f1ad13
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsFilter.cpp
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AnalyticsFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AnalyticsFilter::AnalyticsFilter() :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+}
+
+AnalyticsFilter::AnalyticsFilter(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AnalyticsFilter& AnalyticsFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagNode = resultNode.FirstChild("Tag");
+ if(!tagNode.IsNull())
+ {
+ m_tag = tagNode;
+ m_tagHasBeenSet = true;
+ }
+ XmlNode andNode = resultNode.FirstChild("And");
+ if(!andNode.IsNull())
+ {
+ m_and = andNode;
+ m_andHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AnalyticsFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagHasBeenSet)
+ {
+ XmlNode tagNode = parentNode.CreateChildElement("Tag");
+ m_tag.AddToNode(tagNode);
+ }
+
+ if(m_andHasBeenSet)
+ {
+ XmlNode andNode = parentNode.CreateChildElement("And");
+ m_and.AddToNode(andNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3BucketDestination.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3BucketDestination.cpp
new file mode 100644
index 00000000000..6722b20888a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3BucketDestination.cpp
@@ -0,0 +1,108 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AnalyticsS3BucketDestination.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+AnalyticsS3BucketDestination::AnalyticsS3BucketDestination() :
+ m_format(AnalyticsS3ExportFileFormat::NOT_SET),
+ m_formatHasBeenSet(false),
+ m_bucketAccountIdHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_prefixHasBeenSet(false)
+{
+}
+
+AnalyticsS3BucketDestination::AnalyticsS3BucketDestination(const XmlNode& xmlNode) :
+ m_format(AnalyticsS3ExportFileFormat::NOT_SET),
+ m_formatHasBeenSet(false),
+ m_bucketAccountIdHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_prefixHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+AnalyticsS3BucketDestination& AnalyticsS3BucketDestination::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode formatNode = resultNode.FirstChild("Format");
+ if(!formatNode.IsNull())
+ {
+ m_format = AnalyticsS3ExportFileFormatMapper::GetAnalyticsS3ExportFileFormatForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(formatNode.GetText()).c_str()).c_str());
+ m_formatHasBeenSet = true;
+ }
+ XmlNode bucketAccountIdNode = resultNode.FirstChild("BucketAccountId");
+ if(!bucketAccountIdNode.IsNull())
+ {
+ m_bucketAccountId = Aws::Utils::Xml::DecodeEscapedXmlText(bucketAccountIdNode.GetText());
+ m_bucketAccountIdHasBeenSet = true;
+ }
+ XmlNode bucketNode = resultNode.FirstChild("Bucket");
+ if(!bucketNode.IsNull())
+ {
+ m_bucket = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNode.GetText());
+ m_bucketHasBeenSet = true;
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void AnalyticsS3BucketDestination::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_formatHasBeenSet)
+ {
+ XmlNode formatNode = parentNode.CreateChildElement("Format");
+ formatNode.SetText(AnalyticsS3ExportFileFormatMapper::GetNameForAnalyticsS3ExportFileFormat(m_format));
+ }
+
+ if(m_bucketAccountIdHasBeenSet)
+ {
+ XmlNode bucketAccountIdNode = parentNode.CreateChildElement("BucketAccountId");
+ bucketAccountIdNode.SetText(m_bucketAccountId);
+ }
+
+ if(m_bucketHasBeenSet)
+ {
+ XmlNode bucketNode = parentNode.CreateChildElement("Bucket");
+ bucketNode.SetText(m_bucket);
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3ExportFileFormat.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3ExportFileFormat.cpp
new file mode 100644
index 00000000000..50160ef5735
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/AnalyticsS3ExportFileFormat.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/AnalyticsS3ExportFileFormat.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace AnalyticsS3ExportFileFormatMapper
+ {
+
+ static const int CSV_HASH = HashingUtils::HashString("CSV");
+
+
+ AnalyticsS3ExportFileFormat GetAnalyticsS3ExportFileFormatForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == CSV_HASH)
+ {
+ return AnalyticsS3ExportFileFormat::CSV;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<AnalyticsS3ExportFileFormat>(hashCode);
+ }
+
+ return AnalyticsS3ExportFileFormat::NOT_SET;
+ }
+
+ Aws::String GetNameForAnalyticsS3ExportFileFormat(AnalyticsS3ExportFileFormat enumValue)
+ {
+ switch(enumValue)
+ {
+ case AnalyticsS3ExportFileFormat::CSV:
+ return "CSV";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace AnalyticsS3ExportFileFormatMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ArchiveStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ArchiveStatus.cpp
new file mode 100644
index 00000000000..65ebaa5232e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ArchiveStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ArchiveStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ArchiveStatusMapper
+ {
+
+ static const int ARCHIVE_ACCESS_HASH = HashingUtils::HashString("ARCHIVE_ACCESS");
+ static const int DEEP_ARCHIVE_ACCESS_HASH = HashingUtils::HashString("DEEP_ARCHIVE_ACCESS");
+
+
+ ArchiveStatus GetArchiveStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == ARCHIVE_ACCESS_HASH)
+ {
+ return ArchiveStatus::ARCHIVE_ACCESS;
+ }
+ else if (hashCode == DEEP_ARCHIVE_ACCESS_HASH)
+ {
+ return ArchiveStatus::DEEP_ARCHIVE_ACCESS;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ArchiveStatus>(hashCode);
+ }
+
+ return ArchiveStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForArchiveStatus(ArchiveStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ArchiveStatus::ARCHIVE_ACCESS:
+ return "ARCHIVE_ACCESS";
+ case ArchiveStatus::DEEP_ARCHIVE_ACCESS:
+ return "DEEP_ARCHIVE_ACCESS";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ArchiveStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Bucket.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Bucket.cpp
new file mode 100644
index 00000000000..1ad9b5f3104
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Bucket.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Bucket.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Bucket::Bucket() :
+ m_nameHasBeenSet(false),
+ m_creationDateHasBeenSet(false)
+{
+}
+
+Bucket::Bucket(const XmlNode& xmlNode) :
+ m_nameHasBeenSet(false),
+ m_creationDateHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Bucket& Bucket::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode nameNode = resultNode.FirstChild("Name");
+ if(!nameNode.IsNull())
+ {
+ m_name = Aws::Utils::Xml::DecodeEscapedXmlText(nameNode.GetText());
+ m_nameHasBeenSet = true;
+ }
+ XmlNode creationDateNode = resultNode.FirstChild("CreationDate");
+ if(!creationDateNode.IsNull())
+ {
+ m_creationDate = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(creationDateNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_creationDateHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Bucket::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_nameHasBeenSet)
+ {
+ XmlNode nameNode = parentNode.CreateChildElement("Name");
+ nameNode.SetText(m_name);
+ }
+
+ if(m_creationDateHasBeenSet)
+ {
+ XmlNode creationDateNode = parentNode.CreateChildElement("CreationDate");
+ creationDateNode.SetText(m_creationDate.ToGmtString(DateFormat::ISO_8601));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketAccelerateStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketAccelerateStatus.cpp
new file mode 100644
index 00000000000..8de8e5085d1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketAccelerateStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/BucketAccelerateStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace BucketAccelerateStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Suspended_HASH = HashingUtils::HashString("Suspended");
+
+
+ BucketAccelerateStatus GetBucketAccelerateStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return BucketAccelerateStatus::Enabled;
+ }
+ else if (hashCode == Suspended_HASH)
+ {
+ return BucketAccelerateStatus::Suspended;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<BucketAccelerateStatus>(hashCode);
+ }
+
+ return BucketAccelerateStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForBucketAccelerateStatus(BucketAccelerateStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case BucketAccelerateStatus::Enabled:
+ return "Enabled";
+ case BucketAccelerateStatus::Suspended:
+ return "Suspended";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace BucketAccelerateStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketCannedACL.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketCannedACL.cpp
new file mode 100644
index 00000000000..d00069a78f8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketCannedACL.cpp
@@ -0,0 +1,84 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/BucketCannedACL.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace BucketCannedACLMapper
+ {
+
+ static const int private__HASH = HashingUtils::HashString("private");
+ static const int public_read_HASH = HashingUtils::HashString("public-read");
+ static const int public_read_write_HASH = HashingUtils::HashString("public-read-write");
+ static const int authenticated_read_HASH = HashingUtils::HashString("authenticated-read");
+
+
+ BucketCannedACL GetBucketCannedACLForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == private__HASH)
+ {
+ return BucketCannedACL::private_;
+ }
+ else if (hashCode == public_read_HASH)
+ {
+ return BucketCannedACL::public_read;
+ }
+ else if (hashCode == public_read_write_HASH)
+ {
+ return BucketCannedACL::public_read_write;
+ }
+ else if (hashCode == authenticated_read_HASH)
+ {
+ return BucketCannedACL::authenticated_read;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<BucketCannedACL>(hashCode);
+ }
+
+ return BucketCannedACL::NOT_SET;
+ }
+
+ Aws::String GetNameForBucketCannedACL(BucketCannedACL enumValue)
+ {
+ switch(enumValue)
+ {
+ case BucketCannedACL::private_:
+ return "private";
+ case BucketCannedACL::public_read:
+ return "public-read";
+ case BucketCannedACL::public_read_write:
+ return "public-read-write";
+ case BucketCannedACL::authenticated_read:
+ return "authenticated-read";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace BucketCannedACLMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLifecycleConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLifecycleConfiguration.cpp
new file mode 100644
index 00000000000..ffec873f644
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLifecycleConfiguration.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/BucketLifecycleConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+BucketLifecycleConfiguration::BucketLifecycleConfiguration() :
+ m_rulesHasBeenSet(false)
+{
+}
+
+BucketLifecycleConfiguration::BucketLifecycleConfiguration(const XmlNode& xmlNode) :
+ m_rulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+BucketLifecycleConfiguration& BucketLifecycleConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode rulesNode = resultNode.FirstChild("Rule");
+ if(!rulesNode.IsNull())
+ {
+ XmlNode ruleMember = rulesNode;
+ while(!ruleMember.IsNull())
+ {
+ m_rules.push_back(ruleMember);
+ ruleMember = ruleMember.NextNode("Rule");
+ }
+
+ m_rulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void BucketLifecycleConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_rulesHasBeenSet)
+ {
+ for(const auto& item : m_rules)
+ {
+ XmlNode rulesNode = parentNode.CreateChildElement("Rule");
+ item.AddToNode(rulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLocationConstraint.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLocationConstraint.cpp
new file mode 100644
index 00000000000..1bcdd2b4712
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLocationConstraint.cpp
@@ -0,0 +1,238 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/BucketLocationConstraint.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace BucketLocationConstraintMapper
+ {
+
+ static const int af_south_1_HASH = HashingUtils::HashString("af-south-1");
+ static const int ap_east_1_HASH = HashingUtils::HashString("ap-east-1");
+ static const int ap_northeast_1_HASH = HashingUtils::HashString("ap-northeast-1");
+ static const int ap_northeast_2_HASH = HashingUtils::HashString("ap-northeast-2");
+ static const int ap_northeast_3_HASH = HashingUtils::HashString("ap-northeast-3");
+ static const int ap_south_1_HASH = HashingUtils::HashString("ap-south-1");
+ static const int ap_southeast_1_HASH = HashingUtils::HashString("ap-southeast-1");
+ static const int ap_southeast_2_HASH = HashingUtils::HashString("ap-southeast-2");
+ static const int ca_central_1_HASH = HashingUtils::HashString("ca-central-1");
+ static const int cn_north_1_HASH = HashingUtils::HashString("cn-north-1");
+ static const int cn_northwest_1_HASH = HashingUtils::HashString("cn-northwest-1");
+ static const int EU_HASH = HashingUtils::HashString("EU");
+ static const int eu_central_1_HASH = HashingUtils::HashString("eu-central-1");
+ static const int eu_north_1_HASH = HashingUtils::HashString("eu-north-1");
+ static const int eu_south_1_HASH = HashingUtils::HashString("eu-south-1");
+ static const int eu_west_1_HASH = HashingUtils::HashString("eu-west-1");
+ static const int eu_west_2_HASH = HashingUtils::HashString("eu-west-2");
+ static const int eu_west_3_HASH = HashingUtils::HashString("eu-west-3");
+ static const int me_south_1_HASH = HashingUtils::HashString("me-south-1");
+ static const int sa_east_1_HASH = HashingUtils::HashString("sa-east-1");
+ static const int us_east_2_HASH = HashingUtils::HashString("us-east-2");
+ static const int us_gov_east_1_HASH = HashingUtils::HashString("us-gov-east-1");
+ static const int us_gov_west_1_HASH = HashingUtils::HashString("us-gov-west-1");
+ static const int us_west_1_HASH = HashingUtils::HashString("us-west-1");
+ static const int us_west_2_HASH = HashingUtils::HashString("us-west-2");
+ static const int us_east_1_HASH = HashingUtils::HashString("us-east-1");
+
+
+ BucketLocationConstraint GetBucketLocationConstraintForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == af_south_1_HASH)
+ {
+ return BucketLocationConstraint::af_south_1;
+ }
+ else if (hashCode == ap_east_1_HASH)
+ {
+ return BucketLocationConstraint::ap_east_1;
+ }
+ else if (hashCode == ap_northeast_1_HASH)
+ {
+ return BucketLocationConstraint::ap_northeast_1;
+ }
+ else if (hashCode == ap_northeast_2_HASH)
+ {
+ return BucketLocationConstraint::ap_northeast_2;
+ }
+ else if (hashCode == ap_northeast_3_HASH)
+ {
+ return BucketLocationConstraint::ap_northeast_3;
+ }
+ else if (hashCode == ap_south_1_HASH)
+ {
+ return BucketLocationConstraint::ap_south_1;
+ }
+ else if (hashCode == ap_southeast_1_HASH)
+ {
+ return BucketLocationConstraint::ap_southeast_1;
+ }
+ else if (hashCode == ap_southeast_2_HASH)
+ {
+ return BucketLocationConstraint::ap_southeast_2;
+ }
+ else if (hashCode == ca_central_1_HASH)
+ {
+ return BucketLocationConstraint::ca_central_1;
+ }
+ else if (hashCode == cn_north_1_HASH)
+ {
+ return BucketLocationConstraint::cn_north_1;
+ }
+ else if (hashCode == cn_northwest_1_HASH)
+ {
+ return BucketLocationConstraint::cn_northwest_1;
+ }
+ else if (hashCode == EU_HASH)
+ {
+ return BucketLocationConstraint::EU;
+ }
+ else if (hashCode == eu_central_1_HASH)
+ {
+ return BucketLocationConstraint::eu_central_1;
+ }
+ else if (hashCode == eu_north_1_HASH)
+ {
+ return BucketLocationConstraint::eu_north_1;
+ }
+ else if (hashCode == eu_south_1_HASH)
+ {
+ return BucketLocationConstraint::eu_south_1;
+ }
+ else if (hashCode == eu_west_1_HASH)
+ {
+ return BucketLocationConstraint::eu_west_1;
+ }
+ else if (hashCode == eu_west_2_HASH)
+ {
+ return BucketLocationConstraint::eu_west_2;
+ }
+ else if (hashCode == eu_west_3_HASH)
+ {
+ return BucketLocationConstraint::eu_west_3;
+ }
+ else if (hashCode == me_south_1_HASH)
+ {
+ return BucketLocationConstraint::me_south_1;
+ }
+ else if (hashCode == sa_east_1_HASH)
+ {
+ return BucketLocationConstraint::sa_east_1;
+ }
+ else if (hashCode == us_east_2_HASH)
+ {
+ return BucketLocationConstraint::us_east_2;
+ }
+ else if (hashCode == us_gov_east_1_HASH)
+ {
+ return BucketLocationConstraint::us_gov_east_1;
+ }
+ else if (hashCode == us_gov_west_1_HASH)
+ {
+ return BucketLocationConstraint::us_gov_west_1;
+ }
+ else if (hashCode == us_west_1_HASH)
+ {
+ return BucketLocationConstraint::us_west_1;
+ }
+ else if (hashCode == us_west_2_HASH)
+ {
+ return BucketLocationConstraint::us_west_2;
+ }
+ else if (hashCode == us_east_1_HASH)
+ {
+ return BucketLocationConstraint::us_east_1;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<BucketLocationConstraint>(hashCode);
+ }
+
+ return BucketLocationConstraint::NOT_SET;
+ }
+
+ Aws::String GetNameForBucketLocationConstraint(BucketLocationConstraint enumValue)
+ {
+ switch(enumValue)
+ {
+ case BucketLocationConstraint::af_south_1:
+ return "af-south-1";
+ case BucketLocationConstraint::ap_east_1:
+ return "ap-east-1";
+ case BucketLocationConstraint::ap_northeast_1:
+ return "ap-northeast-1";
+ case BucketLocationConstraint::ap_northeast_2:
+ return "ap-northeast-2";
+ case BucketLocationConstraint::ap_northeast_3:
+ return "ap-northeast-3";
+ case BucketLocationConstraint::ap_south_1:
+ return "ap-south-1";
+ case BucketLocationConstraint::ap_southeast_1:
+ return "ap-southeast-1";
+ case BucketLocationConstraint::ap_southeast_2:
+ return "ap-southeast-2";
+ case BucketLocationConstraint::ca_central_1:
+ return "ca-central-1";
+ case BucketLocationConstraint::cn_north_1:
+ return "cn-north-1";
+ case BucketLocationConstraint::cn_northwest_1:
+ return "cn-northwest-1";
+ case BucketLocationConstraint::EU:
+ return "EU";
+ case BucketLocationConstraint::eu_central_1:
+ return "eu-central-1";
+ case BucketLocationConstraint::eu_north_1:
+ return "eu-north-1";
+ case BucketLocationConstraint::eu_south_1:
+ return "eu-south-1";
+ case BucketLocationConstraint::eu_west_1:
+ return "eu-west-1";
+ case BucketLocationConstraint::eu_west_2:
+ return "eu-west-2";
+ case BucketLocationConstraint::eu_west_3:
+ return "eu-west-3";
+ case BucketLocationConstraint::me_south_1:
+ return "me-south-1";
+ case BucketLocationConstraint::sa_east_1:
+ return "sa-east-1";
+ case BucketLocationConstraint::us_east_2:
+ return "us-east-2";
+ case BucketLocationConstraint::us_gov_east_1:
+ return "us-gov-east-1";
+ case BucketLocationConstraint::us_gov_west_1:
+ return "us-gov-west-1";
+ case BucketLocationConstraint::us_west_1:
+ return "us-west-1";
+ case BucketLocationConstraint::us_west_2:
+ return "us-west-2";
+ case BucketLocationConstraint::us_east_1:
+ return "us-east-1";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace BucketLocationConstraintMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLoggingStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLoggingStatus.cpp
new file mode 100644
index 00000000000..fba5c076d7b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLoggingStatus.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/BucketLoggingStatus.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+BucketLoggingStatus::BucketLoggingStatus() :
+ m_loggingEnabledHasBeenSet(false)
+{
+}
+
+BucketLoggingStatus::BucketLoggingStatus(const XmlNode& xmlNode) :
+ m_loggingEnabledHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+BucketLoggingStatus& BucketLoggingStatus::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode loggingEnabledNode = resultNode.FirstChild("LoggingEnabled");
+ if(!loggingEnabledNode.IsNull())
+ {
+ m_loggingEnabled = loggingEnabledNode;
+ m_loggingEnabledHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void BucketLoggingStatus::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_loggingEnabledHasBeenSet)
+ {
+ XmlNode loggingEnabledNode = parentNode.CreateChildElement("LoggingEnabled");
+ m_loggingEnabled.AddToNode(loggingEnabledNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLogsPermission.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLogsPermission.cpp
new file mode 100644
index 00000000000..f419f46bdcb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketLogsPermission.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/BucketLogsPermission.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace BucketLogsPermissionMapper
+ {
+
+ static const int FULL_CONTROL_HASH = HashingUtils::HashString("FULL_CONTROL");
+ static const int READ_HASH = HashingUtils::HashString("READ");
+ static const int WRITE_HASH = HashingUtils::HashString("WRITE");
+
+
+ BucketLogsPermission GetBucketLogsPermissionForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == FULL_CONTROL_HASH)
+ {
+ return BucketLogsPermission::FULL_CONTROL;
+ }
+ else if (hashCode == READ_HASH)
+ {
+ return BucketLogsPermission::READ;
+ }
+ else if (hashCode == WRITE_HASH)
+ {
+ return BucketLogsPermission::WRITE;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<BucketLogsPermission>(hashCode);
+ }
+
+ return BucketLogsPermission::NOT_SET;
+ }
+
+ Aws::String GetNameForBucketLogsPermission(BucketLogsPermission enumValue)
+ {
+ switch(enumValue)
+ {
+ case BucketLogsPermission::FULL_CONTROL:
+ return "FULL_CONTROL";
+ case BucketLogsPermission::READ:
+ return "READ";
+ case BucketLogsPermission::WRITE:
+ return "WRITE";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace BucketLogsPermissionMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketVersioningStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketVersioningStatus.cpp
new file mode 100644
index 00000000000..d561ddb8a94
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/BucketVersioningStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/BucketVersioningStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace BucketVersioningStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Suspended_HASH = HashingUtils::HashString("Suspended");
+
+
+ BucketVersioningStatus GetBucketVersioningStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return BucketVersioningStatus::Enabled;
+ }
+ else if (hashCode == Suspended_HASH)
+ {
+ return BucketVersioningStatus::Suspended;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<BucketVersioningStatus>(hashCode);
+ }
+
+ return BucketVersioningStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForBucketVersioningStatus(BucketVersioningStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case BucketVersioningStatus::Enabled:
+ return "Enabled";
+ case BucketVersioningStatus::Suspended:
+ return "Suspended";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace BucketVersioningStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSConfiguration.cpp
new file mode 100644
index 00000000000..e9adaac5633
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSConfiguration.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CORSConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CORSConfiguration::CORSConfiguration() :
+ m_cORSRulesHasBeenSet(false)
+{
+}
+
+CORSConfiguration::CORSConfiguration(const XmlNode& xmlNode) :
+ m_cORSRulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CORSConfiguration& CORSConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode cORSRulesNode = resultNode.FirstChild("CORSRule");
+ if(!cORSRulesNode.IsNull())
+ {
+ XmlNode cORSRuleMember = cORSRulesNode;
+ while(!cORSRuleMember.IsNull())
+ {
+ m_cORSRules.push_back(cORSRuleMember);
+ cORSRuleMember = cORSRuleMember.NextNode("CORSRule");
+ }
+
+ m_cORSRulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CORSConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_cORSRulesHasBeenSet)
+ {
+ for(const auto& item : m_cORSRules)
+ {
+ XmlNode cORSRulesNode = parentNode.CreateChildElement("CORSRule");
+ item.AddToNode(cORSRulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSRule.cpp
new file mode 100644
index 00000000000..dd1b40db2fd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CORSRule.cpp
@@ -0,0 +1,160 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CORSRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CORSRule::CORSRule() :
+ m_allowedHeadersHasBeenSet(false),
+ m_allowedMethodsHasBeenSet(false),
+ m_allowedOriginsHasBeenSet(false),
+ m_exposeHeadersHasBeenSet(false),
+ m_maxAgeSeconds(0),
+ m_maxAgeSecondsHasBeenSet(false)
+{
+}
+
+CORSRule::CORSRule(const XmlNode& xmlNode) :
+ m_allowedHeadersHasBeenSet(false),
+ m_allowedMethodsHasBeenSet(false),
+ m_allowedOriginsHasBeenSet(false),
+ m_exposeHeadersHasBeenSet(false),
+ m_maxAgeSeconds(0),
+ m_maxAgeSecondsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CORSRule& CORSRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode allowedHeadersNode = resultNode.FirstChild("AllowedHeader");
+ if(!allowedHeadersNode.IsNull())
+ {
+ XmlNode allowedHeaderMember = allowedHeadersNode;
+ while(!allowedHeaderMember.IsNull())
+ {
+ m_allowedHeaders.push_back(allowedHeaderMember.GetText());
+ allowedHeaderMember = allowedHeaderMember.NextNode("AllowedHeader");
+ }
+
+ m_allowedHeadersHasBeenSet = true;
+ }
+ XmlNode allowedMethodsNode = resultNode.FirstChild("AllowedMethod");
+ if(!allowedMethodsNode.IsNull())
+ {
+ XmlNode allowedMethodMember = allowedMethodsNode;
+ while(!allowedMethodMember.IsNull())
+ {
+ m_allowedMethods.push_back(allowedMethodMember.GetText());
+ allowedMethodMember = allowedMethodMember.NextNode("AllowedMethod");
+ }
+
+ m_allowedMethodsHasBeenSet = true;
+ }
+ XmlNode allowedOriginsNode = resultNode.FirstChild("AllowedOrigin");
+ if(!allowedOriginsNode.IsNull())
+ {
+ XmlNode allowedOriginMember = allowedOriginsNode;
+ while(!allowedOriginMember.IsNull())
+ {
+ m_allowedOrigins.push_back(allowedOriginMember.GetText());
+ allowedOriginMember = allowedOriginMember.NextNode("AllowedOrigin");
+ }
+
+ m_allowedOriginsHasBeenSet = true;
+ }
+ XmlNode exposeHeadersNode = resultNode.FirstChild("ExposeHeader");
+ if(!exposeHeadersNode.IsNull())
+ {
+ XmlNode exposeHeaderMember = exposeHeadersNode;
+ while(!exposeHeaderMember.IsNull())
+ {
+ m_exposeHeaders.push_back(exposeHeaderMember.GetText());
+ exposeHeaderMember = exposeHeaderMember.NextNode("ExposeHeader");
+ }
+
+ m_exposeHeadersHasBeenSet = true;
+ }
+ XmlNode maxAgeSecondsNode = resultNode.FirstChild("MaxAgeSeconds");
+ if(!maxAgeSecondsNode.IsNull())
+ {
+ m_maxAgeSeconds = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(maxAgeSecondsNode.GetText()).c_str()).c_str());
+ m_maxAgeSecondsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CORSRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_allowedHeadersHasBeenSet)
+ {
+ for(const auto& item : m_allowedHeaders)
+ {
+ XmlNode allowedHeadersNode = parentNode.CreateChildElement("AllowedHeader");
+ allowedHeadersNode.SetText(item);
+ }
+ }
+
+ if(m_allowedMethodsHasBeenSet)
+ {
+ for(const auto& item : m_allowedMethods)
+ {
+ XmlNode allowedMethodsNode = parentNode.CreateChildElement("AllowedMethod");
+ allowedMethodsNode.SetText(item);
+ }
+ }
+
+ if(m_allowedOriginsHasBeenSet)
+ {
+ for(const auto& item : m_allowedOrigins)
+ {
+ XmlNode allowedOriginsNode = parentNode.CreateChildElement("AllowedOrigin");
+ allowedOriginsNode.SetText(item);
+ }
+ }
+
+ if(m_exposeHeadersHasBeenSet)
+ {
+ for(const auto& item : m_exposeHeaders)
+ {
+ XmlNode exposeHeadersNode = parentNode.CreateChildElement("ExposeHeader");
+ exposeHeadersNode.SetText(item);
+ }
+ }
+
+ if(m_maxAgeSecondsHasBeenSet)
+ {
+ XmlNode maxAgeSecondsNode = parentNode.CreateChildElement("MaxAgeSeconds");
+ ss << m_maxAgeSeconds;
+ maxAgeSecondsNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVInput.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVInput.cpp
new file mode 100644
index 00000000000..fb0fe5b4c8e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVInput.cpp
@@ -0,0 +1,154 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CSVInput.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CSVInput::CSVInput() :
+ m_fileHeaderInfo(FileHeaderInfo::NOT_SET),
+ m_fileHeaderInfoHasBeenSet(false),
+ m_commentsHasBeenSet(false),
+ m_quoteEscapeCharacterHasBeenSet(false),
+ m_recordDelimiterHasBeenSet(false),
+ m_fieldDelimiterHasBeenSet(false),
+ m_quoteCharacterHasBeenSet(false),
+ m_allowQuotedRecordDelimiter(false),
+ m_allowQuotedRecordDelimiterHasBeenSet(false)
+{
+}
+
+CSVInput::CSVInput(const XmlNode& xmlNode) :
+ m_fileHeaderInfo(FileHeaderInfo::NOT_SET),
+ m_fileHeaderInfoHasBeenSet(false),
+ m_commentsHasBeenSet(false),
+ m_quoteEscapeCharacterHasBeenSet(false),
+ m_recordDelimiterHasBeenSet(false),
+ m_fieldDelimiterHasBeenSet(false),
+ m_quoteCharacterHasBeenSet(false),
+ m_allowQuotedRecordDelimiter(false),
+ m_allowQuotedRecordDelimiterHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CSVInput& CSVInput::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode fileHeaderInfoNode = resultNode.FirstChild("FileHeaderInfo");
+ if(!fileHeaderInfoNode.IsNull())
+ {
+ m_fileHeaderInfo = FileHeaderInfoMapper::GetFileHeaderInfoForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(fileHeaderInfoNode.GetText()).c_str()).c_str());
+ m_fileHeaderInfoHasBeenSet = true;
+ }
+ XmlNode commentsNode = resultNode.FirstChild("Comments");
+ if(!commentsNode.IsNull())
+ {
+ m_comments = Aws::Utils::Xml::DecodeEscapedXmlText(commentsNode.GetText());
+ m_commentsHasBeenSet = true;
+ }
+ XmlNode quoteEscapeCharacterNode = resultNode.FirstChild("QuoteEscapeCharacter");
+ if(!quoteEscapeCharacterNode.IsNull())
+ {
+ m_quoteEscapeCharacter = Aws::Utils::Xml::DecodeEscapedXmlText(quoteEscapeCharacterNode.GetText());
+ m_quoteEscapeCharacterHasBeenSet = true;
+ }
+ XmlNode recordDelimiterNode = resultNode.FirstChild("RecordDelimiter");
+ if(!recordDelimiterNode.IsNull())
+ {
+ m_recordDelimiter = Aws::Utils::Xml::DecodeEscapedXmlText(recordDelimiterNode.GetText());
+ m_recordDelimiterHasBeenSet = true;
+ }
+ XmlNode fieldDelimiterNode = resultNode.FirstChild("FieldDelimiter");
+ if(!fieldDelimiterNode.IsNull())
+ {
+ m_fieldDelimiter = Aws::Utils::Xml::DecodeEscapedXmlText(fieldDelimiterNode.GetText());
+ m_fieldDelimiterHasBeenSet = true;
+ }
+ XmlNode quoteCharacterNode = resultNode.FirstChild("QuoteCharacter");
+ if(!quoteCharacterNode.IsNull())
+ {
+ m_quoteCharacter = Aws::Utils::Xml::DecodeEscapedXmlText(quoteCharacterNode.GetText());
+ m_quoteCharacterHasBeenSet = true;
+ }
+ XmlNode allowQuotedRecordDelimiterNode = resultNode.FirstChild("AllowQuotedRecordDelimiter");
+ if(!allowQuotedRecordDelimiterNode.IsNull())
+ {
+ m_allowQuotedRecordDelimiter = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(allowQuotedRecordDelimiterNode.GetText()).c_str()).c_str());
+ m_allowQuotedRecordDelimiterHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CSVInput::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_fileHeaderInfoHasBeenSet)
+ {
+ XmlNode fileHeaderInfoNode = parentNode.CreateChildElement("FileHeaderInfo");
+ fileHeaderInfoNode.SetText(FileHeaderInfoMapper::GetNameForFileHeaderInfo(m_fileHeaderInfo));
+ }
+
+ if(m_commentsHasBeenSet)
+ {
+ XmlNode commentsNode = parentNode.CreateChildElement("Comments");
+ commentsNode.SetText(m_comments);
+ }
+
+ if(m_quoteEscapeCharacterHasBeenSet)
+ {
+ XmlNode quoteEscapeCharacterNode = parentNode.CreateChildElement("QuoteEscapeCharacter");
+ quoteEscapeCharacterNode.SetText(m_quoteEscapeCharacter);
+ }
+
+ if(m_recordDelimiterHasBeenSet)
+ {
+ XmlNode recordDelimiterNode = parentNode.CreateChildElement("RecordDelimiter");
+ recordDelimiterNode.SetText(m_recordDelimiter);
+ }
+
+ if(m_fieldDelimiterHasBeenSet)
+ {
+ XmlNode fieldDelimiterNode = parentNode.CreateChildElement("FieldDelimiter");
+ fieldDelimiterNode.SetText(m_fieldDelimiter);
+ }
+
+ if(m_quoteCharacterHasBeenSet)
+ {
+ XmlNode quoteCharacterNode = parentNode.CreateChildElement("QuoteCharacter");
+ quoteCharacterNode.SetText(m_quoteCharacter);
+ }
+
+ if(m_allowQuotedRecordDelimiterHasBeenSet)
+ {
+ XmlNode allowQuotedRecordDelimiterNode = parentNode.CreateChildElement("AllowQuotedRecordDelimiter");
+ ss << std::boolalpha << m_allowQuotedRecordDelimiter;
+ allowQuotedRecordDelimiterNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVOutput.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVOutput.cpp
new file mode 100644
index 00000000000..e48e8184f27
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CSVOutput.cpp
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CSVOutput.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CSVOutput::CSVOutput() :
+ m_quoteFields(QuoteFields::NOT_SET),
+ m_quoteFieldsHasBeenSet(false),
+ m_quoteEscapeCharacterHasBeenSet(false),
+ m_recordDelimiterHasBeenSet(false),
+ m_fieldDelimiterHasBeenSet(false),
+ m_quoteCharacterHasBeenSet(false)
+{
+}
+
+CSVOutput::CSVOutput(const XmlNode& xmlNode) :
+ m_quoteFields(QuoteFields::NOT_SET),
+ m_quoteFieldsHasBeenSet(false),
+ m_quoteEscapeCharacterHasBeenSet(false),
+ m_recordDelimiterHasBeenSet(false),
+ m_fieldDelimiterHasBeenSet(false),
+ m_quoteCharacterHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CSVOutput& CSVOutput::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode quoteFieldsNode = resultNode.FirstChild("QuoteFields");
+ if(!quoteFieldsNode.IsNull())
+ {
+ m_quoteFields = QuoteFieldsMapper::GetQuoteFieldsForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(quoteFieldsNode.GetText()).c_str()).c_str());
+ m_quoteFieldsHasBeenSet = true;
+ }
+ XmlNode quoteEscapeCharacterNode = resultNode.FirstChild("QuoteEscapeCharacter");
+ if(!quoteEscapeCharacterNode.IsNull())
+ {
+ m_quoteEscapeCharacter = Aws::Utils::Xml::DecodeEscapedXmlText(quoteEscapeCharacterNode.GetText());
+ m_quoteEscapeCharacterHasBeenSet = true;
+ }
+ XmlNode recordDelimiterNode = resultNode.FirstChild("RecordDelimiter");
+ if(!recordDelimiterNode.IsNull())
+ {
+ m_recordDelimiter = Aws::Utils::Xml::DecodeEscapedXmlText(recordDelimiterNode.GetText());
+ m_recordDelimiterHasBeenSet = true;
+ }
+ XmlNode fieldDelimiterNode = resultNode.FirstChild("FieldDelimiter");
+ if(!fieldDelimiterNode.IsNull())
+ {
+ m_fieldDelimiter = Aws::Utils::Xml::DecodeEscapedXmlText(fieldDelimiterNode.GetText());
+ m_fieldDelimiterHasBeenSet = true;
+ }
+ XmlNode quoteCharacterNode = resultNode.FirstChild("QuoteCharacter");
+ if(!quoteCharacterNode.IsNull())
+ {
+ m_quoteCharacter = Aws::Utils::Xml::DecodeEscapedXmlText(quoteCharacterNode.GetText());
+ m_quoteCharacterHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CSVOutput::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_quoteFieldsHasBeenSet)
+ {
+ XmlNode quoteFieldsNode = parentNode.CreateChildElement("QuoteFields");
+ quoteFieldsNode.SetText(QuoteFieldsMapper::GetNameForQuoteFields(m_quoteFields));
+ }
+
+ if(m_quoteEscapeCharacterHasBeenSet)
+ {
+ XmlNode quoteEscapeCharacterNode = parentNode.CreateChildElement("QuoteEscapeCharacter");
+ quoteEscapeCharacterNode.SetText(m_quoteEscapeCharacter);
+ }
+
+ if(m_recordDelimiterHasBeenSet)
+ {
+ XmlNode recordDelimiterNode = parentNode.CreateChildElement("RecordDelimiter");
+ recordDelimiterNode.SetText(m_recordDelimiter);
+ }
+
+ if(m_fieldDelimiterHasBeenSet)
+ {
+ XmlNode fieldDelimiterNode = parentNode.CreateChildElement("FieldDelimiter");
+ fieldDelimiterNode.SetText(m_fieldDelimiter);
+ }
+
+ if(m_quoteCharacterHasBeenSet)
+ {
+ XmlNode quoteCharacterNode = parentNode.CreateChildElement("QuoteCharacter");
+ quoteCharacterNode.SetText(m_quoteCharacter);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CloudFunctionConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CloudFunctionConfiguration.cpp
new file mode 100644
index 00000000000..66656947f80
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CloudFunctionConfiguration.cpp
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CloudFunctionConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CloudFunctionConfiguration::CloudFunctionConfiguration() :
+ m_idHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_cloudFunctionHasBeenSet(false),
+ m_invocationRoleHasBeenSet(false)
+{
+}
+
+CloudFunctionConfiguration::CloudFunctionConfiguration(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_cloudFunctionHasBeenSet(false),
+ m_invocationRoleHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CloudFunctionConfiguration& CloudFunctionConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode eventsNode = resultNode.FirstChild("Event");
+ if(!eventsNode.IsNull())
+ {
+ XmlNode eventMember = eventsNode;
+ while(!eventMember.IsNull())
+ {
+ m_events.push_back(EventMapper::GetEventForName(StringUtils::Trim(eventMember.GetText().c_str())));
+ eventMember = eventMember.NextNode("Event");
+ }
+
+ m_eventsHasBeenSet = true;
+ }
+ XmlNode cloudFunctionNode = resultNode.FirstChild("CloudFunction");
+ if(!cloudFunctionNode.IsNull())
+ {
+ m_cloudFunction = Aws::Utils::Xml::DecodeEscapedXmlText(cloudFunctionNode.GetText());
+ m_cloudFunctionHasBeenSet = true;
+ }
+ XmlNode invocationRoleNode = resultNode.FirstChild("InvocationRole");
+ if(!invocationRoleNode.IsNull())
+ {
+ m_invocationRole = Aws::Utils::Xml::DecodeEscapedXmlText(invocationRoleNode.GetText());
+ m_invocationRoleHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CloudFunctionConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_eventsHasBeenSet)
+ {
+ for(const auto& item : m_events)
+ {
+ XmlNode eventsNode = parentNode.CreateChildElement("Event");
+ eventsNode.SetText(EventMapper::GetNameForEvent(item));
+ }
+ }
+
+ if(m_cloudFunctionHasBeenSet)
+ {
+ XmlNode cloudFunctionNode = parentNode.CreateChildElement("CloudFunction");
+ cloudFunctionNode.SetText(m_cloudFunction);
+ }
+
+ if(m_invocationRoleHasBeenSet)
+ {
+ XmlNode invocationRoleNode = parentNode.CreateChildElement("InvocationRole");
+ invocationRoleNode.SetText(m_invocationRole);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CommonPrefix.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CommonPrefix.cpp
new file mode 100644
index 00000000000..bef4ebd40c8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CommonPrefix.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CommonPrefix.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CommonPrefix::CommonPrefix() :
+ m_prefixHasBeenSet(false)
+{
+}
+
+CommonPrefix::CommonPrefix(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CommonPrefix& CommonPrefix::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CommonPrefix::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadRequest.cpp
new file mode 100644
index 00000000000..8c058ba5075
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadRequest.cpp
@@ -0,0 +1,93 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CompleteMultipartUploadRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+CompleteMultipartUploadRequest::CompleteMultipartUploadRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_multipartUploadHasBeenSet(false),
+ m_uploadIdHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String CompleteMultipartUploadRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("CompleteMultipartUpload");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_multipartUpload.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void CompleteMultipartUploadRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_uploadIdHasBeenSet)
+ {
+ ss << m_uploadId;
+ uri.AddQueryStringParameter("uploadId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection CompleteMultipartUploadRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadResult.cpp
new file mode 100644
index 00000000000..da3f1919933
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompleteMultipartUploadResult.cpp
@@ -0,0 +1,101 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CompleteMultipartUploadResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+CompleteMultipartUploadResult::CompleteMultipartUploadResult() :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+CompleteMultipartUploadResult::CompleteMultipartUploadResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+CompleteMultipartUploadResult& CompleteMultipartUploadResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode locationNode = resultNode.FirstChild("Location");
+ if(!locationNode.IsNull())
+ {
+ m_location = Aws::Utils::Xml::DecodeEscapedXmlText(locationNode.GetText());
+ }
+ XmlNode bucketNode = resultNode.FirstChild("Bucket");
+ if(!bucketNode.IsNull())
+ {
+ m_bucket = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNode.GetText());
+ }
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ }
+ XmlNode eTagNode = resultNode.FirstChild("ETag");
+ if(!eTagNode.IsNull())
+ {
+ m_eTag = Aws::Utils::Xml::DecodeEscapedXmlText(eTagNode.GetText());
+ }
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& expirationIter = headers.find("x-amz-expiration");
+ if(expirationIter != headers.end())
+ {
+ m_expiration = expirationIter->second;
+ }
+
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedMultipartUpload.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedMultipartUpload.cpp
new file mode 100644
index 00000000000..350f482fa73
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedMultipartUpload.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CompletedMultipartUpload.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CompletedMultipartUpload::CompletedMultipartUpload() :
+ m_partsHasBeenSet(false)
+{
+}
+
+CompletedMultipartUpload::CompletedMultipartUpload(const XmlNode& xmlNode) :
+ m_partsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CompletedMultipartUpload& CompletedMultipartUpload::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode partsNode = resultNode.FirstChild("Part");
+ if(!partsNode.IsNull())
+ {
+ XmlNode partMember = partsNode;
+ while(!partMember.IsNull())
+ {
+ m_parts.push_back(partMember);
+ partMember = partMember.NextNode("Part");
+ }
+
+ m_partsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CompletedMultipartUpload::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_partsHasBeenSet)
+ {
+ for(const auto& item : m_parts)
+ {
+ XmlNode partsNode = parentNode.CreateChildElement("Part");
+ item.AddToNode(partsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedPart.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedPart.cpp
new file mode 100644
index 00000000000..8fb63ee1f39
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompletedPart.cpp
@@ -0,0 +1,82 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CompletedPart.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CompletedPart::CompletedPart() :
+ m_eTagHasBeenSet(false),
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false)
+{
+}
+
+CompletedPart::CompletedPart(const XmlNode& xmlNode) :
+ m_eTagHasBeenSet(false),
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CompletedPart& CompletedPart::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode eTagNode = resultNode.FirstChild("ETag");
+ if(!eTagNode.IsNull())
+ {
+ m_eTag = Aws::Utils::Xml::DecodeEscapedXmlText(eTagNode.GetText());
+ m_eTagHasBeenSet = true;
+ }
+ XmlNode partNumberNode = resultNode.FirstChild("PartNumber");
+ if(!partNumberNode.IsNull())
+ {
+ m_partNumber = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(partNumberNode.GetText()).c_str()).c_str());
+ m_partNumberHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CompletedPart::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_eTagHasBeenSet)
+ {
+ XmlNode eTagNode = parentNode.CreateChildElement("ETag");
+ eTagNode.SetText(m_eTag);
+ }
+
+ if(m_partNumberHasBeenSet)
+ {
+ XmlNode partNumberNode = parentNode.CreateChildElement("PartNumber");
+ ss << m_partNumber;
+ partNumberNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompressionType.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompressionType.cpp
new file mode 100644
index 00000000000..84b6ee5250a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CompressionType.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CompressionType.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace CompressionTypeMapper
+ {
+
+ static const int NONE_HASH = HashingUtils::HashString("NONE");
+ static const int GZIP_HASH = HashingUtils::HashString("GZIP");
+ static const int BZIP2_HASH = HashingUtils::HashString("BZIP2");
+
+
+ CompressionType GetCompressionTypeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == NONE_HASH)
+ {
+ return CompressionType::NONE;
+ }
+ else if (hashCode == GZIP_HASH)
+ {
+ return CompressionType::GZIP;
+ }
+ else if (hashCode == BZIP2_HASH)
+ {
+ return CompressionType::BZIP2;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<CompressionType>(hashCode);
+ }
+
+ return CompressionType::NOT_SET;
+ }
+
+ Aws::String GetNameForCompressionType(CompressionType enumValue)
+ {
+ switch(enumValue)
+ {
+ case CompressionType::NONE:
+ return "NONE";
+ case CompressionType::GZIP:
+ return "GZIP";
+ case CompressionType::BZIP2:
+ return "BZIP2";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace CompressionTypeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Condition.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Condition.cpp
new file mode 100644
index 00000000000..a97e68bffc9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Condition.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Condition.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Condition::Condition() :
+ m_httpErrorCodeReturnedEqualsHasBeenSet(false),
+ m_keyPrefixEqualsHasBeenSet(false)
+{
+}
+
+Condition::Condition(const XmlNode& xmlNode) :
+ m_httpErrorCodeReturnedEqualsHasBeenSet(false),
+ m_keyPrefixEqualsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Condition& Condition::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode httpErrorCodeReturnedEqualsNode = resultNode.FirstChild("HttpErrorCodeReturnedEquals");
+ if(!httpErrorCodeReturnedEqualsNode.IsNull())
+ {
+ m_httpErrorCodeReturnedEquals = Aws::Utils::Xml::DecodeEscapedXmlText(httpErrorCodeReturnedEqualsNode.GetText());
+ m_httpErrorCodeReturnedEqualsHasBeenSet = true;
+ }
+ XmlNode keyPrefixEqualsNode = resultNode.FirstChild("KeyPrefixEquals");
+ if(!keyPrefixEqualsNode.IsNull())
+ {
+ m_keyPrefixEquals = Aws::Utils::Xml::DecodeEscapedXmlText(keyPrefixEqualsNode.GetText());
+ m_keyPrefixEqualsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Condition::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_httpErrorCodeReturnedEqualsHasBeenSet)
+ {
+ XmlNode httpErrorCodeReturnedEqualsNode = parentNode.CreateChildElement("HttpErrorCodeReturnedEquals");
+ httpErrorCodeReturnedEqualsNode.SetText(m_httpErrorCodeReturnedEquals);
+ }
+
+ if(m_keyPrefixEqualsHasBeenSet)
+ {
+ XmlNode keyPrefixEqualsNode = parentNode.CreateChildElement("KeyPrefixEquals");
+ keyPrefixEqualsNode.SetText(m_keyPrefixEquals);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectRequest.cpp
new file mode 100644
index 00000000000..bd9f656890a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectRequest.cpp
@@ -0,0 +1,350 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CopyObjectRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+CopyObjectRequest::CopyObjectRequest() :
+ m_aCL(ObjectCannedACL::NOT_SET),
+ m_aCLHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_cacheControlHasBeenSet(false),
+ m_contentDispositionHasBeenSet(false),
+ m_contentEncodingHasBeenSet(false),
+ m_contentLanguageHasBeenSet(false),
+ m_contentTypeHasBeenSet(false),
+ m_copySourceHasBeenSet(false),
+ m_copySourceIfMatchHasBeenSet(false),
+ m_copySourceIfModifiedSinceHasBeenSet(false),
+ m_copySourceIfNoneMatchHasBeenSet(false),
+ m_copySourceIfUnmodifiedSinceHasBeenSet(false),
+ m_expiresHasBeenSet(false),
+ m_grantFullControlHasBeenSet(false),
+ m_grantReadHasBeenSet(false),
+ m_grantReadACPHasBeenSet(false),
+ m_grantWriteACPHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_metadataHasBeenSet(false),
+ m_metadataDirective(MetadataDirective::NOT_SET),
+ m_metadataDirectiveHasBeenSet(false),
+ m_taggingDirective(TaggingDirective::NOT_SET),
+ m_taggingDirectiveHasBeenSet(false),
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_serverSideEncryptionHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_websiteRedirectLocationHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_sSEKMSKeyIdHasBeenSet(false),
+ m_sSEKMSEncryptionContextHasBeenSet(false),
+ m_bucketKeyEnabled(false),
+ m_bucketKeyEnabledHasBeenSet(false),
+ m_copySourceSSECustomerAlgorithmHasBeenSet(false),
+ m_copySourceSSECustomerKeyHasBeenSet(false),
+ m_copySourceSSECustomerKeyMD5HasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_taggingHasBeenSet(false),
+ m_objectLockMode(ObjectLockMode::NOT_SET),
+ m_objectLockModeHasBeenSet(false),
+ m_objectLockRetainUntilDateHasBeenSet(false),
+ m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET),
+ m_objectLockLegalHoldStatusHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_expectedSourceBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String CopyObjectRequest::SerializePayload() const
+{
+ return {};
+}
+
+void CopyObjectRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection CopyObjectRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_aCLHasBeenSet)
+ {
+ headers.emplace("x-amz-acl", ObjectCannedACLMapper::GetNameForObjectCannedACL(m_aCL));
+ }
+
+ if(m_cacheControlHasBeenSet)
+ {
+ ss << m_cacheControl;
+ headers.emplace("cache-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentDispositionHasBeenSet)
+ {
+ ss << m_contentDisposition;
+ headers.emplace("content-disposition", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentEncodingHasBeenSet)
+ {
+ ss << m_contentEncoding;
+ headers.emplace("content-encoding", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentLanguageHasBeenSet)
+ {
+ ss << m_contentLanguage;
+ headers.emplace("content-language", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentTypeHasBeenSet)
+ {
+ ss << m_contentType;
+ headers.emplace("content-type", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceHasBeenSet)
+ {
+ ss << m_copySource;
+ headers.emplace("x-amz-copy-source", URI::URLEncodePath(ss.str()));
+ ss.str("");
+ }
+
+ if(m_copySourceIfMatchHasBeenSet)
+ {
+ ss << m_copySourceIfMatch;
+ headers.emplace("x-amz-copy-source-if-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceIfModifiedSinceHasBeenSet)
+ {
+ headers.emplace("x-amz-copy-source-if-modified-since", m_copySourceIfModifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_copySourceIfNoneMatchHasBeenSet)
+ {
+ ss << m_copySourceIfNoneMatch;
+ headers.emplace("x-amz-copy-source-if-none-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceIfUnmodifiedSinceHasBeenSet)
+ {
+ headers.emplace("x-amz-copy-source-if-unmodified-since", m_copySourceIfUnmodifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_expiresHasBeenSet)
+ {
+ headers.emplace("expires", m_expires.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_grantFullControlHasBeenSet)
+ {
+ ss << m_grantFullControl;
+ headers.emplace("x-amz-grant-full-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadHasBeenSet)
+ {
+ ss << m_grantRead;
+ headers.emplace("x-amz-grant-read", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadACPHasBeenSet)
+ {
+ ss << m_grantReadACP;
+ headers.emplace("x-amz-grant-read-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteACPHasBeenSet)
+ {
+ ss << m_grantWriteACP;
+ headers.emplace("x-amz-grant-write-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_metadataHasBeenSet)
+ {
+ for(const auto& item : m_metadata)
+ {
+ ss << "x-amz-meta-" << item.first;
+ headers.emplace(ss.str(), item.second);
+ ss.str("");
+ }
+ }
+
+ if(m_metadataDirectiveHasBeenSet)
+ {
+ headers.emplace("x-amz-metadata-directive", MetadataDirectiveMapper::GetNameForMetadataDirective(m_metadataDirective));
+ }
+
+ if(m_taggingDirectiveHasBeenSet)
+ {
+ headers.emplace("x-amz-tagging-directive", TaggingDirectiveMapper::GetNameForTaggingDirective(m_taggingDirective));
+ }
+
+ if(m_serverSideEncryptionHasBeenSet)
+ {
+ headers.emplace("x-amz-server-side-encryption", ServerSideEncryptionMapper::GetNameForServerSideEncryption(m_serverSideEncryption));
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ headers.emplace("x-amz-storage-class", StorageClassMapper::GetNameForStorageClass(m_storageClass));
+ }
+
+ if(m_websiteRedirectLocationHasBeenSet)
+ {
+ ss << m_websiteRedirectLocation;
+ headers.emplace("x-amz-website-redirect-location", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSEKMSKeyIdHasBeenSet)
+ {
+ ss << m_sSEKMSKeyId;
+ headers.emplace("x-amz-server-side-encryption-aws-kms-key-id", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSEKMSEncryptionContextHasBeenSet)
+ {
+ ss << m_sSEKMSEncryptionContext;
+ headers.emplace("x-amz-server-side-encryption-context", ss.str());
+ ss.str("");
+ }
+
+ if(m_bucketKeyEnabledHasBeenSet)
+ {
+ ss << m_bucketKeyEnabled;
+ headers.emplace("x-amz-server-side-encryption-bucket-key-enabled", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceSSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_copySourceSSECustomerAlgorithm;
+ headers.emplace("x-amz-copy-source-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceSSECustomerKeyHasBeenSet)
+ {
+ ss << m_copySourceSSECustomerKey;
+ headers.emplace("x-amz-copy-source-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceSSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_copySourceSSECustomerKeyMD5;
+ headers.emplace("x-amz-copy-source-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_taggingHasBeenSet)
+ {
+ ss << m_tagging;
+ headers.emplace("x-amz-tagging", ss.str());
+ ss.str("");
+ }
+
+ if(m_objectLockModeHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-mode", ObjectLockModeMapper::GetNameForObjectLockMode(m_objectLockMode));
+ }
+
+ if(m_objectLockRetainUntilDateHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-retain-until-date", m_objectLockRetainUntilDate.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_objectLockLegalHoldStatusHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-legal-hold", ObjectLockLegalHoldStatusMapper::GetNameForObjectLockLegalHoldStatus(m_objectLockLegalHoldStatus));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedSourceBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedSourceBucketOwner;
+ headers.emplace("x-amz-source-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResult.cpp
new file mode 100644
index 00000000000..a24fe26498c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResult.cpp
@@ -0,0 +1,106 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CopyObjectResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+CopyObjectResult::CopyObjectResult() :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+CopyObjectResult::CopyObjectResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+CopyObjectResult& CopyObjectResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_copyObjectResultDetails = resultNode;
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& expirationIter = headers.find("x-amz-expiration");
+ if(expirationIter != headers.end())
+ {
+ m_expiration = expirationIter->second;
+ }
+
+ const auto& copySourceVersionIdIter = headers.find("x-amz-copy-source-version-id");
+ if(copySourceVersionIdIter != headers.end())
+ {
+ m_copySourceVersionId = copySourceVersionIdIter->second;
+ }
+
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ const auto& sSECustomerAlgorithmIter = headers.find("x-amz-server-side-encryption-customer-algorithm");
+ if(sSECustomerAlgorithmIter != headers.end())
+ {
+ m_sSECustomerAlgorithm = sSECustomerAlgorithmIter->second;
+ }
+
+ const auto& sSECustomerKeyMD5Iter = headers.find("x-amz-server-side-encryption-customer-key-md5");
+ if(sSECustomerKeyMD5Iter != headers.end())
+ {
+ m_sSECustomerKeyMD5 = sSECustomerKeyMD5Iter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& sSEKMSEncryptionContextIter = headers.find("x-amz-server-side-encryption-context");
+ if(sSEKMSEncryptionContextIter != headers.end())
+ {
+ m_sSEKMSEncryptionContext = sSEKMSEncryptionContextIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResultDetails.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResultDetails.cpp
new file mode 100644
index 00000000000..6e03159046c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyObjectResultDetails.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CopyObjectResultDetails.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CopyObjectResultDetails::CopyObjectResultDetails() :
+ m_eTagHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false)
+{
+}
+
+CopyObjectResultDetails::CopyObjectResultDetails(const XmlNode& xmlNode) :
+ m_eTagHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CopyObjectResultDetails& CopyObjectResultDetails::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode eTagNode = resultNode.FirstChild("ETag");
+ if(!eTagNode.IsNull())
+ {
+ m_eTag = Aws::Utils::Xml::DecodeEscapedXmlText(eTagNode.GetText());
+ m_eTagHasBeenSet = true;
+ }
+ XmlNode lastModifiedNode = resultNode.FirstChild("LastModified");
+ if(!lastModifiedNode.IsNull())
+ {
+ m_lastModified = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(lastModifiedNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_lastModifiedHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CopyObjectResultDetails::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_eTagHasBeenSet)
+ {
+ XmlNode eTagNode = parentNode.CreateChildElement("ETag");
+ eTagNode.SetText(m_eTag);
+ }
+
+ if(m_lastModifiedHasBeenSet)
+ {
+ XmlNode lastModifiedNode = parentNode.CreateChildElement("LastModified");
+ lastModifiedNode.SetText(m_lastModified.ToGmtString(DateFormat::ISO_8601));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyPartResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyPartResult.cpp
new file mode 100644
index 00000000000..f8f5c9809cf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CopyPartResult.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CopyPartResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CopyPartResult::CopyPartResult() :
+ m_eTagHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false)
+{
+}
+
+CopyPartResult::CopyPartResult(const XmlNode& xmlNode) :
+ m_eTagHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CopyPartResult& CopyPartResult::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode eTagNode = resultNode.FirstChild("ETag");
+ if(!eTagNode.IsNull())
+ {
+ m_eTag = Aws::Utils::Xml::DecodeEscapedXmlText(eTagNode.GetText());
+ m_eTagHasBeenSet = true;
+ }
+ XmlNode lastModifiedNode = resultNode.FirstChild("LastModified");
+ if(!lastModifiedNode.IsNull())
+ {
+ m_lastModified = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(lastModifiedNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_lastModifiedHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CopyPartResult::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_eTagHasBeenSet)
+ {
+ XmlNode eTagNode = parentNode.CreateChildElement("ETag");
+ eTagNode.SetText(m_eTag);
+ }
+
+ if(m_lastModifiedHasBeenSet)
+ {
+ XmlNode lastModifiedNode = parentNode.CreateChildElement("LastModified");
+ lastModifiedNode.SetText(m_lastModified.ToGmtString(DateFormat::ISO_8601));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketConfiguration.cpp
new file mode 100644
index 00000000000..d29cbaa9bba
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketConfiguration.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CreateBucketConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+CreateBucketConfiguration::CreateBucketConfiguration() :
+ m_locationConstraint(BucketLocationConstraint::NOT_SET),
+ m_locationConstraintHasBeenSet(false)
+{
+}
+
+CreateBucketConfiguration::CreateBucketConfiguration(const XmlNode& xmlNode) :
+ m_locationConstraint(BucketLocationConstraint::NOT_SET),
+ m_locationConstraintHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+CreateBucketConfiguration& CreateBucketConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode locationConstraintNode = resultNode.FirstChild("LocationConstraint");
+ if(!locationConstraintNode.IsNull())
+ {
+ m_locationConstraint = BucketLocationConstraintMapper::GetBucketLocationConstraintForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(locationConstraintNode.GetText()).c_str()).c_str());
+ m_locationConstraintHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void CreateBucketConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_locationConstraintHasBeenSet)
+ {
+ XmlNode locationConstraintNode = parentNode.CreateChildElement("LocationConstraint");
+ locationConstraintNode.SetText(BucketLocationConstraintMapper::GetNameForBucketLocationConstraint(m_locationConstraint));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketRequest.cpp
new file mode 100644
index 00000000000..0cd50dbf6db
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketRequest.cpp
@@ -0,0 +1,125 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CreateBucketRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+CreateBucketRequest::CreateBucketRequest() :
+ m_aCL(BucketCannedACL::NOT_SET),
+ m_aCLHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_createBucketConfigurationHasBeenSet(false),
+ m_grantFullControlHasBeenSet(false),
+ m_grantReadHasBeenSet(false),
+ m_grantReadACPHasBeenSet(false),
+ m_grantWriteHasBeenSet(false),
+ m_grantWriteACPHasBeenSet(false),
+ m_objectLockEnabledForBucket(false),
+ m_objectLockEnabledForBucketHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String CreateBucketRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("CreateBucketConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_createBucketConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void CreateBucketRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection CreateBucketRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_aCLHasBeenSet)
+ {
+ headers.emplace("x-amz-acl", BucketCannedACLMapper::GetNameForBucketCannedACL(m_aCL));
+ }
+
+ if(m_grantFullControlHasBeenSet)
+ {
+ ss << m_grantFullControl;
+ headers.emplace("x-amz-grant-full-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadHasBeenSet)
+ {
+ ss << m_grantRead;
+ headers.emplace("x-amz-grant-read", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadACPHasBeenSet)
+ {
+ ss << m_grantReadACP;
+ headers.emplace("x-amz-grant-read-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteHasBeenSet)
+ {
+ ss << m_grantWrite;
+ headers.emplace("x-amz-grant-write", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteACPHasBeenSet)
+ {
+ ss << m_grantWriteACP;
+ headers.emplace("x-amz-grant-write-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_objectLockEnabledForBucketHasBeenSet)
+ {
+ ss << m_objectLockEnabledForBucket;
+ headers.emplace("x-amz-bucket-object-lock-enabled", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketResult.cpp
new file mode 100644
index 00000000000..a6f72b616ab
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateBucketResult.cpp
@@ -0,0 +1,45 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CreateBucketResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+CreateBucketResult::CreateBucketResult()
+{
+}
+
+CreateBucketResult::CreateBucketResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+CreateBucketResult& CreateBucketResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& locationIter = headers.find("location");
+ if(locationIter != headers.end())
+ {
+ m_location = locationIter->second;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadRequest.cpp
new file mode 100644
index 00000000000..23470457616
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadRequest.cpp
@@ -0,0 +1,268 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CreateMultipartUploadRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+CreateMultipartUploadRequest::CreateMultipartUploadRequest() :
+ m_aCL(ObjectCannedACL::NOT_SET),
+ m_aCLHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_cacheControlHasBeenSet(false),
+ m_contentDispositionHasBeenSet(false),
+ m_contentEncodingHasBeenSet(false),
+ m_contentLanguageHasBeenSet(false),
+ m_contentTypeHasBeenSet(false),
+ m_expiresHasBeenSet(false),
+ m_grantFullControlHasBeenSet(false),
+ m_grantReadHasBeenSet(false),
+ m_grantReadACPHasBeenSet(false),
+ m_grantWriteACPHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_metadataHasBeenSet(false),
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_serverSideEncryptionHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_websiteRedirectLocationHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_sSEKMSKeyIdHasBeenSet(false),
+ m_sSEKMSEncryptionContextHasBeenSet(false),
+ m_bucketKeyEnabled(false),
+ m_bucketKeyEnabledHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_taggingHasBeenSet(false),
+ m_objectLockMode(ObjectLockMode::NOT_SET),
+ m_objectLockModeHasBeenSet(false),
+ m_objectLockRetainUntilDateHasBeenSet(false),
+ m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET),
+ m_objectLockLegalHoldStatusHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String CreateMultipartUploadRequest::SerializePayload() const
+{
+ return {};
+}
+
+void CreateMultipartUploadRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection CreateMultipartUploadRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_aCLHasBeenSet)
+ {
+ headers.emplace("x-amz-acl", ObjectCannedACLMapper::GetNameForObjectCannedACL(m_aCL));
+ }
+
+ if(m_cacheControlHasBeenSet)
+ {
+ ss << m_cacheControl;
+ headers.emplace("cache-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentDispositionHasBeenSet)
+ {
+ ss << m_contentDisposition;
+ headers.emplace("content-disposition", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentEncodingHasBeenSet)
+ {
+ ss << m_contentEncoding;
+ headers.emplace("content-encoding", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentLanguageHasBeenSet)
+ {
+ ss << m_contentLanguage;
+ headers.emplace("content-language", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentTypeHasBeenSet)
+ {
+ ss << m_contentType;
+ headers.emplace("content-type", ss.str());
+ ss.str("");
+ }
+
+ if(m_expiresHasBeenSet)
+ {
+ headers.emplace("expires", m_expires.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_grantFullControlHasBeenSet)
+ {
+ ss << m_grantFullControl;
+ headers.emplace("x-amz-grant-full-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadHasBeenSet)
+ {
+ ss << m_grantRead;
+ headers.emplace("x-amz-grant-read", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadACPHasBeenSet)
+ {
+ ss << m_grantReadACP;
+ headers.emplace("x-amz-grant-read-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteACPHasBeenSet)
+ {
+ ss << m_grantWriteACP;
+ headers.emplace("x-amz-grant-write-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_metadataHasBeenSet)
+ {
+ for(const auto& item : m_metadata)
+ {
+ ss << "x-amz-meta-" << item.first;
+ headers.emplace(ss.str(), item.second);
+ ss.str("");
+ }
+ }
+
+ if(m_serverSideEncryptionHasBeenSet)
+ {
+ headers.emplace("x-amz-server-side-encryption", ServerSideEncryptionMapper::GetNameForServerSideEncryption(m_serverSideEncryption));
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ headers.emplace("x-amz-storage-class", StorageClassMapper::GetNameForStorageClass(m_storageClass));
+ }
+
+ if(m_websiteRedirectLocationHasBeenSet)
+ {
+ ss << m_websiteRedirectLocation;
+ headers.emplace("x-amz-website-redirect-location", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSEKMSKeyIdHasBeenSet)
+ {
+ ss << m_sSEKMSKeyId;
+ headers.emplace("x-amz-server-side-encryption-aws-kms-key-id", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSEKMSEncryptionContextHasBeenSet)
+ {
+ ss << m_sSEKMSEncryptionContext;
+ headers.emplace("x-amz-server-side-encryption-context", ss.str());
+ ss.str("");
+ }
+
+ if(m_bucketKeyEnabledHasBeenSet)
+ {
+ ss << m_bucketKeyEnabled;
+ headers.emplace("x-amz-server-side-encryption-bucket-key-enabled", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_taggingHasBeenSet)
+ {
+ ss << m_tagging;
+ headers.emplace("x-amz-tagging", ss.str());
+ ss.str("");
+ }
+
+ if(m_objectLockModeHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-mode", ObjectLockModeMapper::GetNameForObjectLockMode(m_objectLockMode));
+ }
+
+ if(m_objectLockRetainUntilDateHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-retain-until-date", m_objectLockRetainUntilDate.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_objectLockLegalHoldStatusHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-legal-hold", ObjectLockLegalHoldStatusMapper::GetNameForObjectLockLegalHoldStatus(m_objectLockLegalHoldStatus));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadResult.cpp
new file mode 100644
index 00000000000..4a2772c9ef7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/CreateMultipartUploadResult.cpp
@@ -0,0 +1,114 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/CreateMultipartUploadResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+CreateMultipartUploadResult::CreateMultipartUploadResult() :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+CreateMultipartUploadResult::CreateMultipartUploadResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+CreateMultipartUploadResult& CreateMultipartUploadResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bucketNode = resultNode.FirstChild("Bucket");
+ if(!bucketNode.IsNull())
+ {
+ m_bucket = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNode.GetText());
+ }
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ }
+ XmlNode uploadIdNode = resultNode.FirstChild("UploadId");
+ if(!uploadIdNode.IsNull())
+ {
+ m_uploadId = Aws::Utils::Xml::DecodeEscapedXmlText(uploadIdNode.GetText());
+ }
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& abortDateIter = headers.find("x-amz-abort-date");
+ if(abortDateIter != headers.end())
+ {
+ m_abortDate = DateTime(abortDateIter->second, DateFormat::RFC822);
+ }
+
+ const auto& abortRuleIdIter = headers.find("x-amz-abort-rule-id");
+ if(abortRuleIdIter != headers.end())
+ {
+ m_abortRuleId = abortRuleIdIter->second;
+ }
+
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ const auto& sSECustomerAlgorithmIter = headers.find("x-amz-server-side-encryption-customer-algorithm");
+ if(sSECustomerAlgorithmIter != headers.end())
+ {
+ m_sSECustomerAlgorithm = sSECustomerAlgorithmIter->second;
+ }
+
+ const auto& sSECustomerKeyMD5Iter = headers.find("x-amz-server-side-encryption-customer-key-md5");
+ if(sSECustomerKeyMD5Iter != headers.end())
+ {
+ m_sSECustomerKeyMD5 = sSECustomerKeyMD5Iter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& sSEKMSEncryptionContextIter = headers.find("x-amz-server-side-encryption-context");
+ if(sSEKMSEncryptionContextIter != headers.end())
+ {
+ m_sSEKMSEncryptionContext = sSEKMSEncryptionContextIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DefaultRetention.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DefaultRetention.cpp
new file mode 100644
index 00000000000..63cddad838a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DefaultRetention.cpp
@@ -0,0 +1,102 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DefaultRetention.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+DefaultRetention::DefaultRetention() :
+ m_mode(ObjectLockRetentionMode::NOT_SET),
+ m_modeHasBeenSet(false),
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_years(0),
+ m_yearsHasBeenSet(false)
+{
+}
+
+DefaultRetention::DefaultRetention(const XmlNode& xmlNode) :
+ m_mode(ObjectLockRetentionMode::NOT_SET),
+ m_modeHasBeenSet(false),
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_years(0),
+ m_yearsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+DefaultRetention& DefaultRetention::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode modeNode = resultNode.FirstChild("Mode");
+ if(!modeNode.IsNull())
+ {
+ m_mode = ObjectLockRetentionModeMapper::GetObjectLockRetentionModeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(modeNode.GetText()).c_str()).c_str());
+ m_modeHasBeenSet = true;
+ }
+ XmlNode daysNode = resultNode.FirstChild("Days");
+ if(!daysNode.IsNull())
+ {
+ m_days = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(daysNode.GetText()).c_str()).c_str());
+ m_daysHasBeenSet = true;
+ }
+ XmlNode yearsNode = resultNode.FirstChild("Years");
+ if(!yearsNode.IsNull())
+ {
+ m_years = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(yearsNode.GetText()).c_str()).c_str());
+ m_yearsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void DefaultRetention::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_modeHasBeenSet)
+ {
+ XmlNode modeNode = parentNode.CreateChildElement("Mode");
+ modeNode.SetText(ObjectLockRetentionModeMapper::GetNameForObjectLockRetentionMode(m_mode));
+ }
+
+ if(m_daysHasBeenSet)
+ {
+ XmlNode daysNode = parentNode.CreateChildElement("Days");
+ ss << m_days;
+ daysNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_yearsHasBeenSet)
+ {
+ XmlNode yearsNode = parentNode.CreateChildElement("Years");
+ ss << m_years;
+ yearsNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Delete.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Delete.cpp
new file mode 100644
index 00000000000..9789ee21407
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Delete.cpp
@@ -0,0 +1,91 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Delete.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Delete::Delete() :
+ m_objectsHasBeenSet(false),
+ m_quiet(false),
+ m_quietHasBeenSet(false)
+{
+}
+
+Delete::Delete(const XmlNode& xmlNode) :
+ m_objectsHasBeenSet(false),
+ m_quiet(false),
+ m_quietHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Delete& Delete::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode objectsNode = resultNode.FirstChild("Object");
+ if(!objectsNode.IsNull())
+ {
+ XmlNode objectMember = objectsNode;
+ while(!objectMember.IsNull())
+ {
+ m_objects.push_back(objectMember);
+ objectMember = objectMember.NextNode("Object");
+ }
+
+ m_objectsHasBeenSet = true;
+ }
+ XmlNode quietNode = resultNode.FirstChild("Quiet");
+ if(!quietNode.IsNull())
+ {
+ m_quiet = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(quietNode.GetText()).c_str()).c_str());
+ m_quietHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Delete::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_objectsHasBeenSet)
+ {
+ for(const auto& item : m_objects)
+ {
+ XmlNode objectsNode = parentNode.CreateChildElement("Object");
+ item.AddToNode(objectsNode);
+ }
+ }
+
+ if(m_quietHasBeenSet)
+ {
+ XmlNode quietNode = parentNode.CreateChildElement("Quiet");
+ ss << std::boolalpha << m_quiet;
+ quietNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketAnalyticsConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketAnalyticsConfigurationRequest.cpp
new file mode 100644
index 00000000000..bcd1e8f3205
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketAnalyticsConfigurationRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketAnalyticsConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketAnalyticsConfigurationRequest::DeleteBucketAnalyticsConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketAnalyticsConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketAnalyticsConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketAnalyticsConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketCorsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketCorsRequest.cpp
new file mode 100644
index 00000000000..b52d99571a2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketCorsRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketCorsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketCorsRequest::DeleteBucketCorsRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketCorsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketCorsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketCorsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketEncryptionRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketEncryptionRequest.cpp
new file mode 100644
index 00000000000..3e01a0b9dcf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketEncryptionRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketEncryptionRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketEncryptionRequest::DeleteBucketEncryptionRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketEncryptionRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketEncryptionRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketEncryptionRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketIntelligentTieringConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketIntelligentTieringConfigurationRequest.cpp
new file mode 100644
index 00000000000..b48d573ee6f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketIntelligentTieringConfigurationRequest.cpp
@@ -0,0 +1,59 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketIntelligentTieringConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketIntelligentTieringConfigurationRequest::DeleteBucketIntelligentTieringConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketIntelligentTieringConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketIntelligentTieringConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketInventoryConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketInventoryConfigurationRequest.cpp
new file mode 100644
index 00000000000..7bc2d179d6a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketInventoryConfigurationRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketInventoryConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketInventoryConfigurationRequest::DeleteBucketInventoryConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketInventoryConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketInventoryConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketInventoryConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketLifecycleRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketLifecycleRequest.cpp
new file mode 100644
index 00000000000..54311cff3ef
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketLifecycleRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketLifecycleRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketLifecycleRequest::DeleteBucketLifecycleRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketLifecycleRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketLifecycleRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketLifecycleRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketMetricsConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketMetricsConfigurationRequest.cpp
new file mode 100644
index 00000000000..631dee94a74
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketMetricsConfigurationRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketMetricsConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketMetricsConfigurationRequest::DeleteBucketMetricsConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketMetricsConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketMetricsConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketMetricsConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketOwnershipControlsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketOwnershipControlsRequest.cpp
new file mode 100644
index 00000000000..5b18b12424e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketOwnershipControlsRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketOwnershipControlsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketOwnershipControlsRequest::DeleteBucketOwnershipControlsRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketOwnershipControlsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketOwnershipControlsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketOwnershipControlsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketPolicyRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketPolicyRequest.cpp
new file mode 100644
index 00000000000..33bb2cef348
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketPolicyRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketPolicyRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketPolicyRequest::DeleteBucketPolicyRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketPolicyRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketPolicyRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketPolicyRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketReplicationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketReplicationRequest.cpp
new file mode 100644
index 00000000000..af6092ee6c6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketReplicationRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketReplicationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketReplicationRequest::DeleteBucketReplicationRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketReplicationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketReplicationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketReplicationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketRequest.cpp
new file mode 100644
index 00000000000..3cfa02d8826
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketRequest::DeleteBucketRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketTaggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketTaggingRequest.cpp
new file mode 100644
index 00000000000..7d61b959f54
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketTaggingRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketTaggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketTaggingRequest::DeleteBucketTaggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketTaggingRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketTaggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketTaggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketWebsiteRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketWebsiteRequest.cpp
new file mode 100644
index 00000000000..59bc58a8d7c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteBucketWebsiteRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteBucketWebsiteRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteBucketWebsiteRequest::DeleteBucketWebsiteRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteBucketWebsiteRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteBucketWebsiteRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteBucketWebsiteRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerEntry.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerEntry.cpp
new file mode 100644
index 00000000000..05766bb960d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerEntry.cpp
@@ -0,0 +1,124 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteMarkerEntry.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+DeleteMarkerEntry::DeleteMarkerEntry() :
+ m_ownerHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_isLatest(false),
+ m_isLatestHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false)
+{
+}
+
+DeleteMarkerEntry::DeleteMarkerEntry(const XmlNode& xmlNode) :
+ m_ownerHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_isLatest(false),
+ m_isLatestHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+DeleteMarkerEntry& DeleteMarkerEntry::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ m_ownerHasBeenSet = true;
+ }
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode versionIdNode = resultNode.FirstChild("VersionId");
+ if(!versionIdNode.IsNull())
+ {
+ m_versionId = Aws::Utils::Xml::DecodeEscapedXmlText(versionIdNode.GetText());
+ m_versionIdHasBeenSet = true;
+ }
+ XmlNode isLatestNode = resultNode.FirstChild("IsLatest");
+ if(!isLatestNode.IsNull())
+ {
+ m_isLatest = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isLatestNode.GetText()).c_str()).c_str());
+ m_isLatestHasBeenSet = true;
+ }
+ XmlNode lastModifiedNode = resultNode.FirstChild("LastModified");
+ if(!lastModifiedNode.IsNull())
+ {
+ m_lastModified = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(lastModifiedNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_lastModifiedHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void DeleteMarkerEntry::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_ownerHasBeenSet)
+ {
+ XmlNode ownerNode = parentNode.CreateChildElement("Owner");
+ m_owner.AddToNode(ownerNode);
+ }
+
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_versionIdHasBeenSet)
+ {
+ XmlNode versionIdNode = parentNode.CreateChildElement("VersionId");
+ versionIdNode.SetText(m_versionId);
+ }
+
+ if(m_isLatestHasBeenSet)
+ {
+ XmlNode isLatestNode = parentNode.CreateChildElement("IsLatest");
+ ss << std::boolalpha << m_isLatest;
+ isLatestNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_lastModifiedHasBeenSet)
+ {
+ XmlNode lastModifiedNode = parentNode.CreateChildElement("LastModified");
+ lastModifiedNode.SetText(m_lastModified.ToGmtString(DateFormat::ISO_8601));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplication.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplication.cpp
new file mode 100644
index 00000000000..3337521fa5a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplication.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteMarkerReplication.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+DeleteMarkerReplication::DeleteMarkerReplication() :
+ m_status(DeleteMarkerReplicationStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+}
+
+DeleteMarkerReplication::DeleteMarkerReplication(const XmlNode& xmlNode) :
+ m_status(DeleteMarkerReplicationStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+DeleteMarkerReplication& DeleteMarkerReplication::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = DeleteMarkerReplicationStatusMapper::GetDeleteMarkerReplicationStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void DeleteMarkerReplication::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(DeleteMarkerReplicationStatusMapper::GetNameForDeleteMarkerReplicationStatus(m_status));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplicationStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplicationStatus.cpp
new file mode 100644
index 00000000000..c5ec0529492
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteMarkerReplicationStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteMarkerReplicationStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace DeleteMarkerReplicationStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ DeleteMarkerReplicationStatus GetDeleteMarkerReplicationStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return DeleteMarkerReplicationStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return DeleteMarkerReplicationStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<DeleteMarkerReplicationStatus>(hashCode);
+ }
+
+ return DeleteMarkerReplicationStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForDeleteMarkerReplicationStatus(DeleteMarkerReplicationStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case DeleteMarkerReplicationStatus::Enabled:
+ return "Enabled";
+ case DeleteMarkerReplicationStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace DeleteMarkerReplicationStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectRequest.cpp
new file mode 100644
index 00000000000..08da25d567a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectRequest.cpp
@@ -0,0 +1,98 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteObjectRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteObjectRequest::DeleteObjectRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_mFAHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_bypassGovernanceRetention(false),
+ m_bypassGovernanceRetentionHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteObjectRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteObjectRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteObjectRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_mFAHasBeenSet)
+ {
+ ss << m_mFA;
+ headers.emplace("x-amz-mfa", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_bypassGovernanceRetentionHasBeenSet)
+ {
+ ss << m_bypassGovernanceRetention;
+ headers.emplace("x-amz-bypass-governance-retention", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectResult.cpp
new file mode 100644
index 00000000000..ee540456dce
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectResult.cpp
@@ -0,0 +1,61 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteObjectResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+DeleteObjectResult::DeleteObjectResult() :
+ m_deleteMarker(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+DeleteObjectResult::DeleteObjectResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_deleteMarker(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+DeleteObjectResult& DeleteObjectResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& deleteMarkerIter = headers.find("x-amz-delete-marker");
+ if(deleteMarkerIter != headers.end())
+ {
+ m_deleteMarker = StringUtils::ConvertToBool(deleteMarkerIter->second.c_str());
+ }
+
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingRequest.cpp
new file mode 100644
index 00000000000..580a7fa70be
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingRequest.cpp
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteObjectTaggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteObjectTaggingRequest::DeleteObjectTaggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteObjectTaggingRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeleteObjectTaggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteObjectTaggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingResult.cpp
new file mode 100644
index 00000000000..251d63ee551
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectTaggingResult.cpp
@@ -0,0 +1,45 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteObjectTaggingResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+DeleteObjectTaggingResult::DeleteObjectTaggingResult()
+{
+}
+
+DeleteObjectTaggingResult::DeleteObjectTaggingResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+DeleteObjectTaggingResult& DeleteObjectTaggingResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsRequest.cpp
new file mode 100644
index 00000000000..42118cc4b5e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsRequest.cpp
@@ -0,0 +1,101 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteObjectsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeleteObjectsRequest::DeleteObjectsRequest() :
+ m_bucketHasBeenSet(false),
+ m_deleteHasBeenSet(false),
+ m_mFAHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_bypassGovernanceRetention(false),
+ m_bypassGovernanceRetentionHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeleteObjectsRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("Delete");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_delete.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void DeleteObjectsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeleteObjectsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_mFAHasBeenSet)
+ {
+ ss << m_mFA;
+ headers.emplace("x-amz-mfa", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_bypassGovernanceRetentionHasBeenSet)
+ {
+ ss << m_bypassGovernanceRetention;
+ headers.emplace("x-amz-bypass-governance-retention", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsResult.cpp
new file mode 100644
index 00000000000..1af34a1d467
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeleteObjectsResult.cpp
@@ -0,0 +1,69 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeleteObjectsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+DeleteObjectsResult::DeleteObjectsResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+DeleteObjectsResult::DeleteObjectsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+DeleteObjectsResult& DeleteObjectsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode deletedNode = resultNode.FirstChild("Deleted");
+ if(!deletedNode.IsNull())
+ {
+ XmlNode deletedMember = deletedNode;
+ while(!deletedMember.IsNull())
+ {
+ m_deleted.push_back(deletedMember);
+ deletedMember = deletedMember.NextNode("Deleted");
+ }
+
+ }
+ XmlNode errorsNode = resultNode.FirstChild("Error");
+ if(!errorsNode.IsNull())
+ {
+ XmlNode errorMember = errorsNode;
+ while(!errorMember.IsNull())
+ {
+ m_errors.push_back(errorMember);
+ errorMember = errorMember.NextNode("Error");
+ }
+
+ }
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletePublicAccessBlockRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletePublicAccessBlockRequest.cpp
new file mode 100644
index 00000000000..750457f5941
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletePublicAccessBlockRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeletePublicAccessBlockRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+DeletePublicAccessBlockRequest::DeletePublicAccessBlockRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String DeletePublicAccessBlockRequest::SerializePayload() const
+{
+ return {};
+}
+
+void DeletePublicAccessBlockRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection DeletePublicAccessBlockRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletedObject.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletedObject.cpp
new file mode 100644
index 00000000000..b883421480c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/DeletedObject.cpp
@@ -0,0 +1,110 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/DeletedObject.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+DeletedObject::DeletedObject() :
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_deleteMarker(false),
+ m_deleteMarkerHasBeenSet(false),
+ m_deleteMarkerVersionIdHasBeenSet(false)
+{
+}
+
+DeletedObject::DeletedObject(const XmlNode& xmlNode) :
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_deleteMarker(false),
+ m_deleteMarkerHasBeenSet(false),
+ m_deleteMarkerVersionIdHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+DeletedObject& DeletedObject::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode versionIdNode = resultNode.FirstChild("VersionId");
+ if(!versionIdNode.IsNull())
+ {
+ m_versionId = Aws::Utils::Xml::DecodeEscapedXmlText(versionIdNode.GetText());
+ m_versionIdHasBeenSet = true;
+ }
+ XmlNode deleteMarkerNode = resultNode.FirstChild("DeleteMarker");
+ if(!deleteMarkerNode.IsNull())
+ {
+ m_deleteMarker = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(deleteMarkerNode.GetText()).c_str()).c_str());
+ m_deleteMarkerHasBeenSet = true;
+ }
+ XmlNode deleteMarkerVersionIdNode = resultNode.FirstChild("DeleteMarkerVersionId");
+ if(!deleteMarkerVersionIdNode.IsNull())
+ {
+ m_deleteMarkerVersionId = Aws::Utils::Xml::DecodeEscapedXmlText(deleteMarkerVersionIdNode.GetText());
+ m_deleteMarkerVersionIdHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void DeletedObject::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_versionIdHasBeenSet)
+ {
+ XmlNode versionIdNode = parentNode.CreateChildElement("VersionId");
+ versionIdNode.SetText(m_versionId);
+ }
+
+ if(m_deleteMarkerHasBeenSet)
+ {
+ XmlNode deleteMarkerNode = parentNode.CreateChildElement("DeleteMarker");
+ ss << std::boolalpha << m_deleteMarker;
+ deleteMarkerNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_deleteMarkerVersionIdHasBeenSet)
+ {
+ XmlNode deleteMarkerVersionIdNode = parentNode.CreateChildElement("DeleteMarkerVersionId");
+ deleteMarkerVersionIdNode.SetText(m_deleteMarkerVersionId);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Destination.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Destination.cpp
new file mode 100644
index 00000000000..abffe638b4c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Destination.cpp
@@ -0,0 +1,150 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Destination.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Destination::Destination() :
+ m_bucketHasBeenSet(false),
+ m_accountHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_accessControlTranslationHasBeenSet(false),
+ m_encryptionConfigurationHasBeenSet(false),
+ m_replicationTimeHasBeenSet(false),
+ m_metricsHasBeenSet(false)
+{
+}
+
+Destination::Destination(const XmlNode& xmlNode) :
+ m_bucketHasBeenSet(false),
+ m_accountHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_accessControlTranslationHasBeenSet(false),
+ m_encryptionConfigurationHasBeenSet(false),
+ m_replicationTimeHasBeenSet(false),
+ m_metricsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Destination& Destination::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bucketNode = resultNode.FirstChild("Bucket");
+ if(!bucketNode.IsNull())
+ {
+ m_bucket = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNode.GetText());
+ m_bucketHasBeenSet = true;
+ }
+ XmlNode accountNode = resultNode.FirstChild("Account");
+ if(!accountNode.IsNull())
+ {
+ m_account = Aws::Utils::Xml::DecodeEscapedXmlText(accountNode.GetText());
+ m_accountHasBeenSet = true;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = StorageClassMapper::GetStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ XmlNode accessControlTranslationNode = resultNode.FirstChild("AccessControlTranslation");
+ if(!accessControlTranslationNode.IsNull())
+ {
+ m_accessControlTranslation = accessControlTranslationNode;
+ m_accessControlTranslationHasBeenSet = true;
+ }
+ XmlNode encryptionConfigurationNode = resultNode.FirstChild("EncryptionConfiguration");
+ if(!encryptionConfigurationNode.IsNull())
+ {
+ m_encryptionConfiguration = encryptionConfigurationNode;
+ m_encryptionConfigurationHasBeenSet = true;
+ }
+ XmlNode replicationTimeNode = resultNode.FirstChild("ReplicationTime");
+ if(!replicationTimeNode.IsNull())
+ {
+ m_replicationTime = replicationTimeNode;
+ m_replicationTimeHasBeenSet = true;
+ }
+ XmlNode metricsNode = resultNode.FirstChild("Metrics");
+ if(!metricsNode.IsNull())
+ {
+ m_metrics = metricsNode;
+ m_metricsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Destination::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_bucketHasBeenSet)
+ {
+ XmlNode bucketNode = parentNode.CreateChildElement("Bucket");
+ bucketNode.SetText(m_bucket);
+ }
+
+ if(m_accountHasBeenSet)
+ {
+ XmlNode accountNode = parentNode.CreateChildElement("Account");
+ accountNode.SetText(m_account);
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(StorageClassMapper::GetNameForStorageClass(m_storageClass));
+ }
+
+ if(m_accessControlTranslationHasBeenSet)
+ {
+ XmlNode accessControlTranslationNode = parentNode.CreateChildElement("AccessControlTranslation");
+ m_accessControlTranslation.AddToNode(accessControlTranslationNode);
+ }
+
+ if(m_encryptionConfigurationHasBeenSet)
+ {
+ XmlNode encryptionConfigurationNode = parentNode.CreateChildElement("EncryptionConfiguration");
+ m_encryptionConfiguration.AddToNode(encryptionConfigurationNode);
+ }
+
+ if(m_replicationTimeHasBeenSet)
+ {
+ XmlNode replicationTimeNode = parentNode.CreateChildElement("ReplicationTime");
+ m_replicationTime.AddToNode(replicationTimeNode);
+ }
+
+ if(m_metricsHasBeenSet)
+ {
+ XmlNode metricsNode = parentNode.CreateChildElement("Metrics");
+ m_metrics.AddToNode(metricsNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncodingType.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncodingType.cpp
new file mode 100644
index 00000000000..c72aa9a12fe
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncodingType.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/EncodingType.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace EncodingTypeMapper
+ {
+
+ static const int url_HASH = HashingUtils::HashString("url");
+
+
+ EncodingType GetEncodingTypeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == url_HASH)
+ {
+ return EncodingType::url;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<EncodingType>(hashCode);
+ }
+
+ return EncodingType::NOT_SET;
+ }
+
+ Aws::String GetNameForEncodingType(EncodingType enumValue)
+ {
+ switch(enumValue)
+ {
+ case EncodingType::url:
+ return "url";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace EncodingTypeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Encryption.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Encryption.cpp
new file mode 100644
index 00000000000..3bd7d72fd42
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Encryption.cpp
@@ -0,0 +1,94 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Encryption.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Encryption::Encryption() :
+ m_encryptionType(ServerSideEncryption::NOT_SET),
+ m_encryptionTypeHasBeenSet(false),
+ m_kMSKeyIdHasBeenSet(false),
+ m_kMSContextHasBeenSet(false)
+{
+}
+
+Encryption::Encryption(const XmlNode& xmlNode) :
+ m_encryptionType(ServerSideEncryption::NOT_SET),
+ m_encryptionTypeHasBeenSet(false),
+ m_kMSKeyIdHasBeenSet(false),
+ m_kMSContextHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Encryption& Encryption::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode encryptionTypeNode = resultNode.FirstChild("EncryptionType");
+ if(!encryptionTypeNode.IsNull())
+ {
+ m_encryptionType = ServerSideEncryptionMapper::GetServerSideEncryptionForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(encryptionTypeNode.GetText()).c_str()).c_str());
+ m_encryptionTypeHasBeenSet = true;
+ }
+ XmlNode kMSKeyIdNode = resultNode.FirstChild("KMSKeyId");
+ if(!kMSKeyIdNode.IsNull())
+ {
+ m_kMSKeyId = Aws::Utils::Xml::DecodeEscapedXmlText(kMSKeyIdNode.GetText());
+ m_kMSKeyIdHasBeenSet = true;
+ }
+ XmlNode kMSContextNode = resultNode.FirstChild("KMSContext");
+ if(!kMSContextNode.IsNull())
+ {
+ m_kMSContext = Aws::Utils::Xml::DecodeEscapedXmlText(kMSContextNode.GetText());
+ m_kMSContextHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Encryption::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_encryptionTypeHasBeenSet)
+ {
+ XmlNode encryptionTypeNode = parentNode.CreateChildElement("EncryptionType");
+ encryptionTypeNode.SetText(ServerSideEncryptionMapper::GetNameForServerSideEncryption(m_encryptionType));
+ }
+
+ if(m_kMSKeyIdHasBeenSet)
+ {
+ XmlNode kMSKeyIdNode = parentNode.CreateChildElement("KMSKeyId");
+ kMSKeyIdNode.SetText(m_kMSKeyId);
+ }
+
+ if(m_kMSContextHasBeenSet)
+ {
+ XmlNode kMSContextNode = parentNode.CreateChildElement("KMSContext");
+ kMSContextNode.SetText(m_kMSContext);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncryptionConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncryptionConfiguration.cpp
new file mode 100644
index 00000000000..a81842d2425
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/EncryptionConfiguration.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/EncryptionConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+EncryptionConfiguration::EncryptionConfiguration() :
+ m_replicaKmsKeyIDHasBeenSet(false)
+{
+}
+
+EncryptionConfiguration::EncryptionConfiguration(const XmlNode& xmlNode) :
+ m_replicaKmsKeyIDHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+EncryptionConfiguration& EncryptionConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode replicaKmsKeyIDNode = resultNode.FirstChild("ReplicaKmsKeyID");
+ if(!replicaKmsKeyIDNode.IsNull())
+ {
+ m_replicaKmsKeyID = Aws::Utils::Xml::DecodeEscapedXmlText(replicaKmsKeyIDNode.GetText());
+ m_replicaKmsKeyIDHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void EncryptionConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_replicaKmsKeyIDHasBeenSet)
+ {
+ XmlNode replicaKmsKeyIDNode = parentNode.CreateChildElement("ReplicaKmsKeyID");
+ replicaKmsKeyIDNode.SetText(m_replicaKmsKeyID);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Error.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Error.cpp
new file mode 100644
index 00000000000..bda3e85efef
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Error.cpp
@@ -0,0 +1,106 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Error.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Error::Error() :
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_codeHasBeenSet(false),
+ m_messageHasBeenSet(false)
+{
+}
+
+Error::Error(const XmlNode& xmlNode) :
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_codeHasBeenSet(false),
+ m_messageHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Error& Error::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode versionIdNode = resultNode.FirstChild("VersionId");
+ if(!versionIdNode.IsNull())
+ {
+ m_versionId = Aws::Utils::Xml::DecodeEscapedXmlText(versionIdNode.GetText());
+ m_versionIdHasBeenSet = true;
+ }
+ XmlNode codeNode = resultNode.FirstChild("Code");
+ if(!codeNode.IsNull())
+ {
+ m_code = Aws::Utils::Xml::DecodeEscapedXmlText(codeNode.GetText());
+ m_codeHasBeenSet = true;
+ }
+ XmlNode messageNode = resultNode.FirstChild("Message");
+ if(!messageNode.IsNull())
+ {
+ m_message = Aws::Utils::Xml::DecodeEscapedXmlText(messageNode.GetText());
+ m_messageHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Error::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_versionIdHasBeenSet)
+ {
+ XmlNode versionIdNode = parentNode.CreateChildElement("VersionId");
+ versionIdNode.SetText(m_versionId);
+ }
+
+ if(m_codeHasBeenSet)
+ {
+ XmlNode codeNode = parentNode.CreateChildElement("Code");
+ codeNode.SetText(m_code);
+ }
+
+ if(m_messageHasBeenSet)
+ {
+ XmlNode messageNode = parentNode.CreateChildElement("Message");
+ messageNode.SetText(m_message);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ErrorDocument.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ErrorDocument.cpp
new file mode 100644
index 00000000000..84a923ca595
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ErrorDocument.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ErrorDocument.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ErrorDocument::ErrorDocument() :
+ m_keyHasBeenSet(false)
+{
+}
+
+ErrorDocument::ErrorDocument(const XmlNode& xmlNode) :
+ m_keyHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ErrorDocument& ErrorDocument::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ErrorDocument::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Event.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Event.cpp
new file mode 100644
index 00000000000..c6e779ab063
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Event.cpp
@@ -0,0 +1,175 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Event.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace EventMapper
+ {
+
+ static const int s3_ReducedRedundancyLostObject_HASH = HashingUtils::HashString("s3:ReducedRedundancyLostObject");
+ static const int s3_ObjectCreated_HASH = HashingUtils::HashString("s3:ObjectCreated:*");
+ static const int s3_ObjectCreated_Put_HASH = HashingUtils::HashString("s3:ObjectCreated:Put");
+ static const int s3_ObjectCreated_Post_HASH = HashingUtils::HashString("s3:ObjectCreated:Post");
+ static const int s3_ObjectCreated_Copy_HASH = HashingUtils::HashString("s3:ObjectCreated:Copy");
+ static const int s3_ObjectCreated_CompleteMultipartUpload_HASH = HashingUtils::HashString("s3:ObjectCreated:CompleteMultipartUpload");
+ static const int s3_ObjectRemoved_HASH = HashingUtils::HashString("s3:ObjectRemoved:*");
+ static const int s3_ObjectRemoved_Delete_HASH = HashingUtils::HashString("s3:ObjectRemoved:Delete");
+ static const int s3_ObjectRemoved_DeleteMarkerCreated_HASH = HashingUtils::HashString("s3:ObjectRemoved:DeleteMarkerCreated");
+ static const int s3_ObjectRestore_HASH = HashingUtils::HashString("s3:ObjectRestore:*");
+ static const int s3_ObjectRestore_Post_HASH = HashingUtils::HashString("s3:ObjectRestore:Post");
+ static const int s3_ObjectRestore_Completed_HASH = HashingUtils::HashString("s3:ObjectRestore:Completed");
+ static const int s3_Replication_HASH = HashingUtils::HashString("s3:Replication:*");
+ static const int s3_Replication_OperationFailedReplication_HASH = HashingUtils::HashString("s3:Replication:OperationFailedReplication");
+ static const int s3_Replication_OperationNotTracked_HASH = HashingUtils::HashString("s3:Replication:OperationNotTracked");
+ static const int s3_Replication_OperationMissedThreshold_HASH = HashingUtils::HashString("s3:Replication:OperationMissedThreshold");
+ static const int s3_Replication_OperationReplicatedAfterThreshold_HASH = HashingUtils::HashString("s3:Replication:OperationReplicatedAfterThreshold");
+
+
+ Event GetEventForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == s3_ReducedRedundancyLostObject_HASH)
+ {
+ return Event::s3_ReducedRedundancyLostObject;
+ }
+ else if (hashCode == s3_ObjectCreated_HASH)
+ {
+ return Event::s3_ObjectCreated;
+ }
+ else if (hashCode == s3_ObjectCreated_Put_HASH)
+ {
+ return Event::s3_ObjectCreated_Put;
+ }
+ else if (hashCode == s3_ObjectCreated_Post_HASH)
+ {
+ return Event::s3_ObjectCreated_Post;
+ }
+ else if (hashCode == s3_ObjectCreated_Copy_HASH)
+ {
+ return Event::s3_ObjectCreated_Copy;
+ }
+ else if (hashCode == s3_ObjectCreated_CompleteMultipartUpload_HASH)
+ {
+ return Event::s3_ObjectCreated_CompleteMultipartUpload;
+ }
+ else if (hashCode == s3_ObjectRemoved_HASH)
+ {
+ return Event::s3_ObjectRemoved;
+ }
+ else if (hashCode == s3_ObjectRemoved_Delete_HASH)
+ {
+ return Event::s3_ObjectRemoved_Delete;
+ }
+ else if (hashCode == s3_ObjectRemoved_DeleteMarkerCreated_HASH)
+ {
+ return Event::s3_ObjectRemoved_DeleteMarkerCreated;
+ }
+ else if (hashCode == s3_ObjectRestore_HASH)
+ {
+ return Event::s3_ObjectRestore;
+ }
+ else if (hashCode == s3_ObjectRestore_Post_HASH)
+ {
+ return Event::s3_ObjectRestore_Post;
+ }
+ else if (hashCode == s3_ObjectRestore_Completed_HASH)
+ {
+ return Event::s3_ObjectRestore_Completed;
+ }
+ else if (hashCode == s3_Replication_HASH)
+ {
+ return Event::s3_Replication;
+ }
+ else if (hashCode == s3_Replication_OperationFailedReplication_HASH)
+ {
+ return Event::s3_Replication_OperationFailedReplication;
+ }
+ else if (hashCode == s3_Replication_OperationNotTracked_HASH)
+ {
+ return Event::s3_Replication_OperationNotTracked;
+ }
+ else if (hashCode == s3_Replication_OperationMissedThreshold_HASH)
+ {
+ return Event::s3_Replication_OperationMissedThreshold;
+ }
+ else if (hashCode == s3_Replication_OperationReplicatedAfterThreshold_HASH)
+ {
+ return Event::s3_Replication_OperationReplicatedAfterThreshold;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<Event>(hashCode);
+ }
+
+ return Event::NOT_SET;
+ }
+
+ Aws::String GetNameForEvent(Event enumValue)
+ {
+ switch(enumValue)
+ {
+ case Event::s3_ReducedRedundancyLostObject:
+ return "s3:ReducedRedundancyLostObject";
+ case Event::s3_ObjectCreated:
+ return "s3:ObjectCreated:*";
+ case Event::s3_ObjectCreated_Put:
+ return "s3:ObjectCreated:Put";
+ case Event::s3_ObjectCreated_Post:
+ return "s3:ObjectCreated:Post";
+ case Event::s3_ObjectCreated_Copy:
+ return "s3:ObjectCreated:Copy";
+ case Event::s3_ObjectCreated_CompleteMultipartUpload:
+ return "s3:ObjectCreated:CompleteMultipartUpload";
+ case Event::s3_ObjectRemoved:
+ return "s3:ObjectRemoved:*";
+ case Event::s3_ObjectRemoved_Delete:
+ return "s3:ObjectRemoved:Delete";
+ case Event::s3_ObjectRemoved_DeleteMarkerCreated:
+ return "s3:ObjectRemoved:DeleteMarkerCreated";
+ case Event::s3_ObjectRestore:
+ return "s3:ObjectRestore:*";
+ case Event::s3_ObjectRestore_Post:
+ return "s3:ObjectRestore:Post";
+ case Event::s3_ObjectRestore_Completed:
+ return "s3:ObjectRestore:Completed";
+ case Event::s3_Replication:
+ return "s3:Replication:*";
+ case Event::s3_Replication_OperationFailedReplication:
+ return "s3:Replication:OperationFailedReplication";
+ case Event::s3_Replication_OperationNotTracked:
+ return "s3:Replication:OperationNotTracked";
+ case Event::s3_Replication_OperationMissedThreshold:
+ return "s3:Replication:OperationMissedThreshold";
+ case Event::s3_Replication_OperationReplicatedAfterThreshold:
+ return "s3:Replication:OperationReplicatedAfterThreshold";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace EventMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplication.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplication.cpp
new file mode 100644
index 00000000000..7746f0211bb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplication.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ExistingObjectReplication.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ExistingObjectReplication::ExistingObjectReplication() :
+ m_status(ExistingObjectReplicationStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+}
+
+ExistingObjectReplication::ExistingObjectReplication(const XmlNode& xmlNode) :
+ m_status(ExistingObjectReplicationStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ExistingObjectReplication& ExistingObjectReplication::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = ExistingObjectReplicationStatusMapper::GetExistingObjectReplicationStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ExistingObjectReplication::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(ExistingObjectReplicationStatusMapper::GetNameForExistingObjectReplicationStatus(m_status));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplicationStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplicationStatus.cpp
new file mode 100644
index 00000000000..73e9299a23a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExistingObjectReplicationStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ExistingObjectReplicationStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ExistingObjectReplicationStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ ExistingObjectReplicationStatus GetExistingObjectReplicationStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return ExistingObjectReplicationStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return ExistingObjectReplicationStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ExistingObjectReplicationStatus>(hashCode);
+ }
+
+ return ExistingObjectReplicationStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForExistingObjectReplicationStatus(ExistingObjectReplicationStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ExistingObjectReplicationStatus::Enabled:
+ return "Enabled";
+ case ExistingObjectReplicationStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ExistingObjectReplicationStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpirationStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpirationStatus.cpp
new file mode 100644
index 00000000000..3ead64146ea
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpirationStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ExpirationStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ExpirationStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ ExpirationStatus GetExpirationStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return ExpirationStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return ExpirationStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ExpirationStatus>(hashCode);
+ }
+
+ return ExpirationStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForExpirationStatus(ExpirationStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ExpirationStatus::Enabled:
+ return "Enabled";
+ case ExpirationStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ExpirationStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpressionType.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpressionType.cpp
new file mode 100644
index 00000000000..a54465e5c79
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ExpressionType.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ExpressionType.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ExpressionTypeMapper
+ {
+
+ static const int SQL_HASH = HashingUtils::HashString("SQL");
+
+
+ ExpressionType GetExpressionTypeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == SQL_HASH)
+ {
+ return ExpressionType::SQL;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ExpressionType>(hashCode);
+ }
+
+ return ExpressionType::NOT_SET;
+ }
+
+ Aws::String GetNameForExpressionType(ExpressionType enumValue)
+ {
+ switch(enumValue)
+ {
+ case ExpressionType::SQL:
+ return "SQL";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ExpressionTypeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FileHeaderInfo.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FileHeaderInfo.cpp
new file mode 100644
index 00000000000..aced225854f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FileHeaderInfo.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/FileHeaderInfo.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace FileHeaderInfoMapper
+ {
+
+ static const int USE_HASH = HashingUtils::HashString("USE");
+ static const int IGNORE_HASH = HashingUtils::HashString("IGNORE");
+ static const int NONE_HASH = HashingUtils::HashString("NONE");
+
+
+ FileHeaderInfo GetFileHeaderInfoForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == USE_HASH)
+ {
+ return FileHeaderInfo::USE;
+ }
+ else if (hashCode == IGNORE_HASH)
+ {
+ return FileHeaderInfo::IGNORE;
+ }
+ else if (hashCode == NONE_HASH)
+ {
+ return FileHeaderInfo::NONE;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<FileHeaderInfo>(hashCode);
+ }
+
+ return FileHeaderInfo::NOT_SET;
+ }
+
+ Aws::String GetNameForFileHeaderInfo(FileHeaderInfo enumValue)
+ {
+ switch(enumValue)
+ {
+ case FileHeaderInfo::USE:
+ return "USE";
+ case FileHeaderInfo::IGNORE:
+ return "IGNORE";
+ case FileHeaderInfo::NONE:
+ return "NONE";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace FileHeaderInfoMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRule.cpp
new file mode 100644
index 00000000000..e677202fcef
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRule.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/FilterRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+FilterRule::FilterRule() :
+ m_name(FilterRuleName::NOT_SET),
+ m_nameHasBeenSet(false),
+ m_valueHasBeenSet(false)
+{
+}
+
+FilterRule::FilterRule(const XmlNode& xmlNode) :
+ m_name(FilterRuleName::NOT_SET),
+ m_nameHasBeenSet(false),
+ m_valueHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+FilterRule& FilterRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode nameNode = resultNode.FirstChild("Name");
+ if(!nameNode.IsNull())
+ {
+ m_name = FilterRuleNameMapper::GetFilterRuleNameForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(nameNode.GetText()).c_str()).c_str());
+ m_nameHasBeenSet = true;
+ }
+ XmlNode valueNode = resultNode.FirstChild("Value");
+ if(!valueNode.IsNull())
+ {
+ m_value = Aws::Utils::Xml::DecodeEscapedXmlText(valueNode.GetText());
+ m_valueHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void FilterRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_nameHasBeenSet)
+ {
+ XmlNode nameNode = parentNode.CreateChildElement("Name");
+ nameNode.SetText(FilterRuleNameMapper::GetNameForFilterRuleName(m_name));
+ }
+
+ if(m_valueHasBeenSet)
+ {
+ XmlNode valueNode = parentNode.CreateChildElement("Value");
+ valueNode.SetText(m_value);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRuleName.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRuleName.cpp
new file mode 100644
index 00000000000..84122b0eb16
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/FilterRuleName.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/FilterRuleName.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace FilterRuleNameMapper
+ {
+
+ static const int prefix_HASH = HashingUtils::HashString("prefix");
+ static const int suffix_HASH = HashingUtils::HashString("suffix");
+
+
+ FilterRuleName GetFilterRuleNameForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == prefix_HASH)
+ {
+ return FilterRuleName::prefix;
+ }
+ else if (hashCode == suffix_HASH)
+ {
+ return FilterRuleName::suffix;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<FilterRuleName>(hashCode);
+ }
+
+ return FilterRuleName::NOT_SET;
+ }
+
+ Aws::String GetNameForFilterRuleName(FilterRuleName enumValue)
+ {
+ switch(enumValue)
+ {
+ case FilterRuleName::prefix:
+ return "prefix";
+ case FilterRuleName::suffix:
+ return "suffix";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace FilterRuleNameMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationRequest.cpp
new file mode 100644
index 00000000000..3bc67a43cc8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketAccelerateConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketAccelerateConfigurationRequest::GetBucketAccelerateConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketAccelerateConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketAccelerateConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketAccelerateConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationResult.cpp
new file mode 100644
index 00000000000..43f9c27209b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAccelerateConfigurationResult.cpp
@@ -0,0 +1,44 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketAccelerateConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketAccelerateConfigurationResult::GetBucketAccelerateConfigurationResult() :
+ m_status(BucketAccelerateStatus::NOT_SET)
+{
+}
+
+GetBucketAccelerateConfigurationResult::GetBucketAccelerateConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_status(BucketAccelerateStatus::NOT_SET)
+{
+ *this = result;
+}
+
+GetBucketAccelerateConfigurationResult& GetBucketAccelerateConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = BucketAccelerateStatusMapper::GetBucketAccelerateStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclRequest.cpp
new file mode 100644
index 00000000000..df77a9e7f69
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketAclRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketAclRequest::GetBucketAclRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketAclRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketAclRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketAclRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclResult.cpp
new file mode 100644
index 00000000000..015d5bb0066
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAclResult.cpp
@@ -0,0 +1,53 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketAclResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketAclResult::GetBucketAclResult()
+{
+}
+
+GetBucketAclResult::GetBucketAclResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketAclResult& GetBucketAclResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ }
+ XmlNode grantsNode = resultNode.FirstChild("AccessControlList");
+ if(!grantsNode.IsNull())
+ {
+ XmlNode grantsMember = grantsNode.FirstChild("Grant");
+ while(!grantsMember.IsNull())
+ {
+ m_grants.push_back(grantsMember);
+ grantsMember = grantsMember.NextNode("Grant");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationRequest.cpp
new file mode 100644
index 00000000000..5e3d792e2c5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketAnalyticsConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketAnalyticsConfigurationRequest::GetBucketAnalyticsConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketAnalyticsConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketAnalyticsConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketAnalyticsConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationResult.cpp
new file mode 100644
index 00000000000..4cd6a0e61f0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketAnalyticsConfigurationResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketAnalyticsConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketAnalyticsConfigurationResult::GetBucketAnalyticsConfigurationResult()
+{
+}
+
+GetBucketAnalyticsConfigurationResult::GetBucketAnalyticsConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketAnalyticsConfigurationResult& GetBucketAnalyticsConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_analyticsConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsRequest.cpp
new file mode 100644
index 00000000000..92cc762080b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketCorsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketCorsRequest::GetBucketCorsRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketCorsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketCorsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketCorsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsResult.cpp
new file mode 100644
index 00000000000..9136066b0f4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketCorsResult.cpp
@@ -0,0 +1,48 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketCorsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketCorsResult::GetBucketCorsResult()
+{
+}
+
+GetBucketCorsResult::GetBucketCorsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketCorsResult& GetBucketCorsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode cORSRulesNode = resultNode.FirstChild("CORSRule");
+ if(!cORSRulesNode.IsNull())
+ {
+ XmlNode cORSRuleMember = cORSRulesNode;
+ while(!cORSRuleMember.IsNull())
+ {
+ m_cORSRules.push_back(cORSRuleMember);
+ cORSRuleMember = cORSRuleMember.NextNode("CORSRule");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionRequest.cpp
new file mode 100644
index 00000000000..ad69f940351
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketEncryptionRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketEncryptionRequest::GetBucketEncryptionRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketEncryptionRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketEncryptionRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketEncryptionRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionResult.cpp
new file mode 100644
index 00000000000..6d1b42e4a08
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketEncryptionResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketEncryptionResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketEncryptionResult::GetBucketEncryptionResult()
+{
+}
+
+GetBucketEncryptionResult::GetBucketEncryptionResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketEncryptionResult& GetBucketEncryptionResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_serverSideEncryptionConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationRequest.cpp
new file mode 100644
index 00000000000..ac5e664e69f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationRequest.cpp
@@ -0,0 +1,59 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketIntelligentTieringConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketIntelligentTieringConfigurationRequest::GetBucketIntelligentTieringConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketIntelligentTieringConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketIntelligentTieringConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationResult.cpp
new file mode 100644
index 00000000000..97f4391be3e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketIntelligentTieringConfigurationResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketIntelligentTieringConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketIntelligentTieringConfigurationResult::GetBucketIntelligentTieringConfigurationResult()
+{
+}
+
+GetBucketIntelligentTieringConfigurationResult::GetBucketIntelligentTieringConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketIntelligentTieringConfigurationResult& GetBucketIntelligentTieringConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_intelligentTieringConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationRequest.cpp
new file mode 100644
index 00000000000..f3ec3acdc57
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketInventoryConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketInventoryConfigurationRequest::GetBucketInventoryConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketInventoryConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketInventoryConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketInventoryConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationResult.cpp
new file mode 100644
index 00000000000..93217331b93
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketInventoryConfigurationResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketInventoryConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketInventoryConfigurationResult::GetBucketInventoryConfigurationResult()
+{
+}
+
+GetBucketInventoryConfigurationResult::GetBucketInventoryConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketInventoryConfigurationResult& GetBucketInventoryConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_inventoryConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationRequest.cpp
new file mode 100644
index 00000000000..5abc090ac4f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketLifecycleConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketLifecycleConfigurationRequest::GetBucketLifecycleConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketLifecycleConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketLifecycleConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketLifecycleConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationResult.cpp
new file mode 100644
index 00000000000..6c0db940cf8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLifecycleConfigurationResult.cpp
@@ -0,0 +1,48 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketLifecycleConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketLifecycleConfigurationResult::GetBucketLifecycleConfigurationResult()
+{
+}
+
+GetBucketLifecycleConfigurationResult::GetBucketLifecycleConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketLifecycleConfigurationResult& GetBucketLifecycleConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode rulesNode = resultNode.FirstChild("Rule");
+ if(!rulesNode.IsNull())
+ {
+ XmlNode ruleMember = rulesNode;
+ while(!ruleMember.IsNull())
+ {
+ m_rules.push_back(ruleMember);
+ ruleMember = ruleMember.NextNode("Rule");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationRequest.cpp
new file mode 100644
index 00000000000..68e7f366f6c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketLocationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketLocationRequest::GetBucketLocationRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketLocationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketLocationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketLocationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationResult.cpp
new file mode 100644
index 00000000000..24fc4e62b09
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLocationResult.cpp
@@ -0,0 +1,41 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketLocationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketLocationResult::GetBucketLocationResult():
+ m_locationConstraint(BucketLocationConstraint::NOT_SET)
+{
+}
+
+GetBucketLocationResult::GetBucketLocationResult(const AmazonWebServiceResult<XmlDocument>& result):
+ m_locationConstraint(BucketLocationConstraint::NOT_SET)
+{
+ *this = result;
+}
+
+GetBucketLocationResult& GetBucketLocationResult::operator =(const AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_locationConstraint = BucketLocationConstraintMapper::GetBucketLocationConstraintForName(StringUtils::Trim(resultNode.GetText().c_str()).c_str());
+ }
+
+ return *this;
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingRequest.cpp
new file mode 100644
index 00000000000..ee141ec35ce
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketLoggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketLoggingRequest::GetBucketLoggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketLoggingRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketLoggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketLoggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingResult.cpp
new file mode 100644
index 00000000000..903c778a899
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketLoggingResult.cpp
@@ -0,0 +1,42 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketLoggingResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketLoggingResult::GetBucketLoggingResult()
+{
+}
+
+GetBucketLoggingResult::GetBucketLoggingResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketLoggingResult& GetBucketLoggingResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode loggingEnabledNode = resultNode.FirstChild("LoggingEnabled");
+ if(!loggingEnabledNode.IsNull())
+ {
+ m_loggingEnabled = loggingEnabledNode;
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationRequest.cpp
new file mode 100644
index 00000000000..c384ad6f1e4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketMetricsConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketMetricsConfigurationRequest::GetBucketMetricsConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketMetricsConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketMetricsConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketMetricsConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationResult.cpp
new file mode 100644
index 00000000000..139492f9a34
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketMetricsConfigurationResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketMetricsConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketMetricsConfigurationResult::GetBucketMetricsConfigurationResult()
+{
+}
+
+GetBucketMetricsConfigurationResult::GetBucketMetricsConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketMetricsConfigurationResult& GetBucketMetricsConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_metricsConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationRequest.cpp
new file mode 100644
index 00000000000..6e892ead3b1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketNotificationConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketNotificationConfigurationRequest::GetBucketNotificationConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketNotificationConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketNotificationConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketNotificationConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationResult.cpp
new file mode 100644
index 00000000000..de68f4316ae
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketNotificationConfigurationResult.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketNotificationConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketNotificationConfigurationResult::GetBucketNotificationConfigurationResult()
+{
+}
+
+GetBucketNotificationConfigurationResult::GetBucketNotificationConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketNotificationConfigurationResult& GetBucketNotificationConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode topicConfigurationsNode = resultNode.FirstChild("TopicConfiguration");
+ if(!topicConfigurationsNode.IsNull())
+ {
+ XmlNode topicConfigurationMember = topicConfigurationsNode;
+ while(!topicConfigurationMember.IsNull())
+ {
+ m_topicConfigurations.push_back(topicConfigurationMember);
+ topicConfigurationMember = topicConfigurationMember.NextNode("TopicConfiguration");
+ }
+
+ }
+ XmlNode queueConfigurationsNode = resultNode.FirstChild("QueueConfiguration");
+ if(!queueConfigurationsNode.IsNull())
+ {
+ XmlNode queueConfigurationMember = queueConfigurationsNode;
+ while(!queueConfigurationMember.IsNull())
+ {
+ m_queueConfigurations.push_back(queueConfigurationMember);
+ queueConfigurationMember = queueConfigurationMember.NextNode("QueueConfiguration");
+ }
+
+ }
+ XmlNode lambdaFunctionConfigurationsNode = resultNode.FirstChild("CloudFunctionConfiguration");
+ if(!lambdaFunctionConfigurationsNode.IsNull())
+ {
+ XmlNode cloudFunctionConfigurationMember = lambdaFunctionConfigurationsNode;
+ while(!cloudFunctionConfigurationMember.IsNull())
+ {
+ m_lambdaFunctionConfigurations.push_back(cloudFunctionConfigurationMember);
+ cloudFunctionConfigurationMember = cloudFunctionConfigurationMember.NextNode("CloudFunctionConfiguration");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsRequest.cpp
new file mode 100644
index 00000000000..efaa529d2e8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketOwnershipControlsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketOwnershipControlsRequest::GetBucketOwnershipControlsRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketOwnershipControlsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketOwnershipControlsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketOwnershipControlsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsResult.cpp
new file mode 100644
index 00000000000..185147032ee
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketOwnershipControlsResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketOwnershipControlsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketOwnershipControlsResult::GetBucketOwnershipControlsResult()
+{
+}
+
+GetBucketOwnershipControlsResult::GetBucketOwnershipControlsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketOwnershipControlsResult& GetBucketOwnershipControlsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_ownershipControls = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyRequest.cpp
new file mode 100644
index 00000000000..e41b1fe0c53
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketPolicyRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketPolicyRequest::GetBucketPolicyRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketPolicyRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketPolicyRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketPolicyRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyResult.cpp
new file mode 100644
index 00000000000..a5a1213c79e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyResult.cpp
@@ -0,0 +1,48 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketPolicyResult.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Stream;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketPolicyResult::GetBucketPolicyResult()
+{
+}
+
+GetBucketPolicyResult::GetBucketPolicyResult(GetBucketPolicyResult&& toMove) :
+ m_policy(std::move(toMove.m_policy))
+{
+}
+
+GetBucketPolicyResult& GetBucketPolicyResult::operator=(GetBucketPolicyResult&& toMove)
+{
+ if(this == &toMove)
+ {
+ return *this;
+ }
+
+ m_policy = std::move(toMove.m_policy);
+
+ return *this;
+}
+
+GetBucketPolicyResult::GetBucketPolicyResult(Aws::AmazonWebServiceResult<ResponseStream>&& result)
+{
+ *this = std::move(result);
+}
+
+GetBucketPolicyResult& GetBucketPolicyResult::operator =(Aws::AmazonWebServiceResult<ResponseStream>&& result)
+{
+ m_policy = result.TakeOwnershipOfPayload();
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusRequest.cpp
new file mode 100644
index 00000000000..3c487f9634e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketPolicyStatusRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketPolicyStatusRequest::GetBucketPolicyStatusRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketPolicyStatusRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketPolicyStatusRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketPolicyStatusRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusResult.cpp
new file mode 100644
index 00000000000..a3302a3fc57
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketPolicyStatusResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketPolicyStatusResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketPolicyStatusResult::GetBucketPolicyStatusResult()
+{
+}
+
+GetBucketPolicyStatusResult::GetBucketPolicyStatusResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketPolicyStatusResult& GetBucketPolicyStatusResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_policyStatus = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationRequest.cpp
new file mode 100644
index 00000000000..3dcadfa2be8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketReplicationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketReplicationRequest::GetBucketReplicationRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketReplicationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketReplicationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketReplicationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationResult.cpp
new file mode 100644
index 00000000000..323feded631
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketReplicationResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketReplicationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketReplicationResult::GetBucketReplicationResult()
+{
+}
+
+GetBucketReplicationResult::GetBucketReplicationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketReplicationResult& GetBucketReplicationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_replicationConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentRequest.cpp
new file mode 100644
index 00000000000..7f3e734b703
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketRequestPaymentRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketRequestPaymentRequest::GetBucketRequestPaymentRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketRequestPaymentRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketRequestPaymentRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketRequestPaymentRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentResult.cpp
new file mode 100644
index 00000000000..593bf0d9f94
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketRequestPaymentResult.cpp
@@ -0,0 +1,44 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketRequestPaymentResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketRequestPaymentResult::GetBucketRequestPaymentResult() :
+ m_payer(Payer::NOT_SET)
+{
+}
+
+GetBucketRequestPaymentResult::GetBucketRequestPaymentResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_payer(Payer::NOT_SET)
+{
+ *this = result;
+}
+
+GetBucketRequestPaymentResult& GetBucketRequestPaymentResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode payerNode = resultNode.FirstChild("Payer");
+ if(!payerNode.IsNull())
+ {
+ m_payer = PayerMapper::GetPayerForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(payerNode.GetText()).c_str()).c_str());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingRequest.cpp
new file mode 100644
index 00000000000..72373deaf14
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketTaggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketTaggingRequest::GetBucketTaggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketTaggingRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketTaggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketTaggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingResult.cpp
new file mode 100644
index 00000000000..c18f29ee309
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketTaggingResult.cpp
@@ -0,0 +1,48 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketTaggingResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketTaggingResult::GetBucketTaggingResult()
+{
+}
+
+GetBucketTaggingResult::GetBucketTaggingResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketTaggingResult& GetBucketTaggingResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode tagSetNode = resultNode.FirstChild("TagSet");
+ if(!tagSetNode.IsNull())
+ {
+ XmlNode tagSetMember = tagSetNode.FirstChild("Tag");
+ while(!tagSetMember.IsNull())
+ {
+ m_tagSet.push_back(tagSetMember);
+ tagSetMember = tagSetMember.NextNode("Tag");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningRequest.cpp
new file mode 100644
index 00000000000..7583f791179
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketVersioningRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketVersioningRequest::GetBucketVersioningRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketVersioningRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketVersioningRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketVersioningRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningResult.cpp
new file mode 100644
index 00000000000..cb32d3a5302
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketVersioningResult.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketVersioningResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketVersioningResult::GetBucketVersioningResult() :
+ m_status(BucketVersioningStatus::NOT_SET),
+ m_mFADelete(MFADeleteStatus::NOT_SET)
+{
+}
+
+GetBucketVersioningResult::GetBucketVersioningResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_status(BucketVersioningStatus::NOT_SET),
+ m_mFADelete(MFADeleteStatus::NOT_SET)
+{
+ *this = result;
+}
+
+GetBucketVersioningResult& GetBucketVersioningResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = BucketVersioningStatusMapper::GetBucketVersioningStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ }
+ XmlNode mFADeleteNode = resultNode.FirstChild("MfaDelete");
+ if(!mFADeleteNode.IsNull())
+ {
+ m_mFADelete = MFADeleteStatusMapper::GetMFADeleteStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(mFADeleteNode.GetText()).c_str()).c_str());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteRequest.cpp
new file mode 100644
index 00000000000..067a281fa90
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketWebsiteRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetBucketWebsiteRequest::GetBucketWebsiteRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetBucketWebsiteRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetBucketWebsiteRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetBucketWebsiteRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteResult.cpp
new file mode 100644
index 00000000000..ac0fcfe0e24
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetBucketWebsiteResult.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetBucketWebsiteResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetBucketWebsiteResult::GetBucketWebsiteResult()
+{
+}
+
+GetBucketWebsiteResult::GetBucketWebsiteResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetBucketWebsiteResult& GetBucketWebsiteResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode redirectAllRequestsToNode = resultNode.FirstChild("RedirectAllRequestsTo");
+ if(!redirectAllRequestsToNode.IsNull())
+ {
+ m_redirectAllRequestsTo = redirectAllRequestsToNode;
+ }
+ XmlNode indexDocumentNode = resultNode.FirstChild("IndexDocument");
+ if(!indexDocumentNode.IsNull())
+ {
+ m_indexDocument = indexDocumentNode;
+ }
+ XmlNode errorDocumentNode = resultNode.FirstChild("ErrorDocument");
+ if(!errorDocumentNode.IsNull())
+ {
+ m_errorDocument = errorDocumentNode;
+ }
+ XmlNode routingRulesNode = resultNode.FirstChild("RoutingRules");
+ if(!routingRulesNode.IsNull())
+ {
+ XmlNode routingRulesMember = routingRulesNode.FirstChild("RoutingRule");
+ while(!routingRulesMember.IsNull())
+ {
+ m_routingRules.push_back(routingRulesMember);
+ routingRulesMember = routingRulesMember.NextNode("RoutingRule");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclRequest.cpp
new file mode 100644
index 00000000000..9019eea1c7a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclRequest.cpp
@@ -0,0 +1,81 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectAclRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetObjectAclRequest::GetObjectAclRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetObjectAclRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetObjectAclRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetObjectAclRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclResult.cpp
new file mode 100644
index 00000000000..76bb1ec4911
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectAclResult.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectAclResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetObjectAclResult::GetObjectAclResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+GetObjectAclResult::GetObjectAclResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+GetObjectAclResult& GetObjectAclResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ }
+ XmlNode grantsNode = resultNode.FirstChild("AccessControlList");
+ if(!grantsNode.IsNull())
+ {
+ XmlNode grantsMember = grantsNode.FirstChild("Grant");
+ while(!grantsMember.IsNull())
+ {
+ m_grants.push_back(grantsMember);
+ grantsMember = grantsMember.NextNode("Grant");
+ }
+
+ }
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldRequest.cpp
new file mode 100644
index 00000000000..6a3ba662dc8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldRequest.cpp
@@ -0,0 +1,81 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectLegalHoldRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetObjectLegalHoldRequest::GetObjectLegalHoldRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetObjectLegalHoldRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetObjectLegalHoldRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetObjectLegalHoldRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldResult.cpp
new file mode 100644
index 00000000000..0a008d85c2d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLegalHoldResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectLegalHoldResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetObjectLegalHoldResult::GetObjectLegalHoldResult()
+{
+}
+
+GetObjectLegalHoldResult::GetObjectLegalHoldResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetObjectLegalHoldResult& GetObjectLegalHoldResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_legalHold = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationRequest.cpp
new file mode 100644
index 00000000000..d1cf37a0300
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectLockConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetObjectLockConfigurationRequest::GetObjectLockConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetObjectLockConfigurationRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetObjectLockConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetObjectLockConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationResult.cpp
new file mode 100644
index 00000000000..4eae3d2b502
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectLockConfigurationResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectLockConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetObjectLockConfigurationResult::GetObjectLockConfigurationResult()
+{
+}
+
+GetObjectLockConfigurationResult::GetObjectLockConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetObjectLockConfigurationResult& GetObjectLockConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_objectLockConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRequest.cpp
new file mode 100644
index 00000000000..a1939e24712
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRequest.cpp
@@ -0,0 +1,198 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetObjectRequest::GetObjectRequest() :
+ m_bucketHasBeenSet(false),
+ m_ifMatchHasBeenSet(false),
+ m_ifModifiedSinceHasBeenSet(false),
+ m_ifNoneMatchHasBeenSet(false),
+ m_ifUnmodifiedSinceHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_rangeHasBeenSet(false),
+ m_responseCacheControlHasBeenSet(false),
+ m_responseContentDispositionHasBeenSet(false),
+ m_responseContentEncodingHasBeenSet(false),
+ m_responseContentLanguageHasBeenSet(false),
+ m_responseContentTypeHasBeenSet(false),
+ m_responseExpiresHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetObjectRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetObjectRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_responseCacheControlHasBeenSet)
+ {
+ ss << m_responseCacheControl;
+ uri.AddQueryStringParameter("response-cache-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_responseContentDispositionHasBeenSet)
+ {
+ ss << m_responseContentDisposition;
+ uri.AddQueryStringParameter("response-content-disposition", ss.str());
+ ss.str("");
+ }
+
+ if(m_responseContentEncodingHasBeenSet)
+ {
+ ss << m_responseContentEncoding;
+ uri.AddQueryStringParameter("response-content-encoding", ss.str());
+ ss.str("");
+ }
+
+ if(m_responseContentLanguageHasBeenSet)
+ {
+ ss << m_responseContentLanguage;
+ uri.AddQueryStringParameter("response-content-language", ss.str());
+ ss.str("");
+ }
+
+ if(m_responseContentTypeHasBeenSet)
+ {
+ ss << m_responseContentType;
+ uri.AddQueryStringParameter("response-content-type", ss.str());
+ ss.str("");
+ }
+
+ if(m_responseExpiresHasBeenSet)
+ {
+ ss << m_responseExpires.ToGmtString(DateFormat::RFC822);
+ uri.AddQueryStringParameter("response-expires", ss.str());
+ ss.str("");
+ }
+
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(m_partNumberHasBeenSet)
+ {
+ ss << m_partNumber;
+ uri.AddQueryStringParameter("partNumber", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetObjectRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_ifMatchHasBeenSet)
+ {
+ ss << m_ifMatch;
+ headers.emplace("if-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_ifModifiedSinceHasBeenSet)
+ {
+ headers.emplace("if-modified-since", m_ifModifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_ifNoneMatchHasBeenSet)
+ {
+ ss << m_ifNoneMatch;
+ headers.emplace("if-none-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_ifUnmodifiedSinceHasBeenSet)
+ {
+ headers.emplace("if-unmodified-since", m_ifUnmodifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_rangeHasBeenSet)
+ {
+ ss << m_range;
+ headers.emplace("range", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectResult.cpp
new file mode 100644
index 00000000000..8c20face8e0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectResult.cpp
@@ -0,0 +1,344 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectResult.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Stream;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetObjectResult::GetObjectResult() :
+ m_deleteMarker(false),
+ m_contentLength(0),
+ m_missingMeta(0),
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_requestCharged(RequestCharged::NOT_SET),
+ m_replicationStatus(ReplicationStatus::NOT_SET),
+ m_partsCount(0),
+ m_tagCount(0),
+ m_objectLockMode(ObjectLockMode::NOT_SET),
+ m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET)
+{
+}
+
+GetObjectResult::GetObjectResult(GetObjectResult&& toMove) :
+ m_body(std::move(toMove.m_body)),
+ m_deleteMarker(toMove.m_deleteMarker),
+ m_acceptRanges(std::move(toMove.m_acceptRanges)),
+ m_expiration(std::move(toMove.m_expiration)),
+ m_restore(std::move(toMove.m_restore)),
+ m_lastModified(std::move(toMove.m_lastModified)),
+ m_contentLength(toMove.m_contentLength),
+ m_eTag(std::move(toMove.m_eTag)),
+ m_missingMeta(toMove.m_missingMeta),
+ m_versionId(std::move(toMove.m_versionId)),
+ m_cacheControl(std::move(toMove.m_cacheControl)),
+ m_contentDisposition(std::move(toMove.m_contentDisposition)),
+ m_contentEncoding(std::move(toMove.m_contentEncoding)),
+ m_contentLanguage(std::move(toMove.m_contentLanguage)),
+ m_contentRange(std::move(toMove.m_contentRange)),
+ m_contentType(std::move(toMove.m_contentType)),
+ m_expires(std::move(toMove.m_expires)),
+ m_websiteRedirectLocation(std::move(toMove.m_websiteRedirectLocation)),
+ m_serverSideEncryption(toMove.m_serverSideEncryption),
+ m_metadata(std::move(toMove.m_metadata)),
+ m_sSECustomerAlgorithm(std::move(toMove.m_sSECustomerAlgorithm)),
+ m_sSECustomerKeyMD5(std::move(toMove.m_sSECustomerKeyMD5)),
+ m_sSEKMSKeyId(std::move(toMove.m_sSEKMSKeyId)),
+ m_bucketKeyEnabled(toMove.m_bucketKeyEnabled),
+ m_storageClass(toMove.m_storageClass),
+ m_requestCharged(toMove.m_requestCharged),
+ m_replicationStatus(toMove.m_replicationStatus),
+ m_partsCount(toMove.m_partsCount),
+ m_tagCount(toMove.m_tagCount),
+ m_objectLockMode(toMove.m_objectLockMode),
+ m_objectLockRetainUntilDate(std::move(toMove.m_objectLockRetainUntilDate)),
+ m_objectLockLegalHoldStatus(toMove.m_objectLockLegalHoldStatus),
+ m_id2(std::move(toMove.m_id2)),
+ m_requestId(std::move(toMove.m_requestId))
+{
+}
+
+GetObjectResult& GetObjectResult::operator=(GetObjectResult&& toMove)
+{
+ if(this == &toMove)
+ {
+ return *this;
+ }
+
+ m_body = std::move(toMove.m_body);
+ m_deleteMarker = toMove.m_deleteMarker;
+ m_acceptRanges = std::move(toMove.m_acceptRanges);
+ m_expiration = std::move(toMove.m_expiration);
+ m_restore = std::move(toMove.m_restore);
+ m_lastModified = std::move(toMove.m_lastModified);
+ m_contentLength = toMove.m_contentLength;
+ m_eTag = std::move(toMove.m_eTag);
+ m_missingMeta = toMove.m_missingMeta;
+ m_versionId = std::move(toMove.m_versionId);
+ m_cacheControl = std::move(toMove.m_cacheControl);
+ m_contentDisposition = std::move(toMove.m_contentDisposition);
+ m_contentEncoding = std::move(toMove.m_contentEncoding);
+ m_contentLanguage = std::move(toMove.m_contentLanguage);
+ m_contentRange = std::move(toMove.m_contentRange);
+ m_contentType = std::move(toMove.m_contentType);
+ m_expires = std::move(toMove.m_expires);
+ m_websiteRedirectLocation = std::move(toMove.m_websiteRedirectLocation);
+ m_serverSideEncryption = toMove.m_serverSideEncryption;
+ m_metadata = std::move(toMove.m_metadata);
+ m_sSECustomerAlgorithm = std::move(toMove.m_sSECustomerAlgorithm);
+ m_sSECustomerKeyMD5 = std::move(toMove.m_sSECustomerKeyMD5);
+ m_sSEKMSKeyId = std::move(toMove.m_sSEKMSKeyId);
+ m_bucketKeyEnabled = toMove.m_bucketKeyEnabled;
+ m_storageClass = toMove.m_storageClass;
+ m_requestCharged = toMove.m_requestCharged;
+ m_replicationStatus = toMove.m_replicationStatus;
+ m_partsCount = toMove.m_partsCount;
+ m_tagCount = toMove.m_tagCount;
+ m_objectLockMode = toMove.m_objectLockMode;
+ m_objectLockRetainUntilDate = std::move(toMove.m_objectLockRetainUntilDate);
+ m_objectLockLegalHoldStatus = toMove.m_objectLockLegalHoldStatus;
+ m_id2 = std::move(toMove.m_id2);
+ m_requestId = std::move(toMove.m_requestId);
+
+ return *this;
+}
+
+GetObjectResult::GetObjectResult(Aws::AmazonWebServiceResult<ResponseStream>&& result) :
+ m_deleteMarker(false),
+ m_contentLength(0),
+ m_missingMeta(0),
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_requestCharged(RequestCharged::NOT_SET),
+ m_replicationStatus(ReplicationStatus::NOT_SET),
+ m_partsCount(0),
+ m_tagCount(0),
+ m_objectLockMode(ObjectLockMode::NOT_SET),
+ m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET)
+{
+ *this = std::move(result);
+}
+
+GetObjectResult& GetObjectResult::operator =(Aws::AmazonWebServiceResult<ResponseStream>&& result)
+{
+ m_body = result.TakeOwnershipOfPayload();
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& deleteMarkerIter = headers.find("x-amz-delete-marker");
+ if(deleteMarkerIter != headers.end())
+ {
+ m_deleteMarker = StringUtils::ConvertToBool(deleteMarkerIter->second.c_str());
+ }
+
+ const auto& acceptRangesIter = headers.find("accept-ranges");
+ if(acceptRangesIter != headers.end())
+ {
+ m_acceptRanges = acceptRangesIter->second;
+ }
+
+ const auto& expirationIter = headers.find("x-amz-expiration");
+ if(expirationIter != headers.end())
+ {
+ m_expiration = expirationIter->second;
+ }
+
+ const auto& restoreIter = headers.find("x-amz-restore");
+ if(restoreIter != headers.end())
+ {
+ m_restore = restoreIter->second;
+ }
+
+ const auto& lastModifiedIter = headers.find("last-modified");
+ if(lastModifiedIter != headers.end())
+ {
+ m_lastModified = DateTime(lastModifiedIter->second, DateFormat::RFC822);
+ }
+
+ const auto& contentLengthIter = headers.find("content-length");
+ if(contentLengthIter != headers.end())
+ {
+ m_contentLength = StringUtils::ConvertToInt64(contentLengthIter->second.c_str());
+ }
+
+ const auto& eTagIter = headers.find("etag");
+ if(eTagIter != headers.end())
+ {
+ m_eTag = eTagIter->second;
+ }
+
+ const auto& missingMetaIter = headers.find("x-amz-missing-meta");
+ if(missingMetaIter != headers.end())
+ {
+ m_missingMeta = StringUtils::ConvertToInt32(missingMetaIter->second.c_str());
+ }
+
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ const auto& cacheControlIter = headers.find("cache-control");
+ if(cacheControlIter != headers.end())
+ {
+ m_cacheControl = cacheControlIter->second;
+ }
+
+ const auto& contentDispositionIter = headers.find("content-disposition");
+ if(contentDispositionIter != headers.end())
+ {
+ m_contentDisposition = contentDispositionIter->second;
+ }
+
+ const auto& contentEncodingIter = headers.find("content-encoding");
+ if(contentEncodingIter != headers.end())
+ {
+ m_contentEncoding = contentEncodingIter->second;
+ }
+
+ const auto& contentLanguageIter = headers.find("content-language");
+ if(contentLanguageIter != headers.end())
+ {
+ m_contentLanguage = contentLanguageIter->second;
+ }
+
+ const auto& contentRangeIter = headers.find("content-range");
+ if(contentRangeIter != headers.end())
+ {
+ m_contentRange = contentRangeIter->second;
+ }
+
+ const auto& contentTypeIter = headers.find("content-type");
+ if(contentTypeIter != headers.end())
+ {
+ m_contentType = contentTypeIter->second;
+ }
+
+ const auto& expiresIter = headers.find("expires");
+ if(expiresIter != headers.end())
+ {
+ m_expires = DateTime(expiresIter->second, DateFormat::RFC822);
+ }
+
+ const auto& websiteRedirectLocationIter = headers.find("x-amz-website-redirect-location");
+ if(websiteRedirectLocationIter != headers.end())
+ {
+ m_websiteRedirectLocation = websiteRedirectLocationIter->second;
+ }
+
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ std::size_t prefixSize = sizeof("x-amz-meta-") - 1; //subtract the NULL terminator out
+ for(const auto& item : headers)
+ {
+ std::size_t foundPrefix = item.first.find("x-amz-meta-");
+
+ if(foundPrefix != std::string::npos)
+ {
+ m_metadata[item.first.substr(prefixSize)] = item.second;
+ }
+ }
+
+ const auto& sSECustomerAlgorithmIter = headers.find("x-amz-server-side-encryption-customer-algorithm");
+ if(sSECustomerAlgorithmIter != headers.end())
+ {
+ m_sSECustomerAlgorithm = sSECustomerAlgorithmIter->second;
+ }
+
+ const auto& sSECustomerKeyMD5Iter = headers.find("x-amz-server-side-encryption-customer-key-md5");
+ if(sSECustomerKeyMD5Iter != headers.end())
+ {
+ m_sSECustomerKeyMD5 = sSECustomerKeyMD5Iter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& storageClassIter = headers.find("x-amz-storage-class");
+ if(storageClassIter != headers.end())
+ {
+ m_storageClass = StorageClassMapper::GetStorageClassForName(storageClassIter->second);
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ const auto& replicationStatusIter = headers.find("x-amz-replication-status");
+ if(replicationStatusIter != headers.end())
+ {
+ m_replicationStatus = ReplicationStatusMapper::GetReplicationStatusForName(replicationStatusIter->second);
+ }
+
+ const auto& partsCountIter = headers.find("x-amz-mp-parts-count");
+ if(partsCountIter != headers.end())
+ {
+ m_partsCount = StringUtils::ConvertToInt32(partsCountIter->second.c_str());
+ }
+
+ const auto& tagCountIter = headers.find("x-amz-tagging-count");
+ if(tagCountIter != headers.end())
+ {
+ m_tagCount = StringUtils::ConvertToInt32(tagCountIter->second.c_str());
+ }
+
+ const auto& objectLockModeIter = headers.find("x-amz-object-lock-mode");
+ if(objectLockModeIter != headers.end())
+ {
+ m_objectLockMode = ObjectLockModeMapper::GetObjectLockModeForName(objectLockModeIter->second);
+ }
+
+ const auto& objectLockRetainUntilDateIter = headers.find("x-amz-object-lock-retain-until-date");
+ if(objectLockRetainUntilDateIter != headers.end())
+ {
+ m_objectLockRetainUntilDate = DateTime(objectLockRetainUntilDateIter->second, DateFormat::RFC822);
+ }
+
+ const auto& objectLockLegalHoldStatusIter = headers.find("x-amz-object-lock-legal-hold");
+ if(objectLockLegalHoldStatusIter != headers.end())
+ {
+ m_objectLockLegalHoldStatus = ObjectLockLegalHoldStatusMapper::GetObjectLockLegalHoldStatusForName(objectLockLegalHoldStatusIter->second);
+ }
+
+ const auto& id2Iter = headers.find("x-amz-id-2");
+ if(id2Iter != headers.end())
+ {
+ m_id2 = id2Iter->second;
+ }
+
+ const auto& requestIdIter = headers.find("x-amz-request-id");
+ if(requestIdIter != headers.end())
+ {
+ m_requestId = requestIdIter->second;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionRequest.cpp
new file mode 100644
index 00000000000..d1917da723b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionRequest.cpp
@@ -0,0 +1,81 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectRetentionRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetObjectRetentionRequest::GetObjectRetentionRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetObjectRetentionRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetObjectRetentionRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetObjectRetentionRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionResult.cpp
new file mode 100644
index 00000000000..bddb6b0ada0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectRetentionResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectRetentionResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetObjectRetentionResult::GetObjectRetentionResult()
+{
+}
+
+GetObjectRetentionResult::GetObjectRetentionResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetObjectRetentionResult& GetObjectRetentionResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_retention = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingRequest.cpp
new file mode 100644
index 00000000000..447a1c4041a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingRequest.cpp
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectTaggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetObjectTaggingRequest::GetObjectTaggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetObjectTaggingRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetObjectTaggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetObjectTaggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingResult.cpp
new file mode 100644
index 00000000000..fbc71424ff0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTaggingResult.cpp
@@ -0,0 +1,56 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectTaggingResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetObjectTaggingResult::GetObjectTaggingResult()
+{
+}
+
+GetObjectTaggingResult::GetObjectTaggingResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetObjectTaggingResult& GetObjectTaggingResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode tagSetNode = resultNode.FirstChild("TagSet");
+ if(!tagSetNode.IsNull())
+ {
+ XmlNode tagSetMember = tagSetNode.FirstChild("Tag");
+ while(!tagSetMember.IsNull())
+ {
+ m_tagSet.push_back(tagSetMember);
+ tagSetMember = tagSetMember.NextNode("Tag");
+ }
+
+ }
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentRequest.cpp
new file mode 100644
index 00000000000..05aae88aa27
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectTorrentRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetObjectTorrentRequest::GetObjectTorrentRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetObjectTorrentRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetObjectTorrentRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetObjectTorrentRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentResult.cpp
new file mode 100644
index 00000000000..3e35340eee7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetObjectTorrentResult.cpp
@@ -0,0 +1,61 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetObjectTorrentResult.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Stream;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetObjectTorrentResult::GetObjectTorrentResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+GetObjectTorrentResult::GetObjectTorrentResult(GetObjectTorrentResult&& toMove) :
+ m_body(std::move(toMove.m_body)),
+ m_requestCharged(toMove.m_requestCharged)
+{
+}
+
+GetObjectTorrentResult& GetObjectTorrentResult::operator=(GetObjectTorrentResult&& toMove)
+{
+ if(this == &toMove)
+ {
+ return *this;
+ }
+
+ m_body = std::move(toMove.m_body);
+ m_requestCharged = toMove.m_requestCharged;
+
+ return *this;
+}
+
+GetObjectTorrentResult::GetObjectTorrentResult(Aws::AmazonWebServiceResult<ResponseStream>&& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = std::move(result);
+}
+
+GetObjectTorrentResult& GetObjectTorrentResult::operator =(Aws::AmazonWebServiceResult<ResponseStream>&& result)
+{
+ m_body = result.TakeOwnershipOfPayload();
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockRequest.cpp
new file mode 100644
index 00000000000..6616e19c0b2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetPublicAccessBlockRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+GetPublicAccessBlockRequest::GetPublicAccessBlockRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String GetPublicAccessBlockRequest::SerializePayload() const
+{
+ return {};
+}
+
+void GetPublicAccessBlockRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection GetPublicAccessBlockRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockResult.cpp
new file mode 100644
index 00000000000..d8cd57631ac
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GetPublicAccessBlockResult.cpp
@@ -0,0 +1,38 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GetPublicAccessBlockResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+GetPublicAccessBlockResult::GetPublicAccessBlockResult()
+{
+}
+
+GetPublicAccessBlockResult::GetPublicAccessBlockResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+GetPublicAccessBlockResult& GetPublicAccessBlockResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_publicAccessBlockConfiguration = resultNode;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GlacierJobParameters.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GlacierJobParameters.cpp
new file mode 100644
index 00000000000..1523c04f647
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/GlacierJobParameters.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/GlacierJobParameters.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+GlacierJobParameters::GlacierJobParameters() :
+ m_tier(Tier::NOT_SET),
+ m_tierHasBeenSet(false)
+{
+}
+
+GlacierJobParameters::GlacierJobParameters(const XmlNode& xmlNode) :
+ m_tier(Tier::NOT_SET),
+ m_tierHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+GlacierJobParameters& GlacierJobParameters::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode tierNode = resultNode.FirstChild("Tier");
+ if(!tierNode.IsNull())
+ {
+ m_tier = TierMapper::GetTierForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(tierNode.GetText()).c_str()).c_str());
+ m_tierHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void GlacierJobParameters::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_tierHasBeenSet)
+ {
+ XmlNode tierNode = parentNode.CreateChildElement("Tier");
+ tierNode.SetText(TierMapper::GetNameForTier(m_tier));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grant.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grant.cpp
new file mode 100644
index 00000000000..bc23e70ee00
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grant.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Grant.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Grant::Grant() :
+ m_granteeHasBeenSet(false),
+ m_permission(Permission::NOT_SET),
+ m_permissionHasBeenSet(false)
+{
+}
+
+Grant::Grant(const XmlNode& xmlNode) :
+ m_granteeHasBeenSet(false),
+ m_permission(Permission::NOT_SET),
+ m_permissionHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Grant& Grant::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode granteeNode = resultNode.FirstChild("Grantee");
+ if(!granteeNode.IsNull())
+ {
+ m_grantee = granteeNode;
+ m_granteeHasBeenSet = true;
+ }
+ XmlNode permissionNode = resultNode.FirstChild("Permission");
+ if(!permissionNode.IsNull())
+ {
+ m_permission = PermissionMapper::GetPermissionForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(permissionNode.GetText()).c_str()).c_str());
+ m_permissionHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Grant::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_granteeHasBeenSet)
+ {
+ XmlNode granteeNode = parentNode.CreateChildElement("Grantee");
+ m_grantee.AddToNode(granteeNode);
+ }
+
+ if(m_permissionHasBeenSet)
+ {
+ XmlNode permissionNode = parentNode.CreateChildElement("Permission");
+ permissionNode.SetText(PermissionMapper::GetNameForPermission(m_permission));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grantee.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grantee.cpp
new file mode 100644
index 00000000000..31a95234cf8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Grantee.cpp
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Grantee.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Grantee::Grantee() :
+ m_displayNameHasBeenSet(false),
+ m_emailAddressHasBeenSet(false),
+ m_iDHasBeenSet(false),
+ m_type(Type::NOT_SET),
+ m_typeHasBeenSet(false),
+ m_uRIHasBeenSet(false)
+{
+}
+
+Grantee::Grantee(const XmlNode& xmlNode) :
+ m_displayNameHasBeenSet(false),
+ m_emailAddressHasBeenSet(false),
+ m_iDHasBeenSet(false),
+ m_type(Type::NOT_SET),
+ m_typeHasBeenSet(false),
+ m_uRIHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Grantee& Grantee::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode displayNameNode = resultNode.FirstChild("DisplayName");
+ if(!displayNameNode.IsNull())
+ {
+ m_displayName = Aws::Utils::Xml::DecodeEscapedXmlText(displayNameNode.GetText());
+ m_displayNameHasBeenSet = true;
+ }
+ XmlNode emailAddressNode = resultNode.FirstChild("EmailAddress");
+ if(!emailAddressNode.IsNull())
+ {
+ m_emailAddress = Aws::Utils::Xml::DecodeEscapedXmlText(emailAddressNode.GetText());
+ m_emailAddressHasBeenSet = true;
+ }
+ XmlNode iDNode = resultNode.FirstChild("ID");
+ if(!iDNode.IsNull())
+ {
+ m_iD = Aws::Utils::Xml::DecodeEscapedXmlText(iDNode.GetText());
+ m_iDHasBeenSet = true;
+ }
+ auto type = resultNode.GetAttributeValue("xsi:type");
+ if(!type.empty())
+ {
+ m_type = TypeMapper::GetTypeForName(StringUtils::Trim(type.c_str()).c_str());
+ m_typeHasBeenSet = true;
+ }
+ XmlNode uRINode = resultNode.FirstChild("URI");
+ if(!uRINode.IsNull())
+ {
+ m_uRI = Aws::Utils::Xml::DecodeEscapedXmlText(uRINode.GetText());
+ m_uRIHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Grantee::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ parentNode.SetAttributeValue("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
+ if(m_displayNameHasBeenSet)
+ {
+ XmlNode displayNameNode = parentNode.CreateChildElement("DisplayName");
+ displayNameNode.SetText(m_displayName);
+ }
+
+ if(m_emailAddressHasBeenSet)
+ {
+ XmlNode emailAddressNode = parentNode.CreateChildElement("EmailAddress");
+ emailAddressNode.SetText(m_emailAddress);
+ }
+
+ if(m_iDHasBeenSet)
+ {
+ XmlNode iDNode = parentNode.CreateChildElement("ID");
+ iDNode.SetText(m_iD);
+ }
+
+ if(m_typeHasBeenSet)
+ {
+ parentNode.SetAttributeValue("xsi:type", TypeMapper::GetNameForType(m_type));
+ }
+
+ if(m_uRIHasBeenSet)
+ {
+ XmlNode uRINode = parentNode.CreateChildElement("URI");
+ uRINode.SetText(m_uRI);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadBucketRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadBucketRequest.cpp
new file mode 100644
index 00000000000..b503f37b810
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadBucketRequest.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/HeadBucketRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+HeadBucketRequest::HeadBucketRequest() :
+ m_bucketHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String HeadBucketRequest::SerializePayload() const
+{
+ return {};
+}
+
+void HeadBucketRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection HeadBucketRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectRequest.cpp
new file mode 100644
index 00000000000..7bf7b7239ed
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectRequest.cpp
@@ -0,0 +1,150 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/HeadObjectRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+HeadObjectRequest::HeadObjectRequest() :
+ m_bucketHasBeenSet(false),
+ m_ifMatchHasBeenSet(false),
+ m_ifModifiedSinceHasBeenSet(false),
+ m_ifNoneMatchHasBeenSet(false),
+ m_ifUnmodifiedSinceHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_rangeHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String HeadObjectRequest::SerializePayload() const
+{
+ return {};
+}
+
+void HeadObjectRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(m_partNumberHasBeenSet)
+ {
+ ss << m_partNumber;
+ uri.AddQueryStringParameter("partNumber", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection HeadObjectRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_ifMatchHasBeenSet)
+ {
+ ss << m_ifMatch;
+ headers.emplace("if-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_ifModifiedSinceHasBeenSet)
+ {
+ headers.emplace("if-modified-since", m_ifModifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_ifNoneMatchHasBeenSet)
+ {
+ ss << m_ifNoneMatch;
+ headers.emplace("if-none-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_ifUnmodifiedSinceHasBeenSet)
+ {
+ headers.emplace("if-unmodified-since", m_ifUnmodifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_rangeHasBeenSet)
+ {
+ ss << m_range;
+ headers.emplace("range", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectResult.cpp
new file mode 100644
index 00000000000..ce0305dcafd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/HeadObjectResult.cpp
@@ -0,0 +1,248 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/HeadObjectResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+HeadObjectResult::HeadObjectResult() :
+ m_deleteMarker(false),
+ m_archiveStatus(ArchiveStatus::NOT_SET),
+ m_contentLength(0),
+ m_missingMeta(0),
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_requestCharged(RequestCharged::NOT_SET),
+ m_replicationStatus(ReplicationStatus::NOT_SET),
+ m_partsCount(0),
+ m_objectLockMode(ObjectLockMode::NOT_SET),
+ m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET)
+{
+}
+
+HeadObjectResult::HeadObjectResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_deleteMarker(false),
+ m_archiveStatus(ArchiveStatus::NOT_SET),
+ m_contentLength(0),
+ m_missingMeta(0),
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_requestCharged(RequestCharged::NOT_SET),
+ m_replicationStatus(ReplicationStatus::NOT_SET),
+ m_partsCount(0),
+ m_objectLockMode(ObjectLockMode::NOT_SET),
+ m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET)
+{
+ *this = result;
+}
+
+HeadObjectResult& HeadObjectResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& deleteMarkerIter = headers.find("x-amz-delete-marker");
+ if(deleteMarkerIter != headers.end())
+ {
+ m_deleteMarker = StringUtils::ConvertToBool(deleteMarkerIter->second.c_str());
+ }
+
+ const auto& acceptRangesIter = headers.find("accept-ranges");
+ if(acceptRangesIter != headers.end())
+ {
+ m_acceptRanges = acceptRangesIter->second;
+ }
+
+ const auto& expirationIter = headers.find("x-amz-expiration");
+ if(expirationIter != headers.end())
+ {
+ m_expiration = expirationIter->second;
+ }
+
+ const auto& restoreIter = headers.find("x-amz-restore");
+ if(restoreIter != headers.end())
+ {
+ m_restore = restoreIter->second;
+ }
+
+ const auto& archiveStatusIter = headers.find("x-amz-archive-status");
+ if(archiveStatusIter != headers.end())
+ {
+ m_archiveStatus = ArchiveStatusMapper::GetArchiveStatusForName(archiveStatusIter->second);
+ }
+
+ const auto& lastModifiedIter = headers.find("last-modified");
+ if(lastModifiedIter != headers.end())
+ {
+ m_lastModified = DateTime(lastModifiedIter->second, DateFormat::RFC822);
+ }
+
+ const auto& contentLengthIter = headers.find("content-length");
+ if(contentLengthIter != headers.end())
+ {
+ m_contentLength = StringUtils::ConvertToInt64(contentLengthIter->second.c_str());
+ }
+
+ const auto& eTagIter = headers.find("etag");
+ if(eTagIter != headers.end())
+ {
+ m_eTag = eTagIter->second;
+ }
+
+ const auto& missingMetaIter = headers.find("x-amz-missing-meta");
+ if(missingMetaIter != headers.end())
+ {
+ m_missingMeta = StringUtils::ConvertToInt32(missingMetaIter->second.c_str());
+ }
+
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ const auto& cacheControlIter = headers.find("cache-control");
+ if(cacheControlIter != headers.end())
+ {
+ m_cacheControl = cacheControlIter->second;
+ }
+
+ const auto& contentDispositionIter = headers.find("content-disposition");
+ if(contentDispositionIter != headers.end())
+ {
+ m_contentDisposition = contentDispositionIter->second;
+ }
+
+ const auto& contentEncodingIter = headers.find("content-encoding");
+ if(contentEncodingIter != headers.end())
+ {
+ m_contentEncoding = contentEncodingIter->second;
+ }
+
+ const auto& contentLanguageIter = headers.find("content-language");
+ if(contentLanguageIter != headers.end())
+ {
+ m_contentLanguage = contentLanguageIter->second;
+ }
+
+ const auto& contentTypeIter = headers.find("content-type");
+ if(contentTypeIter != headers.end())
+ {
+ m_contentType = contentTypeIter->second;
+ }
+
+ const auto& expiresIter = headers.find("expires");
+ if(expiresIter != headers.end())
+ {
+ m_expires = DateTime(expiresIter->second, DateFormat::RFC822);
+ }
+
+ const auto& websiteRedirectLocationIter = headers.find("x-amz-website-redirect-location");
+ if(websiteRedirectLocationIter != headers.end())
+ {
+ m_websiteRedirectLocation = websiteRedirectLocationIter->second;
+ }
+
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ std::size_t prefixSize = sizeof("x-amz-meta-") - 1; //subtract the NULL terminator out
+ for(const auto& item : headers)
+ {
+ std::size_t foundPrefix = item.first.find("x-amz-meta-");
+
+ if(foundPrefix != std::string::npos)
+ {
+ m_metadata[item.first.substr(prefixSize)] = item.second;
+ }
+ }
+
+ const auto& sSECustomerAlgorithmIter = headers.find("x-amz-server-side-encryption-customer-algorithm");
+ if(sSECustomerAlgorithmIter != headers.end())
+ {
+ m_sSECustomerAlgorithm = sSECustomerAlgorithmIter->second;
+ }
+
+ const auto& sSECustomerKeyMD5Iter = headers.find("x-amz-server-side-encryption-customer-key-md5");
+ if(sSECustomerKeyMD5Iter != headers.end())
+ {
+ m_sSECustomerKeyMD5 = sSECustomerKeyMD5Iter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& storageClassIter = headers.find("x-amz-storage-class");
+ if(storageClassIter != headers.end())
+ {
+ m_storageClass = StorageClassMapper::GetStorageClassForName(storageClassIter->second);
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ const auto& replicationStatusIter = headers.find("x-amz-replication-status");
+ if(replicationStatusIter != headers.end())
+ {
+ m_replicationStatus = ReplicationStatusMapper::GetReplicationStatusForName(replicationStatusIter->second);
+ }
+
+ const auto& partsCountIter = headers.find("x-amz-mp-parts-count");
+ if(partsCountIter != headers.end())
+ {
+ m_partsCount = StringUtils::ConvertToInt32(partsCountIter->second.c_str());
+ }
+
+ const auto& objectLockModeIter = headers.find("x-amz-object-lock-mode");
+ if(objectLockModeIter != headers.end())
+ {
+ m_objectLockMode = ObjectLockModeMapper::GetObjectLockModeForName(objectLockModeIter->second);
+ }
+
+ const auto& objectLockRetainUntilDateIter = headers.find("x-amz-object-lock-retain-until-date");
+ if(objectLockRetainUntilDateIter != headers.end())
+ {
+ m_objectLockRetainUntilDate = DateTime(objectLockRetainUntilDateIter->second, DateFormat::RFC822);
+ }
+
+ const auto& objectLockLegalHoldStatusIter = headers.find("x-amz-object-lock-legal-hold");
+ if(objectLockLegalHoldStatusIter != headers.end())
+ {
+ m_objectLockLegalHoldStatus = ObjectLockLegalHoldStatusMapper::GetObjectLockLegalHoldStatusForName(objectLockLegalHoldStatusIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IndexDocument.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IndexDocument.cpp
new file mode 100644
index 00000000000..92c841169bc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IndexDocument.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/IndexDocument.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+IndexDocument::IndexDocument() :
+ m_suffixHasBeenSet(false)
+{
+}
+
+IndexDocument::IndexDocument(const XmlNode& xmlNode) :
+ m_suffixHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+IndexDocument& IndexDocument::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode suffixNode = resultNode.FirstChild("Suffix");
+ if(!suffixNode.IsNull())
+ {
+ m_suffix = Aws::Utils::Xml::DecodeEscapedXmlText(suffixNode.GetText());
+ m_suffixHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void IndexDocument::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_suffixHasBeenSet)
+ {
+ XmlNode suffixNode = parentNode.CreateChildElement("Suffix");
+ suffixNode.SetText(m_suffix);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Initiator.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Initiator.cpp
new file mode 100644
index 00000000000..1bd09bd715c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Initiator.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Initiator.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Initiator::Initiator() :
+ m_iDHasBeenSet(false),
+ m_displayNameHasBeenSet(false)
+{
+}
+
+Initiator::Initiator(const XmlNode& xmlNode) :
+ m_iDHasBeenSet(false),
+ m_displayNameHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Initiator& Initiator::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode iDNode = resultNode.FirstChild("ID");
+ if(!iDNode.IsNull())
+ {
+ m_iD = Aws::Utils::Xml::DecodeEscapedXmlText(iDNode.GetText());
+ m_iDHasBeenSet = true;
+ }
+ XmlNode displayNameNode = resultNode.FirstChild("DisplayName");
+ if(!displayNameNode.IsNull())
+ {
+ m_displayName = Aws::Utils::Xml::DecodeEscapedXmlText(displayNameNode.GetText());
+ m_displayNameHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Initiator::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_iDHasBeenSet)
+ {
+ XmlNode iDNode = parentNode.CreateChildElement("ID");
+ iDNode.SetText(m_iD);
+ }
+
+ if(m_displayNameHasBeenSet)
+ {
+ XmlNode displayNameNode = parentNode.CreateChildElement("DisplayName");
+ displayNameNode.SetText(m_displayName);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InputSerialization.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InputSerialization.cpp
new file mode 100644
index 00000000000..7ae6435735b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InputSerialization.cpp
@@ -0,0 +1,108 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InputSerialization.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InputSerialization::InputSerialization() :
+ m_cSVHasBeenSet(false),
+ m_compressionType(CompressionType::NOT_SET),
+ m_compressionTypeHasBeenSet(false),
+ m_jSONHasBeenSet(false),
+ m_parquetHasBeenSet(false)
+{
+}
+
+InputSerialization::InputSerialization(const XmlNode& xmlNode) :
+ m_cSVHasBeenSet(false),
+ m_compressionType(CompressionType::NOT_SET),
+ m_compressionTypeHasBeenSet(false),
+ m_jSONHasBeenSet(false),
+ m_parquetHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InputSerialization& InputSerialization::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode cSVNode = resultNode.FirstChild("CSV");
+ if(!cSVNode.IsNull())
+ {
+ m_cSV = cSVNode;
+ m_cSVHasBeenSet = true;
+ }
+ XmlNode compressionTypeNode = resultNode.FirstChild("CompressionType");
+ if(!compressionTypeNode.IsNull())
+ {
+ m_compressionType = CompressionTypeMapper::GetCompressionTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(compressionTypeNode.GetText()).c_str()).c_str());
+ m_compressionTypeHasBeenSet = true;
+ }
+ XmlNode jSONNode = resultNode.FirstChild("JSON");
+ if(!jSONNode.IsNull())
+ {
+ m_jSON = jSONNode;
+ m_jSONHasBeenSet = true;
+ }
+ XmlNode parquetNode = resultNode.FirstChild("Parquet");
+ if(!parquetNode.IsNull())
+ {
+ m_parquet = parquetNode;
+ m_parquetHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InputSerialization::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_cSVHasBeenSet)
+ {
+ XmlNode cSVNode = parentNode.CreateChildElement("CSV");
+ m_cSV.AddToNode(cSVNode);
+ }
+
+ if(m_compressionTypeHasBeenSet)
+ {
+ XmlNode compressionTypeNode = parentNode.CreateChildElement("CompressionType");
+ compressionTypeNode.SetText(CompressionTypeMapper::GetNameForCompressionType(m_compressionType));
+ }
+
+ if(m_jSONHasBeenSet)
+ {
+ XmlNode jSONNode = parentNode.CreateChildElement("JSON");
+ m_jSON.AddToNode(jSONNode);
+ }
+
+ if(m_parquetHasBeenSet)
+ {
+ XmlNode parquetNode = parentNode.CreateChildElement("Parquet");
+ m_parquet.AddToNode(parquetNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAccessTier.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAccessTier.cpp
new file mode 100644
index 00000000000..bfee984c029
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAccessTier.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/IntelligentTieringAccessTier.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace IntelligentTieringAccessTierMapper
+ {
+
+ static const int ARCHIVE_ACCESS_HASH = HashingUtils::HashString("ARCHIVE_ACCESS");
+ static const int DEEP_ARCHIVE_ACCESS_HASH = HashingUtils::HashString("DEEP_ARCHIVE_ACCESS");
+
+
+ IntelligentTieringAccessTier GetIntelligentTieringAccessTierForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == ARCHIVE_ACCESS_HASH)
+ {
+ return IntelligentTieringAccessTier::ARCHIVE_ACCESS;
+ }
+ else if (hashCode == DEEP_ARCHIVE_ACCESS_HASH)
+ {
+ return IntelligentTieringAccessTier::DEEP_ARCHIVE_ACCESS;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<IntelligentTieringAccessTier>(hashCode);
+ }
+
+ return IntelligentTieringAccessTier::NOT_SET;
+ }
+
+ Aws::String GetNameForIntelligentTieringAccessTier(IntelligentTieringAccessTier enumValue)
+ {
+ switch(enumValue)
+ {
+ case IntelligentTieringAccessTier::ARCHIVE_ACCESS:
+ return "ARCHIVE_ACCESS";
+ case IntelligentTieringAccessTier::DEEP_ARCHIVE_ACCESS:
+ return "DEEP_ARCHIVE_ACCESS";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace IntelligentTieringAccessTierMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAndOperator.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAndOperator.cpp
new file mode 100644
index 00000000000..1c040b512dc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringAndOperator.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/IntelligentTieringAndOperator.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+IntelligentTieringAndOperator::IntelligentTieringAndOperator() :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+}
+
+IntelligentTieringAndOperator::IntelligentTieringAndOperator(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+IntelligentTieringAndOperator& IntelligentTieringAndOperator::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagsNode = resultNode.FirstChild("Tag");
+ if(!tagsNode.IsNull())
+ {
+ XmlNode tagMember = tagsNode;
+ while(!tagMember.IsNull())
+ {
+ m_tags.push_back(tagMember);
+ tagMember = tagMember.NextNode("Tag");
+ }
+
+ m_tagsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void IntelligentTieringAndOperator::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagsHasBeenSet)
+ {
+ XmlNode tagsParentNode = parentNode.CreateChildElement("Tags");
+ for(const auto& item : m_tags)
+ {
+ XmlNode tagsNode = tagsParentNode.CreateChildElement("Tag");
+ item.AddToNode(tagsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringConfiguration.cpp
new file mode 100644
index 00000000000..f0cb7bc3cc1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringConfiguration.cpp
@@ -0,0 +1,117 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/IntelligentTieringConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+IntelligentTieringConfiguration::IntelligentTieringConfiguration() :
+ m_idHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_status(IntelligentTieringStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_tieringsHasBeenSet(false)
+{
+}
+
+IntelligentTieringConfiguration::IntelligentTieringConfiguration(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_status(IntelligentTieringStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_tieringsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+IntelligentTieringConfiguration& IntelligentTieringConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = IntelligentTieringStatusMapper::GetIntelligentTieringStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ XmlNode tieringsNode = resultNode.FirstChild("Tiering");
+ if(!tieringsNode.IsNull())
+ {
+ XmlNode tieringMember = tieringsNode;
+ while(!tieringMember.IsNull())
+ {
+ m_tierings.push_back(tieringMember);
+ tieringMember = tieringMember.NextNode("Tiering");
+ }
+
+ m_tieringsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void IntelligentTieringConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(IntelligentTieringStatusMapper::GetNameForIntelligentTieringStatus(m_status));
+ }
+
+ if(m_tieringsHasBeenSet)
+ {
+ for(const auto& item : m_tierings)
+ {
+ XmlNode tieringsNode = parentNode.CreateChildElement("Tiering");
+ item.AddToNode(tieringsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringFilter.cpp
new file mode 100644
index 00000000000..b69ee79df46
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringFilter.cpp
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/IntelligentTieringFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+IntelligentTieringFilter::IntelligentTieringFilter() :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+}
+
+IntelligentTieringFilter::IntelligentTieringFilter(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+IntelligentTieringFilter& IntelligentTieringFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagNode = resultNode.FirstChild("Tag");
+ if(!tagNode.IsNull())
+ {
+ m_tag = tagNode;
+ m_tagHasBeenSet = true;
+ }
+ XmlNode andNode = resultNode.FirstChild("And");
+ if(!andNode.IsNull())
+ {
+ m_and = andNode;
+ m_andHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void IntelligentTieringFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagHasBeenSet)
+ {
+ XmlNode tagNode = parentNode.CreateChildElement("Tag");
+ m_tag.AddToNode(tagNode);
+ }
+
+ if(m_andHasBeenSet)
+ {
+ XmlNode andNode = parentNode.CreateChildElement("And");
+ m_and.AddToNode(andNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringStatus.cpp
new file mode 100644
index 00000000000..9fc0d1d2ec0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/IntelligentTieringStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/IntelligentTieringStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace IntelligentTieringStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ IntelligentTieringStatus GetIntelligentTieringStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return IntelligentTieringStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return IntelligentTieringStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<IntelligentTieringStatus>(hashCode);
+ }
+
+ return IntelligentTieringStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForIntelligentTieringStatus(IntelligentTieringStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case IntelligentTieringStatus::Enabled:
+ return "Enabled";
+ case IntelligentTieringStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace IntelligentTieringStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InvalidObjectState.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InvalidObjectState.cpp
new file mode 100644
index 00000000000..4d64e4f75e6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InvalidObjectState.cpp
@@ -0,0 +1,82 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InvalidObjectState.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InvalidObjectState::InvalidObjectState() :
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_accessTier(IntelligentTieringAccessTier::NOT_SET),
+ m_accessTierHasBeenSet(false)
+{
+}
+
+InvalidObjectState::InvalidObjectState(const XmlNode& xmlNode) :
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_accessTier(IntelligentTieringAccessTier::NOT_SET),
+ m_accessTierHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InvalidObjectState& InvalidObjectState::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = StorageClassMapper::GetStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ XmlNode accessTierNode = resultNode.FirstChild("AccessTier");
+ if(!accessTierNode.IsNull())
+ {
+ m_accessTier = IntelligentTieringAccessTierMapper::GetIntelligentTieringAccessTierForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(accessTierNode.GetText()).c_str()).c_str());
+ m_accessTierHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InvalidObjectState::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(StorageClassMapper::GetNameForStorageClass(m_storageClass));
+ }
+
+ if(m_accessTierHasBeenSet)
+ {
+ XmlNode accessTierNode = parentNode.CreateChildElement("AccessTier");
+ accessTierNode.SetText(IntelligentTieringAccessTierMapper::GetNameForIntelligentTieringAccessTier(m_accessTier));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryConfiguration.cpp
new file mode 100644
index 00000000000..304dde130a6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryConfiguration.cpp
@@ -0,0 +1,164 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InventoryConfiguration::InventoryConfiguration() :
+ m_destinationHasBeenSet(false),
+ m_isEnabled(false),
+ m_isEnabledHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_includedObjectVersions(InventoryIncludedObjectVersions::NOT_SET),
+ m_includedObjectVersionsHasBeenSet(false),
+ m_optionalFieldsHasBeenSet(false),
+ m_scheduleHasBeenSet(false)
+{
+}
+
+InventoryConfiguration::InventoryConfiguration(const XmlNode& xmlNode) :
+ m_destinationHasBeenSet(false),
+ m_isEnabled(false),
+ m_isEnabledHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_includedObjectVersions(InventoryIncludedObjectVersions::NOT_SET),
+ m_includedObjectVersionsHasBeenSet(false),
+ m_optionalFieldsHasBeenSet(false),
+ m_scheduleHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InventoryConfiguration& InventoryConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode destinationNode = resultNode.FirstChild("Destination");
+ if(!destinationNode.IsNull())
+ {
+ m_destination = destinationNode;
+ m_destinationHasBeenSet = true;
+ }
+ XmlNode isEnabledNode = resultNode.FirstChild("IsEnabled");
+ if(!isEnabledNode.IsNull())
+ {
+ m_isEnabled = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isEnabledNode.GetText()).c_str()).c_str());
+ m_isEnabledHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode includedObjectVersionsNode = resultNode.FirstChild("IncludedObjectVersions");
+ if(!includedObjectVersionsNode.IsNull())
+ {
+ m_includedObjectVersions = InventoryIncludedObjectVersionsMapper::GetInventoryIncludedObjectVersionsForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(includedObjectVersionsNode.GetText()).c_str()).c_str());
+ m_includedObjectVersionsHasBeenSet = true;
+ }
+ XmlNode optionalFieldsNode = resultNode.FirstChild("OptionalFields");
+ if(!optionalFieldsNode.IsNull())
+ {
+ XmlNode optionalFieldsMember = optionalFieldsNode.FirstChild("Field");
+ while(!optionalFieldsMember.IsNull())
+ {
+ m_optionalFields.push_back(InventoryOptionalFieldMapper::GetInventoryOptionalFieldForName(StringUtils::Trim(optionalFieldsMember.GetText().c_str())));
+ optionalFieldsMember = optionalFieldsMember.NextNode("Field");
+ }
+
+ m_optionalFieldsHasBeenSet = true;
+ }
+ XmlNode scheduleNode = resultNode.FirstChild("Schedule");
+ if(!scheduleNode.IsNull())
+ {
+ m_schedule = scheduleNode;
+ m_scheduleHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InventoryConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_destinationHasBeenSet)
+ {
+ XmlNode destinationNode = parentNode.CreateChildElement("Destination");
+ m_destination.AddToNode(destinationNode);
+ }
+
+ if(m_isEnabledHasBeenSet)
+ {
+ XmlNode isEnabledNode = parentNode.CreateChildElement("IsEnabled");
+ ss << std::boolalpha << m_isEnabled;
+ isEnabledNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_includedObjectVersionsHasBeenSet)
+ {
+ XmlNode includedObjectVersionsNode = parentNode.CreateChildElement("IncludedObjectVersions");
+ includedObjectVersionsNode.SetText(InventoryIncludedObjectVersionsMapper::GetNameForInventoryIncludedObjectVersions(m_includedObjectVersions));
+ }
+
+ if(m_optionalFieldsHasBeenSet)
+ {
+ XmlNode optionalFieldsParentNode = parentNode.CreateChildElement("OptionalFields");
+ for(const auto& item : m_optionalFields)
+ {
+ XmlNode optionalFieldsNode = optionalFieldsParentNode.CreateChildElement("Field");
+ optionalFieldsNode.SetText(InventoryOptionalFieldMapper::GetNameForInventoryOptionalField(item));
+ }
+ }
+
+ if(m_scheduleHasBeenSet)
+ {
+ XmlNode scheduleNode = parentNode.CreateChildElement("Schedule");
+ m_schedule.AddToNode(scheduleNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryDestination.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryDestination.cpp
new file mode 100644
index 00000000000..0be4294b1f2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryDestination.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryDestination.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InventoryDestination::InventoryDestination() :
+ m_s3BucketDestinationHasBeenSet(false)
+{
+}
+
+InventoryDestination::InventoryDestination(const XmlNode& xmlNode) :
+ m_s3BucketDestinationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InventoryDestination& InventoryDestination::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode s3BucketDestinationNode = resultNode.FirstChild("S3BucketDestination");
+ if(!s3BucketDestinationNode.IsNull())
+ {
+ m_s3BucketDestination = s3BucketDestinationNode;
+ m_s3BucketDestinationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InventoryDestination::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_s3BucketDestinationHasBeenSet)
+ {
+ XmlNode s3BucketDestinationNode = parentNode.CreateChildElement("S3BucketDestination");
+ m_s3BucketDestination.AddToNode(s3BucketDestinationNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryEncryption.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryEncryption.cpp
new file mode 100644
index 00000000000..82f9a9c0a39
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryEncryption.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryEncryption.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InventoryEncryption::InventoryEncryption() :
+ m_sSES3HasBeenSet(false),
+ m_sSEKMSHasBeenSet(false)
+{
+}
+
+InventoryEncryption::InventoryEncryption(const XmlNode& xmlNode) :
+ m_sSES3HasBeenSet(false),
+ m_sSEKMSHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InventoryEncryption& InventoryEncryption::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode sSES3Node = resultNode.FirstChild("SSE-S3");
+ if(!sSES3Node.IsNull())
+ {
+ m_sSES3 = sSES3Node;
+ m_sSES3HasBeenSet = true;
+ }
+ XmlNode sSEKMSNode = resultNode.FirstChild("SSE-KMS");
+ if(!sSEKMSNode.IsNull())
+ {
+ m_sSEKMS = sSEKMSNode;
+ m_sSEKMSHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InventoryEncryption::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_sSES3HasBeenSet)
+ {
+ XmlNode sSES3Node = parentNode.CreateChildElement("SSE-S3");
+ m_sSES3.AddToNode(sSES3Node);
+ }
+
+ if(m_sSEKMSHasBeenSet)
+ {
+ XmlNode sSEKMSNode = parentNode.CreateChildElement("SSE-KMS");
+ m_sSEKMS.AddToNode(sSEKMSNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFilter.cpp
new file mode 100644
index 00000000000..857efe0dad1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFilter.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InventoryFilter::InventoryFilter() :
+ m_prefixHasBeenSet(false)
+{
+}
+
+InventoryFilter::InventoryFilter(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InventoryFilter& InventoryFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InventoryFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFormat.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFormat.cpp
new file mode 100644
index 00000000000..f7bbc6c269c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFormat.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryFormat.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace InventoryFormatMapper
+ {
+
+ static const int CSV_HASH = HashingUtils::HashString("CSV");
+ static const int ORC_HASH = HashingUtils::HashString("ORC");
+ static const int Parquet_HASH = HashingUtils::HashString("Parquet");
+
+
+ InventoryFormat GetInventoryFormatForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == CSV_HASH)
+ {
+ return InventoryFormat::CSV;
+ }
+ else if (hashCode == ORC_HASH)
+ {
+ return InventoryFormat::ORC;
+ }
+ else if (hashCode == Parquet_HASH)
+ {
+ return InventoryFormat::Parquet;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<InventoryFormat>(hashCode);
+ }
+
+ return InventoryFormat::NOT_SET;
+ }
+
+ Aws::String GetNameForInventoryFormat(InventoryFormat enumValue)
+ {
+ switch(enumValue)
+ {
+ case InventoryFormat::CSV:
+ return "CSV";
+ case InventoryFormat::ORC:
+ return "ORC";
+ case InventoryFormat::Parquet:
+ return "Parquet";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace InventoryFormatMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFrequency.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFrequency.cpp
new file mode 100644
index 00000000000..021e2a17106
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryFrequency.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryFrequency.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace InventoryFrequencyMapper
+ {
+
+ static const int Daily_HASH = HashingUtils::HashString("Daily");
+ static const int Weekly_HASH = HashingUtils::HashString("Weekly");
+
+
+ InventoryFrequency GetInventoryFrequencyForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Daily_HASH)
+ {
+ return InventoryFrequency::Daily;
+ }
+ else if (hashCode == Weekly_HASH)
+ {
+ return InventoryFrequency::Weekly;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<InventoryFrequency>(hashCode);
+ }
+
+ return InventoryFrequency::NOT_SET;
+ }
+
+ Aws::String GetNameForInventoryFrequency(InventoryFrequency enumValue)
+ {
+ switch(enumValue)
+ {
+ case InventoryFrequency::Daily:
+ return "Daily";
+ case InventoryFrequency::Weekly:
+ return "Weekly";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace InventoryFrequencyMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryIncludedObjectVersions.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryIncludedObjectVersions.cpp
new file mode 100644
index 00000000000..f4e28acb00c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryIncludedObjectVersions.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryIncludedObjectVersions.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace InventoryIncludedObjectVersionsMapper
+ {
+
+ static const int All_HASH = HashingUtils::HashString("All");
+ static const int Current_HASH = HashingUtils::HashString("Current");
+
+
+ InventoryIncludedObjectVersions GetInventoryIncludedObjectVersionsForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == All_HASH)
+ {
+ return InventoryIncludedObjectVersions::All;
+ }
+ else if (hashCode == Current_HASH)
+ {
+ return InventoryIncludedObjectVersions::Current;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<InventoryIncludedObjectVersions>(hashCode);
+ }
+
+ return InventoryIncludedObjectVersions::NOT_SET;
+ }
+
+ Aws::String GetNameForInventoryIncludedObjectVersions(InventoryIncludedObjectVersions enumValue)
+ {
+ switch(enumValue)
+ {
+ case InventoryIncludedObjectVersions::All:
+ return "All";
+ case InventoryIncludedObjectVersions::Current:
+ return "Current";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace InventoryIncludedObjectVersionsMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryOptionalField.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryOptionalField.cpp
new file mode 100644
index 00000000000..00ae5fda493
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryOptionalField.cpp
@@ -0,0 +1,133 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryOptionalField.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace InventoryOptionalFieldMapper
+ {
+
+ static const int Size_HASH = HashingUtils::HashString("Size");
+ static const int LastModifiedDate_HASH = HashingUtils::HashString("LastModifiedDate");
+ static const int StorageClass_HASH = HashingUtils::HashString("StorageClass");
+ static const int ETag_HASH = HashingUtils::HashString("ETag");
+ static const int IsMultipartUploaded_HASH = HashingUtils::HashString("IsMultipartUploaded");
+ static const int ReplicationStatus_HASH = HashingUtils::HashString("ReplicationStatus");
+ static const int EncryptionStatus_HASH = HashingUtils::HashString("EncryptionStatus");
+ static const int ObjectLockRetainUntilDate_HASH = HashingUtils::HashString("ObjectLockRetainUntilDate");
+ static const int ObjectLockMode_HASH = HashingUtils::HashString("ObjectLockMode");
+ static const int ObjectLockLegalHoldStatus_HASH = HashingUtils::HashString("ObjectLockLegalHoldStatus");
+ static const int IntelligentTieringAccessTier_HASH = HashingUtils::HashString("IntelligentTieringAccessTier");
+
+
+ InventoryOptionalField GetInventoryOptionalFieldForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Size_HASH)
+ {
+ return InventoryOptionalField::Size;
+ }
+ else if (hashCode == LastModifiedDate_HASH)
+ {
+ return InventoryOptionalField::LastModifiedDate;
+ }
+ else if (hashCode == StorageClass_HASH)
+ {
+ return InventoryOptionalField::StorageClass;
+ }
+ else if (hashCode == ETag_HASH)
+ {
+ return InventoryOptionalField::ETag;
+ }
+ else if (hashCode == IsMultipartUploaded_HASH)
+ {
+ return InventoryOptionalField::IsMultipartUploaded;
+ }
+ else if (hashCode == ReplicationStatus_HASH)
+ {
+ return InventoryOptionalField::ReplicationStatus;
+ }
+ else if (hashCode == EncryptionStatus_HASH)
+ {
+ return InventoryOptionalField::EncryptionStatus;
+ }
+ else if (hashCode == ObjectLockRetainUntilDate_HASH)
+ {
+ return InventoryOptionalField::ObjectLockRetainUntilDate;
+ }
+ else if (hashCode == ObjectLockMode_HASH)
+ {
+ return InventoryOptionalField::ObjectLockMode;
+ }
+ else if (hashCode == ObjectLockLegalHoldStatus_HASH)
+ {
+ return InventoryOptionalField::ObjectLockLegalHoldStatus;
+ }
+ else if (hashCode == IntelligentTieringAccessTier_HASH)
+ {
+ return InventoryOptionalField::IntelligentTieringAccessTier;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<InventoryOptionalField>(hashCode);
+ }
+
+ return InventoryOptionalField::NOT_SET;
+ }
+
+ Aws::String GetNameForInventoryOptionalField(InventoryOptionalField enumValue)
+ {
+ switch(enumValue)
+ {
+ case InventoryOptionalField::Size:
+ return "Size";
+ case InventoryOptionalField::LastModifiedDate:
+ return "LastModifiedDate";
+ case InventoryOptionalField::StorageClass:
+ return "StorageClass";
+ case InventoryOptionalField::ETag:
+ return "ETag";
+ case InventoryOptionalField::IsMultipartUploaded:
+ return "IsMultipartUploaded";
+ case InventoryOptionalField::ReplicationStatus:
+ return "ReplicationStatus";
+ case InventoryOptionalField::EncryptionStatus:
+ return "EncryptionStatus";
+ case InventoryOptionalField::ObjectLockRetainUntilDate:
+ return "ObjectLockRetainUntilDate";
+ case InventoryOptionalField::ObjectLockMode:
+ return "ObjectLockMode";
+ case InventoryOptionalField::ObjectLockLegalHoldStatus:
+ return "ObjectLockLegalHoldStatus";
+ case InventoryOptionalField::IntelligentTieringAccessTier:
+ return "IntelligentTieringAccessTier";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace InventoryOptionalFieldMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryS3BucketDestination.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryS3BucketDestination.cpp
new file mode 100644
index 00000000000..5fb1f155a63
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventoryS3BucketDestination.cpp
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventoryS3BucketDestination.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InventoryS3BucketDestination::InventoryS3BucketDestination() :
+ m_accountIdHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_format(InventoryFormat::NOT_SET),
+ m_formatHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_encryptionHasBeenSet(false)
+{
+}
+
+InventoryS3BucketDestination::InventoryS3BucketDestination(const XmlNode& xmlNode) :
+ m_accountIdHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_format(InventoryFormat::NOT_SET),
+ m_formatHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_encryptionHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InventoryS3BucketDestination& InventoryS3BucketDestination::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode accountIdNode = resultNode.FirstChild("AccountId");
+ if(!accountIdNode.IsNull())
+ {
+ m_accountId = Aws::Utils::Xml::DecodeEscapedXmlText(accountIdNode.GetText());
+ m_accountIdHasBeenSet = true;
+ }
+ XmlNode bucketNode = resultNode.FirstChild("Bucket");
+ if(!bucketNode.IsNull())
+ {
+ m_bucket = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNode.GetText());
+ m_bucketHasBeenSet = true;
+ }
+ XmlNode formatNode = resultNode.FirstChild("Format");
+ if(!formatNode.IsNull())
+ {
+ m_format = InventoryFormatMapper::GetInventoryFormatForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(formatNode.GetText()).c_str()).c_str());
+ m_formatHasBeenSet = true;
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode encryptionNode = resultNode.FirstChild("Encryption");
+ if(!encryptionNode.IsNull())
+ {
+ m_encryption = encryptionNode;
+ m_encryptionHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InventoryS3BucketDestination::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_accountIdHasBeenSet)
+ {
+ XmlNode accountIdNode = parentNode.CreateChildElement("AccountId");
+ accountIdNode.SetText(m_accountId);
+ }
+
+ if(m_bucketHasBeenSet)
+ {
+ XmlNode bucketNode = parentNode.CreateChildElement("Bucket");
+ bucketNode.SetText(m_bucket);
+ }
+
+ if(m_formatHasBeenSet)
+ {
+ XmlNode formatNode = parentNode.CreateChildElement("Format");
+ formatNode.SetText(InventoryFormatMapper::GetNameForInventoryFormat(m_format));
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_encryptionHasBeenSet)
+ {
+ XmlNode encryptionNode = parentNode.CreateChildElement("Encryption");
+ m_encryption.AddToNode(encryptionNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventorySchedule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventorySchedule.cpp
new file mode 100644
index 00000000000..008acd8159e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/InventorySchedule.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/InventorySchedule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+InventorySchedule::InventorySchedule() :
+ m_frequency(InventoryFrequency::NOT_SET),
+ m_frequencyHasBeenSet(false)
+{
+}
+
+InventorySchedule::InventorySchedule(const XmlNode& xmlNode) :
+ m_frequency(InventoryFrequency::NOT_SET),
+ m_frequencyHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+InventorySchedule& InventorySchedule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode frequencyNode = resultNode.FirstChild("Frequency");
+ if(!frequencyNode.IsNull())
+ {
+ m_frequency = InventoryFrequencyMapper::GetInventoryFrequencyForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(frequencyNode.GetText()).c_str()).c_str());
+ m_frequencyHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void InventorySchedule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_frequencyHasBeenSet)
+ {
+ XmlNode frequencyNode = parentNode.CreateChildElement("Frequency");
+ frequencyNode.SetText(InventoryFrequencyMapper::GetNameForInventoryFrequency(m_frequency));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONInput.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONInput.cpp
new file mode 100644
index 00000000000..ba016e2c344
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONInput.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/JSONInput.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+JSONInput::JSONInput() :
+ m_type(JSONType::NOT_SET),
+ m_typeHasBeenSet(false)
+{
+}
+
+JSONInput::JSONInput(const XmlNode& xmlNode) :
+ m_type(JSONType::NOT_SET),
+ m_typeHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+JSONInput& JSONInput::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode typeNode = resultNode.FirstChild("Type");
+ if(!typeNode.IsNull())
+ {
+ m_type = JSONTypeMapper::GetJSONTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(typeNode.GetText()).c_str()).c_str());
+ m_typeHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void JSONInput::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_typeHasBeenSet)
+ {
+ XmlNode typeNode = parentNode.CreateChildElement("Type");
+ typeNode.SetText(JSONTypeMapper::GetNameForJSONType(m_type));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONOutput.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONOutput.cpp
new file mode 100644
index 00000000000..f4e44aacd73
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONOutput.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/JSONOutput.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+JSONOutput::JSONOutput() :
+ m_recordDelimiterHasBeenSet(false)
+{
+}
+
+JSONOutput::JSONOutput(const XmlNode& xmlNode) :
+ m_recordDelimiterHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+JSONOutput& JSONOutput::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode recordDelimiterNode = resultNode.FirstChild("RecordDelimiter");
+ if(!recordDelimiterNode.IsNull())
+ {
+ m_recordDelimiter = Aws::Utils::Xml::DecodeEscapedXmlText(recordDelimiterNode.GetText());
+ m_recordDelimiterHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void JSONOutput::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_recordDelimiterHasBeenSet)
+ {
+ XmlNode recordDelimiterNode = parentNode.CreateChildElement("RecordDelimiter");
+ recordDelimiterNode.SetText(m_recordDelimiter);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONType.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONType.cpp
new file mode 100644
index 00000000000..5699a913767
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/JSONType.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/JSONType.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace JSONTypeMapper
+ {
+
+ static const int DOCUMENT_HASH = HashingUtils::HashString("DOCUMENT");
+ static const int LINES_HASH = HashingUtils::HashString("LINES");
+
+
+ JSONType GetJSONTypeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == DOCUMENT_HASH)
+ {
+ return JSONType::DOCUMENT;
+ }
+ else if (hashCode == LINES_HASH)
+ {
+ return JSONType::LINES;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<JSONType>(hashCode);
+ }
+
+ return JSONType::NOT_SET;
+ }
+
+ Aws::String GetNameForJSONType(JSONType enumValue)
+ {
+ switch(enumValue)
+ {
+ case JSONType::DOCUMENT:
+ return "DOCUMENT";
+ case JSONType::LINES:
+ return "LINES";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace JSONTypeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LambdaFunctionConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LambdaFunctionConfiguration.cpp
new file mode 100644
index 00000000000..9815401b045
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LambdaFunctionConfiguration.cpp
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/LambdaFunctionConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+LambdaFunctionConfiguration::LambdaFunctionConfiguration() :
+ m_idHasBeenSet(false),
+ m_lambdaFunctionArnHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+}
+
+LambdaFunctionConfiguration::LambdaFunctionConfiguration(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_lambdaFunctionArnHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+LambdaFunctionConfiguration& LambdaFunctionConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode lambdaFunctionArnNode = resultNode.FirstChild("CloudFunction");
+ if(!lambdaFunctionArnNode.IsNull())
+ {
+ m_lambdaFunctionArn = Aws::Utils::Xml::DecodeEscapedXmlText(lambdaFunctionArnNode.GetText());
+ m_lambdaFunctionArnHasBeenSet = true;
+ }
+ XmlNode eventsNode = resultNode.FirstChild("Event");
+ if(!eventsNode.IsNull())
+ {
+ XmlNode eventMember = eventsNode;
+ while(!eventMember.IsNull())
+ {
+ m_events.push_back(EventMapper::GetEventForName(StringUtils::Trim(eventMember.GetText().c_str())));
+ eventMember = eventMember.NextNode("Event");
+ }
+
+ m_eventsHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void LambdaFunctionConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_lambdaFunctionArnHasBeenSet)
+ {
+ XmlNode lambdaFunctionArnNode = parentNode.CreateChildElement("CloudFunction");
+ lambdaFunctionArnNode.SetText(m_lambdaFunctionArn);
+ }
+
+ if(m_eventsHasBeenSet)
+ {
+ for(const auto& item : m_events)
+ {
+ XmlNode eventsNode = parentNode.CreateChildElement("Event");
+ eventsNode.SetText(EventMapper::GetNameForEvent(item));
+ }
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleConfiguration.cpp
new file mode 100644
index 00000000000..0eb4a8ea86a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleConfiguration.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/LifecycleConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+LifecycleConfiguration::LifecycleConfiguration() :
+ m_rulesHasBeenSet(false)
+{
+}
+
+LifecycleConfiguration::LifecycleConfiguration(const XmlNode& xmlNode) :
+ m_rulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+LifecycleConfiguration& LifecycleConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode rulesNode = resultNode.FirstChild("Rule");
+ if(!rulesNode.IsNull())
+ {
+ XmlNode ruleMember = rulesNode;
+ while(!ruleMember.IsNull())
+ {
+ m_rules.push_back(ruleMember);
+ ruleMember = ruleMember.NextNode("Rule");
+ }
+
+ m_rulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void LifecycleConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_rulesHasBeenSet)
+ {
+ for(const auto& item : m_rules)
+ {
+ XmlNode rulesNode = parentNode.CreateChildElement("Rule");
+ item.AddToNode(rulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleExpiration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleExpiration.cpp
new file mode 100644
index 00000000000..be347d18f0b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleExpiration.cpp
@@ -0,0 +1,100 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/LifecycleExpiration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+LifecycleExpiration::LifecycleExpiration() :
+ m_dateHasBeenSet(false),
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_expiredObjectDeleteMarker(false),
+ m_expiredObjectDeleteMarkerHasBeenSet(false)
+{
+}
+
+LifecycleExpiration::LifecycleExpiration(const XmlNode& xmlNode) :
+ m_dateHasBeenSet(false),
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_expiredObjectDeleteMarker(false),
+ m_expiredObjectDeleteMarkerHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+LifecycleExpiration& LifecycleExpiration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode dateNode = resultNode.FirstChild("Date");
+ if(!dateNode.IsNull())
+ {
+ m_date = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(dateNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_dateHasBeenSet = true;
+ }
+ XmlNode daysNode = resultNode.FirstChild("Days");
+ if(!daysNode.IsNull())
+ {
+ m_days = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(daysNode.GetText()).c_str()).c_str());
+ m_daysHasBeenSet = true;
+ }
+ XmlNode expiredObjectDeleteMarkerNode = resultNode.FirstChild("ExpiredObjectDeleteMarker");
+ if(!expiredObjectDeleteMarkerNode.IsNull())
+ {
+ m_expiredObjectDeleteMarker = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(expiredObjectDeleteMarkerNode.GetText()).c_str()).c_str());
+ m_expiredObjectDeleteMarkerHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void LifecycleExpiration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_dateHasBeenSet)
+ {
+ XmlNode dateNode = parentNode.CreateChildElement("Date");
+ dateNode.SetText(m_date.ToGmtString(DateFormat::ISO_8601));
+ }
+
+ if(m_daysHasBeenSet)
+ {
+ XmlNode daysNode = parentNode.CreateChildElement("Days");
+ ss << m_days;
+ daysNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_expiredObjectDeleteMarkerHasBeenSet)
+ {
+ XmlNode expiredObjectDeleteMarkerNode = parentNode.CreateChildElement("ExpiredObjectDeleteMarker");
+ ss << std::boolalpha << m_expiredObjectDeleteMarker;
+ expiredObjectDeleteMarkerNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRule.cpp
new file mode 100644
index 00000000000..c06290ee902
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRule.cpp
@@ -0,0 +1,182 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/LifecycleRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+LifecycleRule::LifecycleRule() :
+ m_expirationHasBeenSet(false),
+ m_iDHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_status(ExpirationStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_transitionsHasBeenSet(false),
+ m_noncurrentVersionTransitionsHasBeenSet(false),
+ m_noncurrentVersionExpirationHasBeenSet(false),
+ m_abortIncompleteMultipartUploadHasBeenSet(false)
+{
+}
+
+LifecycleRule::LifecycleRule(const XmlNode& xmlNode) :
+ m_expirationHasBeenSet(false),
+ m_iDHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_status(ExpirationStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_transitionsHasBeenSet(false),
+ m_noncurrentVersionTransitionsHasBeenSet(false),
+ m_noncurrentVersionExpirationHasBeenSet(false),
+ m_abortIncompleteMultipartUploadHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+LifecycleRule& LifecycleRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode expirationNode = resultNode.FirstChild("Expiration");
+ if(!expirationNode.IsNull())
+ {
+ m_expiration = expirationNode;
+ m_expirationHasBeenSet = true;
+ }
+ XmlNode iDNode = resultNode.FirstChild("ID");
+ if(!iDNode.IsNull())
+ {
+ m_iD = Aws::Utils::Xml::DecodeEscapedXmlText(iDNode.GetText());
+ m_iDHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = ExpirationStatusMapper::GetExpirationStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ XmlNode transitionsNode = resultNode.FirstChild("Transition");
+ if(!transitionsNode.IsNull())
+ {
+ XmlNode transitionMember = transitionsNode;
+ while(!transitionMember.IsNull())
+ {
+ m_transitions.push_back(transitionMember);
+ transitionMember = transitionMember.NextNode("Transition");
+ }
+
+ m_transitionsHasBeenSet = true;
+ }
+ XmlNode noncurrentVersionTransitionsNode = resultNode.FirstChild("NoncurrentVersionTransition");
+ if(!noncurrentVersionTransitionsNode.IsNull())
+ {
+ XmlNode noncurrentVersionTransitionMember = noncurrentVersionTransitionsNode;
+ while(!noncurrentVersionTransitionMember.IsNull())
+ {
+ m_noncurrentVersionTransitions.push_back(noncurrentVersionTransitionMember);
+ noncurrentVersionTransitionMember = noncurrentVersionTransitionMember.NextNode("NoncurrentVersionTransition");
+ }
+
+ m_noncurrentVersionTransitionsHasBeenSet = true;
+ }
+ XmlNode noncurrentVersionExpirationNode = resultNode.FirstChild("NoncurrentVersionExpiration");
+ if(!noncurrentVersionExpirationNode.IsNull())
+ {
+ m_noncurrentVersionExpiration = noncurrentVersionExpirationNode;
+ m_noncurrentVersionExpirationHasBeenSet = true;
+ }
+ XmlNode abortIncompleteMultipartUploadNode = resultNode.FirstChild("AbortIncompleteMultipartUpload");
+ if(!abortIncompleteMultipartUploadNode.IsNull())
+ {
+ m_abortIncompleteMultipartUpload = abortIncompleteMultipartUploadNode;
+ m_abortIncompleteMultipartUploadHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void LifecycleRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_expirationHasBeenSet)
+ {
+ XmlNode expirationNode = parentNode.CreateChildElement("Expiration");
+ m_expiration.AddToNode(expirationNode);
+ }
+
+ if(m_iDHasBeenSet)
+ {
+ XmlNode iDNode = parentNode.CreateChildElement("ID");
+ iDNode.SetText(m_iD);
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(ExpirationStatusMapper::GetNameForExpirationStatus(m_status));
+ }
+
+ if(m_transitionsHasBeenSet)
+ {
+ for(const auto& item : m_transitions)
+ {
+ XmlNode transitionsNode = parentNode.CreateChildElement("Transition");
+ item.AddToNode(transitionsNode);
+ }
+ }
+
+ if(m_noncurrentVersionTransitionsHasBeenSet)
+ {
+ for(const auto& item : m_noncurrentVersionTransitions)
+ {
+ XmlNode noncurrentVersionTransitionsNode = parentNode.CreateChildElement("NoncurrentVersionTransition");
+ item.AddToNode(noncurrentVersionTransitionsNode);
+ }
+ }
+
+ if(m_noncurrentVersionExpirationHasBeenSet)
+ {
+ XmlNode noncurrentVersionExpirationNode = parentNode.CreateChildElement("NoncurrentVersionExpiration");
+ m_noncurrentVersionExpiration.AddToNode(noncurrentVersionExpirationNode);
+ }
+
+ if(m_abortIncompleteMultipartUploadHasBeenSet)
+ {
+ XmlNode abortIncompleteMultipartUploadNode = parentNode.CreateChildElement("AbortIncompleteMultipartUpload");
+ m_abortIncompleteMultipartUpload.AddToNode(abortIncompleteMultipartUploadNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleAndOperator.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleAndOperator.cpp
new file mode 100644
index 00000000000..833c1d99eac
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleAndOperator.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/LifecycleRuleAndOperator.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+LifecycleRuleAndOperator::LifecycleRuleAndOperator() :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+}
+
+LifecycleRuleAndOperator::LifecycleRuleAndOperator(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+LifecycleRuleAndOperator& LifecycleRuleAndOperator::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagsNode = resultNode.FirstChild("Tag");
+ if(!tagsNode.IsNull())
+ {
+ XmlNode tagMember = tagsNode;
+ while(!tagMember.IsNull())
+ {
+ m_tags.push_back(tagMember);
+ tagMember = tagMember.NextNode("Tag");
+ }
+
+ m_tagsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void LifecycleRuleAndOperator::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagsHasBeenSet)
+ {
+ XmlNode tagsParentNode = parentNode.CreateChildElement("Tags");
+ for(const auto& item : m_tags)
+ {
+ XmlNode tagsNode = tagsParentNode.CreateChildElement("Tag");
+ item.AddToNode(tagsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleFilter.cpp
new file mode 100644
index 00000000000..0f56fb9044e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LifecycleRuleFilter.cpp
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/LifecycleRuleFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+LifecycleRuleFilter::LifecycleRuleFilter() :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+}
+
+LifecycleRuleFilter::LifecycleRuleFilter(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+LifecycleRuleFilter& LifecycleRuleFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagNode = resultNode.FirstChild("Tag");
+ if(!tagNode.IsNull())
+ {
+ m_tag = tagNode;
+ m_tagHasBeenSet = true;
+ }
+ XmlNode andNode = resultNode.FirstChild("And");
+ if(!andNode.IsNull())
+ {
+ m_and = andNode;
+ m_andHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void LifecycleRuleFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagHasBeenSet)
+ {
+ XmlNode tagNode = parentNode.CreateChildElement("Tag");
+ m_tag.AddToNode(tagNode);
+ }
+
+ if(m_andHasBeenSet)
+ {
+ XmlNode andNode = parentNode.CreateChildElement("And");
+ m_and.AddToNode(andNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsRequest.cpp
new file mode 100644
index 00000000000..5b114920e1b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketAnalyticsConfigurationsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListBucketAnalyticsConfigurationsRequest::ListBucketAnalyticsConfigurationsRequest() :
+ m_bucketHasBeenSet(false),
+ m_continuationTokenHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListBucketAnalyticsConfigurationsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListBucketAnalyticsConfigurationsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_continuationTokenHasBeenSet)
+ {
+ ss << m_continuationToken;
+ uri.AddQueryStringParameter("continuation-token", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListBucketAnalyticsConfigurationsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsResult.cpp
new file mode 100644
index 00000000000..83614990b18
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketAnalyticsConfigurationsResult.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketAnalyticsConfigurationsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListBucketAnalyticsConfigurationsResult::ListBucketAnalyticsConfigurationsResult() :
+ m_isTruncated(false)
+{
+}
+
+ListBucketAnalyticsConfigurationsResult::ListBucketAnalyticsConfigurationsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_isTruncated(false)
+{
+ *this = result;
+}
+
+ListBucketAnalyticsConfigurationsResult& ListBucketAnalyticsConfigurationsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode continuationTokenNode = resultNode.FirstChild("ContinuationToken");
+ if(!continuationTokenNode.IsNull())
+ {
+ m_continuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(continuationTokenNode.GetText());
+ }
+ XmlNode nextContinuationTokenNode = resultNode.FirstChild("NextContinuationToken");
+ if(!nextContinuationTokenNode.IsNull())
+ {
+ m_nextContinuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(nextContinuationTokenNode.GetText());
+ }
+ XmlNode analyticsConfigurationListNode = resultNode.FirstChild("AnalyticsConfiguration");
+ if(!analyticsConfigurationListNode.IsNull())
+ {
+ XmlNode analyticsConfigurationMember = analyticsConfigurationListNode;
+ while(!analyticsConfigurationMember.IsNull())
+ {
+ m_analyticsConfigurationList.push_back(analyticsConfigurationMember);
+ analyticsConfigurationMember = analyticsConfigurationMember.NextNode("AnalyticsConfiguration");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsRequest.cpp
new file mode 100644
index 00000000000..8e83bdec35b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsRequest.cpp
@@ -0,0 +1,59 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketIntelligentTieringConfigurationsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListBucketIntelligentTieringConfigurationsRequest::ListBucketIntelligentTieringConfigurationsRequest() :
+ m_bucketHasBeenSet(false),
+ m_continuationTokenHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListBucketIntelligentTieringConfigurationsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListBucketIntelligentTieringConfigurationsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_continuationTokenHasBeenSet)
+ {
+ ss << m_continuationToken;
+ uri.AddQueryStringParameter("continuation-token", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsResult.cpp
new file mode 100644
index 00000000000..aa085125866
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketIntelligentTieringConfigurationsResult.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketIntelligentTieringConfigurationsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListBucketIntelligentTieringConfigurationsResult::ListBucketIntelligentTieringConfigurationsResult() :
+ m_isTruncated(false)
+{
+}
+
+ListBucketIntelligentTieringConfigurationsResult::ListBucketIntelligentTieringConfigurationsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_isTruncated(false)
+{
+ *this = result;
+}
+
+ListBucketIntelligentTieringConfigurationsResult& ListBucketIntelligentTieringConfigurationsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode continuationTokenNode = resultNode.FirstChild("ContinuationToken");
+ if(!continuationTokenNode.IsNull())
+ {
+ m_continuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(continuationTokenNode.GetText());
+ }
+ XmlNode nextContinuationTokenNode = resultNode.FirstChild("NextContinuationToken");
+ if(!nextContinuationTokenNode.IsNull())
+ {
+ m_nextContinuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(nextContinuationTokenNode.GetText());
+ }
+ XmlNode intelligentTieringConfigurationListNode = resultNode.FirstChild("IntelligentTieringConfiguration");
+ if(!intelligentTieringConfigurationListNode.IsNull())
+ {
+ XmlNode intelligentTieringConfigurationMember = intelligentTieringConfigurationListNode;
+ while(!intelligentTieringConfigurationMember.IsNull())
+ {
+ m_intelligentTieringConfigurationList.push_back(intelligentTieringConfigurationMember);
+ intelligentTieringConfigurationMember = intelligentTieringConfigurationMember.NextNode("IntelligentTieringConfiguration");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsRequest.cpp
new file mode 100644
index 00000000000..fbd8f9ff83c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketInventoryConfigurationsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListBucketInventoryConfigurationsRequest::ListBucketInventoryConfigurationsRequest() :
+ m_bucketHasBeenSet(false),
+ m_continuationTokenHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListBucketInventoryConfigurationsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListBucketInventoryConfigurationsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_continuationTokenHasBeenSet)
+ {
+ ss << m_continuationToken;
+ uri.AddQueryStringParameter("continuation-token", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListBucketInventoryConfigurationsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsResult.cpp
new file mode 100644
index 00000000000..9eba8ffec69
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketInventoryConfigurationsResult.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketInventoryConfigurationsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListBucketInventoryConfigurationsResult::ListBucketInventoryConfigurationsResult() :
+ m_isTruncated(false)
+{
+}
+
+ListBucketInventoryConfigurationsResult::ListBucketInventoryConfigurationsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_isTruncated(false)
+{
+ *this = result;
+}
+
+ListBucketInventoryConfigurationsResult& ListBucketInventoryConfigurationsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode continuationTokenNode = resultNode.FirstChild("ContinuationToken");
+ if(!continuationTokenNode.IsNull())
+ {
+ m_continuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(continuationTokenNode.GetText());
+ }
+ XmlNode inventoryConfigurationListNode = resultNode.FirstChild("InventoryConfiguration");
+ if(!inventoryConfigurationListNode.IsNull())
+ {
+ XmlNode inventoryConfigurationMember = inventoryConfigurationListNode;
+ while(!inventoryConfigurationMember.IsNull())
+ {
+ m_inventoryConfigurationList.push_back(inventoryConfigurationMember);
+ inventoryConfigurationMember = inventoryConfigurationMember.NextNode("InventoryConfiguration");
+ }
+
+ }
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode nextContinuationTokenNode = resultNode.FirstChild("NextContinuationToken");
+ if(!nextContinuationTokenNode.IsNull())
+ {
+ m_nextContinuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(nextContinuationTokenNode.GetText());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsRequest.cpp
new file mode 100644
index 00000000000..3978ec46f89
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketMetricsConfigurationsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListBucketMetricsConfigurationsRequest::ListBucketMetricsConfigurationsRequest() :
+ m_bucketHasBeenSet(false),
+ m_continuationTokenHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListBucketMetricsConfigurationsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListBucketMetricsConfigurationsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_continuationTokenHasBeenSet)
+ {
+ ss << m_continuationToken;
+ uri.AddQueryStringParameter("continuation-token", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListBucketMetricsConfigurationsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsResult.cpp
new file mode 100644
index 00000000000..5d9cb518456
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketMetricsConfigurationsResult.cpp
@@ -0,0 +1,65 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketMetricsConfigurationsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListBucketMetricsConfigurationsResult::ListBucketMetricsConfigurationsResult() :
+ m_isTruncated(false)
+{
+}
+
+ListBucketMetricsConfigurationsResult::ListBucketMetricsConfigurationsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_isTruncated(false)
+{
+ *this = result;
+}
+
+ListBucketMetricsConfigurationsResult& ListBucketMetricsConfigurationsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode continuationTokenNode = resultNode.FirstChild("ContinuationToken");
+ if(!continuationTokenNode.IsNull())
+ {
+ m_continuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(continuationTokenNode.GetText());
+ }
+ XmlNode nextContinuationTokenNode = resultNode.FirstChild("NextContinuationToken");
+ if(!nextContinuationTokenNode.IsNull())
+ {
+ m_nextContinuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(nextContinuationTokenNode.GetText());
+ }
+ XmlNode metricsConfigurationListNode = resultNode.FirstChild("MetricsConfiguration");
+ if(!metricsConfigurationListNode.IsNull())
+ {
+ XmlNode metricsConfigurationMember = metricsConfigurationListNode;
+ while(!metricsConfigurationMember.IsNull())
+ {
+ m_metricsConfigurationList.push_back(metricsConfigurationMember);
+ metricsConfigurationMember = metricsConfigurationMember.NextNode("MetricsConfiguration");
+ }
+
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketsResult.cpp
new file mode 100644
index 00000000000..43196edacdf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListBucketsResult.cpp
@@ -0,0 +1,53 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListBucketsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListBucketsResult::ListBucketsResult()
+{
+}
+
+ListBucketsResult::ListBucketsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+ListBucketsResult& ListBucketsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bucketsNode = resultNode.FirstChild("Buckets");
+ if(!bucketsNode.IsNull())
+ {
+ XmlNode bucketsMember = bucketsNode.FirstChild("Bucket");
+ while(!bucketsMember.IsNull())
+ {
+ m_buckets.push_back(bucketsMember);
+ bucketsMember = bucketsMember.NextNode("Bucket");
+ }
+
+ }
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsRequest.cpp
new file mode 100644
index 00000000000..9723e16a9d7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsRequest.cpp
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListMultipartUploadsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListMultipartUploadsRequest::ListMultipartUploadsRequest() :
+ m_bucketHasBeenSet(false),
+ m_delimiterHasBeenSet(false),
+ m_encodingType(EncodingType::NOT_SET),
+ m_encodingTypeHasBeenSet(false),
+ m_keyMarkerHasBeenSet(false),
+ m_maxUploads(0),
+ m_maxUploadsHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_uploadIdMarkerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListMultipartUploadsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListMultipartUploadsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_delimiterHasBeenSet)
+ {
+ ss << m_delimiter;
+ uri.AddQueryStringParameter("delimiter", ss.str());
+ ss.str("");
+ }
+
+ if(m_encodingTypeHasBeenSet)
+ {
+ ss << EncodingTypeMapper::GetNameForEncodingType(m_encodingType);
+ uri.AddQueryStringParameter("encoding-type", ss.str());
+ ss.str("");
+ }
+
+ if(m_keyMarkerHasBeenSet)
+ {
+ ss << m_keyMarker;
+ uri.AddQueryStringParameter("key-marker", ss.str());
+ ss.str("");
+ }
+
+ if(m_maxUploadsHasBeenSet)
+ {
+ ss << m_maxUploads;
+ uri.AddQueryStringParameter("max-uploads", ss.str());
+ ss.str("");
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ ss << m_prefix;
+ uri.AddQueryStringParameter("prefix", ss.str());
+ ss.str("");
+ }
+
+ if(m_uploadIdMarkerHasBeenSet)
+ {
+ ss << m_uploadIdMarker;
+ uri.AddQueryStringParameter("upload-id-marker", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListMultipartUploadsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsResult.cpp
new file mode 100644
index 00000000000..07a2e7b7883
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListMultipartUploadsResult.cpp
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListMultipartUploadsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListMultipartUploadsResult::ListMultipartUploadsResult() :
+ m_maxUploads(0),
+ m_isTruncated(false),
+ m_encodingType(EncodingType::NOT_SET)
+{
+}
+
+ListMultipartUploadsResult::ListMultipartUploadsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_maxUploads(0),
+ m_isTruncated(false),
+ m_encodingType(EncodingType::NOT_SET)
+{
+ *this = result;
+}
+
+ListMultipartUploadsResult& ListMultipartUploadsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bucketNode = resultNode.FirstChild("Bucket");
+ if(!bucketNode.IsNull())
+ {
+ m_bucket = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNode.GetText());
+ }
+ XmlNode keyMarkerNode = resultNode.FirstChild("KeyMarker");
+ if(!keyMarkerNode.IsNull())
+ {
+ m_keyMarker = Aws::Utils::Xml::DecodeEscapedXmlText(keyMarkerNode.GetText());
+ }
+ XmlNode uploadIdMarkerNode = resultNode.FirstChild("UploadIdMarker");
+ if(!uploadIdMarkerNode.IsNull())
+ {
+ m_uploadIdMarker = Aws::Utils::Xml::DecodeEscapedXmlText(uploadIdMarkerNode.GetText());
+ }
+ XmlNode nextKeyMarkerNode = resultNode.FirstChild("NextKeyMarker");
+ if(!nextKeyMarkerNode.IsNull())
+ {
+ m_nextKeyMarker = Aws::Utils::Xml::DecodeEscapedXmlText(nextKeyMarkerNode.GetText());
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ }
+ XmlNode delimiterNode = resultNode.FirstChild("Delimiter");
+ if(!delimiterNode.IsNull())
+ {
+ m_delimiter = Aws::Utils::Xml::DecodeEscapedXmlText(delimiterNode.GetText());
+ }
+ XmlNode nextUploadIdMarkerNode = resultNode.FirstChild("NextUploadIdMarker");
+ if(!nextUploadIdMarkerNode.IsNull())
+ {
+ m_nextUploadIdMarker = Aws::Utils::Xml::DecodeEscapedXmlText(nextUploadIdMarkerNode.GetText());
+ }
+ XmlNode maxUploadsNode = resultNode.FirstChild("MaxUploads");
+ if(!maxUploadsNode.IsNull())
+ {
+ m_maxUploads = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(maxUploadsNode.GetText()).c_str()).c_str());
+ }
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode uploadsNode = resultNode.FirstChild("Upload");
+ if(!uploadsNode.IsNull())
+ {
+ XmlNode uploadMember = uploadsNode;
+ while(!uploadMember.IsNull())
+ {
+ m_uploads.push_back(uploadMember);
+ uploadMember = uploadMember.NextNode("Upload");
+ }
+
+ }
+ XmlNode commonPrefixesNode = resultNode.FirstChild("CommonPrefixes");
+ if(!commonPrefixesNode.IsNull())
+ {
+ XmlNode commonPrefixesMember = commonPrefixesNode;
+ while(!commonPrefixesMember.IsNull())
+ {
+ m_commonPrefixes.push_back(commonPrefixesMember);
+ commonPrefixesMember = commonPrefixesMember.NextNode("CommonPrefixes");
+ }
+
+ }
+ XmlNode encodingTypeNode = resultNode.FirstChild("EncodingType");
+ if(!encodingTypeNode.IsNull())
+ {
+ m_encodingType = EncodingTypeMapper::GetEncodingTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(encodingTypeNode.GetText()).c_str()).c_str());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsRequest.cpp
new file mode 100644
index 00000000000..2336f09ef86
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsRequest.cpp
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListObjectVersionsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListObjectVersionsRequest::ListObjectVersionsRequest() :
+ m_bucketHasBeenSet(false),
+ m_delimiterHasBeenSet(false),
+ m_encodingType(EncodingType::NOT_SET),
+ m_encodingTypeHasBeenSet(false),
+ m_keyMarkerHasBeenSet(false),
+ m_maxKeys(0),
+ m_maxKeysHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_versionIdMarkerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListObjectVersionsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListObjectVersionsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_delimiterHasBeenSet)
+ {
+ ss << m_delimiter;
+ uri.AddQueryStringParameter("delimiter", ss.str());
+ ss.str("");
+ }
+
+ if(m_encodingTypeHasBeenSet)
+ {
+ ss << EncodingTypeMapper::GetNameForEncodingType(m_encodingType);
+ uri.AddQueryStringParameter("encoding-type", ss.str());
+ ss.str("");
+ }
+
+ if(m_keyMarkerHasBeenSet)
+ {
+ ss << m_keyMarker;
+ uri.AddQueryStringParameter("key-marker", ss.str());
+ ss.str("");
+ }
+
+ if(m_maxKeysHasBeenSet)
+ {
+ ss << m_maxKeys;
+ uri.AddQueryStringParameter("max-keys", ss.str());
+ ss.str("");
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ ss << m_prefix;
+ uri.AddQueryStringParameter("prefix", ss.str());
+ ss.str("");
+ }
+
+ if(m_versionIdMarkerHasBeenSet)
+ {
+ ss << m_versionIdMarker;
+ uri.AddQueryStringParameter("version-id-marker", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListObjectVersionsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsResult.cpp
new file mode 100644
index 00000000000..9cccecdb3ea
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectVersionsResult.cpp
@@ -0,0 +1,126 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListObjectVersionsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListObjectVersionsResult::ListObjectVersionsResult() :
+ m_isTruncated(false),
+ m_maxKeys(0),
+ m_encodingType(EncodingType::NOT_SET)
+{
+}
+
+ListObjectVersionsResult::ListObjectVersionsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_isTruncated(false),
+ m_maxKeys(0),
+ m_encodingType(EncodingType::NOT_SET)
+{
+ *this = result;
+}
+
+ListObjectVersionsResult& ListObjectVersionsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode keyMarkerNode = resultNode.FirstChild("KeyMarker");
+ if(!keyMarkerNode.IsNull())
+ {
+ m_keyMarker = Aws::Utils::Xml::DecodeEscapedXmlText(keyMarkerNode.GetText());
+ }
+ XmlNode versionIdMarkerNode = resultNode.FirstChild("VersionIdMarker");
+ if(!versionIdMarkerNode.IsNull())
+ {
+ m_versionIdMarker = Aws::Utils::Xml::DecodeEscapedXmlText(versionIdMarkerNode.GetText());
+ }
+ XmlNode nextKeyMarkerNode = resultNode.FirstChild("NextKeyMarker");
+ if(!nextKeyMarkerNode.IsNull())
+ {
+ m_nextKeyMarker = Aws::Utils::Xml::DecodeEscapedXmlText(nextKeyMarkerNode.GetText());
+ }
+ XmlNode nextVersionIdMarkerNode = resultNode.FirstChild("NextVersionIdMarker");
+ if(!nextVersionIdMarkerNode.IsNull())
+ {
+ m_nextVersionIdMarker = Aws::Utils::Xml::DecodeEscapedXmlText(nextVersionIdMarkerNode.GetText());
+ }
+ XmlNode versionsNode = resultNode.FirstChild("Version");
+ if(!versionsNode.IsNull())
+ {
+ XmlNode versionMember = versionsNode;
+ while(!versionMember.IsNull())
+ {
+ m_versions.push_back(versionMember);
+ versionMember = versionMember.NextNode("Version");
+ }
+
+ }
+ XmlNode deleteMarkersNode = resultNode.FirstChild("DeleteMarker");
+ if(!deleteMarkersNode.IsNull())
+ {
+ XmlNode deleteMarkerMember = deleteMarkersNode;
+ while(!deleteMarkerMember.IsNull())
+ {
+ m_deleteMarkers.push_back(deleteMarkerMember);
+ deleteMarkerMember = deleteMarkerMember.NextNode("DeleteMarker");
+ }
+
+ }
+ XmlNode nameNode = resultNode.FirstChild("Name");
+ if(!nameNode.IsNull())
+ {
+ m_name = Aws::Utils::Xml::DecodeEscapedXmlText(nameNode.GetText());
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ }
+ XmlNode delimiterNode = resultNode.FirstChild("Delimiter");
+ if(!delimiterNode.IsNull())
+ {
+ m_delimiter = Aws::Utils::Xml::DecodeEscapedXmlText(delimiterNode.GetText());
+ }
+ XmlNode maxKeysNode = resultNode.FirstChild("MaxKeys");
+ if(!maxKeysNode.IsNull())
+ {
+ m_maxKeys = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(maxKeysNode.GetText()).c_str()).c_str());
+ }
+ XmlNode commonPrefixesNode = resultNode.FirstChild("CommonPrefixes");
+ if(!commonPrefixesNode.IsNull())
+ {
+ XmlNode commonPrefixesMember = commonPrefixesNode;
+ while(!commonPrefixesMember.IsNull())
+ {
+ m_commonPrefixes.push_back(commonPrefixesMember);
+ commonPrefixesMember = commonPrefixesMember.NextNode("CommonPrefixes");
+ }
+
+ }
+ XmlNode encodingTypeNode = resultNode.FirstChild("EncodingType");
+ if(!encodingTypeNode.IsNull())
+ {
+ m_encodingType = EncodingTypeMapper::GetEncodingTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(encodingTypeNode.GetText()).c_str()).c_str());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsRequest.cpp
new file mode 100644
index 00000000000..33abec092f4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsRequest.cpp
@@ -0,0 +1,114 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListObjectsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListObjectsRequest::ListObjectsRequest() :
+ m_bucketHasBeenSet(false),
+ m_delimiterHasBeenSet(false),
+ m_encodingType(EncodingType::NOT_SET),
+ m_encodingTypeHasBeenSet(false),
+ m_markerHasBeenSet(false),
+ m_maxKeys(0),
+ m_maxKeysHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListObjectsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListObjectsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_delimiterHasBeenSet)
+ {
+ ss << m_delimiter;
+ uri.AddQueryStringParameter("delimiter", ss.str());
+ ss.str("");
+ }
+
+ if(m_encodingTypeHasBeenSet)
+ {
+ ss << EncodingTypeMapper::GetNameForEncodingType(m_encodingType);
+ uri.AddQueryStringParameter("encoding-type", ss.str());
+ ss.str("");
+ }
+
+ if(m_markerHasBeenSet)
+ {
+ ss << m_marker;
+ uri.AddQueryStringParameter("marker", ss.str());
+ ss.str("");
+ }
+
+ if(m_maxKeysHasBeenSet)
+ {
+ ss << m_maxKeys;
+ uri.AddQueryStringParameter("max-keys", ss.str());
+ ss.str("");
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ ss << m_prefix;
+ uri.AddQueryStringParameter("prefix", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListObjectsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsResult.cpp
new file mode 100644
index 00000000000..ca09eeb4173
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsResult.cpp
@@ -0,0 +1,105 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListObjectsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListObjectsResult::ListObjectsResult() :
+ m_isTruncated(false),
+ m_maxKeys(0),
+ m_encodingType(EncodingType::NOT_SET)
+{
+}
+
+ListObjectsResult::ListObjectsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_isTruncated(false),
+ m_maxKeys(0),
+ m_encodingType(EncodingType::NOT_SET)
+{
+ *this = result;
+}
+
+ListObjectsResult& ListObjectsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode markerNode = resultNode.FirstChild("Marker");
+ if(!markerNode.IsNull())
+ {
+ m_marker = Aws::Utils::Xml::DecodeEscapedXmlText(markerNode.GetText());
+ }
+ XmlNode nextMarkerNode = resultNode.FirstChild("NextMarker");
+ if(!nextMarkerNode.IsNull())
+ {
+ m_nextMarker = Aws::Utils::Xml::DecodeEscapedXmlText(nextMarkerNode.GetText());
+ }
+ XmlNode contentsNode = resultNode.FirstChild("Contents");
+ if(!contentsNode.IsNull())
+ {
+ XmlNode contentsMember = contentsNode;
+ while(!contentsMember.IsNull())
+ {
+ m_contents.push_back(contentsMember);
+ contentsMember = contentsMember.NextNode("Contents");
+ }
+
+ }
+ XmlNode nameNode = resultNode.FirstChild("Name");
+ if(!nameNode.IsNull())
+ {
+ m_name = Aws::Utils::Xml::DecodeEscapedXmlText(nameNode.GetText());
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ }
+ XmlNode delimiterNode = resultNode.FirstChild("Delimiter");
+ if(!delimiterNode.IsNull())
+ {
+ m_delimiter = Aws::Utils::Xml::DecodeEscapedXmlText(delimiterNode.GetText());
+ }
+ XmlNode maxKeysNode = resultNode.FirstChild("MaxKeys");
+ if(!maxKeysNode.IsNull())
+ {
+ m_maxKeys = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(maxKeysNode.GetText()).c_str()).c_str());
+ }
+ XmlNode commonPrefixesNode = resultNode.FirstChild("CommonPrefixes");
+ if(!commonPrefixesNode.IsNull())
+ {
+ XmlNode commonPrefixesMember = commonPrefixesNode;
+ while(!commonPrefixesMember.IsNull())
+ {
+ m_commonPrefixes.push_back(commonPrefixesMember);
+ commonPrefixesMember = commonPrefixesMember.NextNode("CommonPrefixes");
+ }
+
+ }
+ XmlNode encodingTypeNode = resultNode.FirstChild("EncodingType");
+ if(!encodingTypeNode.IsNull())
+ {
+ m_encodingType = EncodingTypeMapper::GetEncodingTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(encodingTypeNode.GetText()).c_str()).c_str());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Request.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Request.cpp
new file mode 100644
index 00000000000..2feb9b83c14
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Request.cpp
@@ -0,0 +1,131 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListObjectsV2Request.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListObjectsV2Request::ListObjectsV2Request() :
+ m_bucketHasBeenSet(false),
+ m_delimiterHasBeenSet(false),
+ m_encodingType(EncodingType::NOT_SET),
+ m_encodingTypeHasBeenSet(false),
+ m_maxKeys(0),
+ m_maxKeysHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_continuationTokenHasBeenSet(false),
+ m_fetchOwner(false),
+ m_fetchOwnerHasBeenSet(false),
+ m_startAfterHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListObjectsV2Request::SerializePayload() const
+{
+ return {};
+}
+
+void ListObjectsV2Request::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_delimiterHasBeenSet)
+ {
+ ss << m_delimiter;
+ uri.AddQueryStringParameter("delimiter", ss.str());
+ ss.str("");
+ }
+
+ if(m_encodingTypeHasBeenSet)
+ {
+ ss << EncodingTypeMapper::GetNameForEncodingType(m_encodingType);
+ uri.AddQueryStringParameter("encoding-type", ss.str());
+ ss.str("");
+ }
+
+ if(m_maxKeysHasBeenSet)
+ {
+ ss << m_maxKeys;
+ uri.AddQueryStringParameter("max-keys", ss.str());
+ ss.str("");
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ ss << m_prefix;
+ uri.AddQueryStringParameter("prefix", ss.str());
+ ss.str("");
+ }
+
+ if(m_continuationTokenHasBeenSet)
+ {
+ ss << m_continuationToken;
+ uri.AddQueryStringParameter("continuation-token", ss.str());
+ ss.str("");
+ }
+
+ if(m_fetchOwnerHasBeenSet)
+ {
+ ss << m_fetchOwner;
+ uri.AddQueryStringParameter("fetch-owner", ss.str());
+ ss.str("");
+ }
+
+ if(m_startAfterHasBeenSet)
+ {
+ ss << m_startAfter;
+ uri.AddQueryStringParameter("start-after", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListObjectsV2Request::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Result.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Result.cpp
new file mode 100644
index 00000000000..efd991ac5b7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListObjectsV2Result.cpp
@@ -0,0 +1,117 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListObjectsV2Result.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListObjectsV2Result::ListObjectsV2Result() :
+ m_isTruncated(false),
+ m_maxKeys(0),
+ m_encodingType(EncodingType::NOT_SET),
+ m_keyCount(0)
+{
+}
+
+ListObjectsV2Result::ListObjectsV2Result(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_isTruncated(false),
+ m_maxKeys(0),
+ m_encodingType(EncodingType::NOT_SET),
+ m_keyCount(0)
+{
+ *this = result;
+}
+
+ListObjectsV2Result& ListObjectsV2Result::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode contentsNode = resultNode.FirstChild("Contents");
+ if(!contentsNode.IsNull())
+ {
+ XmlNode contentsMember = contentsNode;
+ while(!contentsMember.IsNull())
+ {
+ m_contents.push_back(contentsMember);
+ contentsMember = contentsMember.NextNode("Contents");
+ }
+
+ }
+ XmlNode nameNode = resultNode.FirstChild("Name");
+ if(!nameNode.IsNull())
+ {
+ m_name = Aws::Utils::Xml::DecodeEscapedXmlText(nameNode.GetText());
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ }
+ XmlNode delimiterNode = resultNode.FirstChild("Delimiter");
+ if(!delimiterNode.IsNull())
+ {
+ m_delimiter = Aws::Utils::Xml::DecodeEscapedXmlText(delimiterNode.GetText());
+ }
+ XmlNode maxKeysNode = resultNode.FirstChild("MaxKeys");
+ if(!maxKeysNode.IsNull())
+ {
+ m_maxKeys = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(maxKeysNode.GetText()).c_str()).c_str());
+ }
+ XmlNode commonPrefixesNode = resultNode.FirstChild("CommonPrefixes");
+ if(!commonPrefixesNode.IsNull())
+ {
+ XmlNode commonPrefixesMember = commonPrefixesNode;
+ while(!commonPrefixesMember.IsNull())
+ {
+ m_commonPrefixes.push_back(commonPrefixesMember);
+ commonPrefixesMember = commonPrefixesMember.NextNode("CommonPrefixes");
+ }
+
+ }
+ XmlNode encodingTypeNode = resultNode.FirstChild("EncodingType");
+ if(!encodingTypeNode.IsNull())
+ {
+ m_encodingType = EncodingTypeMapper::GetEncodingTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(encodingTypeNode.GetText()).c_str()).c_str());
+ }
+ XmlNode keyCountNode = resultNode.FirstChild("KeyCount");
+ if(!keyCountNode.IsNull())
+ {
+ m_keyCount = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(keyCountNode.GetText()).c_str()).c_str());
+ }
+ XmlNode continuationTokenNode = resultNode.FirstChild("ContinuationToken");
+ if(!continuationTokenNode.IsNull())
+ {
+ m_continuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(continuationTokenNode.GetText());
+ }
+ XmlNode nextContinuationTokenNode = resultNode.FirstChild("NextContinuationToken");
+ if(!nextContinuationTokenNode.IsNull())
+ {
+ m_nextContinuationToken = Aws::Utils::Xml::DecodeEscapedXmlText(nextContinuationTokenNode.GetText());
+ }
+ XmlNode startAfterNode = resultNode.FirstChild("StartAfter");
+ if(!startAfterNode.IsNull())
+ {
+ m_startAfter = Aws::Utils::Xml::DecodeEscapedXmlText(startAfterNode.GetText());
+ }
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsRequest.cpp
new file mode 100644
index 00000000000..59ff12e4d17
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsRequest.cpp
@@ -0,0 +1,99 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListPartsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+ListPartsRequest::ListPartsRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_maxParts(0),
+ m_maxPartsHasBeenSet(false),
+ m_partNumberMarker(0),
+ m_partNumberMarkerHasBeenSet(false),
+ m_uploadIdHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String ListPartsRequest::SerializePayload() const
+{
+ return {};
+}
+
+void ListPartsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_maxPartsHasBeenSet)
+ {
+ ss << m_maxParts;
+ uri.AddQueryStringParameter("max-parts", ss.str());
+ ss.str("");
+ }
+
+ if(m_partNumberMarkerHasBeenSet)
+ {
+ ss << m_partNumberMarker;
+ uri.AddQueryStringParameter("part-number-marker", ss.str());
+ ss.str("");
+ }
+
+ if(m_uploadIdHasBeenSet)
+ {
+ ss << m_uploadId;
+ uri.AddQueryStringParameter("uploadId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection ListPartsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsResult.cpp
new file mode 100644
index 00000000000..f4638f2a069
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ListPartsResult.cpp
@@ -0,0 +1,130 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ListPartsResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+ListPartsResult::ListPartsResult() :
+ m_partNumberMarker(0),
+ m_nextPartNumberMarker(0),
+ m_maxParts(0),
+ m_isTruncated(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+ListPartsResult::ListPartsResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_partNumberMarker(0),
+ m_nextPartNumberMarker(0),
+ m_maxParts(0),
+ m_isTruncated(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+ListPartsResult& ListPartsResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bucketNode = resultNode.FirstChild("Bucket");
+ if(!bucketNode.IsNull())
+ {
+ m_bucket = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNode.GetText());
+ }
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ }
+ XmlNode uploadIdNode = resultNode.FirstChild("UploadId");
+ if(!uploadIdNode.IsNull())
+ {
+ m_uploadId = Aws::Utils::Xml::DecodeEscapedXmlText(uploadIdNode.GetText());
+ }
+ XmlNode partNumberMarkerNode = resultNode.FirstChild("PartNumberMarker");
+ if(!partNumberMarkerNode.IsNull())
+ {
+ m_partNumberMarker = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(partNumberMarkerNode.GetText()).c_str()).c_str());
+ }
+ XmlNode nextPartNumberMarkerNode = resultNode.FirstChild("NextPartNumberMarker");
+ if(!nextPartNumberMarkerNode.IsNull())
+ {
+ m_nextPartNumberMarker = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(nextPartNumberMarkerNode.GetText()).c_str()).c_str());
+ }
+ XmlNode maxPartsNode = resultNode.FirstChild("MaxParts");
+ if(!maxPartsNode.IsNull())
+ {
+ m_maxParts = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(maxPartsNode.GetText()).c_str()).c_str());
+ }
+ XmlNode isTruncatedNode = resultNode.FirstChild("IsTruncated");
+ if(!isTruncatedNode.IsNull())
+ {
+ m_isTruncated = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isTruncatedNode.GetText()).c_str()).c_str());
+ }
+ XmlNode partsNode = resultNode.FirstChild("Part");
+ if(!partsNode.IsNull())
+ {
+ XmlNode partMember = partsNode;
+ while(!partMember.IsNull())
+ {
+ m_parts.push_back(partMember);
+ partMember = partMember.NextNode("Part");
+ }
+
+ }
+ XmlNode initiatorNode = resultNode.FirstChild("Initiator");
+ if(!initiatorNode.IsNull())
+ {
+ m_initiator = initiatorNode;
+ }
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = StorageClassMapper::GetStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ }
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& abortDateIter = headers.find("x-amz-abort-date");
+ if(abortDateIter != headers.end())
+ {
+ m_abortDate = DateTime(abortDateIter->second, DateFormat::RFC822);
+ }
+
+ const auto& abortRuleIdIter = headers.find("x-amz-abort-rule-id");
+ if(abortRuleIdIter != headers.end())
+ {
+ m_abortRuleId = abortRuleIdIter->second;
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LoggingEnabled.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LoggingEnabled.cpp
new file mode 100644
index 00000000000..b39e74c769a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/LoggingEnabled.cpp
@@ -0,0 +1,102 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/LoggingEnabled.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+LoggingEnabled::LoggingEnabled() :
+ m_targetBucketHasBeenSet(false),
+ m_targetGrantsHasBeenSet(false),
+ m_targetPrefixHasBeenSet(false)
+{
+}
+
+LoggingEnabled::LoggingEnabled(const XmlNode& xmlNode) :
+ m_targetBucketHasBeenSet(false),
+ m_targetGrantsHasBeenSet(false),
+ m_targetPrefixHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+LoggingEnabled& LoggingEnabled::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode targetBucketNode = resultNode.FirstChild("TargetBucket");
+ if(!targetBucketNode.IsNull())
+ {
+ m_targetBucket = Aws::Utils::Xml::DecodeEscapedXmlText(targetBucketNode.GetText());
+ m_targetBucketHasBeenSet = true;
+ }
+ XmlNode targetGrantsNode = resultNode.FirstChild("TargetGrants");
+ if(!targetGrantsNode.IsNull())
+ {
+ XmlNode targetGrantsMember = targetGrantsNode.FirstChild("Grant");
+ while(!targetGrantsMember.IsNull())
+ {
+ m_targetGrants.push_back(targetGrantsMember);
+ targetGrantsMember = targetGrantsMember.NextNode("Grant");
+ }
+
+ m_targetGrantsHasBeenSet = true;
+ }
+ XmlNode targetPrefixNode = resultNode.FirstChild("TargetPrefix");
+ if(!targetPrefixNode.IsNull())
+ {
+ m_targetPrefix = Aws::Utils::Xml::DecodeEscapedXmlText(targetPrefixNode.GetText());
+ m_targetPrefixHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void LoggingEnabled::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_targetBucketHasBeenSet)
+ {
+ XmlNode targetBucketNode = parentNode.CreateChildElement("TargetBucket");
+ targetBucketNode.SetText(m_targetBucket);
+ }
+
+ if(m_targetGrantsHasBeenSet)
+ {
+ XmlNode targetGrantsParentNode = parentNode.CreateChildElement("TargetGrants");
+ for(const auto& item : m_targetGrants)
+ {
+ XmlNode targetGrantsNode = targetGrantsParentNode.CreateChildElement("Grant");
+ item.AddToNode(targetGrantsNode);
+ }
+ }
+
+ if(m_targetPrefixHasBeenSet)
+ {
+ XmlNode targetPrefixNode = parentNode.CreateChildElement("TargetPrefix");
+ targetPrefixNode.SetText(m_targetPrefix);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADelete.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADelete.cpp
new file mode 100644
index 00000000000..25938f65c98
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADelete.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MFADelete.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace MFADeleteMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ MFADelete GetMFADeleteForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return MFADelete::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return MFADelete::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<MFADelete>(hashCode);
+ }
+
+ return MFADelete::NOT_SET;
+ }
+
+ Aws::String GetNameForMFADelete(MFADelete enumValue)
+ {
+ switch(enumValue)
+ {
+ case MFADelete::Enabled:
+ return "Enabled";
+ case MFADelete::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace MFADeleteMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADeleteStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADeleteStatus.cpp
new file mode 100644
index 00000000000..3f0640aff76
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MFADeleteStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MFADeleteStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace MFADeleteStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ MFADeleteStatus GetMFADeleteStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return MFADeleteStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return MFADeleteStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<MFADeleteStatus>(hashCode);
+ }
+
+ return MFADeleteStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForMFADeleteStatus(MFADeleteStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case MFADeleteStatus::Enabled:
+ return "Enabled";
+ case MFADeleteStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace MFADeleteStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataDirective.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataDirective.cpp
new file mode 100644
index 00000000000..06121d29903
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataDirective.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MetadataDirective.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace MetadataDirectiveMapper
+ {
+
+ static const int COPY_HASH = HashingUtils::HashString("COPY");
+ static const int REPLACE_HASH = HashingUtils::HashString("REPLACE");
+
+
+ MetadataDirective GetMetadataDirectiveForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == COPY_HASH)
+ {
+ return MetadataDirective::COPY;
+ }
+ else if (hashCode == REPLACE_HASH)
+ {
+ return MetadataDirective::REPLACE;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<MetadataDirective>(hashCode);
+ }
+
+ return MetadataDirective::NOT_SET;
+ }
+
+ Aws::String GetNameForMetadataDirective(MetadataDirective enumValue)
+ {
+ switch(enumValue)
+ {
+ case MetadataDirective::COPY:
+ return "COPY";
+ case MetadataDirective::REPLACE:
+ return "REPLACE";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace MetadataDirectiveMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataEntry.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataEntry.cpp
new file mode 100644
index 00000000000..a1c8ced24c3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetadataEntry.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MetadataEntry.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+MetadataEntry::MetadataEntry() :
+ m_nameHasBeenSet(false),
+ m_valueHasBeenSet(false)
+{
+}
+
+MetadataEntry::MetadataEntry(const XmlNode& xmlNode) :
+ m_nameHasBeenSet(false),
+ m_valueHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+MetadataEntry& MetadataEntry::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode nameNode = resultNode.FirstChild("Name");
+ if(!nameNode.IsNull())
+ {
+ m_name = Aws::Utils::Xml::DecodeEscapedXmlText(nameNode.GetText());
+ m_nameHasBeenSet = true;
+ }
+ XmlNode valueNode = resultNode.FirstChild("Value");
+ if(!valueNode.IsNull())
+ {
+ m_value = Aws::Utils::Xml::DecodeEscapedXmlText(valueNode.GetText());
+ m_valueHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void MetadataEntry::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_nameHasBeenSet)
+ {
+ XmlNode nameNode = parentNode.CreateChildElement("Name");
+ nameNode.SetText(m_name);
+ }
+
+ if(m_valueHasBeenSet)
+ {
+ XmlNode valueNode = parentNode.CreateChildElement("Value");
+ valueNode.SetText(m_value);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Metrics.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Metrics.cpp
new file mode 100644
index 00000000000..dec4fe22641
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Metrics.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Metrics.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Metrics::Metrics() :
+ m_status(MetricsStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_eventThresholdHasBeenSet(false)
+{
+}
+
+Metrics::Metrics(const XmlNode& xmlNode) :
+ m_status(MetricsStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_eventThresholdHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Metrics& Metrics::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = MetricsStatusMapper::GetMetricsStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ XmlNode eventThresholdNode = resultNode.FirstChild("EventThreshold");
+ if(!eventThresholdNode.IsNull())
+ {
+ m_eventThreshold = eventThresholdNode;
+ m_eventThresholdHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Metrics::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(MetricsStatusMapper::GetNameForMetricsStatus(m_status));
+ }
+
+ if(m_eventThresholdHasBeenSet)
+ {
+ XmlNode eventThresholdNode = parentNode.CreateChildElement("EventThreshold");
+ m_eventThreshold.AddToNode(eventThresholdNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsAndOperator.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsAndOperator.cpp
new file mode 100644
index 00000000000..74951cd0ebf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsAndOperator.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MetricsAndOperator.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+MetricsAndOperator::MetricsAndOperator() :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+}
+
+MetricsAndOperator::MetricsAndOperator(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+MetricsAndOperator& MetricsAndOperator::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagsNode = resultNode.FirstChild("Tag");
+ if(!tagsNode.IsNull())
+ {
+ XmlNode tagMember = tagsNode;
+ while(!tagMember.IsNull())
+ {
+ m_tags.push_back(tagMember);
+ tagMember = tagMember.NextNode("Tag");
+ }
+
+ m_tagsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void MetricsAndOperator::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagsHasBeenSet)
+ {
+ XmlNode tagsParentNode = parentNode.CreateChildElement("Tags");
+ for(const auto& item : m_tags)
+ {
+ XmlNode tagsNode = tagsParentNode.CreateChildElement("Tag");
+ item.AddToNode(tagsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsConfiguration.cpp
new file mode 100644
index 00000000000..03c5f298003
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsConfiguration.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MetricsConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+MetricsConfiguration::MetricsConfiguration() :
+ m_idHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+}
+
+MetricsConfiguration::MetricsConfiguration(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+MetricsConfiguration& MetricsConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void MetricsConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsFilter.cpp
new file mode 100644
index 00000000000..fa7ade5849e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsFilter.cpp
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MetricsFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+MetricsFilter::MetricsFilter() :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+}
+
+MetricsFilter::MetricsFilter(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+MetricsFilter& MetricsFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagNode = resultNode.FirstChild("Tag");
+ if(!tagNode.IsNull())
+ {
+ m_tag = tagNode;
+ m_tagHasBeenSet = true;
+ }
+ XmlNode andNode = resultNode.FirstChild("And");
+ if(!andNode.IsNull())
+ {
+ m_and = andNode;
+ m_andHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void MetricsFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagHasBeenSet)
+ {
+ XmlNode tagNode = parentNode.CreateChildElement("Tag");
+ m_tag.AddToNode(tagNode);
+ }
+
+ if(m_andHasBeenSet)
+ {
+ XmlNode andNode = parentNode.CreateChildElement("And");
+ m_and.AddToNode(andNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsStatus.cpp
new file mode 100644
index 00000000000..daeeecda731
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MetricsStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MetricsStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace MetricsStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ MetricsStatus GetMetricsStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return MetricsStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return MetricsStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<MetricsStatus>(hashCode);
+ }
+
+ return MetricsStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForMetricsStatus(MetricsStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case MetricsStatus::Enabled:
+ return "Enabled";
+ case MetricsStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace MetricsStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MultipartUpload.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MultipartUpload.cpp
new file mode 100644
index 00000000000..6d92ea2cb6c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/MultipartUpload.cpp
@@ -0,0 +1,136 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/MultipartUpload.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+MultipartUpload::MultipartUpload() :
+ m_uploadIdHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_initiatedHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_ownerHasBeenSet(false),
+ m_initiatorHasBeenSet(false)
+{
+}
+
+MultipartUpload::MultipartUpload(const XmlNode& xmlNode) :
+ m_uploadIdHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_initiatedHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_ownerHasBeenSet(false),
+ m_initiatorHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+MultipartUpload& MultipartUpload::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode uploadIdNode = resultNode.FirstChild("UploadId");
+ if(!uploadIdNode.IsNull())
+ {
+ m_uploadId = Aws::Utils::Xml::DecodeEscapedXmlText(uploadIdNode.GetText());
+ m_uploadIdHasBeenSet = true;
+ }
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode initiatedNode = resultNode.FirstChild("Initiated");
+ if(!initiatedNode.IsNull())
+ {
+ m_initiated = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(initiatedNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_initiatedHasBeenSet = true;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = StorageClassMapper::GetStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ m_ownerHasBeenSet = true;
+ }
+ XmlNode initiatorNode = resultNode.FirstChild("Initiator");
+ if(!initiatorNode.IsNull())
+ {
+ m_initiator = initiatorNode;
+ m_initiatorHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void MultipartUpload::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_uploadIdHasBeenSet)
+ {
+ XmlNode uploadIdNode = parentNode.CreateChildElement("UploadId");
+ uploadIdNode.SetText(m_uploadId);
+ }
+
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_initiatedHasBeenSet)
+ {
+ XmlNode initiatedNode = parentNode.CreateChildElement("Initiated");
+ initiatedNode.SetText(m_initiated.ToGmtString(DateFormat::ISO_8601));
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(StorageClassMapper::GetNameForStorageClass(m_storageClass));
+ }
+
+ if(m_ownerHasBeenSet)
+ {
+ XmlNode ownerNode = parentNode.CreateChildElement("Owner");
+ m_owner.AddToNode(ownerNode);
+ }
+
+ if(m_initiatorHasBeenSet)
+ {
+ XmlNode initiatorNode = parentNode.CreateChildElement("Initiator");
+ m_initiator.AddToNode(initiatorNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionExpiration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionExpiration.cpp
new file mode 100644
index 00000000000..ab6db39f61c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionExpiration.cpp
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/NoncurrentVersionExpiration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+NoncurrentVersionExpiration::NoncurrentVersionExpiration() :
+ m_noncurrentDays(0),
+ m_noncurrentDaysHasBeenSet(false)
+{
+}
+
+NoncurrentVersionExpiration::NoncurrentVersionExpiration(const XmlNode& xmlNode) :
+ m_noncurrentDays(0),
+ m_noncurrentDaysHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+NoncurrentVersionExpiration& NoncurrentVersionExpiration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode noncurrentDaysNode = resultNode.FirstChild("NoncurrentDays");
+ if(!noncurrentDaysNode.IsNull())
+ {
+ m_noncurrentDays = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(noncurrentDaysNode.GetText()).c_str()).c_str());
+ m_noncurrentDaysHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void NoncurrentVersionExpiration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_noncurrentDaysHasBeenSet)
+ {
+ XmlNode noncurrentDaysNode = parentNode.CreateChildElement("NoncurrentDays");
+ ss << m_noncurrentDays;
+ noncurrentDaysNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionTransition.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionTransition.cpp
new file mode 100644
index 00000000000..e7027d679b6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NoncurrentVersionTransition.cpp
@@ -0,0 +1,84 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/NoncurrentVersionTransition.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+NoncurrentVersionTransition::NoncurrentVersionTransition() :
+ m_noncurrentDays(0),
+ m_noncurrentDaysHasBeenSet(false),
+ m_storageClass(TransitionStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false)
+{
+}
+
+NoncurrentVersionTransition::NoncurrentVersionTransition(const XmlNode& xmlNode) :
+ m_noncurrentDays(0),
+ m_noncurrentDaysHasBeenSet(false),
+ m_storageClass(TransitionStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+NoncurrentVersionTransition& NoncurrentVersionTransition::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode noncurrentDaysNode = resultNode.FirstChild("NoncurrentDays");
+ if(!noncurrentDaysNode.IsNull())
+ {
+ m_noncurrentDays = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(noncurrentDaysNode.GetText()).c_str()).c_str());
+ m_noncurrentDaysHasBeenSet = true;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = TransitionStorageClassMapper::GetTransitionStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void NoncurrentVersionTransition::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_noncurrentDaysHasBeenSet)
+ {
+ XmlNode noncurrentDaysNode = parentNode.CreateChildElement("NoncurrentDays");
+ ss << m_noncurrentDays;
+ noncurrentDaysNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(TransitionStorageClassMapper::GetNameForTransitionStorageClass(m_storageClass));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfiguration.cpp
new file mode 100644
index 00000000000..bb62ecb84de
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfiguration.cpp
@@ -0,0 +1,119 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/NotificationConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+NotificationConfiguration::NotificationConfiguration() :
+ m_topicConfigurationsHasBeenSet(false),
+ m_queueConfigurationsHasBeenSet(false),
+ m_lambdaFunctionConfigurationsHasBeenSet(false)
+{
+}
+
+NotificationConfiguration::NotificationConfiguration(const XmlNode& xmlNode) :
+ m_topicConfigurationsHasBeenSet(false),
+ m_queueConfigurationsHasBeenSet(false),
+ m_lambdaFunctionConfigurationsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+NotificationConfiguration& NotificationConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode topicConfigurationsNode = resultNode.FirstChild("TopicConfiguration");
+ if(!topicConfigurationsNode.IsNull())
+ {
+ XmlNode topicConfigurationMember = topicConfigurationsNode;
+ while(!topicConfigurationMember.IsNull())
+ {
+ m_topicConfigurations.push_back(topicConfigurationMember);
+ topicConfigurationMember = topicConfigurationMember.NextNode("TopicConfiguration");
+ }
+
+ m_topicConfigurationsHasBeenSet = true;
+ }
+ XmlNode queueConfigurationsNode = resultNode.FirstChild("QueueConfiguration");
+ if(!queueConfigurationsNode.IsNull())
+ {
+ XmlNode queueConfigurationMember = queueConfigurationsNode;
+ while(!queueConfigurationMember.IsNull())
+ {
+ m_queueConfigurations.push_back(queueConfigurationMember);
+ queueConfigurationMember = queueConfigurationMember.NextNode("QueueConfiguration");
+ }
+
+ m_queueConfigurationsHasBeenSet = true;
+ }
+ XmlNode lambdaFunctionConfigurationsNode = resultNode.FirstChild("CloudFunctionConfiguration");
+ if(!lambdaFunctionConfigurationsNode.IsNull())
+ {
+ XmlNode cloudFunctionConfigurationMember = lambdaFunctionConfigurationsNode;
+ while(!cloudFunctionConfigurationMember.IsNull())
+ {
+ m_lambdaFunctionConfigurations.push_back(cloudFunctionConfigurationMember);
+ cloudFunctionConfigurationMember = cloudFunctionConfigurationMember.NextNode("CloudFunctionConfiguration");
+ }
+
+ m_lambdaFunctionConfigurationsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void NotificationConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_topicConfigurationsHasBeenSet)
+ {
+ for(const auto& item : m_topicConfigurations)
+ {
+ XmlNode topicConfigurationsNode = parentNode.CreateChildElement("TopicConfiguration");
+ item.AddToNode(topicConfigurationsNode);
+ }
+ }
+
+ if(m_queueConfigurationsHasBeenSet)
+ {
+ for(const auto& item : m_queueConfigurations)
+ {
+ XmlNode queueConfigurationsNode = parentNode.CreateChildElement("QueueConfiguration");
+ item.AddToNode(queueConfigurationsNode);
+ }
+ }
+
+ if(m_lambdaFunctionConfigurationsHasBeenSet)
+ {
+ for(const auto& item : m_lambdaFunctionConfigurations)
+ {
+ XmlNode lambdaFunctionConfigurationsNode = parentNode.CreateChildElement("CloudFunctionConfiguration");
+ item.AddToNode(lambdaFunctionConfigurationsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationDeprecated.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationDeprecated.cpp
new file mode 100644
index 00000000000..ee4d7bb1c54
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationDeprecated.cpp
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/NotificationConfigurationDeprecated.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+NotificationConfigurationDeprecated::NotificationConfigurationDeprecated() :
+ m_topicConfigurationHasBeenSet(false),
+ m_queueConfigurationHasBeenSet(false),
+ m_cloudFunctionConfigurationHasBeenSet(false)
+{
+}
+
+NotificationConfigurationDeprecated::NotificationConfigurationDeprecated(const XmlNode& xmlNode) :
+ m_topicConfigurationHasBeenSet(false),
+ m_queueConfigurationHasBeenSet(false),
+ m_cloudFunctionConfigurationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+NotificationConfigurationDeprecated& NotificationConfigurationDeprecated::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode topicConfigurationNode = resultNode.FirstChild("TopicConfiguration");
+ if(!topicConfigurationNode.IsNull())
+ {
+ m_topicConfiguration = topicConfigurationNode;
+ m_topicConfigurationHasBeenSet = true;
+ }
+ XmlNode queueConfigurationNode = resultNode.FirstChild("QueueConfiguration");
+ if(!queueConfigurationNode.IsNull())
+ {
+ m_queueConfiguration = queueConfigurationNode;
+ m_queueConfigurationHasBeenSet = true;
+ }
+ XmlNode cloudFunctionConfigurationNode = resultNode.FirstChild("CloudFunctionConfiguration");
+ if(!cloudFunctionConfigurationNode.IsNull())
+ {
+ m_cloudFunctionConfiguration = cloudFunctionConfigurationNode;
+ m_cloudFunctionConfigurationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void NotificationConfigurationDeprecated::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_topicConfigurationHasBeenSet)
+ {
+ XmlNode topicConfigurationNode = parentNode.CreateChildElement("TopicConfiguration");
+ m_topicConfiguration.AddToNode(topicConfigurationNode);
+ }
+
+ if(m_queueConfigurationHasBeenSet)
+ {
+ XmlNode queueConfigurationNode = parentNode.CreateChildElement("QueueConfiguration");
+ m_queueConfiguration.AddToNode(queueConfigurationNode);
+ }
+
+ if(m_cloudFunctionConfigurationHasBeenSet)
+ {
+ XmlNode cloudFunctionConfigurationNode = parentNode.CreateChildElement("CloudFunctionConfiguration");
+ m_cloudFunctionConfiguration.AddToNode(cloudFunctionConfigurationNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationFilter.cpp
new file mode 100644
index 00000000000..29fac415de7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/NotificationConfigurationFilter.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/NotificationConfigurationFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+NotificationConfigurationFilter::NotificationConfigurationFilter() :
+ m_keyHasBeenSet(false)
+{
+}
+
+NotificationConfigurationFilter::NotificationConfigurationFilter(const XmlNode& xmlNode) :
+ m_keyHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+NotificationConfigurationFilter& NotificationConfigurationFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyNode = resultNode.FirstChild("S3Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = keyNode;
+ m_keyHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void NotificationConfigurationFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("S3Key");
+ m_key.AddToNode(keyNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Object.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Object.cpp
new file mode 100644
index 00000000000..d7d963fc21a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Object.cpp
@@ -0,0 +1,140 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Object.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Object::Object() :
+ m_keyHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false),
+ m_eTagHasBeenSet(false),
+ m_size(0),
+ m_sizeHasBeenSet(false),
+ m_storageClass(ObjectStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_ownerHasBeenSet(false)
+{
+}
+
+Object::Object(const XmlNode& xmlNode) :
+ m_keyHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false),
+ m_eTagHasBeenSet(false),
+ m_size(0),
+ m_sizeHasBeenSet(false),
+ m_storageClass(ObjectStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_ownerHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Object& Object::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode lastModifiedNode = resultNode.FirstChild("LastModified");
+ if(!lastModifiedNode.IsNull())
+ {
+ m_lastModified = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(lastModifiedNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_lastModifiedHasBeenSet = true;
+ }
+ XmlNode eTagNode = resultNode.FirstChild("ETag");
+ if(!eTagNode.IsNull())
+ {
+ m_eTag = Aws::Utils::Xml::DecodeEscapedXmlText(eTagNode.GetText());
+ m_eTagHasBeenSet = true;
+ }
+ XmlNode sizeNode = resultNode.FirstChild("Size");
+ if(!sizeNode.IsNull())
+ {
+ m_size = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(sizeNode.GetText()).c_str()).c_str());
+ m_sizeHasBeenSet = true;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = ObjectStorageClassMapper::GetObjectStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ m_ownerHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Object::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_lastModifiedHasBeenSet)
+ {
+ XmlNode lastModifiedNode = parentNode.CreateChildElement("LastModified");
+ lastModifiedNode.SetText(m_lastModified.ToGmtString(DateFormat::ISO_8601));
+ }
+
+ if(m_eTagHasBeenSet)
+ {
+ XmlNode eTagNode = parentNode.CreateChildElement("ETag");
+ eTagNode.SetText(m_eTag);
+ }
+
+ if(m_sizeHasBeenSet)
+ {
+ XmlNode sizeNode = parentNode.CreateChildElement("Size");
+ ss << m_size;
+ sizeNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(ObjectStorageClassMapper::GetNameForObjectStorageClass(m_storageClass));
+ }
+
+ if(m_ownerHasBeenSet)
+ {
+ XmlNode ownerNode = parentNode.CreateChildElement("Owner");
+ m_owner.AddToNode(ownerNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectCannedACL.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectCannedACL.cpp
new file mode 100644
index 00000000000..c62174ba1dd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectCannedACL.cpp
@@ -0,0 +1,105 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectCannedACL.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectCannedACLMapper
+ {
+
+ static const int private__HASH = HashingUtils::HashString("private");
+ static const int public_read_HASH = HashingUtils::HashString("public-read");
+ static const int public_read_write_HASH = HashingUtils::HashString("public-read-write");
+ static const int authenticated_read_HASH = HashingUtils::HashString("authenticated-read");
+ static const int aws_exec_read_HASH = HashingUtils::HashString("aws-exec-read");
+ static const int bucket_owner_read_HASH = HashingUtils::HashString("bucket-owner-read");
+ static const int bucket_owner_full_control_HASH = HashingUtils::HashString("bucket-owner-full-control");
+
+
+ ObjectCannedACL GetObjectCannedACLForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == private__HASH)
+ {
+ return ObjectCannedACL::private_;
+ }
+ else if (hashCode == public_read_HASH)
+ {
+ return ObjectCannedACL::public_read;
+ }
+ else if (hashCode == public_read_write_HASH)
+ {
+ return ObjectCannedACL::public_read_write;
+ }
+ else if (hashCode == authenticated_read_HASH)
+ {
+ return ObjectCannedACL::authenticated_read;
+ }
+ else if (hashCode == aws_exec_read_HASH)
+ {
+ return ObjectCannedACL::aws_exec_read;
+ }
+ else if (hashCode == bucket_owner_read_HASH)
+ {
+ return ObjectCannedACL::bucket_owner_read;
+ }
+ else if (hashCode == bucket_owner_full_control_HASH)
+ {
+ return ObjectCannedACL::bucket_owner_full_control;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectCannedACL>(hashCode);
+ }
+
+ return ObjectCannedACL::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectCannedACL(ObjectCannedACL enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectCannedACL::private_:
+ return "private";
+ case ObjectCannedACL::public_read:
+ return "public-read";
+ case ObjectCannedACL::public_read_write:
+ return "public-read-write";
+ case ObjectCannedACL::authenticated_read:
+ return "authenticated-read";
+ case ObjectCannedACL::aws_exec_read:
+ return "aws-exec-read";
+ case ObjectCannedACL::bucket_owner_read:
+ return "bucket-owner-read";
+ case ObjectCannedACL::bucket_owner_full_control:
+ return "bucket-owner-full-control";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectCannedACLMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp
new file mode 100644
index 00000000000..fc09363d0a5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectIdentifier.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ObjectIdentifier::ObjectIdentifier() :
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false)
+{
+}
+
+ObjectIdentifier::ObjectIdentifier(const XmlNode& xmlNode) :
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ObjectIdentifier& ObjectIdentifier::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode versionIdNode = resultNode.FirstChild("VersionId");
+ if(!versionIdNode.IsNull())
+ {
+ m_versionId = Aws::Utils::Xml::DecodeEscapedXmlText(versionIdNode.GetText());
+ m_versionIdHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ObjectIdentifier::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_versionIdHasBeenSet)
+ {
+ XmlNode versionIdNode = parentNode.CreateChildElement("VersionId");
+ versionIdNode.SetText(m_versionId);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockConfiguration.cpp
new file mode 100644
index 00000000000..f85dea69265
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockConfiguration.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ObjectLockConfiguration::ObjectLockConfiguration() :
+ m_objectLockEnabled(ObjectLockEnabled::NOT_SET),
+ m_objectLockEnabledHasBeenSet(false),
+ m_ruleHasBeenSet(false)
+{
+}
+
+ObjectLockConfiguration::ObjectLockConfiguration(const XmlNode& xmlNode) :
+ m_objectLockEnabled(ObjectLockEnabled::NOT_SET),
+ m_objectLockEnabledHasBeenSet(false),
+ m_ruleHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ObjectLockConfiguration& ObjectLockConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode objectLockEnabledNode = resultNode.FirstChild("ObjectLockEnabled");
+ if(!objectLockEnabledNode.IsNull())
+ {
+ m_objectLockEnabled = ObjectLockEnabledMapper::GetObjectLockEnabledForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(objectLockEnabledNode.GetText()).c_str()).c_str());
+ m_objectLockEnabledHasBeenSet = true;
+ }
+ XmlNode ruleNode = resultNode.FirstChild("Rule");
+ if(!ruleNode.IsNull())
+ {
+ m_rule = ruleNode;
+ m_ruleHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ObjectLockConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_objectLockEnabledHasBeenSet)
+ {
+ XmlNode objectLockEnabledNode = parentNode.CreateChildElement("ObjectLockEnabled");
+ objectLockEnabledNode.SetText(ObjectLockEnabledMapper::GetNameForObjectLockEnabled(m_objectLockEnabled));
+ }
+
+ if(m_ruleHasBeenSet)
+ {
+ XmlNode ruleNode = parentNode.CreateChildElement("Rule");
+ m_rule.AddToNode(ruleNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockEnabled.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockEnabled.cpp
new file mode 100644
index 00000000000..a6053dd45c3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockEnabled.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockEnabled.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectLockEnabledMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+
+
+ ObjectLockEnabled GetObjectLockEnabledForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return ObjectLockEnabled::Enabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectLockEnabled>(hashCode);
+ }
+
+ return ObjectLockEnabled::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectLockEnabled(ObjectLockEnabled enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectLockEnabled::Enabled:
+ return "Enabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectLockEnabledMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHold.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHold.cpp
new file mode 100644
index 00000000000..53908c717b1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHold.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockLegalHold.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ObjectLockLegalHold::ObjectLockLegalHold() :
+ m_status(ObjectLockLegalHoldStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+}
+
+ObjectLockLegalHold::ObjectLockLegalHold(const XmlNode& xmlNode) :
+ m_status(ObjectLockLegalHoldStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ObjectLockLegalHold& ObjectLockLegalHold::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = ObjectLockLegalHoldStatusMapper::GetObjectLockLegalHoldStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ObjectLockLegalHold::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(ObjectLockLegalHoldStatusMapper::GetNameForObjectLockLegalHoldStatus(m_status));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHoldStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHoldStatus.cpp
new file mode 100644
index 00000000000..d876afcc955
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockLegalHoldStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockLegalHoldStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectLockLegalHoldStatusMapper
+ {
+
+ static const int ON_HASH = HashingUtils::HashString("ON");
+ static const int OFF_HASH = HashingUtils::HashString("OFF");
+
+
+ ObjectLockLegalHoldStatus GetObjectLockLegalHoldStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == ON_HASH)
+ {
+ return ObjectLockLegalHoldStatus::ON;
+ }
+ else if (hashCode == OFF_HASH)
+ {
+ return ObjectLockLegalHoldStatus::OFF;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectLockLegalHoldStatus>(hashCode);
+ }
+
+ return ObjectLockLegalHoldStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectLockLegalHoldStatus(ObjectLockLegalHoldStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectLockLegalHoldStatus::ON:
+ return "ON";
+ case ObjectLockLegalHoldStatus::OFF:
+ return "OFF";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectLockLegalHoldStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockMode.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockMode.cpp
new file mode 100644
index 00000000000..8d0e4c067a1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockMode.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockMode.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectLockModeMapper
+ {
+
+ static const int GOVERNANCE_HASH = HashingUtils::HashString("GOVERNANCE");
+ static const int COMPLIANCE_HASH = HashingUtils::HashString("COMPLIANCE");
+
+
+ ObjectLockMode GetObjectLockModeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == GOVERNANCE_HASH)
+ {
+ return ObjectLockMode::GOVERNANCE;
+ }
+ else if (hashCode == COMPLIANCE_HASH)
+ {
+ return ObjectLockMode::COMPLIANCE;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectLockMode>(hashCode);
+ }
+
+ return ObjectLockMode::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectLockMode(ObjectLockMode enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectLockMode::GOVERNANCE:
+ return "GOVERNANCE";
+ case ObjectLockMode::COMPLIANCE:
+ return "COMPLIANCE";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectLockModeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetention.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetention.cpp
new file mode 100644
index 00000000000..3ba5d5590e1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetention.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockRetention.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ObjectLockRetention::ObjectLockRetention() :
+ m_mode(ObjectLockRetentionMode::NOT_SET),
+ m_modeHasBeenSet(false),
+ m_retainUntilDateHasBeenSet(false)
+{
+}
+
+ObjectLockRetention::ObjectLockRetention(const XmlNode& xmlNode) :
+ m_mode(ObjectLockRetentionMode::NOT_SET),
+ m_modeHasBeenSet(false),
+ m_retainUntilDateHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ObjectLockRetention& ObjectLockRetention::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode modeNode = resultNode.FirstChild("Mode");
+ if(!modeNode.IsNull())
+ {
+ m_mode = ObjectLockRetentionModeMapper::GetObjectLockRetentionModeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(modeNode.GetText()).c_str()).c_str());
+ m_modeHasBeenSet = true;
+ }
+ XmlNode retainUntilDateNode = resultNode.FirstChild("RetainUntilDate");
+ if(!retainUntilDateNode.IsNull())
+ {
+ m_retainUntilDate = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(retainUntilDateNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_retainUntilDateHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ObjectLockRetention::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_modeHasBeenSet)
+ {
+ XmlNode modeNode = parentNode.CreateChildElement("Mode");
+ modeNode.SetText(ObjectLockRetentionModeMapper::GetNameForObjectLockRetentionMode(m_mode));
+ }
+
+ if(m_retainUntilDateHasBeenSet)
+ {
+ XmlNode retainUntilDateNode = parentNode.CreateChildElement("RetainUntilDate");
+ retainUntilDateNode.SetText(m_retainUntilDate.ToGmtString(DateFormat::ISO_8601));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetentionMode.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetentionMode.cpp
new file mode 100644
index 00000000000..12e6c9a87db
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRetentionMode.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockRetentionMode.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectLockRetentionModeMapper
+ {
+
+ static const int GOVERNANCE_HASH = HashingUtils::HashString("GOVERNANCE");
+ static const int COMPLIANCE_HASH = HashingUtils::HashString("COMPLIANCE");
+
+
+ ObjectLockRetentionMode GetObjectLockRetentionModeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == GOVERNANCE_HASH)
+ {
+ return ObjectLockRetentionMode::GOVERNANCE;
+ }
+ else if (hashCode == COMPLIANCE_HASH)
+ {
+ return ObjectLockRetentionMode::COMPLIANCE;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectLockRetentionMode>(hashCode);
+ }
+
+ return ObjectLockRetentionMode::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectLockRetentionMode(ObjectLockRetentionMode enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectLockRetentionMode::GOVERNANCE:
+ return "GOVERNANCE";
+ case ObjectLockRetentionMode::COMPLIANCE:
+ return "COMPLIANCE";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectLockRetentionModeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRule.cpp
new file mode 100644
index 00000000000..9e21c8af6d3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectLockRule.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectLockRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ObjectLockRule::ObjectLockRule() :
+ m_defaultRetentionHasBeenSet(false)
+{
+}
+
+ObjectLockRule::ObjectLockRule(const XmlNode& xmlNode) :
+ m_defaultRetentionHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ObjectLockRule& ObjectLockRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode defaultRetentionNode = resultNode.FirstChild("DefaultRetention");
+ if(!defaultRetentionNode.IsNull())
+ {
+ m_defaultRetention = defaultRetentionNode;
+ m_defaultRetentionHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ObjectLockRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_defaultRetentionHasBeenSet)
+ {
+ XmlNode defaultRetentionNode = parentNode.CreateChildElement("DefaultRetention");
+ m_defaultRetention.AddToNode(defaultRetentionNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectOwnership.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectOwnership.cpp
new file mode 100644
index 00000000000..4e2a106c8ec
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectOwnership.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectOwnership.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectOwnershipMapper
+ {
+
+ static const int BucketOwnerPreferred_HASH = HashingUtils::HashString("BucketOwnerPreferred");
+ static const int ObjectWriter_HASH = HashingUtils::HashString("ObjectWriter");
+
+
+ ObjectOwnership GetObjectOwnershipForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == BucketOwnerPreferred_HASH)
+ {
+ return ObjectOwnership::BucketOwnerPreferred;
+ }
+ else if (hashCode == ObjectWriter_HASH)
+ {
+ return ObjectOwnership::ObjectWriter;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectOwnership>(hashCode);
+ }
+
+ return ObjectOwnership::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectOwnership(ObjectOwnership enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectOwnership::BucketOwnerPreferred:
+ return "BucketOwnerPreferred";
+ case ObjectOwnership::ObjectWriter:
+ return "ObjectWriter";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectOwnershipMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectStorageClass.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectStorageClass.cpp
new file mode 100644
index 00000000000..572041c7989
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectStorageClass.cpp
@@ -0,0 +1,112 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectStorageClass.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectStorageClassMapper
+ {
+
+ static const int STANDARD_HASH = HashingUtils::HashString("STANDARD");
+ static const int REDUCED_REDUNDANCY_HASH = HashingUtils::HashString("REDUCED_REDUNDANCY");
+ static const int GLACIER_HASH = HashingUtils::HashString("GLACIER");
+ static const int STANDARD_IA_HASH = HashingUtils::HashString("STANDARD_IA");
+ static const int ONEZONE_IA_HASH = HashingUtils::HashString("ONEZONE_IA");
+ static const int INTELLIGENT_TIERING_HASH = HashingUtils::HashString("INTELLIGENT_TIERING");
+ static const int DEEP_ARCHIVE_HASH = HashingUtils::HashString("DEEP_ARCHIVE");
+ static const int OUTPOSTS_HASH = HashingUtils::HashString("OUTPOSTS");
+
+
+ ObjectStorageClass GetObjectStorageClassForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == STANDARD_HASH)
+ {
+ return ObjectStorageClass::STANDARD;
+ }
+ else if (hashCode == REDUCED_REDUNDANCY_HASH)
+ {
+ return ObjectStorageClass::REDUCED_REDUNDANCY;
+ }
+ else if (hashCode == GLACIER_HASH)
+ {
+ return ObjectStorageClass::GLACIER;
+ }
+ else if (hashCode == STANDARD_IA_HASH)
+ {
+ return ObjectStorageClass::STANDARD_IA;
+ }
+ else if (hashCode == ONEZONE_IA_HASH)
+ {
+ return ObjectStorageClass::ONEZONE_IA;
+ }
+ else if (hashCode == INTELLIGENT_TIERING_HASH)
+ {
+ return ObjectStorageClass::INTELLIGENT_TIERING;
+ }
+ else if (hashCode == DEEP_ARCHIVE_HASH)
+ {
+ return ObjectStorageClass::DEEP_ARCHIVE;
+ }
+ else if (hashCode == OUTPOSTS_HASH)
+ {
+ return ObjectStorageClass::OUTPOSTS;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectStorageClass>(hashCode);
+ }
+
+ return ObjectStorageClass::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectStorageClass(ObjectStorageClass enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectStorageClass::STANDARD:
+ return "STANDARD";
+ case ObjectStorageClass::REDUCED_REDUNDANCY:
+ return "REDUCED_REDUNDANCY";
+ case ObjectStorageClass::GLACIER:
+ return "GLACIER";
+ case ObjectStorageClass::STANDARD_IA:
+ return "STANDARD_IA";
+ case ObjectStorageClass::ONEZONE_IA:
+ return "ONEZONE_IA";
+ case ObjectStorageClass::INTELLIGENT_TIERING:
+ return "INTELLIGENT_TIERING";
+ case ObjectStorageClass::DEEP_ARCHIVE:
+ return "DEEP_ARCHIVE";
+ case ObjectStorageClass::OUTPOSTS:
+ return "OUTPOSTS";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectStorageClassMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersion.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersion.cpp
new file mode 100644
index 00000000000..c7b720f2524
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersion.cpp
@@ -0,0 +1,172 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectVersion.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ObjectVersion::ObjectVersion() :
+ m_eTagHasBeenSet(false),
+ m_size(0),
+ m_sizeHasBeenSet(false),
+ m_storageClass(ObjectVersionStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_isLatest(false),
+ m_isLatestHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false),
+ m_ownerHasBeenSet(false)
+{
+}
+
+ObjectVersion::ObjectVersion(const XmlNode& xmlNode) :
+ m_eTagHasBeenSet(false),
+ m_size(0),
+ m_sizeHasBeenSet(false),
+ m_storageClass(ObjectVersionStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_isLatest(false),
+ m_isLatestHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false),
+ m_ownerHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ObjectVersion& ObjectVersion::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode eTagNode = resultNode.FirstChild("ETag");
+ if(!eTagNode.IsNull())
+ {
+ m_eTag = Aws::Utils::Xml::DecodeEscapedXmlText(eTagNode.GetText());
+ m_eTagHasBeenSet = true;
+ }
+ XmlNode sizeNode = resultNode.FirstChild("Size");
+ if(!sizeNode.IsNull())
+ {
+ m_size = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(sizeNode.GetText()).c_str()).c_str());
+ m_sizeHasBeenSet = true;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = ObjectVersionStorageClassMapper::GetObjectVersionStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode versionIdNode = resultNode.FirstChild("VersionId");
+ if(!versionIdNode.IsNull())
+ {
+ m_versionId = Aws::Utils::Xml::DecodeEscapedXmlText(versionIdNode.GetText());
+ m_versionIdHasBeenSet = true;
+ }
+ XmlNode isLatestNode = resultNode.FirstChild("IsLatest");
+ if(!isLatestNode.IsNull())
+ {
+ m_isLatest = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isLatestNode.GetText()).c_str()).c_str());
+ m_isLatestHasBeenSet = true;
+ }
+ XmlNode lastModifiedNode = resultNode.FirstChild("LastModified");
+ if(!lastModifiedNode.IsNull())
+ {
+ m_lastModified = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(lastModifiedNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_lastModifiedHasBeenSet = true;
+ }
+ XmlNode ownerNode = resultNode.FirstChild("Owner");
+ if(!ownerNode.IsNull())
+ {
+ m_owner = ownerNode;
+ m_ownerHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ObjectVersion::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_eTagHasBeenSet)
+ {
+ XmlNode eTagNode = parentNode.CreateChildElement("ETag");
+ eTagNode.SetText(m_eTag);
+ }
+
+ if(m_sizeHasBeenSet)
+ {
+ XmlNode sizeNode = parentNode.CreateChildElement("Size");
+ ss << m_size;
+ sizeNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(ObjectVersionStorageClassMapper::GetNameForObjectVersionStorageClass(m_storageClass));
+ }
+
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_versionIdHasBeenSet)
+ {
+ XmlNode versionIdNode = parentNode.CreateChildElement("VersionId");
+ versionIdNode.SetText(m_versionId);
+ }
+
+ if(m_isLatestHasBeenSet)
+ {
+ XmlNode isLatestNode = parentNode.CreateChildElement("IsLatest");
+ ss << std::boolalpha << m_isLatest;
+ isLatestNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_lastModifiedHasBeenSet)
+ {
+ XmlNode lastModifiedNode = parentNode.CreateChildElement("LastModified");
+ lastModifiedNode.SetText(m_lastModified.ToGmtString(DateFormat::ISO_8601));
+ }
+
+ if(m_ownerHasBeenSet)
+ {
+ XmlNode ownerNode = parentNode.CreateChildElement("Owner");
+ m_owner.AddToNode(ownerNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersionStorageClass.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersionStorageClass.cpp
new file mode 100644
index 00000000000..42cd127813a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ObjectVersionStorageClass.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ObjectVersionStorageClass.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ObjectVersionStorageClassMapper
+ {
+
+ static const int STANDARD_HASH = HashingUtils::HashString("STANDARD");
+
+
+ ObjectVersionStorageClass GetObjectVersionStorageClassForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == STANDARD_HASH)
+ {
+ return ObjectVersionStorageClass::STANDARD;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ObjectVersionStorageClass>(hashCode);
+ }
+
+ return ObjectVersionStorageClass::NOT_SET;
+ }
+
+ Aws::String GetNameForObjectVersionStorageClass(ObjectVersionStorageClass enumValue)
+ {
+ switch(enumValue)
+ {
+ case ObjectVersionStorageClass::STANDARD:
+ return "STANDARD";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ObjectVersionStorageClassMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputLocation.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputLocation.cpp
new file mode 100644
index 00000000000..95aeb63c1cf
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputLocation.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/OutputLocation.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+OutputLocation::OutputLocation() :
+ m_s3HasBeenSet(false)
+{
+}
+
+OutputLocation::OutputLocation(const XmlNode& xmlNode) :
+ m_s3HasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+OutputLocation& OutputLocation::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode s3Node = resultNode.FirstChild("S3");
+ if(!s3Node.IsNull())
+ {
+ m_s3 = s3Node;
+ m_s3HasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void OutputLocation::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_s3HasBeenSet)
+ {
+ XmlNode s3Node = parentNode.CreateChildElement("S3");
+ m_s3.AddToNode(s3Node);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputSerialization.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputSerialization.cpp
new file mode 100644
index 00000000000..22183ed3476
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OutputSerialization.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/OutputSerialization.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+OutputSerialization::OutputSerialization() :
+ m_cSVHasBeenSet(false),
+ m_jSONHasBeenSet(false)
+{
+}
+
+OutputSerialization::OutputSerialization(const XmlNode& xmlNode) :
+ m_cSVHasBeenSet(false),
+ m_jSONHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+OutputSerialization& OutputSerialization::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode cSVNode = resultNode.FirstChild("CSV");
+ if(!cSVNode.IsNull())
+ {
+ m_cSV = cSVNode;
+ m_cSVHasBeenSet = true;
+ }
+ XmlNode jSONNode = resultNode.FirstChild("JSON");
+ if(!jSONNode.IsNull())
+ {
+ m_jSON = jSONNode;
+ m_jSONHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void OutputSerialization::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_cSVHasBeenSet)
+ {
+ XmlNode cSVNode = parentNode.CreateChildElement("CSV");
+ m_cSV.AddToNode(cSVNode);
+ }
+
+ if(m_jSONHasBeenSet)
+ {
+ XmlNode jSONNode = parentNode.CreateChildElement("JSON");
+ m_jSON.AddToNode(jSONNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Owner.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Owner.cpp
new file mode 100644
index 00000000000..15b4ac86423
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Owner.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Owner.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Owner::Owner() :
+ m_displayNameHasBeenSet(false),
+ m_iDHasBeenSet(false)
+{
+}
+
+Owner::Owner(const XmlNode& xmlNode) :
+ m_displayNameHasBeenSet(false),
+ m_iDHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Owner& Owner::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode displayNameNode = resultNode.FirstChild("DisplayName");
+ if(!displayNameNode.IsNull())
+ {
+ m_displayName = Aws::Utils::Xml::DecodeEscapedXmlText(displayNameNode.GetText());
+ m_displayNameHasBeenSet = true;
+ }
+ XmlNode iDNode = resultNode.FirstChild("ID");
+ if(!iDNode.IsNull())
+ {
+ m_iD = Aws::Utils::Xml::DecodeEscapedXmlText(iDNode.GetText());
+ m_iDHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Owner::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_displayNameHasBeenSet)
+ {
+ XmlNode displayNameNode = parentNode.CreateChildElement("DisplayName");
+ displayNameNode.SetText(m_displayName);
+ }
+
+ if(m_iDHasBeenSet)
+ {
+ XmlNode iDNode = parentNode.CreateChildElement("ID");
+ iDNode.SetText(m_iD);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnerOverride.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnerOverride.cpp
new file mode 100644
index 00000000000..5cf248f6628
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnerOverride.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/OwnerOverride.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace OwnerOverrideMapper
+ {
+
+ static const int Destination_HASH = HashingUtils::HashString("Destination");
+
+
+ OwnerOverride GetOwnerOverrideForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Destination_HASH)
+ {
+ return OwnerOverride::Destination;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<OwnerOverride>(hashCode);
+ }
+
+ return OwnerOverride::NOT_SET;
+ }
+
+ Aws::String GetNameForOwnerOverride(OwnerOverride enumValue)
+ {
+ switch(enumValue)
+ {
+ case OwnerOverride::Destination:
+ return "Destination";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace OwnerOverrideMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControls.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControls.cpp
new file mode 100644
index 00000000000..5640ae19f7d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControls.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/OwnershipControls.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+OwnershipControls::OwnershipControls() :
+ m_rulesHasBeenSet(false)
+{
+}
+
+OwnershipControls::OwnershipControls(const XmlNode& xmlNode) :
+ m_rulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+OwnershipControls& OwnershipControls::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode rulesNode = resultNode.FirstChild("Rule");
+ if(!rulesNode.IsNull())
+ {
+ XmlNode ruleMember = rulesNode;
+ while(!ruleMember.IsNull())
+ {
+ m_rules.push_back(ruleMember);
+ ruleMember = ruleMember.NextNode("Rule");
+ }
+
+ m_rulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void OwnershipControls::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_rulesHasBeenSet)
+ {
+ for(const auto& item : m_rules)
+ {
+ XmlNode rulesNode = parentNode.CreateChildElement("Rule");
+ item.AddToNode(rulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControlsRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControlsRule.cpp
new file mode 100644
index 00000000000..935fae4d009
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/OwnershipControlsRule.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/OwnershipControlsRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+OwnershipControlsRule::OwnershipControlsRule() :
+ m_objectOwnership(ObjectOwnership::NOT_SET),
+ m_objectOwnershipHasBeenSet(false)
+{
+}
+
+OwnershipControlsRule::OwnershipControlsRule(const XmlNode& xmlNode) :
+ m_objectOwnership(ObjectOwnership::NOT_SET),
+ m_objectOwnershipHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+OwnershipControlsRule& OwnershipControlsRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode objectOwnershipNode = resultNode.FirstChild("ObjectOwnership");
+ if(!objectOwnershipNode.IsNull())
+ {
+ m_objectOwnership = ObjectOwnershipMapper::GetObjectOwnershipForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(objectOwnershipNode.GetText()).c_str()).c_str());
+ m_objectOwnershipHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void OwnershipControlsRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_objectOwnershipHasBeenSet)
+ {
+ XmlNode objectOwnershipNode = parentNode.CreateChildElement("ObjectOwnership");
+ objectOwnershipNode.SetText(ObjectOwnershipMapper::GetNameForObjectOwnership(m_objectOwnership));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ParquetInput.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ParquetInput.cpp
new file mode 100644
index 00000000000..e10233bada7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ParquetInput.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ParquetInput.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ParquetInput::ParquetInput()
+{
+}
+
+ParquetInput::ParquetInput(const XmlNode& xmlNode)
+{
+ *this = xmlNode;
+}
+
+ParquetInput& ParquetInput::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ return *this;
+}
+
+void ParquetInput::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ AWS_UNREFERENCED_PARAM(parentNode);
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Part.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Part.cpp
new file mode 100644
index 00000000000..a243f72d109
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Part.cpp
@@ -0,0 +1,114 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Part.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Part::Part() :
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false),
+ m_eTagHasBeenSet(false),
+ m_size(0),
+ m_sizeHasBeenSet(false)
+{
+}
+
+Part::Part(const XmlNode& xmlNode) :
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false),
+ m_lastModifiedHasBeenSet(false),
+ m_eTagHasBeenSet(false),
+ m_size(0),
+ m_sizeHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Part& Part::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode partNumberNode = resultNode.FirstChild("PartNumber");
+ if(!partNumberNode.IsNull())
+ {
+ m_partNumber = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(partNumberNode.GetText()).c_str()).c_str());
+ m_partNumberHasBeenSet = true;
+ }
+ XmlNode lastModifiedNode = resultNode.FirstChild("LastModified");
+ if(!lastModifiedNode.IsNull())
+ {
+ m_lastModified = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(lastModifiedNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_lastModifiedHasBeenSet = true;
+ }
+ XmlNode eTagNode = resultNode.FirstChild("ETag");
+ if(!eTagNode.IsNull())
+ {
+ m_eTag = Aws::Utils::Xml::DecodeEscapedXmlText(eTagNode.GetText());
+ m_eTagHasBeenSet = true;
+ }
+ XmlNode sizeNode = resultNode.FirstChild("Size");
+ if(!sizeNode.IsNull())
+ {
+ m_size = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(sizeNode.GetText()).c_str()).c_str());
+ m_sizeHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Part::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_partNumberHasBeenSet)
+ {
+ XmlNode partNumberNode = parentNode.CreateChildElement("PartNumber");
+ ss << m_partNumber;
+ partNumberNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_lastModifiedHasBeenSet)
+ {
+ XmlNode lastModifiedNode = parentNode.CreateChildElement("LastModified");
+ lastModifiedNode.SetText(m_lastModified.ToGmtString(DateFormat::ISO_8601));
+ }
+
+ if(m_eTagHasBeenSet)
+ {
+ XmlNode eTagNode = parentNode.CreateChildElement("ETag");
+ eTagNode.SetText(m_eTag);
+ }
+
+ if(m_sizeHasBeenSet)
+ {
+ XmlNode sizeNode = parentNode.CreateChildElement("Size");
+ ss << m_size;
+ sizeNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Payer.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Payer.cpp
new file mode 100644
index 00000000000..0c5c4698392
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Payer.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Payer.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace PayerMapper
+ {
+
+ static const int Requester_HASH = HashingUtils::HashString("Requester");
+ static const int BucketOwner_HASH = HashingUtils::HashString("BucketOwner");
+
+
+ Payer GetPayerForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Requester_HASH)
+ {
+ return Payer::Requester;
+ }
+ else if (hashCode == BucketOwner_HASH)
+ {
+ return Payer::BucketOwner;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<Payer>(hashCode);
+ }
+
+ return Payer::NOT_SET;
+ }
+
+ Aws::String GetNameForPayer(Payer enumValue)
+ {
+ switch(enumValue)
+ {
+ case Payer::Requester:
+ return "Requester";
+ case Payer::BucketOwner:
+ return "BucketOwner";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace PayerMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Permission.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Permission.cpp
new file mode 100644
index 00000000000..3215a6d8aac
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Permission.cpp
@@ -0,0 +1,91 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Permission.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace PermissionMapper
+ {
+
+ static const int FULL_CONTROL_HASH = HashingUtils::HashString("FULL_CONTROL");
+ static const int WRITE_HASH = HashingUtils::HashString("WRITE");
+ static const int WRITE_ACP_HASH = HashingUtils::HashString("WRITE_ACP");
+ static const int READ_HASH = HashingUtils::HashString("READ");
+ static const int READ_ACP_HASH = HashingUtils::HashString("READ_ACP");
+
+
+ Permission GetPermissionForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == FULL_CONTROL_HASH)
+ {
+ return Permission::FULL_CONTROL;
+ }
+ else if (hashCode == WRITE_HASH)
+ {
+ return Permission::WRITE;
+ }
+ else if (hashCode == WRITE_ACP_HASH)
+ {
+ return Permission::WRITE_ACP;
+ }
+ else if (hashCode == READ_HASH)
+ {
+ return Permission::READ;
+ }
+ else if (hashCode == READ_ACP_HASH)
+ {
+ return Permission::READ_ACP;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<Permission>(hashCode);
+ }
+
+ return Permission::NOT_SET;
+ }
+
+ Aws::String GetNameForPermission(Permission enumValue)
+ {
+ switch(enumValue)
+ {
+ case Permission::FULL_CONTROL:
+ return "FULL_CONTROL";
+ case Permission::WRITE:
+ return "WRITE";
+ case Permission::WRITE_ACP:
+ return "WRITE_ACP";
+ case Permission::READ:
+ return "READ";
+ case Permission::READ_ACP:
+ return "READ_ACP";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace PermissionMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PolicyStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PolicyStatus.cpp
new file mode 100644
index 00000000000..01290f2ccc7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PolicyStatus.cpp
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PolicyStatus.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+PolicyStatus::PolicyStatus() :
+ m_isPublic(false),
+ m_isPublicHasBeenSet(false)
+{
+}
+
+PolicyStatus::PolicyStatus(const XmlNode& xmlNode) :
+ m_isPublic(false),
+ m_isPublicHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+PolicyStatus& PolicyStatus::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode isPublicNode = resultNode.FirstChild("IsPublic");
+ if(!isPublicNode.IsNull())
+ {
+ m_isPublic = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(isPublicNode.GetText()).c_str()).c_str());
+ m_isPublicHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void PolicyStatus::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_isPublicHasBeenSet)
+ {
+ XmlNode isPublicNode = parentNode.CreateChildElement("IsPublic");
+ ss << std::boolalpha << m_isPublic;
+ isPublicNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Progress.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Progress.cpp
new file mode 100644
index 00000000000..804194fc30e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Progress.cpp
@@ -0,0 +1,104 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Progress.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Progress::Progress() :
+ m_bytesScanned(0),
+ m_bytesScannedHasBeenSet(false),
+ m_bytesProcessed(0),
+ m_bytesProcessedHasBeenSet(false),
+ m_bytesReturned(0),
+ m_bytesReturnedHasBeenSet(false)
+{
+}
+
+Progress::Progress(const XmlNode& xmlNode) :
+ m_bytesScanned(0),
+ m_bytesScannedHasBeenSet(false),
+ m_bytesProcessed(0),
+ m_bytesProcessedHasBeenSet(false),
+ m_bytesReturned(0),
+ m_bytesReturnedHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Progress& Progress::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bytesScannedNode = resultNode.FirstChild("BytesScanned");
+ if(!bytesScannedNode.IsNull())
+ {
+ m_bytesScanned = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(bytesScannedNode.GetText()).c_str()).c_str());
+ m_bytesScannedHasBeenSet = true;
+ }
+ XmlNode bytesProcessedNode = resultNode.FirstChild("BytesProcessed");
+ if(!bytesProcessedNode.IsNull())
+ {
+ m_bytesProcessed = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(bytesProcessedNode.GetText()).c_str()).c_str());
+ m_bytesProcessedHasBeenSet = true;
+ }
+ XmlNode bytesReturnedNode = resultNode.FirstChild("BytesReturned");
+ if(!bytesReturnedNode.IsNull())
+ {
+ m_bytesReturned = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(bytesReturnedNode.GetText()).c_str()).c_str());
+ m_bytesReturnedHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Progress::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_bytesScannedHasBeenSet)
+ {
+ XmlNode bytesScannedNode = parentNode.CreateChildElement("BytesScanned");
+ ss << m_bytesScanned;
+ bytesScannedNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_bytesProcessedHasBeenSet)
+ {
+ XmlNode bytesProcessedNode = parentNode.CreateChildElement("BytesProcessed");
+ ss << m_bytesProcessed;
+ bytesProcessedNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_bytesReturnedHasBeenSet)
+ {
+ XmlNode bytesReturnedNode = parentNode.CreateChildElement("BytesReturned");
+ ss << m_bytesReturned;
+ bytesReturnedNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ProgressEvent.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ProgressEvent.cpp
new file mode 100644
index 00000000000..86dde94c86c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ProgressEvent.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ProgressEvent.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ProgressEvent::ProgressEvent() :
+ m_detailsHasBeenSet(false)
+{
+}
+
+ProgressEvent::ProgressEvent(const XmlNode& xmlNode) :
+ m_detailsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ProgressEvent& ProgressEvent::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode detailsNode = resultNode;
+ if(!detailsNode.IsNull())
+ {
+ m_details = detailsNode;
+ m_detailsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ProgressEvent::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_detailsHasBeenSet)
+ {
+ XmlNode detailsNode = parentNode.CreateChildElement("Details");
+ m_details.AddToNode(detailsNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Protocol.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Protocol.cpp
new file mode 100644
index 00000000000..0c9c70d8c6b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Protocol.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Protocol.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ProtocolMapper
+ {
+
+ static const int http_HASH = HashingUtils::HashString("http");
+ static const int https_HASH = HashingUtils::HashString("https");
+
+
+ Protocol GetProtocolForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == http_HASH)
+ {
+ return Protocol::http;
+ }
+ else if (hashCode == https_HASH)
+ {
+ return Protocol::https;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<Protocol>(hashCode);
+ }
+
+ return Protocol::NOT_SET;
+ }
+
+ Aws::String GetNameForProtocol(Protocol enumValue)
+ {
+ switch(enumValue)
+ {
+ case Protocol::http:
+ return "http";
+ case Protocol::https:
+ return "https";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ProtocolMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PublicAccessBlockConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PublicAccessBlockConfiguration.cpp
new file mode 100644
index 00000000000..258306dc4fd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PublicAccessBlockConfiguration.cpp
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PublicAccessBlockConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+PublicAccessBlockConfiguration::PublicAccessBlockConfiguration() :
+ m_blockPublicAcls(false),
+ m_blockPublicAclsHasBeenSet(false),
+ m_ignorePublicAcls(false),
+ m_ignorePublicAclsHasBeenSet(false),
+ m_blockPublicPolicy(false),
+ m_blockPublicPolicyHasBeenSet(false),
+ m_restrictPublicBuckets(false),
+ m_restrictPublicBucketsHasBeenSet(false)
+{
+}
+
+PublicAccessBlockConfiguration::PublicAccessBlockConfiguration(const XmlNode& xmlNode) :
+ m_blockPublicAcls(false),
+ m_blockPublicAclsHasBeenSet(false),
+ m_ignorePublicAcls(false),
+ m_ignorePublicAclsHasBeenSet(false),
+ m_blockPublicPolicy(false),
+ m_blockPublicPolicyHasBeenSet(false),
+ m_restrictPublicBuckets(false),
+ m_restrictPublicBucketsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+PublicAccessBlockConfiguration& PublicAccessBlockConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode blockPublicAclsNode = resultNode.FirstChild("BlockPublicAcls");
+ if(!blockPublicAclsNode.IsNull())
+ {
+ m_blockPublicAcls = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(blockPublicAclsNode.GetText()).c_str()).c_str());
+ m_blockPublicAclsHasBeenSet = true;
+ }
+ XmlNode ignorePublicAclsNode = resultNode.FirstChild("IgnorePublicAcls");
+ if(!ignorePublicAclsNode.IsNull())
+ {
+ m_ignorePublicAcls = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(ignorePublicAclsNode.GetText()).c_str()).c_str());
+ m_ignorePublicAclsHasBeenSet = true;
+ }
+ XmlNode blockPublicPolicyNode = resultNode.FirstChild("BlockPublicPolicy");
+ if(!blockPublicPolicyNode.IsNull())
+ {
+ m_blockPublicPolicy = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(blockPublicPolicyNode.GetText()).c_str()).c_str());
+ m_blockPublicPolicyHasBeenSet = true;
+ }
+ XmlNode restrictPublicBucketsNode = resultNode.FirstChild("RestrictPublicBuckets");
+ if(!restrictPublicBucketsNode.IsNull())
+ {
+ m_restrictPublicBuckets = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(restrictPublicBucketsNode.GetText()).c_str()).c_str());
+ m_restrictPublicBucketsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void PublicAccessBlockConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_blockPublicAclsHasBeenSet)
+ {
+ XmlNode blockPublicAclsNode = parentNode.CreateChildElement("BlockPublicAcls");
+ ss << std::boolalpha << m_blockPublicAcls;
+ blockPublicAclsNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_ignorePublicAclsHasBeenSet)
+ {
+ XmlNode ignorePublicAclsNode = parentNode.CreateChildElement("IgnorePublicAcls");
+ ss << std::boolalpha << m_ignorePublicAcls;
+ ignorePublicAclsNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_blockPublicPolicyHasBeenSet)
+ {
+ XmlNode blockPublicPolicyNode = parentNode.CreateChildElement("BlockPublicPolicy");
+ ss << std::boolalpha << m_blockPublicPolicy;
+ blockPublicPolicyNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_restrictPublicBucketsHasBeenSet)
+ {
+ XmlNode restrictPublicBucketsNode = parentNode.CreateChildElement("RestrictPublicBuckets");
+ ss << std::boolalpha << m_restrictPublicBuckets;
+ restrictPublicBucketsNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAccelerateConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAccelerateConfigurationRequest.cpp
new file mode 100644
index 00000000000..15da0c32a1c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAccelerateConfigurationRequest.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketAccelerateConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketAccelerateConfigurationRequest::PutBucketAccelerateConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_accelerateConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketAccelerateConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("AccelerateConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_accelerateConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketAccelerateConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketAccelerateConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAclRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAclRequest.cpp
new file mode 100644
index 00000000000..5a3efcac190
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAclRequest.cpp
@@ -0,0 +1,132 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketAclRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketAclRequest::PutBucketAclRequest() :
+ m_aCL(BucketCannedACL::NOT_SET),
+ m_aCLHasBeenSet(false),
+ m_accessControlPolicyHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_grantFullControlHasBeenSet(false),
+ m_grantReadHasBeenSet(false),
+ m_grantReadACPHasBeenSet(false),
+ m_grantWriteHasBeenSet(false),
+ m_grantWriteACPHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketAclRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("AccessControlPolicy");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_accessControlPolicy.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketAclRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketAclRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_aCLHasBeenSet)
+ {
+ headers.emplace("x-amz-acl", BucketCannedACLMapper::GetNameForBucketCannedACL(m_aCL));
+ }
+
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantFullControlHasBeenSet)
+ {
+ ss << m_grantFullControl;
+ headers.emplace("x-amz-grant-full-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadHasBeenSet)
+ {
+ ss << m_grantRead;
+ headers.emplace("x-amz-grant-read", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadACPHasBeenSet)
+ {
+ ss << m_grantReadACP;
+ headers.emplace("x-amz-grant-read-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteHasBeenSet)
+ {
+ ss << m_grantWrite;
+ headers.emplace("x-amz-grant-write", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteACPHasBeenSet)
+ {
+ ss << m_grantWriteACP;
+ headers.emplace("x-amz-grant-write-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAnalyticsConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAnalyticsConfigurationRequest.cpp
new file mode 100644
index 00000000000..73f9111f63b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketAnalyticsConfigurationRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketAnalyticsConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketAnalyticsConfigurationRequest::PutBucketAnalyticsConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_analyticsConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketAnalyticsConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("AnalyticsConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_analyticsConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketAnalyticsConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketAnalyticsConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketCorsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketCorsRequest.cpp
new file mode 100644
index 00000000000..6f90824e2c0
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketCorsRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketCorsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketCorsRequest::PutBucketCorsRequest() :
+ m_bucketHasBeenSet(false),
+ m_cORSConfigurationHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketCorsRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("CORSConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_cORSConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketCorsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketCorsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketEncryptionRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketEncryptionRequest.cpp
new file mode 100644
index 00000000000..26b60f385ef
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketEncryptionRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketEncryptionRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketEncryptionRequest::PutBucketEncryptionRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_serverSideEncryptionConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketEncryptionRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("ServerSideEncryptionConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_serverSideEncryptionConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketEncryptionRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketEncryptionRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketIntelligentTieringConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketIntelligentTieringConfigurationRequest.cpp
new file mode 100644
index 00000000000..24bc947b713
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketIntelligentTieringConfigurationRequest.cpp
@@ -0,0 +1,71 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketIntelligentTieringConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketIntelligentTieringConfigurationRequest::PutBucketIntelligentTieringConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_intelligentTieringConfigurationHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketIntelligentTieringConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("IntelligentTieringConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_intelligentTieringConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketIntelligentTieringConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketInventoryConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketInventoryConfigurationRequest.cpp
new file mode 100644
index 00000000000..31f0365528d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketInventoryConfigurationRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketInventoryConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketInventoryConfigurationRequest::PutBucketInventoryConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_inventoryConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketInventoryConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("InventoryConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_inventoryConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketInventoryConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketInventoryConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLifecycleConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLifecycleConfigurationRequest.cpp
new file mode 100644
index 00000000000..2d8b5471f2c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLifecycleConfigurationRequest.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketLifecycleConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketLifecycleConfigurationRequest::PutBucketLifecycleConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_lifecycleConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketLifecycleConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("LifecycleConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_lifecycleConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketLifecycleConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketLifecycleConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLoggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLoggingRequest.cpp
new file mode 100644
index 00000000000..1057a8f122e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketLoggingRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketLoggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketLoggingRequest::PutBucketLoggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_bucketLoggingStatusHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketLoggingRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("BucketLoggingStatus");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_bucketLoggingStatus.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketLoggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketLoggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketMetricsConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketMetricsConfigurationRequest.cpp
new file mode 100644
index 00000000000..48e5714b3a8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketMetricsConfigurationRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketMetricsConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketMetricsConfigurationRequest::PutBucketMetricsConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_idHasBeenSet(false),
+ m_metricsConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketMetricsConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("MetricsConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_metricsConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketMetricsConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ ss << m_id;
+ uri.AddQueryStringParameter("id", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketMetricsConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketNotificationConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketNotificationConfigurationRequest.cpp
new file mode 100644
index 00000000000..52f921af4f8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketNotificationConfigurationRequest.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketNotificationConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketNotificationConfigurationRequest::PutBucketNotificationConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_notificationConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketNotificationConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("NotificationConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_notificationConfiguration.AddToNode(parentNode);
+
+ return payloadDoc.ConvertToString();
+}
+
+void PutBucketNotificationConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketNotificationConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketOwnershipControlsRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketOwnershipControlsRequest.cpp
new file mode 100644
index 00000000000..5a6119e2334
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketOwnershipControlsRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketOwnershipControlsRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketOwnershipControlsRequest::PutBucketOwnershipControlsRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_ownershipControlsHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketOwnershipControlsRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("OwnershipControls");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_ownershipControls.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketOwnershipControlsRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketOwnershipControlsRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketPolicyRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketPolicyRequest.cpp
new file mode 100644
index 00000000000..ce52fa7cd8b
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketPolicyRequest.cpp
@@ -0,0 +1,79 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketPolicyRequest.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Stream;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+using namespace Aws;
+
+PutBucketPolicyRequest::PutBucketPolicyRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_confirmRemoveSelfBucketAccess(false),
+ m_confirmRemoveSelfBucketAccessHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+
+void PutBucketPolicyRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketPolicyRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_confirmRemoveSelfBucketAccessHasBeenSet)
+ {
+ ss << m_confirmRemoveSelfBucketAccess;
+ headers.emplace("x-amz-confirm-remove-self-bucket-access", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketReplicationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketReplicationRequest.cpp
new file mode 100644
index 00000000000..44244a8560c
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketReplicationRequest.cpp
@@ -0,0 +1,93 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketReplicationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketReplicationRequest::PutBucketReplicationRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_replicationConfigurationHasBeenSet(false),
+ m_tokenHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketReplicationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("ReplicationConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_replicationConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketReplicationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketReplicationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_tokenHasBeenSet)
+ {
+ ss << m_token;
+ headers.emplace("x-amz-bucket-object-lock-token", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketRequestPaymentRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketRequestPaymentRequest.cpp
new file mode 100644
index 00000000000..f6be9cc8558
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketRequestPaymentRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketRequestPaymentRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketRequestPaymentRequest::PutBucketRequestPaymentRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_requestPaymentConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketRequestPaymentRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("RequestPaymentConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_requestPaymentConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketRequestPaymentRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketRequestPaymentRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketTaggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketTaggingRequest.cpp
new file mode 100644
index 00000000000..748ede6e753
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketTaggingRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketTaggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketTaggingRequest::PutBucketTaggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_taggingHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketTaggingRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("Tagging");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_tagging.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketTaggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketTaggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketVersioningRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketVersioningRequest.cpp
new file mode 100644
index 00000000000..5e72efb1e1e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketVersioningRequest.cpp
@@ -0,0 +1,93 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketVersioningRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketVersioningRequest::PutBucketVersioningRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_mFAHasBeenSet(false),
+ m_versioningConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketVersioningRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("VersioningConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_versioningConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketVersioningRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketVersioningRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_mFAHasBeenSet)
+ {
+ ss << m_mFA;
+ headers.emplace("x-amz-mfa", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketWebsiteRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketWebsiteRequest.cpp
new file mode 100644
index 00000000000..d20032e466f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutBucketWebsiteRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutBucketWebsiteRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutBucketWebsiteRequest::PutBucketWebsiteRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_websiteConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutBucketWebsiteRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("WebsiteConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_websiteConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutBucketWebsiteRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutBucketWebsiteRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclRequest.cpp
new file mode 100644
index 00000000000..5dbd1a3fa66
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclRequest.cpp
@@ -0,0 +1,148 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectAclRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutObjectAclRequest::PutObjectAclRequest() :
+ m_aCL(ObjectCannedACL::NOT_SET),
+ m_aCLHasBeenSet(false),
+ m_accessControlPolicyHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_grantFullControlHasBeenSet(false),
+ m_grantReadHasBeenSet(false),
+ m_grantReadACPHasBeenSet(false),
+ m_grantWriteHasBeenSet(false),
+ m_grantWriteACPHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutObjectAclRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("AccessControlPolicy");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_accessControlPolicy.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutObjectAclRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutObjectAclRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_aCLHasBeenSet)
+ {
+ headers.emplace("x-amz-acl", ObjectCannedACLMapper::GetNameForObjectCannedACL(m_aCL));
+ }
+
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantFullControlHasBeenSet)
+ {
+ ss << m_grantFullControl;
+ headers.emplace("x-amz-grant-full-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadHasBeenSet)
+ {
+ ss << m_grantRead;
+ headers.emplace("x-amz-grant-read", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadACPHasBeenSet)
+ {
+ ss << m_grantReadACP;
+ headers.emplace("x-amz-grant-read-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteHasBeenSet)
+ {
+ ss << m_grantWrite;
+ headers.emplace("x-amz-grant-write", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteACPHasBeenSet)
+ {
+ ss << m_grantWriteACP;
+ headers.emplace("x-amz-grant-write-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclResult.cpp
new file mode 100644
index 00000000000..47034f81db7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectAclResult.cpp
@@ -0,0 +1,47 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectAclResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+PutObjectAclResult::PutObjectAclResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+PutObjectAclResult::PutObjectAclResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+PutObjectAclResult& PutObjectAclResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldRequest.cpp
new file mode 100644
index 00000000000..8c07b952d7d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldRequest.cpp
@@ -0,0 +1,101 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectLegalHoldRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutObjectLegalHoldRequest::PutObjectLegalHoldRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_legalHoldHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutObjectLegalHoldRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("LegalHold");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_legalHold.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutObjectLegalHoldRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutObjectLegalHoldRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldResult.cpp
new file mode 100644
index 00000000000..10e4ad8d418
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLegalHoldResult.cpp
@@ -0,0 +1,47 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectLegalHoldResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+PutObjectLegalHoldResult::PutObjectLegalHoldResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+PutObjectLegalHoldResult::PutObjectLegalHoldResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+PutObjectLegalHoldResult& PutObjectLegalHoldResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationRequest.cpp
new file mode 100644
index 00000000000..347b9e668d5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationRequest.cpp
@@ -0,0 +1,100 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectLockConfigurationRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutObjectLockConfigurationRequest::PutObjectLockConfigurationRequest() :
+ m_bucketHasBeenSet(false),
+ m_objectLockConfigurationHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_tokenHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutObjectLockConfigurationRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("ObjectLockConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_objectLockConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutObjectLockConfigurationRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutObjectLockConfigurationRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_tokenHasBeenSet)
+ {
+ ss << m_token;
+ headers.emplace("x-amz-bucket-object-lock-token", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationResult.cpp
new file mode 100644
index 00000000000..6beae5855da
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectLockConfigurationResult.cpp
@@ -0,0 +1,47 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectLockConfigurationResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+PutObjectLockConfigurationResult::PutObjectLockConfigurationResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+PutObjectLockConfigurationResult::PutObjectLockConfigurationResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+PutObjectLockConfigurationResult& PutObjectLockConfigurationResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRequest.cpp
new file mode 100644
index 00000000000..1a3f34b3e87
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRequest.cpp
@@ -0,0 +1,275 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectRequest.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/utils/HashingUtils.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Stream;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+using namespace Aws;
+
+PutObjectRequest::PutObjectRequest() :
+ m_aCL(ObjectCannedACL::NOT_SET),
+ m_aCLHasBeenSet(false),
+ m_bucketHasBeenSet(false),
+ m_cacheControlHasBeenSet(false),
+ m_contentDispositionHasBeenSet(false),
+ m_contentEncodingHasBeenSet(false),
+ m_contentLanguageHasBeenSet(false),
+ m_contentLength(0),
+ m_contentLengthHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_expiresHasBeenSet(false),
+ m_grantFullControlHasBeenSet(false),
+ m_grantReadHasBeenSet(false),
+ m_grantReadACPHasBeenSet(false),
+ m_grantWriteACPHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_metadataHasBeenSet(false),
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_serverSideEncryptionHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false),
+ m_websiteRedirectLocationHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_sSEKMSKeyIdHasBeenSet(false),
+ m_sSEKMSEncryptionContextHasBeenSet(false),
+ m_bucketKeyEnabled(false),
+ m_bucketKeyEnabledHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_taggingHasBeenSet(false),
+ m_objectLockMode(ObjectLockMode::NOT_SET),
+ m_objectLockModeHasBeenSet(false),
+ m_objectLockRetainUntilDateHasBeenSet(false),
+ m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET),
+ m_objectLockLegalHoldStatusHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+
+void PutObjectRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutObjectRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_aCLHasBeenSet)
+ {
+ headers.emplace("x-amz-acl", ObjectCannedACLMapper::GetNameForObjectCannedACL(m_aCL));
+ }
+
+ if(m_cacheControlHasBeenSet)
+ {
+ ss << m_cacheControl;
+ headers.emplace("cache-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentDispositionHasBeenSet)
+ {
+ ss << m_contentDisposition;
+ headers.emplace("content-disposition", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentEncodingHasBeenSet)
+ {
+ ss << m_contentEncoding;
+ headers.emplace("content-encoding", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentLanguageHasBeenSet)
+ {
+ ss << m_contentLanguage;
+ headers.emplace("content-language", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentLengthHasBeenSet)
+ {
+ ss << m_contentLength;
+ headers.emplace("content-length", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expiresHasBeenSet)
+ {
+ headers.emplace("expires", m_expires.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_grantFullControlHasBeenSet)
+ {
+ ss << m_grantFullControl;
+ headers.emplace("x-amz-grant-full-control", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadHasBeenSet)
+ {
+ ss << m_grantRead;
+ headers.emplace("x-amz-grant-read", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantReadACPHasBeenSet)
+ {
+ ss << m_grantReadACP;
+ headers.emplace("x-amz-grant-read-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_grantWriteACPHasBeenSet)
+ {
+ ss << m_grantWriteACP;
+ headers.emplace("x-amz-grant-write-acp", ss.str());
+ ss.str("");
+ }
+
+ if(m_metadataHasBeenSet)
+ {
+ for(const auto& item : m_metadata)
+ {
+ ss << "x-amz-meta-" << item.first;
+ headers.emplace(ss.str(), item.second);
+ ss.str("");
+ }
+ }
+
+ if(m_serverSideEncryptionHasBeenSet)
+ {
+ headers.emplace("x-amz-server-side-encryption", ServerSideEncryptionMapper::GetNameForServerSideEncryption(m_serverSideEncryption));
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ headers.emplace("x-amz-storage-class", StorageClassMapper::GetNameForStorageClass(m_storageClass));
+ }
+
+ if(m_websiteRedirectLocationHasBeenSet)
+ {
+ ss << m_websiteRedirectLocation;
+ headers.emplace("x-amz-website-redirect-location", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSEKMSKeyIdHasBeenSet)
+ {
+ ss << m_sSEKMSKeyId;
+ headers.emplace("x-amz-server-side-encryption-aws-kms-key-id", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSEKMSEncryptionContextHasBeenSet)
+ {
+ ss << m_sSEKMSEncryptionContext;
+ headers.emplace("x-amz-server-side-encryption-context", ss.str());
+ ss.str("");
+ }
+
+ if(m_bucketKeyEnabledHasBeenSet)
+ {
+ ss << m_bucketKeyEnabled;
+ headers.emplace("x-amz-server-side-encryption-bucket-key-enabled", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_taggingHasBeenSet)
+ {
+ ss << m_tagging;
+ headers.emplace("x-amz-tagging", ss.str());
+ ss.str("");
+ }
+
+ if(m_objectLockModeHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-mode", ObjectLockModeMapper::GetNameForObjectLockMode(m_objectLockMode));
+ }
+
+ if(m_objectLockRetainUntilDateHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-retain-until-date", m_objectLockRetainUntilDate.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_objectLockLegalHoldStatusHasBeenSet)
+ {
+ headers.emplace("x-amz-object-lock-legal-hold", ObjectLockLegalHoldStatusMapper::GetNameForObjectLockLegalHoldStatus(m_objectLockLegalHoldStatus));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectResult.cpp
new file mode 100644
index 00000000000..0dfcb17280e
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectResult.cpp
@@ -0,0 +1,105 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+PutObjectResult::PutObjectResult() :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+PutObjectResult::PutObjectResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+PutObjectResult& PutObjectResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& expirationIter = headers.find("x-amz-expiration");
+ if(expirationIter != headers.end())
+ {
+ m_expiration = expirationIter->second;
+ }
+
+ const auto& eTagIter = headers.find("etag");
+ if(eTagIter != headers.end())
+ {
+ m_eTag = eTagIter->second;
+ }
+
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ const auto& sSECustomerAlgorithmIter = headers.find("x-amz-server-side-encryption-customer-algorithm");
+ if(sSECustomerAlgorithmIter != headers.end())
+ {
+ m_sSECustomerAlgorithm = sSECustomerAlgorithmIter->second;
+ }
+
+ const auto& sSECustomerKeyMD5Iter = headers.find("x-amz-server-side-encryption-customer-key-md5");
+ if(sSECustomerKeyMD5Iter != headers.end())
+ {
+ m_sSECustomerKeyMD5 = sSECustomerKeyMD5Iter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& sSEKMSEncryptionContextIter = headers.find("x-amz-server-side-encryption-context");
+ if(sSEKMSEncryptionContextIter != headers.end())
+ {
+ m_sSEKMSEncryptionContext = sSEKMSEncryptionContextIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionRequest.cpp
new file mode 100644
index 00000000000..1c0101a0c42
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionRequest.cpp
@@ -0,0 +1,110 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectRetentionRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutObjectRetentionRequest::PutObjectRetentionRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_retentionHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_bypassGovernanceRetention(false),
+ m_bypassGovernanceRetentionHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutObjectRetentionRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("Retention");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_retention.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutObjectRetentionRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutObjectRetentionRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_bypassGovernanceRetentionHasBeenSet)
+ {
+ ss << m_bypassGovernanceRetention;
+ headers.emplace("x-amz-bypass-governance-retention", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionResult.cpp
new file mode 100644
index 00000000000..c1cd49d9b6f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectRetentionResult.cpp
@@ -0,0 +1,47 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectRetentionResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+PutObjectRetentionResult::PutObjectRetentionResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+PutObjectRetentionResult::PutObjectRetentionResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+PutObjectRetentionResult& PutObjectRetentionResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingRequest.cpp
new file mode 100644
index 00000000000..d93c0108eac
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingRequest.cpp
@@ -0,0 +1,94 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectTaggingRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutObjectTaggingRequest::PutObjectTaggingRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_taggingHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutObjectTaggingRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("Tagging");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_tagging.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutObjectTaggingRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutObjectTaggingRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingResult.cpp
new file mode 100644
index 00000000000..29e19191196
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutObjectTaggingResult.cpp
@@ -0,0 +1,45 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutObjectTaggingResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+PutObjectTaggingResult::PutObjectTaggingResult()
+{
+}
+
+PutObjectTaggingResult::PutObjectTaggingResult(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ *this = result;
+}
+
+PutObjectTaggingResult& PutObjectTaggingResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& versionIdIter = headers.find("x-amz-version-id");
+ if(versionIdIter != headers.end())
+ {
+ m_versionId = versionIdIter->second;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutPublicAccessBlockRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutPublicAccessBlockRequest.cpp
new file mode 100644
index 00000000000..f06ab1ed3ac
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/PutPublicAccessBlockRequest.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/PutPublicAccessBlockRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+PutPublicAccessBlockRequest::PutPublicAccessBlockRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_publicAccessBlockConfigurationHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String PutPublicAccessBlockRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("PublicAccessBlockConfiguration");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_publicAccessBlockConfiguration.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void PutPublicAccessBlockRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection PutPublicAccessBlockRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfiguration.cpp
new file mode 100644
index 00000000000..c9c18b81377
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfiguration.cpp
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/QueueConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+QueueConfiguration::QueueConfiguration() :
+ m_idHasBeenSet(false),
+ m_queueArnHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+}
+
+QueueConfiguration::QueueConfiguration(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_queueArnHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+QueueConfiguration& QueueConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode queueArnNode = resultNode.FirstChild("Queue");
+ if(!queueArnNode.IsNull())
+ {
+ m_queueArn = Aws::Utils::Xml::DecodeEscapedXmlText(queueArnNode.GetText());
+ m_queueArnHasBeenSet = true;
+ }
+ XmlNode eventsNode = resultNode.FirstChild("Event");
+ if(!eventsNode.IsNull())
+ {
+ XmlNode eventMember = eventsNode;
+ while(!eventMember.IsNull())
+ {
+ m_events.push_back(EventMapper::GetEventForName(StringUtils::Trim(eventMember.GetText().c_str())));
+ eventMember = eventMember.NextNode("Event");
+ }
+
+ m_eventsHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void QueueConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_queueArnHasBeenSet)
+ {
+ XmlNode queueArnNode = parentNode.CreateChildElement("Queue");
+ queueArnNode.SetText(m_queueArn);
+ }
+
+ if(m_eventsHasBeenSet)
+ {
+ for(const auto& item : m_events)
+ {
+ XmlNode eventsNode = parentNode.CreateChildElement("Event");
+ eventsNode.SetText(EventMapper::GetNameForEvent(item));
+ }
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfigurationDeprecated.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfigurationDeprecated.cpp
new file mode 100644
index 00000000000..0bb24846e26
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QueueConfigurationDeprecated.cpp
@@ -0,0 +1,101 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/QueueConfigurationDeprecated.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+QueueConfigurationDeprecated::QueueConfigurationDeprecated() :
+ m_idHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_queueHasBeenSet(false)
+{
+}
+
+QueueConfigurationDeprecated::QueueConfigurationDeprecated(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_queueHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+QueueConfigurationDeprecated& QueueConfigurationDeprecated::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode eventsNode = resultNode.FirstChild("Event");
+ if(!eventsNode.IsNull())
+ {
+ XmlNode eventMember = eventsNode;
+ while(!eventMember.IsNull())
+ {
+ m_events.push_back(EventMapper::GetEventForName(StringUtils::Trim(eventMember.GetText().c_str())));
+ eventMember = eventMember.NextNode("Event");
+ }
+
+ m_eventsHasBeenSet = true;
+ }
+ XmlNode queueNode = resultNode.FirstChild("Queue");
+ if(!queueNode.IsNull())
+ {
+ m_queue = Aws::Utils::Xml::DecodeEscapedXmlText(queueNode.GetText());
+ m_queueHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void QueueConfigurationDeprecated::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_eventsHasBeenSet)
+ {
+ for(const auto& item : m_events)
+ {
+ XmlNode eventsNode = parentNode.CreateChildElement("Event");
+ eventsNode.SetText(EventMapper::GetNameForEvent(item));
+ }
+ }
+
+ if(m_queueHasBeenSet)
+ {
+ XmlNode queueNode = parentNode.CreateChildElement("Queue");
+ queueNode.SetText(m_queue);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QuoteFields.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QuoteFields.cpp
new file mode 100644
index 00000000000..a9c44b2d8a2
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/QuoteFields.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/QuoteFields.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace QuoteFieldsMapper
+ {
+
+ static const int ALWAYS_HASH = HashingUtils::HashString("ALWAYS");
+ static const int ASNEEDED_HASH = HashingUtils::HashString("ASNEEDED");
+
+
+ QuoteFields GetQuoteFieldsForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == ALWAYS_HASH)
+ {
+ return QuoteFields::ALWAYS;
+ }
+ else if (hashCode == ASNEEDED_HASH)
+ {
+ return QuoteFields::ASNEEDED;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<QuoteFields>(hashCode);
+ }
+
+ return QuoteFields::NOT_SET;
+ }
+
+ Aws::String GetNameForQuoteFields(QuoteFields enumValue)
+ {
+ switch(enumValue)
+ {
+ case QuoteFields::ALWAYS:
+ return "ALWAYS";
+ case QuoteFields::ASNEEDED:
+ return "ASNEEDED";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace QuoteFieldsMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Redirect.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Redirect.cpp
new file mode 100644
index 00000000000..5aa5c06d24d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Redirect.cpp
@@ -0,0 +1,122 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Redirect.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Redirect::Redirect() :
+ m_hostNameHasBeenSet(false),
+ m_httpRedirectCodeHasBeenSet(false),
+ m_protocol(Protocol::NOT_SET),
+ m_protocolHasBeenSet(false),
+ m_replaceKeyPrefixWithHasBeenSet(false),
+ m_replaceKeyWithHasBeenSet(false)
+{
+}
+
+Redirect::Redirect(const XmlNode& xmlNode) :
+ m_hostNameHasBeenSet(false),
+ m_httpRedirectCodeHasBeenSet(false),
+ m_protocol(Protocol::NOT_SET),
+ m_protocolHasBeenSet(false),
+ m_replaceKeyPrefixWithHasBeenSet(false),
+ m_replaceKeyWithHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Redirect& Redirect::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode hostNameNode = resultNode.FirstChild("HostName");
+ if(!hostNameNode.IsNull())
+ {
+ m_hostName = Aws::Utils::Xml::DecodeEscapedXmlText(hostNameNode.GetText());
+ m_hostNameHasBeenSet = true;
+ }
+ XmlNode httpRedirectCodeNode = resultNode.FirstChild("HttpRedirectCode");
+ if(!httpRedirectCodeNode.IsNull())
+ {
+ m_httpRedirectCode = Aws::Utils::Xml::DecodeEscapedXmlText(httpRedirectCodeNode.GetText());
+ m_httpRedirectCodeHasBeenSet = true;
+ }
+ XmlNode protocolNode = resultNode.FirstChild("Protocol");
+ if(!protocolNode.IsNull())
+ {
+ m_protocol = ProtocolMapper::GetProtocolForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(protocolNode.GetText()).c_str()).c_str());
+ m_protocolHasBeenSet = true;
+ }
+ XmlNode replaceKeyPrefixWithNode = resultNode.FirstChild("ReplaceKeyPrefixWith");
+ if(!replaceKeyPrefixWithNode.IsNull())
+ {
+ m_replaceKeyPrefixWith = Aws::Utils::Xml::DecodeEscapedXmlText(replaceKeyPrefixWithNode.GetText());
+ m_replaceKeyPrefixWithHasBeenSet = true;
+ }
+ XmlNode replaceKeyWithNode = resultNode.FirstChild("ReplaceKeyWith");
+ if(!replaceKeyWithNode.IsNull())
+ {
+ m_replaceKeyWith = Aws::Utils::Xml::DecodeEscapedXmlText(replaceKeyWithNode.GetText());
+ m_replaceKeyWithHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Redirect::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_hostNameHasBeenSet)
+ {
+ XmlNode hostNameNode = parentNode.CreateChildElement("HostName");
+ hostNameNode.SetText(m_hostName);
+ }
+
+ if(m_httpRedirectCodeHasBeenSet)
+ {
+ XmlNode httpRedirectCodeNode = parentNode.CreateChildElement("HttpRedirectCode");
+ httpRedirectCodeNode.SetText(m_httpRedirectCode);
+ }
+
+ if(m_protocolHasBeenSet)
+ {
+ XmlNode protocolNode = parentNode.CreateChildElement("Protocol");
+ protocolNode.SetText(ProtocolMapper::GetNameForProtocol(m_protocol));
+ }
+
+ if(m_replaceKeyPrefixWithHasBeenSet)
+ {
+ XmlNode replaceKeyPrefixWithNode = parentNode.CreateChildElement("ReplaceKeyPrefixWith");
+ replaceKeyPrefixWithNode.SetText(m_replaceKeyPrefixWith);
+ }
+
+ if(m_replaceKeyWithHasBeenSet)
+ {
+ XmlNode replaceKeyWithNode = parentNode.CreateChildElement("ReplaceKeyWith");
+ replaceKeyWithNode.SetText(m_replaceKeyWith);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RedirectAllRequestsTo.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RedirectAllRequestsTo.cpp
new file mode 100644
index 00000000000..bf4660d6253
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RedirectAllRequestsTo.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RedirectAllRequestsTo.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+RedirectAllRequestsTo::RedirectAllRequestsTo() :
+ m_hostNameHasBeenSet(false),
+ m_protocol(Protocol::NOT_SET),
+ m_protocolHasBeenSet(false)
+{
+}
+
+RedirectAllRequestsTo::RedirectAllRequestsTo(const XmlNode& xmlNode) :
+ m_hostNameHasBeenSet(false),
+ m_protocol(Protocol::NOT_SET),
+ m_protocolHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+RedirectAllRequestsTo& RedirectAllRequestsTo::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode hostNameNode = resultNode.FirstChild("HostName");
+ if(!hostNameNode.IsNull())
+ {
+ m_hostName = Aws::Utils::Xml::DecodeEscapedXmlText(hostNameNode.GetText());
+ m_hostNameHasBeenSet = true;
+ }
+ XmlNode protocolNode = resultNode.FirstChild("Protocol");
+ if(!protocolNode.IsNull())
+ {
+ m_protocol = ProtocolMapper::GetProtocolForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(protocolNode.GetText()).c_str()).c_str());
+ m_protocolHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void RedirectAllRequestsTo::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_hostNameHasBeenSet)
+ {
+ XmlNode hostNameNode = parentNode.CreateChildElement("HostName");
+ hostNameNode.SetText(m_hostName);
+ }
+
+ if(m_protocolHasBeenSet)
+ {
+ XmlNode protocolNode = parentNode.CreateChildElement("Protocol");
+ protocolNode.SetText(ProtocolMapper::GetNameForProtocol(m_protocol));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModifications.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModifications.cpp
new file mode 100644
index 00000000000..e7da8f43e06
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModifications.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicaModifications.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ReplicaModifications::ReplicaModifications() :
+ m_status(ReplicaModificationsStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+}
+
+ReplicaModifications::ReplicaModifications(const XmlNode& xmlNode) :
+ m_status(ReplicaModificationsStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ReplicaModifications& ReplicaModifications::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = ReplicaModificationsStatusMapper::GetReplicaModificationsStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ReplicaModifications::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(ReplicaModificationsStatusMapper::GetNameForReplicaModificationsStatus(m_status));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModificationsStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModificationsStatus.cpp
new file mode 100644
index 00000000000..c25c3a82c40
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicaModificationsStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicaModificationsStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ReplicaModificationsStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ ReplicaModificationsStatus GetReplicaModificationsStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return ReplicaModificationsStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return ReplicaModificationsStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ReplicaModificationsStatus>(hashCode);
+ }
+
+ return ReplicaModificationsStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForReplicaModificationsStatus(ReplicaModificationsStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ReplicaModificationsStatus::Enabled:
+ return "Enabled";
+ case ReplicaModificationsStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ReplicaModificationsStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationConfiguration.cpp
new file mode 100644
index 00000000000..bd14b010b2f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationConfiguration.cpp
@@ -0,0 +1,87 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ReplicationConfiguration::ReplicationConfiguration() :
+ m_roleHasBeenSet(false),
+ m_rulesHasBeenSet(false)
+{
+}
+
+ReplicationConfiguration::ReplicationConfiguration(const XmlNode& xmlNode) :
+ m_roleHasBeenSet(false),
+ m_rulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ReplicationConfiguration& ReplicationConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode roleNode = resultNode.FirstChild("Role");
+ if(!roleNode.IsNull())
+ {
+ m_role = Aws::Utils::Xml::DecodeEscapedXmlText(roleNode.GetText());
+ m_roleHasBeenSet = true;
+ }
+ XmlNode rulesNode = resultNode.FirstChild("Rule");
+ if(!rulesNode.IsNull())
+ {
+ XmlNode ruleMember = rulesNode;
+ while(!ruleMember.IsNull())
+ {
+ m_rules.push_back(ruleMember);
+ ruleMember = ruleMember.NextNode("Rule");
+ }
+
+ m_rulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ReplicationConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_roleHasBeenSet)
+ {
+ XmlNode roleNode = parentNode.CreateChildElement("Role");
+ roleNode.SetText(m_role);
+ }
+
+ if(m_rulesHasBeenSet)
+ {
+ for(const auto& item : m_rules)
+ {
+ XmlNode rulesNode = parentNode.CreateChildElement("Rule");
+ item.AddToNode(rulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRule.cpp
new file mode 100644
index 00000000000..a0f883d0f25
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRule.cpp
@@ -0,0 +1,168 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ReplicationRule::ReplicationRule() :
+ m_iDHasBeenSet(false),
+ m_priority(0),
+ m_priorityHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_status(ReplicationRuleStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_sourceSelectionCriteriaHasBeenSet(false),
+ m_existingObjectReplicationHasBeenSet(false),
+ m_destinationHasBeenSet(false),
+ m_deleteMarkerReplicationHasBeenSet(false)
+{
+}
+
+ReplicationRule::ReplicationRule(const XmlNode& xmlNode) :
+ m_iDHasBeenSet(false),
+ m_priority(0),
+ m_priorityHasBeenSet(false),
+ m_filterHasBeenSet(false),
+ m_status(ReplicationRuleStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_sourceSelectionCriteriaHasBeenSet(false),
+ m_existingObjectReplicationHasBeenSet(false),
+ m_destinationHasBeenSet(false),
+ m_deleteMarkerReplicationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ReplicationRule& ReplicationRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode iDNode = resultNode.FirstChild("ID");
+ if(!iDNode.IsNull())
+ {
+ m_iD = Aws::Utils::Xml::DecodeEscapedXmlText(iDNode.GetText());
+ m_iDHasBeenSet = true;
+ }
+ XmlNode priorityNode = resultNode.FirstChild("Priority");
+ if(!priorityNode.IsNull())
+ {
+ m_priority = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(priorityNode.GetText()).c_str()).c_str());
+ m_priorityHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = ReplicationRuleStatusMapper::GetReplicationRuleStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ XmlNode sourceSelectionCriteriaNode = resultNode.FirstChild("SourceSelectionCriteria");
+ if(!sourceSelectionCriteriaNode.IsNull())
+ {
+ m_sourceSelectionCriteria = sourceSelectionCriteriaNode;
+ m_sourceSelectionCriteriaHasBeenSet = true;
+ }
+ XmlNode existingObjectReplicationNode = resultNode.FirstChild("ExistingObjectReplication");
+ if(!existingObjectReplicationNode.IsNull())
+ {
+ m_existingObjectReplication = existingObjectReplicationNode;
+ m_existingObjectReplicationHasBeenSet = true;
+ }
+ XmlNode destinationNode = resultNode.FirstChild("Destination");
+ if(!destinationNode.IsNull())
+ {
+ m_destination = destinationNode;
+ m_destinationHasBeenSet = true;
+ }
+ XmlNode deleteMarkerReplicationNode = resultNode.FirstChild("DeleteMarkerReplication");
+ if(!deleteMarkerReplicationNode.IsNull())
+ {
+ m_deleteMarkerReplication = deleteMarkerReplicationNode;
+ m_deleteMarkerReplicationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ReplicationRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_iDHasBeenSet)
+ {
+ XmlNode iDNode = parentNode.CreateChildElement("ID");
+ iDNode.SetText(m_iD);
+ }
+
+ if(m_priorityHasBeenSet)
+ {
+ XmlNode priorityNode = parentNode.CreateChildElement("Priority");
+ ss << m_priority;
+ priorityNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(ReplicationRuleStatusMapper::GetNameForReplicationRuleStatus(m_status));
+ }
+
+ if(m_sourceSelectionCriteriaHasBeenSet)
+ {
+ XmlNode sourceSelectionCriteriaNode = parentNode.CreateChildElement("SourceSelectionCriteria");
+ m_sourceSelectionCriteria.AddToNode(sourceSelectionCriteriaNode);
+ }
+
+ if(m_existingObjectReplicationHasBeenSet)
+ {
+ XmlNode existingObjectReplicationNode = parentNode.CreateChildElement("ExistingObjectReplication");
+ m_existingObjectReplication.AddToNode(existingObjectReplicationNode);
+ }
+
+ if(m_destinationHasBeenSet)
+ {
+ XmlNode destinationNode = parentNode.CreateChildElement("Destination");
+ m_destination.AddToNode(destinationNode);
+ }
+
+ if(m_deleteMarkerReplicationHasBeenSet)
+ {
+ XmlNode deleteMarkerReplicationNode = parentNode.CreateChildElement("DeleteMarkerReplication");
+ m_deleteMarkerReplication.AddToNode(deleteMarkerReplicationNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleAndOperator.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleAndOperator.cpp
new file mode 100644
index 00000000000..00d04e7ec39
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleAndOperator.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationRuleAndOperator.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ReplicationRuleAndOperator::ReplicationRuleAndOperator() :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+}
+
+ReplicationRuleAndOperator::ReplicationRuleAndOperator(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ReplicationRuleAndOperator& ReplicationRuleAndOperator::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagsNode = resultNode.FirstChild("Tag");
+ if(!tagsNode.IsNull())
+ {
+ XmlNode tagMember = tagsNode;
+ while(!tagMember.IsNull())
+ {
+ m_tags.push_back(tagMember);
+ tagMember = tagMember.NextNode("Tag");
+ }
+
+ m_tagsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ReplicationRuleAndOperator::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagsHasBeenSet)
+ {
+ XmlNode tagsParentNode = parentNode.CreateChildElement("Tags");
+ for(const auto& item : m_tags)
+ {
+ XmlNode tagsNode = tagsParentNode.CreateChildElement("Tag");
+ item.AddToNode(tagsNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleFilter.cpp
new file mode 100644
index 00000000000..a423e4ae100
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleFilter.cpp
@@ -0,0 +1,92 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationRuleFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ReplicationRuleFilter::ReplicationRuleFilter() :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+}
+
+ReplicationRuleFilter::ReplicationRuleFilter(const XmlNode& xmlNode) :
+ m_prefixHasBeenSet(false),
+ m_tagHasBeenSet(false),
+ m_andHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ReplicationRuleFilter& ReplicationRuleFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode tagNode = resultNode.FirstChild("Tag");
+ if(!tagNode.IsNull())
+ {
+ m_tag = tagNode;
+ m_tagHasBeenSet = true;
+ }
+ XmlNode andNode = resultNode.FirstChild("And");
+ if(!andNode.IsNull())
+ {
+ m_and = andNode;
+ m_andHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ReplicationRuleFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_tagHasBeenSet)
+ {
+ XmlNode tagNode = parentNode.CreateChildElement("Tag");
+ m_tag.AddToNode(tagNode);
+ }
+
+ if(m_andHasBeenSet)
+ {
+ XmlNode andNode = parentNode.CreateChildElement("And");
+ m_and.AddToNode(andNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleStatus.cpp
new file mode 100644
index 00000000000..656e48a2277
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationRuleStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationRuleStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ReplicationRuleStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ ReplicationRuleStatus GetReplicationRuleStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return ReplicationRuleStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return ReplicationRuleStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ReplicationRuleStatus>(hashCode);
+ }
+
+ return ReplicationRuleStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForReplicationRuleStatus(ReplicationRuleStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ReplicationRuleStatus::Enabled:
+ return "Enabled";
+ case ReplicationRuleStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ReplicationRuleStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationStatus.cpp
new file mode 100644
index 00000000000..02d056c0eb3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationStatus.cpp
@@ -0,0 +1,84 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ReplicationStatusMapper
+ {
+
+ static const int COMPLETED_HASH = HashingUtils::HashString("COMPLETED");
+ static const int PENDING_HASH = HashingUtils::HashString("PENDING");
+ static const int FAILED_HASH = HashingUtils::HashString("FAILED");
+ static const int REPLICA_HASH = HashingUtils::HashString("REPLICA");
+
+
+ ReplicationStatus GetReplicationStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == COMPLETED_HASH)
+ {
+ return ReplicationStatus::COMPLETED;
+ }
+ else if (hashCode == PENDING_HASH)
+ {
+ return ReplicationStatus::PENDING;
+ }
+ else if (hashCode == FAILED_HASH)
+ {
+ return ReplicationStatus::FAILED;
+ }
+ else if (hashCode == REPLICA_HASH)
+ {
+ return ReplicationStatus::REPLICA;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ReplicationStatus>(hashCode);
+ }
+
+ return ReplicationStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForReplicationStatus(ReplicationStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ReplicationStatus::COMPLETED:
+ return "COMPLETED";
+ case ReplicationStatus::PENDING:
+ return "PENDING";
+ case ReplicationStatus::FAILED:
+ return "FAILED";
+ case ReplicationStatus::REPLICA:
+ return "REPLICA";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ReplicationStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTime.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTime.cpp
new file mode 100644
index 00000000000..1fb6c0a36e8
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTime.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationTime.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ReplicationTime::ReplicationTime() :
+ m_status(ReplicationTimeStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_timeHasBeenSet(false)
+{
+}
+
+ReplicationTime::ReplicationTime(const XmlNode& xmlNode) :
+ m_status(ReplicationTimeStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_timeHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ReplicationTime& ReplicationTime::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = ReplicationTimeStatusMapper::GetReplicationTimeStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ XmlNode timeNode = resultNode.FirstChild("Time");
+ if(!timeNode.IsNull())
+ {
+ m_time = timeNode;
+ m_timeHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ReplicationTime::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(ReplicationTimeStatusMapper::GetNameForReplicationTimeStatus(m_status));
+ }
+
+ if(m_timeHasBeenSet)
+ {
+ XmlNode timeNode = parentNode.CreateChildElement("Time");
+ m_time.AddToNode(timeNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeStatus.cpp
new file mode 100644
index 00000000000..cbae603edc9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationTimeStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ReplicationTimeStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ ReplicationTimeStatus GetReplicationTimeStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return ReplicationTimeStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return ReplicationTimeStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ReplicationTimeStatus>(hashCode);
+ }
+
+ return ReplicationTimeStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForReplicationTimeStatus(ReplicationTimeStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case ReplicationTimeStatus::Enabled:
+ return "Enabled";
+ case ReplicationTimeStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ReplicationTimeStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeValue.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeValue.cpp
new file mode 100644
index 00000000000..6431ad60fa9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ReplicationTimeValue.cpp
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ReplicationTimeValue.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ReplicationTimeValue::ReplicationTimeValue() :
+ m_minutes(0),
+ m_minutesHasBeenSet(false)
+{
+}
+
+ReplicationTimeValue::ReplicationTimeValue(const XmlNode& xmlNode) :
+ m_minutes(0),
+ m_minutesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ReplicationTimeValue& ReplicationTimeValue::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode minutesNode = resultNode.FirstChild("Minutes");
+ if(!minutesNode.IsNull())
+ {
+ m_minutes = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(minutesNode.GetText()).c_str()).c_str());
+ m_minutesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ReplicationTimeValue::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_minutesHasBeenSet)
+ {
+ XmlNode minutesNode = parentNode.CreateChildElement("Minutes");
+ ss << m_minutes;
+ minutesNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestCharged.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestCharged.cpp
new file mode 100644
index 00000000000..50fb60397cb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestCharged.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RequestCharged.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace RequestChargedMapper
+ {
+
+ static const int requester_HASH = HashingUtils::HashString("requester");
+
+
+ RequestCharged GetRequestChargedForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == requester_HASH)
+ {
+ return RequestCharged::requester;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<RequestCharged>(hashCode);
+ }
+
+ return RequestCharged::NOT_SET;
+ }
+
+ Aws::String GetNameForRequestCharged(RequestCharged enumValue)
+ {
+ switch(enumValue)
+ {
+ case RequestCharged::requester:
+ return "requester";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace RequestChargedMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPayer.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPayer.cpp
new file mode 100644
index 00000000000..5ed9ad7bf00
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPayer.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RequestPayer.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace RequestPayerMapper
+ {
+
+ static const int requester_HASH = HashingUtils::HashString("requester");
+
+
+ RequestPayer GetRequestPayerForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == requester_HASH)
+ {
+ return RequestPayer::requester;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<RequestPayer>(hashCode);
+ }
+
+ return RequestPayer::NOT_SET;
+ }
+
+ Aws::String GetNameForRequestPayer(RequestPayer enumValue)
+ {
+ switch(enumValue)
+ {
+ case RequestPayer::requester:
+ return "requester";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace RequestPayerMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPaymentConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPaymentConfiguration.cpp
new file mode 100644
index 00000000000..ccb0b759b71
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestPaymentConfiguration.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RequestPaymentConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+RequestPaymentConfiguration::RequestPaymentConfiguration() :
+ m_payer(Payer::NOT_SET),
+ m_payerHasBeenSet(false)
+{
+}
+
+RequestPaymentConfiguration::RequestPaymentConfiguration(const XmlNode& xmlNode) :
+ m_payer(Payer::NOT_SET),
+ m_payerHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+RequestPaymentConfiguration& RequestPaymentConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode payerNode = resultNode.FirstChild("Payer");
+ if(!payerNode.IsNull())
+ {
+ m_payer = PayerMapper::GetPayerForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(payerNode.GetText()).c_str()).c_str());
+ m_payerHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void RequestPaymentConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_payerHasBeenSet)
+ {
+ XmlNode payerNode = parentNode.CreateChildElement("Payer");
+ payerNode.SetText(PayerMapper::GetNameForPayer(m_payer));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestProgress.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestProgress.cpp
new file mode 100644
index 00000000000..14773c2a4c6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RequestProgress.cpp
@@ -0,0 +1,68 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RequestProgress.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+RequestProgress::RequestProgress() :
+ m_enabled(false),
+ m_enabledHasBeenSet(false)
+{
+}
+
+RequestProgress::RequestProgress(const XmlNode& xmlNode) :
+ m_enabled(false),
+ m_enabledHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+RequestProgress& RequestProgress::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode enabledNode = resultNode.FirstChild("Enabled");
+ if(!enabledNode.IsNull())
+ {
+ m_enabled = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(enabledNode.GetText()).c_str()).c_str());
+ m_enabledHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void RequestProgress::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_enabledHasBeenSet)
+ {
+ XmlNode enabledNode = parentNode.CreateChildElement("Enabled");
+ ss << std::boolalpha << m_enabled;
+ enabledNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectRequest.cpp
new file mode 100644
index 00000000000..a755fc78287
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectRequest.cpp
@@ -0,0 +1,93 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RestoreObjectRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+RestoreObjectRequest::RestoreObjectRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_versionIdHasBeenSet(false),
+ m_restoreRequestHasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String RestoreObjectRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("RestoreRequest");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ m_restoreRequest.AddToNode(parentNode);
+ if(parentNode.HasChildren())
+ {
+ return payloadDoc.ConvertToString();
+ }
+
+ return {};
+}
+
+void RestoreObjectRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_versionIdHasBeenSet)
+ {
+ ss << m_versionId;
+ uri.AddQueryStringParameter("versionId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection RestoreObjectRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectResult.cpp
new file mode 100644
index 00000000000..bae21fb8a27
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreObjectResult.cpp
@@ -0,0 +1,53 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RestoreObjectResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+RestoreObjectResult::RestoreObjectResult() :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+RestoreObjectResult::RestoreObjectResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+RestoreObjectResult& RestoreObjectResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ const auto& restoreOutputPathIter = headers.find("x-amz-restore-output-path");
+ if(restoreOutputPathIter != headers.end())
+ {
+ m_restoreOutputPath = restoreOutputPathIter->second;
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequest.cpp
new file mode 100644
index 00000000000..367096aa612
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequest.cpp
@@ -0,0 +1,156 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RestoreRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+RestoreRequest::RestoreRequest() :
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_glacierJobParametersHasBeenSet(false),
+ m_type(RestoreRequestType::NOT_SET),
+ m_typeHasBeenSet(false),
+ m_tier(Tier::NOT_SET),
+ m_tierHasBeenSet(false),
+ m_descriptionHasBeenSet(false),
+ m_selectParametersHasBeenSet(false),
+ m_outputLocationHasBeenSet(false)
+{
+}
+
+RestoreRequest::RestoreRequest(const XmlNode& xmlNode) :
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_glacierJobParametersHasBeenSet(false),
+ m_type(RestoreRequestType::NOT_SET),
+ m_typeHasBeenSet(false),
+ m_tier(Tier::NOT_SET),
+ m_tierHasBeenSet(false),
+ m_descriptionHasBeenSet(false),
+ m_selectParametersHasBeenSet(false),
+ m_outputLocationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+RestoreRequest& RestoreRequest::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode daysNode = resultNode.FirstChild("Days");
+ if(!daysNode.IsNull())
+ {
+ m_days = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(daysNode.GetText()).c_str()).c_str());
+ m_daysHasBeenSet = true;
+ }
+ XmlNode glacierJobParametersNode = resultNode.FirstChild("GlacierJobParameters");
+ if(!glacierJobParametersNode.IsNull())
+ {
+ m_glacierJobParameters = glacierJobParametersNode;
+ m_glacierJobParametersHasBeenSet = true;
+ }
+ XmlNode typeNode = resultNode.FirstChild("Type");
+ if(!typeNode.IsNull())
+ {
+ m_type = RestoreRequestTypeMapper::GetRestoreRequestTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(typeNode.GetText()).c_str()).c_str());
+ m_typeHasBeenSet = true;
+ }
+ XmlNode tierNode = resultNode.FirstChild("Tier");
+ if(!tierNode.IsNull())
+ {
+ m_tier = TierMapper::GetTierForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(tierNode.GetText()).c_str()).c_str());
+ m_tierHasBeenSet = true;
+ }
+ XmlNode descriptionNode = resultNode.FirstChild("Description");
+ if(!descriptionNode.IsNull())
+ {
+ m_description = Aws::Utils::Xml::DecodeEscapedXmlText(descriptionNode.GetText());
+ m_descriptionHasBeenSet = true;
+ }
+ XmlNode selectParametersNode = resultNode.FirstChild("SelectParameters");
+ if(!selectParametersNode.IsNull())
+ {
+ m_selectParameters = selectParametersNode;
+ m_selectParametersHasBeenSet = true;
+ }
+ XmlNode outputLocationNode = resultNode.FirstChild("OutputLocation");
+ if(!outputLocationNode.IsNull())
+ {
+ m_outputLocation = outputLocationNode;
+ m_outputLocationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void RestoreRequest::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_daysHasBeenSet)
+ {
+ XmlNode daysNode = parentNode.CreateChildElement("Days");
+ ss << m_days;
+ daysNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_glacierJobParametersHasBeenSet)
+ {
+ XmlNode glacierJobParametersNode = parentNode.CreateChildElement("GlacierJobParameters");
+ m_glacierJobParameters.AddToNode(glacierJobParametersNode);
+ }
+
+ if(m_typeHasBeenSet)
+ {
+ XmlNode typeNode = parentNode.CreateChildElement("Type");
+ typeNode.SetText(RestoreRequestTypeMapper::GetNameForRestoreRequestType(m_type));
+ }
+
+ if(m_tierHasBeenSet)
+ {
+ XmlNode tierNode = parentNode.CreateChildElement("Tier");
+ tierNode.SetText(TierMapper::GetNameForTier(m_tier));
+ }
+
+ if(m_descriptionHasBeenSet)
+ {
+ XmlNode descriptionNode = parentNode.CreateChildElement("Description");
+ descriptionNode.SetText(m_description);
+ }
+
+ if(m_selectParametersHasBeenSet)
+ {
+ XmlNode selectParametersNode = parentNode.CreateChildElement("SelectParameters");
+ m_selectParameters.AddToNode(selectParametersNode);
+ }
+
+ if(m_outputLocationHasBeenSet)
+ {
+ XmlNode outputLocationNode = parentNode.CreateChildElement("OutputLocation");
+ m_outputLocation.AddToNode(outputLocationNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequestType.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequestType.cpp
new file mode 100644
index 00000000000..00ee0152304
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RestoreRequestType.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RestoreRequestType.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace RestoreRequestTypeMapper
+ {
+
+ static const int SELECT_HASH = HashingUtils::HashString("SELECT");
+
+
+ RestoreRequestType GetRestoreRequestTypeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == SELECT_HASH)
+ {
+ return RestoreRequestType::SELECT;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<RestoreRequestType>(hashCode);
+ }
+
+ return RestoreRequestType::NOT_SET;
+ }
+
+ Aws::String GetNameForRestoreRequestType(RestoreRequestType enumValue)
+ {
+ switch(enumValue)
+ {
+ case RestoreRequestType::SELECT:
+ return "SELECT";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace RestoreRequestTypeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RoutingRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RoutingRule.cpp
new file mode 100644
index 00000000000..513f6cc84d9
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/RoutingRule.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/RoutingRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+RoutingRule::RoutingRule() :
+ m_conditionHasBeenSet(false),
+ m_redirectHasBeenSet(false)
+{
+}
+
+RoutingRule::RoutingRule(const XmlNode& xmlNode) :
+ m_conditionHasBeenSet(false),
+ m_redirectHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+RoutingRule& RoutingRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode conditionNode = resultNode.FirstChild("Condition");
+ if(!conditionNode.IsNull())
+ {
+ m_condition = conditionNode;
+ m_conditionHasBeenSet = true;
+ }
+ XmlNode redirectNode = resultNode.FirstChild("Redirect");
+ if(!redirectNode.IsNull())
+ {
+ m_redirect = redirectNode;
+ m_redirectHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void RoutingRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_conditionHasBeenSet)
+ {
+ XmlNode conditionNode = parentNode.CreateChildElement("Condition");
+ m_condition.AddToNode(conditionNode);
+ }
+
+ if(m_redirectHasBeenSet)
+ {
+ XmlNode redirectNode = parentNode.CreateChildElement("Redirect");
+ m_redirect.AddToNode(redirectNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Rule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Rule.cpp
new file mode 100644
index 00000000000..00311551c4d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Rule.cpp
@@ -0,0 +1,164 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Rule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Rule::Rule() :
+ m_expirationHasBeenSet(false),
+ m_iDHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_status(ExpirationStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_transitionHasBeenSet(false),
+ m_noncurrentVersionTransitionHasBeenSet(false),
+ m_noncurrentVersionExpirationHasBeenSet(false),
+ m_abortIncompleteMultipartUploadHasBeenSet(false)
+{
+}
+
+Rule::Rule(const XmlNode& xmlNode) :
+ m_expirationHasBeenSet(false),
+ m_iDHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_status(ExpirationStatus::NOT_SET),
+ m_statusHasBeenSet(false),
+ m_transitionHasBeenSet(false),
+ m_noncurrentVersionTransitionHasBeenSet(false),
+ m_noncurrentVersionExpirationHasBeenSet(false),
+ m_abortIncompleteMultipartUploadHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Rule& Rule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode expirationNode = resultNode.FirstChild("Expiration");
+ if(!expirationNode.IsNull())
+ {
+ m_expiration = expirationNode;
+ m_expirationHasBeenSet = true;
+ }
+ XmlNode iDNode = resultNode.FirstChild("ID");
+ if(!iDNode.IsNull())
+ {
+ m_iD = Aws::Utils::Xml::DecodeEscapedXmlText(iDNode.GetText());
+ m_iDHasBeenSet = true;
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = ExpirationStatusMapper::GetExpirationStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ XmlNode transitionNode = resultNode.FirstChild("Transition");
+ if(!transitionNode.IsNull())
+ {
+ m_transition = transitionNode;
+ m_transitionHasBeenSet = true;
+ }
+ XmlNode noncurrentVersionTransitionNode = resultNode.FirstChild("NoncurrentVersionTransition");
+ if(!noncurrentVersionTransitionNode.IsNull())
+ {
+ m_noncurrentVersionTransition = noncurrentVersionTransitionNode;
+ m_noncurrentVersionTransitionHasBeenSet = true;
+ }
+ XmlNode noncurrentVersionExpirationNode = resultNode.FirstChild("NoncurrentVersionExpiration");
+ if(!noncurrentVersionExpirationNode.IsNull())
+ {
+ m_noncurrentVersionExpiration = noncurrentVersionExpirationNode;
+ m_noncurrentVersionExpirationHasBeenSet = true;
+ }
+ XmlNode abortIncompleteMultipartUploadNode = resultNode.FirstChild("AbortIncompleteMultipartUpload");
+ if(!abortIncompleteMultipartUploadNode.IsNull())
+ {
+ m_abortIncompleteMultipartUpload = abortIncompleteMultipartUploadNode;
+ m_abortIncompleteMultipartUploadHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Rule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_expirationHasBeenSet)
+ {
+ XmlNode expirationNode = parentNode.CreateChildElement("Expiration");
+ m_expiration.AddToNode(expirationNode);
+ }
+
+ if(m_iDHasBeenSet)
+ {
+ XmlNode iDNode = parentNode.CreateChildElement("ID");
+ iDNode.SetText(m_iD);
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(ExpirationStatusMapper::GetNameForExpirationStatus(m_status));
+ }
+
+ if(m_transitionHasBeenSet)
+ {
+ XmlNode transitionNode = parentNode.CreateChildElement("Transition");
+ m_transition.AddToNode(transitionNode);
+ }
+
+ if(m_noncurrentVersionTransitionHasBeenSet)
+ {
+ XmlNode noncurrentVersionTransitionNode = parentNode.CreateChildElement("NoncurrentVersionTransition");
+ m_noncurrentVersionTransition.AddToNode(noncurrentVersionTransitionNode);
+ }
+
+ if(m_noncurrentVersionExpirationHasBeenSet)
+ {
+ XmlNode noncurrentVersionExpirationNode = parentNode.CreateChildElement("NoncurrentVersionExpiration");
+ m_noncurrentVersionExpiration.AddToNode(noncurrentVersionExpirationNode);
+ }
+
+ if(m_abortIncompleteMultipartUploadHasBeenSet)
+ {
+ XmlNode abortIncompleteMultipartUploadNode = parentNode.CreateChildElement("AbortIncompleteMultipartUpload");
+ m_abortIncompleteMultipartUpload.AddToNode(abortIncompleteMultipartUploadNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3KeyFilter.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3KeyFilter.cpp
new file mode 100644
index 00000000000..c3c18932371
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3KeyFilter.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/S3KeyFilter.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+S3KeyFilter::S3KeyFilter() :
+ m_filterRulesHasBeenSet(false)
+{
+}
+
+S3KeyFilter::S3KeyFilter(const XmlNode& xmlNode) :
+ m_filterRulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+S3KeyFilter& S3KeyFilter::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode filterRulesNode = resultNode.FirstChild("FilterRule");
+ if(!filterRulesNode.IsNull())
+ {
+ XmlNode filterRuleMember = filterRulesNode;
+ while(!filterRuleMember.IsNull())
+ {
+ m_filterRules.push_back(filterRuleMember);
+ filterRuleMember = filterRuleMember.NextNode("FilterRule");
+ }
+
+ m_filterRulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void S3KeyFilter::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_filterRulesHasBeenSet)
+ {
+ for(const auto& item : m_filterRules)
+ {
+ XmlNode filterRulesNode = parentNode.CreateChildElement("FilterRule");
+ item.AddToNode(filterRulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3Location.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3Location.cpp
new file mode 100644
index 00000000000..19615ed3351
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/S3Location.cpp
@@ -0,0 +1,186 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/S3Location.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+S3Location::S3Location() :
+ m_bucketNameHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_encryptionHasBeenSet(false),
+ m_cannedACL(ObjectCannedACL::NOT_SET),
+ m_cannedACLHasBeenSet(false),
+ m_accessControlListHasBeenSet(false),
+ m_taggingHasBeenSet(false),
+ m_userMetadataHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false)
+{
+}
+
+S3Location::S3Location(const XmlNode& xmlNode) :
+ m_bucketNameHasBeenSet(false),
+ m_prefixHasBeenSet(false),
+ m_encryptionHasBeenSet(false),
+ m_cannedACL(ObjectCannedACL::NOT_SET),
+ m_cannedACLHasBeenSet(false),
+ m_accessControlListHasBeenSet(false),
+ m_taggingHasBeenSet(false),
+ m_userMetadataHasBeenSet(false),
+ m_storageClass(StorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+S3Location& S3Location::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bucketNameNode = resultNode.FirstChild("BucketName");
+ if(!bucketNameNode.IsNull())
+ {
+ m_bucketName = Aws::Utils::Xml::DecodeEscapedXmlText(bucketNameNode.GetText());
+ m_bucketNameHasBeenSet = true;
+ }
+ XmlNode prefixNode = resultNode.FirstChild("Prefix");
+ if(!prefixNode.IsNull())
+ {
+ m_prefix = Aws::Utils::Xml::DecodeEscapedXmlText(prefixNode.GetText());
+ m_prefixHasBeenSet = true;
+ }
+ XmlNode encryptionNode = resultNode.FirstChild("Encryption");
+ if(!encryptionNode.IsNull())
+ {
+ m_encryption = encryptionNode;
+ m_encryptionHasBeenSet = true;
+ }
+ XmlNode cannedACLNode = resultNode.FirstChild("CannedACL");
+ if(!cannedACLNode.IsNull())
+ {
+ m_cannedACL = ObjectCannedACLMapper::GetObjectCannedACLForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(cannedACLNode.GetText()).c_str()).c_str());
+ m_cannedACLHasBeenSet = true;
+ }
+ XmlNode accessControlListNode = resultNode.FirstChild("AccessControlList");
+ if(!accessControlListNode.IsNull())
+ {
+ XmlNode accessControlListMember = accessControlListNode.FirstChild("Grant");
+ while(!accessControlListMember.IsNull())
+ {
+ m_accessControlList.push_back(accessControlListMember);
+ accessControlListMember = accessControlListMember.NextNode("Grant");
+ }
+
+ m_accessControlListHasBeenSet = true;
+ }
+ XmlNode taggingNode = resultNode.FirstChild("Tagging");
+ if(!taggingNode.IsNull())
+ {
+ m_tagging = taggingNode;
+ m_taggingHasBeenSet = true;
+ }
+ XmlNode userMetadataNode = resultNode.FirstChild("UserMetadata");
+ if(!userMetadataNode.IsNull())
+ {
+ XmlNode userMetadataMember = userMetadataNode.FirstChild("MetadataEntry");
+ while(!userMetadataMember.IsNull())
+ {
+ m_userMetadata.push_back(userMetadataMember);
+ userMetadataMember = userMetadataMember.NextNode("MetadataEntry");
+ }
+
+ m_userMetadataHasBeenSet = true;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = StorageClassMapper::GetStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void S3Location::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_bucketNameHasBeenSet)
+ {
+ XmlNode bucketNameNode = parentNode.CreateChildElement("BucketName");
+ bucketNameNode.SetText(m_bucketName);
+ }
+
+ if(m_prefixHasBeenSet)
+ {
+ XmlNode prefixNode = parentNode.CreateChildElement("Prefix");
+ prefixNode.SetText(m_prefix);
+ }
+
+ if(m_encryptionHasBeenSet)
+ {
+ XmlNode encryptionNode = parentNode.CreateChildElement("Encryption");
+ m_encryption.AddToNode(encryptionNode);
+ }
+
+ if(m_cannedACLHasBeenSet)
+ {
+ XmlNode cannedACLNode = parentNode.CreateChildElement("CannedACL");
+ cannedACLNode.SetText(ObjectCannedACLMapper::GetNameForObjectCannedACL(m_cannedACL));
+ }
+
+ if(m_accessControlListHasBeenSet)
+ {
+ XmlNode accessControlListParentNode = parentNode.CreateChildElement("AccessControlList");
+ for(const auto& item : m_accessControlList)
+ {
+ XmlNode accessControlListNode = accessControlListParentNode.CreateChildElement("Grant");
+ item.AddToNode(accessControlListNode);
+ }
+ }
+
+ if(m_taggingHasBeenSet)
+ {
+ XmlNode taggingNode = parentNode.CreateChildElement("Tagging");
+ m_tagging.AddToNode(taggingNode);
+ }
+
+ if(m_userMetadataHasBeenSet)
+ {
+ XmlNode userMetadataParentNode = parentNode.CreateChildElement("UserMetadata");
+ for(const auto& item : m_userMetadata)
+ {
+ XmlNode userMetadataNode = userMetadataParentNode.CreateChildElement("MetadataEntry");
+ item.AddToNode(userMetadataNode);
+ }
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(StorageClassMapper::GetNameForStorageClass(m_storageClass));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSEKMS.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSEKMS.cpp
new file mode 100644
index 00000000000..5f2b5ea5448
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSEKMS.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SSEKMS.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+SSEKMS::SSEKMS() :
+ m_keyIdHasBeenSet(false)
+{
+}
+
+SSEKMS::SSEKMS(const XmlNode& xmlNode) :
+ m_keyIdHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+SSEKMS& SSEKMS::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyIdNode = resultNode.FirstChild("KeyId");
+ if(!keyIdNode.IsNull())
+ {
+ m_keyId = Aws::Utils::Xml::DecodeEscapedXmlText(keyIdNode.GetText());
+ m_keyIdHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void SSEKMS::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyIdHasBeenSet)
+ {
+ XmlNode keyIdNode = parentNode.CreateChildElement("KeyId");
+ keyIdNode.SetText(m_keyId);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSES3.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSES3.cpp
new file mode 100644
index 00000000000..c76e55718bc
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SSES3.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SSES3.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+SSES3::SSES3()
+{
+}
+
+SSES3::SSES3(const XmlNode& xmlNode)
+{
+ *this = xmlNode;
+}
+
+SSES3& SSES3::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ return *this;
+}
+
+void SSES3::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ AWS_UNREFERENCED_PARAM(parentNode);
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ScanRange.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ScanRange.cpp
new file mode 100644
index 00000000000..c52aaa02c2a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ScanRange.cpp
@@ -0,0 +1,86 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ScanRange.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ScanRange::ScanRange() :
+ m_start(0),
+ m_startHasBeenSet(false),
+ m_end(0),
+ m_endHasBeenSet(false)
+{
+}
+
+ScanRange::ScanRange(const XmlNode& xmlNode) :
+ m_start(0),
+ m_startHasBeenSet(false),
+ m_end(0),
+ m_endHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ScanRange& ScanRange::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode startNode = resultNode.FirstChild("Start");
+ if(!startNode.IsNull())
+ {
+ m_start = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(startNode.GetText()).c_str()).c_str());
+ m_startHasBeenSet = true;
+ }
+ XmlNode endNode = resultNode.FirstChild("End");
+ if(!endNode.IsNull())
+ {
+ m_end = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(endNode.GetText()).c_str()).c_str());
+ m_endHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ScanRange::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_startHasBeenSet)
+ {
+ XmlNode startNode = parentNode.CreateChildElement("Start");
+ ss << m_start;
+ startNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_endHasBeenSet)
+ {
+ XmlNode endNode = parentNode.CreateChildElement("End");
+ ss << m_end;
+ endNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentHandler.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentHandler.cpp
new file mode 100644
index 00000000000..a4e8756d27a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentHandler.cpp
@@ -0,0 +1,271 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SelectObjectContentHandler.h>
+#include <aws/s3/S3ErrorMarshaller.h>
+#include <aws/core/client/CoreErrors.h>
+#include <aws/core/utils/event/EventStreamErrors.h>
+#include <aws/core/utils/logging/LogMacros.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Event;
+using namespace Aws::Utils::Xml;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+ using namespace Aws::Client;
+
+ static const char SELECTOBJECTCONTENT_HANDLER_CLASS_TAG[] = "SelectObjectContentHandler";
+
+ SelectObjectContentHandler::SelectObjectContentHandler() : EventStreamHandler()
+ {
+ m_onRecordsEvent = [&](const RecordsEvent&)
+ {
+ AWS_LOGSTREAM_TRACE(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "RecordsEvent received.");
+ };
+
+ m_onStatsEvent = [&](const StatsEvent&)
+ {
+ AWS_LOGSTREAM_TRACE(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "StatsEvent received.");
+ };
+
+ m_onProgressEvent = [&](const ProgressEvent&)
+ {
+ AWS_LOGSTREAM_TRACE(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "ProgressEvent received.");
+ };
+
+ m_onContinuationEvent = [&]()
+ {
+ AWS_LOGSTREAM_TRACE(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "ContinuationEvent received.");
+ };
+
+ m_onEndEvent = [&]()
+ {
+ AWS_LOGSTREAM_TRACE(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "EndEvent received.");
+ };
+
+ m_onError = [&](const AWSError<S3Errors>& error)
+ {
+ AWS_LOGSTREAM_TRACE(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "S3 Errors received, " << error);
+ };
+ }
+
+ void SelectObjectContentHandler::OnEvent()
+ {
+ // Handler internal error during event stream decoding.
+ if (!*this)
+ {
+ AWSError<CoreErrors> error = EventStreamErrorsMapper::GetAwsErrorForEventStreamError(GetInternalError());
+ error.SetMessage(GetEventPayloadAsString());
+ m_onError(AWSError<S3Errors>(error));
+ return;
+ }
+
+ const auto& headers = GetEventHeaders();
+ auto messageTypeHeaderIter = headers.find(MESSAGE_TYPE_HEADER);
+ if (messageTypeHeaderIter == headers.end())
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "Header: " << MESSAGE_TYPE_HEADER << " not found in the message.");
+ return;
+ }
+
+ switch (Aws::Utils::Event::Message::GetMessageTypeForName(messageTypeHeaderIter->second.GetEventHeaderValueAsString()))
+ {
+ case Aws::Utils::Event::Message::MessageType::EVENT:
+ HandleEventInMessage();
+ break;
+ case Aws::Utils::Event::Message::MessageType::REQUEST_LEVEL_ERROR:
+ case Aws::Utils::Event::Message::MessageType::REQUEST_LEVEL_EXCEPTION:
+ {
+ HandleErrorInMessage();
+ break;
+ }
+ default:
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG,
+ "Unexpected message type: " << messageTypeHeaderIter->second.GetEventHeaderValueAsString());
+ break;
+ }
+ }
+
+ void SelectObjectContentHandler::HandleEventInMessage()
+ {
+ const auto& headers = GetEventHeaders();
+ auto eventTypeHeaderIter = headers.find(EVENT_TYPE_HEADER);
+ if (eventTypeHeaderIter == headers.end())
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "Header: " << EVENT_TYPE_HEADER << " not found in the message.");
+ return;
+ }
+ switch (SelectObjectContentEventMapper::GetSelectObjectContentEventTypeForName(eventTypeHeaderIter->second.GetEventHeaderValueAsString()))
+ {
+ case SelectObjectContentEventType::RECORDS:
+ {
+ RecordsEvent event(GetEventPayloadWithOwnership());
+ m_onRecordsEvent(event);
+ break;
+ }
+ case SelectObjectContentEventType::STATS:
+ {
+ auto xmlDoc = XmlDocument::CreateFromXmlString(GetEventPayloadAsString());
+ if (!xmlDoc.WasParseSuccessful())
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "Unable to generate a proper StatsEvent object from the response in XML format.");
+ break;
+ }
+
+ m_onStatsEvent(StatsEvent(xmlDoc.GetRootElement()));
+ break;
+ }
+ case SelectObjectContentEventType::PROGRESS:
+ {
+ auto xmlDoc = XmlDocument::CreateFromXmlString(GetEventPayloadAsString());
+ if (!xmlDoc.WasParseSuccessful())
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "Unable to generate a proper ProgressEvent object from the response in XML format.");
+ break;
+ }
+
+ m_onProgressEvent(ProgressEvent(xmlDoc.GetRootElement()));
+ break;
+ }
+ case SelectObjectContentEventType::CONT:
+ {
+ m_onContinuationEvent();
+ break;
+ }
+ case SelectObjectContentEventType::END:
+ {
+ m_onEndEvent();
+ break;
+ }
+ default:
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG,
+ "Unexpected event type: " << eventTypeHeaderIter->second.GetEventHeaderValueAsString());
+ break;
+ }
+ }
+
+ void SelectObjectContentHandler::HandleErrorInMessage()
+ {
+ const auto& headers = GetEventHeaders();
+ Aws::String errorCode;
+ Aws::String errorMessage;
+ auto errorHeaderIter = headers.find(ERROR_CODE_HEADER);
+ if (errorHeaderIter == headers.end())
+ {
+ errorHeaderIter = headers.find(EXCEPTION_TYPE_HEADER);
+ if (errorHeaderIter == headers.end())
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG,
+ "Error type was not found in the event message.");
+ return;
+ }
+ }
+
+ errorCode = errorHeaderIter->second.GetEventHeaderValueAsString();
+ errorHeaderIter = headers.find(ERROR_MESSAGE_HEADER);
+ if (errorHeaderIter == headers.end())
+ {
+ errorHeaderIter = headers.find(EXCEPTION_TYPE_HEADER);
+ if (errorHeaderIter == headers.end())
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG,
+ "Error description was not found in the event message.");
+ return;
+ }
+ }
+ errorMessage = errorHeaderIter->second.GetEventHeaderValueAsString();
+ MarshallError(errorCode, errorMessage);
+ }
+
+ void SelectObjectContentHandler::MarshallError(const Aws::String& errorCode, const Aws::String& errorMessage)
+ {
+ S3ErrorMarshaller errorMarshaller;
+ AWSError<CoreErrors> error;
+
+ if (errorCode.empty())
+ {
+ error = AWSError<CoreErrors>(CoreErrors::UNKNOWN, "", errorMessage, false);
+ }
+ else
+ {
+ error = errorMarshaller.FindErrorByName(errorMessage.c_str());
+ if (error.GetErrorType() != CoreErrors::UNKNOWN)
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "Encountered AWSError '" << errorCode.c_str() << "': " << errorMessage.c_str());
+ error.SetExceptionName(errorCode);
+ error.SetMessage(errorMessage);
+ }
+ else
+ {
+ AWS_LOGSTREAM_WARN(SELECTOBJECTCONTENT_HANDLER_CLASS_TAG, "Encountered Unknown AWSError '" << errorCode.c_str() << "': " << errorMessage.c_str());
+ error = AWSError<CoreErrors>(CoreErrors::UNKNOWN, errorCode, "Unable to parse ExceptionName: " + errorCode + " Message: " + errorMessage, false);
+ }
+ }
+
+ m_onError(AWSError<S3Errors>(error));
+ }
+
+namespace SelectObjectContentEventMapper
+{
+ static const int RECORDS_HASH = Aws::Utils::HashingUtils::HashString("Records");
+ static const int STATS_HASH = Aws::Utils::HashingUtils::HashString("Stats");
+ static const int PROGRESS_HASH = Aws::Utils::HashingUtils::HashString("Progress");
+ static const int CONT_HASH = Aws::Utils::HashingUtils::HashString("Cont");
+ static const int END_HASH = Aws::Utils::HashingUtils::HashString("End");
+
+ SelectObjectContentEventType GetSelectObjectContentEventTypeForName(const Aws::String& name)
+ {
+ int hashCode = Aws::Utils::HashingUtils::HashString(name.c_str());
+ if (hashCode == RECORDS_HASH)
+ {
+ return SelectObjectContentEventType::RECORDS;
+ }
+ else if (hashCode == STATS_HASH)
+ {
+ return SelectObjectContentEventType::STATS;
+ }
+ else if (hashCode == PROGRESS_HASH)
+ {
+ return SelectObjectContentEventType::PROGRESS;
+ }
+ else if (hashCode == CONT_HASH)
+ {
+ return SelectObjectContentEventType::CONT;
+ }
+ else if (hashCode == END_HASH)
+ {
+ return SelectObjectContentEventType::END;
+ }
+ return SelectObjectContentEventType::UNKNOWN;
+ }
+
+ Aws::String GetNameForSelectObjectContentEventType(SelectObjectContentEventType value)
+ {
+ switch (value)
+ {
+ case SelectObjectContentEventType::RECORDS:
+ return "Records";
+ case SelectObjectContentEventType::STATS:
+ return "Stats";
+ case SelectObjectContentEventType::PROGRESS:
+ return "Progress";
+ case SelectObjectContentEventType::CONT:
+ return "Cont";
+ case SelectObjectContentEventType::END:
+ return "End";
+ default:
+ return "Unknown";
+ }
+ }
+} // namespace SelectObjectContentEventMapper
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentRequest.cpp
new file mode 100644
index 00000000000..f3443311ddb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectObjectContentRequest.cpp
@@ -0,0 +1,140 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SelectObjectContentRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+SelectObjectContentRequest::SelectObjectContentRequest() :
+ m_bucketHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_expressionHasBeenSet(false),
+ m_expressionType(ExpressionType::NOT_SET),
+ m_expressionTypeHasBeenSet(false),
+ m_requestProgressHasBeenSet(false),
+ m_inputSerializationHasBeenSet(false),
+ m_outputSerializationHasBeenSet(false),
+ m_scanRangeHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false),
+ m_decoder(Aws::Utils::Event::EventStreamDecoder(&m_handler))
+{
+}
+
+Aws::String SelectObjectContentRequest::SerializePayload() const
+{
+ XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("SelectObjectContentRequest");
+
+ XmlNode parentNode = payloadDoc.GetRootElement();
+ parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
+
+ Aws::StringStream ss;
+ if(m_expressionHasBeenSet)
+ {
+ XmlNode expressionNode = parentNode.CreateChildElement("Expression");
+ expressionNode.SetText(m_expression);
+ }
+
+ if(m_expressionTypeHasBeenSet)
+ {
+ XmlNode expressionTypeNode = parentNode.CreateChildElement("ExpressionType");
+ expressionTypeNode.SetText(ExpressionTypeMapper::GetNameForExpressionType(m_expressionType));
+ }
+
+ if(m_requestProgressHasBeenSet)
+ {
+ XmlNode requestProgressNode = parentNode.CreateChildElement("RequestProgress");
+ m_requestProgress.AddToNode(requestProgressNode);
+ }
+
+ if(m_inputSerializationHasBeenSet)
+ {
+ XmlNode inputSerializationNode = parentNode.CreateChildElement("InputSerialization");
+ m_inputSerialization.AddToNode(inputSerializationNode);
+ }
+
+ if(m_outputSerializationHasBeenSet)
+ {
+ XmlNode outputSerializationNode = parentNode.CreateChildElement("OutputSerialization");
+ m_outputSerialization.AddToNode(outputSerializationNode);
+ }
+
+ if(m_scanRangeHasBeenSet)
+ {
+ XmlNode scanRangeNode = parentNode.CreateChildElement("ScanRange");
+ m_scanRange.AddToNode(scanRangeNode);
+ }
+
+ return payloadDoc.ConvertToString();
+}
+
+void SelectObjectContentRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection SelectObjectContentRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectParameters.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectParameters.cpp
new file mode 100644
index 00000000000..f7891a00d74
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SelectParameters.cpp
@@ -0,0 +1,108 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SelectParameters.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+SelectParameters::SelectParameters() :
+ m_inputSerializationHasBeenSet(false),
+ m_expressionType(ExpressionType::NOT_SET),
+ m_expressionTypeHasBeenSet(false),
+ m_expressionHasBeenSet(false),
+ m_outputSerializationHasBeenSet(false)
+{
+}
+
+SelectParameters::SelectParameters(const XmlNode& xmlNode) :
+ m_inputSerializationHasBeenSet(false),
+ m_expressionType(ExpressionType::NOT_SET),
+ m_expressionTypeHasBeenSet(false),
+ m_expressionHasBeenSet(false),
+ m_outputSerializationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+SelectParameters& SelectParameters::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode inputSerializationNode = resultNode.FirstChild("InputSerialization");
+ if(!inputSerializationNode.IsNull())
+ {
+ m_inputSerialization = inputSerializationNode;
+ m_inputSerializationHasBeenSet = true;
+ }
+ XmlNode expressionTypeNode = resultNode.FirstChild("ExpressionType");
+ if(!expressionTypeNode.IsNull())
+ {
+ m_expressionType = ExpressionTypeMapper::GetExpressionTypeForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(expressionTypeNode.GetText()).c_str()).c_str());
+ m_expressionTypeHasBeenSet = true;
+ }
+ XmlNode expressionNode = resultNode.FirstChild("Expression");
+ if(!expressionNode.IsNull())
+ {
+ m_expression = Aws::Utils::Xml::DecodeEscapedXmlText(expressionNode.GetText());
+ m_expressionHasBeenSet = true;
+ }
+ XmlNode outputSerializationNode = resultNode.FirstChild("OutputSerialization");
+ if(!outputSerializationNode.IsNull())
+ {
+ m_outputSerialization = outputSerializationNode;
+ m_outputSerializationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void SelectParameters::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_inputSerializationHasBeenSet)
+ {
+ XmlNode inputSerializationNode = parentNode.CreateChildElement("InputSerialization");
+ m_inputSerialization.AddToNode(inputSerializationNode);
+ }
+
+ if(m_expressionTypeHasBeenSet)
+ {
+ XmlNode expressionTypeNode = parentNode.CreateChildElement("ExpressionType");
+ expressionTypeNode.SetText(ExpressionTypeMapper::GetNameForExpressionType(m_expressionType));
+ }
+
+ if(m_expressionHasBeenSet)
+ {
+ XmlNode expressionNode = parentNode.CreateChildElement("Expression");
+ expressionNode.SetText(m_expression);
+ }
+
+ if(m_outputSerializationHasBeenSet)
+ {
+ XmlNode outputSerializationNode = parentNode.CreateChildElement("OutputSerialization");
+ m_outputSerialization.AddToNode(outputSerializationNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryption.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryption.cpp
new file mode 100644
index 00000000000..08474a6aee3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryption.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ServerSideEncryption.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace ServerSideEncryptionMapper
+ {
+
+ static const int AES256_HASH = HashingUtils::HashString("AES256");
+ static const int aws_kms_HASH = HashingUtils::HashString("aws:kms");
+
+
+ ServerSideEncryption GetServerSideEncryptionForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == AES256_HASH)
+ {
+ return ServerSideEncryption::AES256;
+ }
+ else if (hashCode == aws_kms_HASH)
+ {
+ return ServerSideEncryption::aws_kms;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<ServerSideEncryption>(hashCode);
+ }
+
+ return ServerSideEncryption::NOT_SET;
+ }
+
+ Aws::String GetNameForServerSideEncryption(ServerSideEncryption enumValue)
+ {
+ switch(enumValue)
+ {
+ case ServerSideEncryption::AES256:
+ return "AES256";
+ case ServerSideEncryption::aws_kms:
+ return "aws:kms";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace ServerSideEncryptionMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionByDefault.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionByDefault.cpp
new file mode 100644
index 00000000000..aca556a65de
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionByDefault.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ServerSideEncryptionByDefault.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ServerSideEncryptionByDefault::ServerSideEncryptionByDefault() :
+ m_sSEAlgorithm(ServerSideEncryption::NOT_SET),
+ m_sSEAlgorithmHasBeenSet(false),
+ m_kMSMasterKeyIDHasBeenSet(false)
+{
+}
+
+ServerSideEncryptionByDefault::ServerSideEncryptionByDefault(const XmlNode& xmlNode) :
+ m_sSEAlgorithm(ServerSideEncryption::NOT_SET),
+ m_sSEAlgorithmHasBeenSet(false),
+ m_kMSMasterKeyIDHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ServerSideEncryptionByDefault& ServerSideEncryptionByDefault::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode sSEAlgorithmNode = resultNode.FirstChild("SSEAlgorithm");
+ if(!sSEAlgorithmNode.IsNull())
+ {
+ m_sSEAlgorithm = ServerSideEncryptionMapper::GetServerSideEncryptionForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(sSEAlgorithmNode.GetText()).c_str()).c_str());
+ m_sSEAlgorithmHasBeenSet = true;
+ }
+ XmlNode kMSMasterKeyIDNode = resultNode.FirstChild("KMSMasterKeyID");
+ if(!kMSMasterKeyIDNode.IsNull())
+ {
+ m_kMSMasterKeyID = Aws::Utils::Xml::DecodeEscapedXmlText(kMSMasterKeyIDNode.GetText());
+ m_kMSMasterKeyIDHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ServerSideEncryptionByDefault::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_sSEAlgorithmHasBeenSet)
+ {
+ XmlNode sSEAlgorithmNode = parentNode.CreateChildElement("SSEAlgorithm");
+ sSEAlgorithmNode.SetText(ServerSideEncryptionMapper::GetNameForServerSideEncryption(m_sSEAlgorithm));
+ }
+
+ if(m_kMSMasterKeyIDHasBeenSet)
+ {
+ XmlNode kMSMasterKeyIDNode = parentNode.CreateChildElement("KMSMasterKeyID");
+ kMSMasterKeyIDNode.SetText(m_kMSMasterKeyID);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionConfiguration.cpp
new file mode 100644
index 00000000000..eebbc32accd
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionConfiguration.cpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ServerSideEncryptionConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ServerSideEncryptionConfiguration::ServerSideEncryptionConfiguration() :
+ m_rulesHasBeenSet(false)
+{
+}
+
+ServerSideEncryptionConfiguration::ServerSideEncryptionConfiguration(const XmlNode& xmlNode) :
+ m_rulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ServerSideEncryptionConfiguration& ServerSideEncryptionConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode rulesNode = resultNode.FirstChild("Rule");
+ if(!rulesNode.IsNull())
+ {
+ XmlNode ruleMember = rulesNode;
+ while(!ruleMember.IsNull())
+ {
+ m_rules.push_back(ruleMember);
+ ruleMember = ruleMember.NextNode("Rule");
+ }
+
+ m_rulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ServerSideEncryptionConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_rulesHasBeenSet)
+ {
+ for(const auto& item : m_rules)
+ {
+ XmlNode rulesNode = parentNode.CreateChildElement("Rule");
+ item.AddToNode(rulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionRule.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionRule.cpp
new file mode 100644
index 00000000000..6c14b669898
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/ServerSideEncryptionRule.cpp
@@ -0,0 +1,82 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/ServerSideEncryptionRule.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+ServerSideEncryptionRule::ServerSideEncryptionRule() :
+ m_applyServerSideEncryptionByDefaultHasBeenSet(false),
+ m_bucketKeyEnabled(false),
+ m_bucketKeyEnabledHasBeenSet(false)
+{
+}
+
+ServerSideEncryptionRule::ServerSideEncryptionRule(const XmlNode& xmlNode) :
+ m_applyServerSideEncryptionByDefaultHasBeenSet(false),
+ m_bucketKeyEnabled(false),
+ m_bucketKeyEnabledHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+ServerSideEncryptionRule& ServerSideEncryptionRule::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode applyServerSideEncryptionByDefaultNode = resultNode.FirstChild("ApplyServerSideEncryptionByDefault");
+ if(!applyServerSideEncryptionByDefaultNode.IsNull())
+ {
+ m_applyServerSideEncryptionByDefault = applyServerSideEncryptionByDefaultNode;
+ m_applyServerSideEncryptionByDefaultHasBeenSet = true;
+ }
+ XmlNode bucketKeyEnabledNode = resultNode.FirstChild("BucketKeyEnabled");
+ if(!bucketKeyEnabledNode.IsNull())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(bucketKeyEnabledNode.GetText()).c_str()).c_str());
+ m_bucketKeyEnabledHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void ServerSideEncryptionRule::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_applyServerSideEncryptionByDefaultHasBeenSet)
+ {
+ XmlNode applyServerSideEncryptionByDefaultNode = parentNode.CreateChildElement("ApplyServerSideEncryptionByDefault");
+ m_applyServerSideEncryptionByDefault.AddToNode(applyServerSideEncryptionByDefaultNode);
+ }
+
+ if(m_bucketKeyEnabledHasBeenSet)
+ {
+ XmlNode bucketKeyEnabledNode = parentNode.CreateChildElement("BucketKeyEnabled");
+ ss << std::boolalpha << m_bucketKeyEnabled;
+ bucketKeyEnabledNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SourceSelectionCriteria.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SourceSelectionCriteria.cpp
new file mode 100644
index 00000000000..5f712101f50
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SourceSelectionCriteria.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SourceSelectionCriteria.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+SourceSelectionCriteria::SourceSelectionCriteria() :
+ m_sseKmsEncryptedObjectsHasBeenSet(false),
+ m_replicaModificationsHasBeenSet(false)
+{
+}
+
+SourceSelectionCriteria::SourceSelectionCriteria(const XmlNode& xmlNode) :
+ m_sseKmsEncryptedObjectsHasBeenSet(false),
+ m_replicaModificationsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+SourceSelectionCriteria& SourceSelectionCriteria::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode sseKmsEncryptedObjectsNode = resultNode.FirstChild("SseKmsEncryptedObjects");
+ if(!sseKmsEncryptedObjectsNode.IsNull())
+ {
+ m_sseKmsEncryptedObjects = sseKmsEncryptedObjectsNode;
+ m_sseKmsEncryptedObjectsHasBeenSet = true;
+ }
+ XmlNode replicaModificationsNode = resultNode.FirstChild("ReplicaModifications");
+ if(!replicaModificationsNode.IsNull())
+ {
+ m_replicaModifications = replicaModificationsNode;
+ m_replicaModificationsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void SourceSelectionCriteria::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_sseKmsEncryptedObjectsHasBeenSet)
+ {
+ XmlNode sseKmsEncryptedObjectsNode = parentNode.CreateChildElement("SseKmsEncryptedObjects");
+ m_sseKmsEncryptedObjects.AddToNode(sseKmsEncryptedObjectsNode);
+ }
+
+ if(m_replicaModificationsHasBeenSet)
+ {
+ XmlNode replicaModificationsNode = parentNode.CreateChildElement("ReplicaModifications");
+ m_replicaModifications.AddToNode(replicaModificationsNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjects.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjects.cpp
new file mode 100644
index 00000000000..94e7e9091d1
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjects.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SseKmsEncryptedObjects.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+SseKmsEncryptedObjects::SseKmsEncryptedObjects() :
+ m_status(SseKmsEncryptedObjectsStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+}
+
+SseKmsEncryptedObjects::SseKmsEncryptedObjects(const XmlNode& xmlNode) :
+ m_status(SseKmsEncryptedObjectsStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+SseKmsEncryptedObjects& SseKmsEncryptedObjects::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = SseKmsEncryptedObjectsStatusMapper::GetSseKmsEncryptedObjectsStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void SseKmsEncryptedObjects::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(SseKmsEncryptedObjectsStatusMapper::GetNameForSseKmsEncryptedObjectsStatus(m_status));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjectsStatus.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjectsStatus.cpp
new file mode 100644
index 00000000000..010a94fda56
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/SseKmsEncryptedObjectsStatus.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/SseKmsEncryptedObjectsStatus.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace SseKmsEncryptedObjectsStatusMapper
+ {
+
+ static const int Enabled_HASH = HashingUtils::HashString("Enabled");
+ static const int Disabled_HASH = HashingUtils::HashString("Disabled");
+
+
+ SseKmsEncryptedObjectsStatus GetSseKmsEncryptedObjectsStatusForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Enabled_HASH)
+ {
+ return SseKmsEncryptedObjectsStatus::Enabled;
+ }
+ else if (hashCode == Disabled_HASH)
+ {
+ return SseKmsEncryptedObjectsStatus::Disabled;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<SseKmsEncryptedObjectsStatus>(hashCode);
+ }
+
+ return SseKmsEncryptedObjectsStatus::NOT_SET;
+ }
+
+ Aws::String GetNameForSseKmsEncryptedObjectsStatus(SseKmsEncryptedObjectsStatus enumValue)
+ {
+ switch(enumValue)
+ {
+ case SseKmsEncryptedObjectsStatus::Enabled:
+ return "Enabled";
+ case SseKmsEncryptedObjectsStatus::Disabled:
+ return "Disabled";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace SseKmsEncryptedObjectsStatusMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Stats.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Stats.cpp
new file mode 100644
index 00000000000..5179103ef08
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Stats.cpp
@@ -0,0 +1,104 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Stats.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Stats::Stats() :
+ m_bytesScanned(0),
+ m_bytesScannedHasBeenSet(false),
+ m_bytesProcessed(0),
+ m_bytesProcessedHasBeenSet(false),
+ m_bytesReturned(0),
+ m_bytesReturnedHasBeenSet(false)
+{
+}
+
+Stats::Stats(const XmlNode& xmlNode) :
+ m_bytesScanned(0),
+ m_bytesScannedHasBeenSet(false),
+ m_bytesProcessed(0),
+ m_bytesProcessedHasBeenSet(false),
+ m_bytesReturned(0),
+ m_bytesReturnedHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Stats& Stats::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode bytesScannedNode = resultNode.FirstChild("BytesScanned");
+ if(!bytesScannedNode.IsNull())
+ {
+ m_bytesScanned = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(bytesScannedNode.GetText()).c_str()).c_str());
+ m_bytesScannedHasBeenSet = true;
+ }
+ XmlNode bytesProcessedNode = resultNode.FirstChild("BytesProcessed");
+ if(!bytesProcessedNode.IsNull())
+ {
+ m_bytesProcessed = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(bytesProcessedNode.GetText()).c_str()).c_str());
+ m_bytesProcessedHasBeenSet = true;
+ }
+ XmlNode bytesReturnedNode = resultNode.FirstChild("BytesReturned");
+ if(!bytesReturnedNode.IsNull())
+ {
+ m_bytesReturned = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(bytesReturnedNode.GetText()).c_str()).c_str());
+ m_bytesReturnedHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Stats::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_bytesScannedHasBeenSet)
+ {
+ XmlNode bytesScannedNode = parentNode.CreateChildElement("BytesScanned");
+ ss << m_bytesScanned;
+ bytesScannedNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_bytesProcessedHasBeenSet)
+ {
+ XmlNode bytesProcessedNode = parentNode.CreateChildElement("BytesProcessed");
+ ss << m_bytesProcessed;
+ bytesProcessedNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_bytesReturnedHasBeenSet)
+ {
+ XmlNode bytesReturnedNode = parentNode.CreateChildElement("BytesReturned");
+ ss << m_bytesReturned;
+ bytesReturnedNode.SetText(ss.str());
+ ss.str("");
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StatsEvent.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StatsEvent.cpp
new file mode 100644
index 00000000000..7e047731392
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StatsEvent.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/StatsEvent.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+StatsEvent::StatsEvent() :
+ m_detailsHasBeenSet(false)
+{
+}
+
+StatsEvent::StatsEvent(const XmlNode& xmlNode) :
+ m_detailsHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+StatsEvent& StatsEvent::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode detailsNode = resultNode;
+ if(!detailsNode.IsNull())
+ {
+ m_details = detailsNode;
+ m_detailsHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void StatsEvent::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_detailsHasBeenSet)
+ {
+ XmlNode detailsNode = parentNode.CreateChildElement("Details");
+ m_details.AddToNode(detailsNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClass.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClass.cpp
new file mode 100644
index 00000000000..0ab7edd5de4
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClass.cpp
@@ -0,0 +1,112 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/StorageClass.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace StorageClassMapper
+ {
+
+ static const int STANDARD_HASH = HashingUtils::HashString("STANDARD");
+ static const int REDUCED_REDUNDANCY_HASH = HashingUtils::HashString("REDUCED_REDUNDANCY");
+ static const int STANDARD_IA_HASH = HashingUtils::HashString("STANDARD_IA");
+ static const int ONEZONE_IA_HASH = HashingUtils::HashString("ONEZONE_IA");
+ static const int INTELLIGENT_TIERING_HASH = HashingUtils::HashString("INTELLIGENT_TIERING");
+ static const int GLACIER_HASH = HashingUtils::HashString("GLACIER");
+ static const int DEEP_ARCHIVE_HASH = HashingUtils::HashString("DEEP_ARCHIVE");
+ static const int OUTPOSTS_HASH = HashingUtils::HashString("OUTPOSTS");
+
+
+ StorageClass GetStorageClassForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == STANDARD_HASH)
+ {
+ return StorageClass::STANDARD;
+ }
+ else if (hashCode == REDUCED_REDUNDANCY_HASH)
+ {
+ return StorageClass::REDUCED_REDUNDANCY;
+ }
+ else if (hashCode == STANDARD_IA_HASH)
+ {
+ return StorageClass::STANDARD_IA;
+ }
+ else if (hashCode == ONEZONE_IA_HASH)
+ {
+ return StorageClass::ONEZONE_IA;
+ }
+ else if (hashCode == INTELLIGENT_TIERING_HASH)
+ {
+ return StorageClass::INTELLIGENT_TIERING;
+ }
+ else if (hashCode == GLACIER_HASH)
+ {
+ return StorageClass::GLACIER;
+ }
+ else if (hashCode == DEEP_ARCHIVE_HASH)
+ {
+ return StorageClass::DEEP_ARCHIVE;
+ }
+ else if (hashCode == OUTPOSTS_HASH)
+ {
+ return StorageClass::OUTPOSTS;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<StorageClass>(hashCode);
+ }
+
+ return StorageClass::NOT_SET;
+ }
+
+ Aws::String GetNameForStorageClass(StorageClass enumValue)
+ {
+ switch(enumValue)
+ {
+ case StorageClass::STANDARD:
+ return "STANDARD";
+ case StorageClass::REDUCED_REDUNDANCY:
+ return "REDUCED_REDUNDANCY";
+ case StorageClass::STANDARD_IA:
+ return "STANDARD_IA";
+ case StorageClass::ONEZONE_IA:
+ return "ONEZONE_IA";
+ case StorageClass::INTELLIGENT_TIERING:
+ return "INTELLIGENT_TIERING";
+ case StorageClass::GLACIER:
+ return "GLACIER";
+ case StorageClass::DEEP_ARCHIVE:
+ return "DEEP_ARCHIVE";
+ case StorageClass::OUTPOSTS:
+ return "OUTPOSTS";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace StorageClassMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysis.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysis.cpp
new file mode 100644
index 00000000000..ec25b2fac13
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysis.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/StorageClassAnalysis.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+StorageClassAnalysis::StorageClassAnalysis() :
+ m_dataExportHasBeenSet(false)
+{
+}
+
+StorageClassAnalysis::StorageClassAnalysis(const XmlNode& xmlNode) :
+ m_dataExportHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+StorageClassAnalysis& StorageClassAnalysis::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode dataExportNode = resultNode.FirstChild("DataExport");
+ if(!dataExportNode.IsNull())
+ {
+ m_dataExport = dataExportNode;
+ m_dataExportHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void StorageClassAnalysis::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_dataExportHasBeenSet)
+ {
+ XmlNode dataExportNode = parentNode.CreateChildElement("DataExport");
+ m_dataExport.AddToNode(dataExportNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisDataExport.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisDataExport.cpp
new file mode 100644
index 00000000000..104703d2fba
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisDataExport.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/StorageClassAnalysisDataExport.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+StorageClassAnalysisDataExport::StorageClassAnalysisDataExport() :
+ m_outputSchemaVersion(StorageClassAnalysisSchemaVersion::NOT_SET),
+ m_outputSchemaVersionHasBeenSet(false),
+ m_destinationHasBeenSet(false)
+{
+}
+
+StorageClassAnalysisDataExport::StorageClassAnalysisDataExport(const XmlNode& xmlNode) :
+ m_outputSchemaVersion(StorageClassAnalysisSchemaVersion::NOT_SET),
+ m_outputSchemaVersionHasBeenSet(false),
+ m_destinationHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+StorageClassAnalysisDataExport& StorageClassAnalysisDataExport::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode outputSchemaVersionNode = resultNode.FirstChild("OutputSchemaVersion");
+ if(!outputSchemaVersionNode.IsNull())
+ {
+ m_outputSchemaVersion = StorageClassAnalysisSchemaVersionMapper::GetStorageClassAnalysisSchemaVersionForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(outputSchemaVersionNode.GetText()).c_str()).c_str());
+ m_outputSchemaVersionHasBeenSet = true;
+ }
+ XmlNode destinationNode = resultNode.FirstChild("Destination");
+ if(!destinationNode.IsNull())
+ {
+ m_destination = destinationNode;
+ m_destinationHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void StorageClassAnalysisDataExport::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_outputSchemaVersionHasBeenSet)
+ {
+ XmlNode outputSchemaVersionNode = parentNode.CreateChildElement("OutputSchemaVersion");
+ outputSchemaVersionNode.SetText(StorageClassAnalysisSchemaVersionMapper::GetNameForStorageClassAnalysisSchemaVersion(m_outputSchemaVersion));
+ }
+
+ if(m_destinationHasBeenSet)
+ {
+ XmlNode destinationNode = parentNode.CreateChildElement("Destination");
+ m_destination.AddToNode(destinationNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisSchemaVersion.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisSchemaVersion.cpp
new file mode 100644
index 00000000000..766e3bfd123
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/StorageClassAnalysisSchemaVersion.cpp
@@ -0,0 +1,63 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/StorageClassAnalysisSchemaVersion.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace StorageClassAnalysisSchemaVersionMapper
+ {
+
+ static const int V_1_HASH = HashingUtils::HashString("V_1");
+
+
+ StorageClassAnalysisSchemaVersion GetStorageClassAnalysisSchemaVersionForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == V_1_HASH)
+ {
+ return StorageClassAnalysisSchemaVersion::V_1;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<StorageClassAnalysisSchemaVersion>(hashCode);
+ }
+
+ return StorageClassAnalysisSchemaVersion::NOT_SET;
+ }
+
+ Aws::String GetNameForStorageClassAnalysisSchemaVersion(StorageClassAnalysisSchemaVersion enumValue)
+ {
+ switch(enumValue)
+ {
+ case StorageClassAnalysisSchemaVersion::V_1:
+ return "V_1";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace StorageClassAnalysisSchemaVersionMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tag.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tag.cpp
new file mode 100644
index 00000000000..817c0929f66
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tag.cpp
@@ -0,0 +1,78 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Tag.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Tag::Tag() :
+ m_keyHasBeenSet(false),
+ m_valueHasBeenSet(false)
+{
+}
+
+Tag::Tag(const XmlNode& xmlNode) :
+ m_keyHasBeenSet(false),
+ m_valueHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Tag& Tag::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode keyNode = resultNode.FirstChild("Key");
+ if(!keyNode.IsNull())
+ {
+ m_key = Aws::Utils::Xml::DecodeEscapedXmlText(keyNode.GetText());
+ m_keyHasBeenSet = true;
+ }
+ XmlNode valueNode = resultNode.FirstChild("Value");
+ if(!valueNode.IsNull())
+ {
+ m_value = Aws::Utils::Xml::DecodeEscapedXmlText(valueNode.GetText());
+ m_valueHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Tag::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_keyHasBeenSet)
+ {
+ XmlNode keyNode = parentNode.CreateChildElement("Key");
+ keyNode.SetText(m_key);
+ }
+
+ if(m_valueHasBeenSet)
+ {
+ XmlNode valueNode = parentNode.CreateChildElement("Value");
+ valueNode.SetText(m_value);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tagging.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tagging.cpp
new file mode 100644
index 00000000000..bb31db9db7d
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tagging.cpp
@@ -0,0 +1,74 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Tagging.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Tagging::Tagging() :
+ m_tagSetHasBeenSet(false)
+{
+}
+
+Tagging::Tagging(const XmlNode& xmlNode) :
+ m_tagSetHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Tagging& Tagging::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode tagSetNode = resultNode.FirstChild("TagSet");
+ if(!tagSetNode.IsNull())
+ {
+ XmlNode tagSetMember = tagSetNode.FirstChild("Tag");
+ while(!tagSetMember.IsNull())
+ {
+ m_tagSet.push_back(tagSetMember);
+ tagSetMember = tagSetMember.NextNode("Tag");
+ }
+
+ m_tagSetHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Tagging::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_tagSetHasBeenSet)
+ {
+ XmlNode tagSetParentNode = parentNode.CreateChildElement("TagSet");
+ for(const auto& item : m_tagSet)
+ {
+ XmlNode tagSetNode = tagSetParentNode.CreateChildElement("Tag");
+ item.AddToNode(tagSetNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TaggingDirective.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TaggingDirective.cpp
new file mode 100644
index 00000000000..aa0d9e7806f
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TaggingDirective.cpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/TaggingDirective.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace TaggingDirectiveMapper
+ {
+
+ static const int COPY_HASH = HashingUtils::HashString("COPY");
+ static const int REPLACE_HASH = HashingUtils::HashString("REPLACE");
+
+
+ TaggingDirective GetTaggingDirectiveForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == COPY_HASH)
+ {
+ return TaggingDirective::COPY;
+ }
+ else if (hashCode == REPLACE_HASH)
+ {
+ return TaggingDirective::REPLACE;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<TaggingDirective>(hashCode);
+ }
+
+ return TaggingDirective::NOT_SET;
+ }
+
+ Aws::String GetNameForTaggingDirective(TaggingDirective enumValue)
+ {
+ switch(enumValue)
+ {
+ case TaggingDirective::COPY:
+ return "COPY";
+ case TaggingDirective::REPLACE:
+ return "REPLACE";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace TaggingDirectiveMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TargetGrant.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TargetGrant.cpp
new file mode 100644
index 00000000000..900c5d8dc18
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TargetGrant.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/TargetGrant.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+TargetGrant::TargetGrant() :
+ m_granteeHasBeenSet(false),
+ m_permission(BucketLogsPermission::NOT_SET),
+ m_permissionHasBeenSet(false)
+{
+}
+
+TargetGrant::TargetGrant(const XmlNode& xmlNode) :
+ m_granteeHasBeenSet(false),
+ m_permission(BucketLogsPermission::NOT_SET),
+ m_permissionHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+TargetGrant& TargetGrant::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode granteeNode = resultNode.FirstChild("Grantee");
+ if(!granteeNode.IsNull())
+ {
+ m_grantee = granteeNode;
+ m_granteeHasBeenSet = true;
+ }
+ XmlNode permissionNode = resultNode.FirstChild("Permission");
+ if(!permissionNode.IsNull())
+ {
+ m_permission = BucketLogsPermissionMapper::GetBucketLogsPermissionForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(permissionNode.GetText()).c_str()).c_str());
+ m_permissionHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void TargetGrant::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_granteeHasBeenSet)
+ {
+ XmlNode granteeNode = parentNode.CreateChildElement("Grantee");
+ m_grantee.AddToNode(granteeNode);
+ }
+
+ if(m_permissionHasBeenSet)
+ {
+ XmlNode permissionNode = parentNode.CreateChildElement("Permission");
+ permissionNode.SetText(BucketLogsPermissionMapper::GetNameForBucketLogsPermission(m_permission));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tier.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tier.cpp
new file mode 100644
index 00000000000..874f6b744fb
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tier.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Tier.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace TierMapper
+ {
+
+ static const int Standard_HASH = HashingUtils::HashString("Standard");
+ static const int Bulk_HASH = HashingUtils::HashString("Bulk");
+ static const int Expedited_HASH = HashingUtils::HashString("Expedited");
+
+
+ Tier GetTierForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == Standard_HASH)
+ {
+ return Tier::Standard;
+ }
+ else if (hashCode == Bulk_HASH)
+ {
+ return Tier::Bulk;
+ }
+ else if (hashCode == Expedited_HASH)
+ {
+ return Tier::Expedited;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<Tier>(hashCode);
+ }
+
+ return Tier::NOT_SET;
+ }
+
+ Aws::String GetNameForTier(Tier enumValue)
+ {
+ switch(enumValue)
+ {
+ case Tier::Standard:
+ return "Standard";
+ case Tier::Bulk:
+ return "Bulk";
+ case Tier::Expedited:
+ return "Expedited";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace TierMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tiering.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tiering.cpp
new file mode 100644
index 00000000000..e3149b9c436
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Tiering.cpp
@@ -0,0 +1,84 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Tiering.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Tiering::Tiering() :
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_accessTier(IntelligentTieringAccessTier::NOT_SET),
+ m_accessTierHasBeenSet(false)
+{
+}
+
+Tiering::Tiering(const XmlNode& xmlNode) :
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_accessTier(IntelligentTieringAccessTier::NOT_SET),
+ m_accessTierHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Tiering& Tiering::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode daysNode = resultNode.FirstChild("Days");
+ if(!daysNode.IsNull())
+ {
+ m_days = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(daysNode.GetText()).c_str()).c_str());
+ m_daysHasBeenSet = true;
+ }
+ XmlNode accessTierNode = resultNode.FirstChild("AccessTier");
+ if(!accessTierNode.IsNull())
+ {
+ m_accessTier = IntelligentTieringAccessTierMapper::GetIntelligentTieringAccessTierForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(accessTierNode.GetText()).c_str()).c_str());
+ m_accessTierHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Tiering::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_daysHasBeenSet)
+ {
+ XmlNode daysNode = parentNode.CreateChildElement("Days");
+ ss << m_days;
+ daysNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_accessTierHasBeenSet)
+ {
+ XmlNode accessTierNode = parentNode.CreateChildElement("AccessTier");
+ accessTierNode.SetText(IntelligentTieringAccessTierMapper::GetNameForIntelligentTieringAccessTier(m_accessTier));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfiguration.cpp
new file mode 100644
index 00000000000..768acf8f8f6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfiguration.cpp
@@ -0,0 +1,115 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/TopicConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+TopicConfiguration::TopicConfiguration() :
+ m_idHasBeenSet(false),
+ m_topicArnHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+}
+
+TopicConfiguration::TopicConfiguration(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_topicArnHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_filterHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+TopicConfiguration& TopicConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode topicArnNode = resultNode.FirstChild("Topic");
+ if(!topicArnNode.IsNull())
+ {
+ m_topicArn = Aws::Utils::Xml::DecodeEscapedXmlText(topicArnNode.GetText());
+ m_topicArnHasBeenSet = true;
+ }
+ XmlNode eventsNode = resultNode.FirstChild("Event");
+ if(!eventsNode.IsNull())
+ {
+ XmlNode eventMember = eventsNode;
+ while(!eventMember.IsNull())
+ {
+ m_events.push_back(EventMapper::GetEventForName(StringUtils::Trim(eventMember.GetText().c_str())));
+ eventMember = eventMember.NextNode("Event");
+ }
+
+ m_eventsHasBeenSet = true;
+ }
+ XmlNode filterNode = resultNode.FirstChild("Filter");
+ if(!filterNode.IsNull())
+ {
+ m_filter = filterNode;
+ m_filterHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void TopicConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_topicArnHasBeenSet)
+ {
+ XmlNode topicArnNode = parentNode.CreateChildElement("Topic");
+ topicArnNode.SetText(m_topicArn);
+ }
+
+ if(m_eventsHasBeenSet)
+ {
+ for(const auto& item : m_events)
+ {
+ XmlNode eventsNode = parentNode.CreateChildElement("Event");
+ eventsNode.SetText(EventMapper::GetNameForEvent(item));
+ }
+ }
+
+ if(m_filterHasBeenSet)
+ {
+ XmlNode filterNode = parentNode.CreateChildElement("Filter");
+ m_filter.AddToNode(filterNode);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfigurationDeprecated.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfigurationDeprecated.cpp
new file mode 100644
index 00000000000..321fb3eafa3
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TopicConfigurationDeprecated.cpp
@@ -0,0 +1,101 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/TopicConfigurationDeprecated.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+TopicConfigurationDeprecated::TopicConfigurationDeprecated() :
+ m_idHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_topicHasBeenSet(false)
+{
+}
+
+TopicConfigurationDeprecated::TopicConfigurationDeprecated(const XmlNode& xmlNode) :
+ m_idHasBeenSet(false),
+ m_eventsHasBeenSet(false),
+ m_topicHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+TopicConfigurationDeprecated& TopicConfigurationDeprecated::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode idNode = resultNode.FirstChild("Id");
+ if(!idNode.IsNull())
+ {
+ m_id = Aws::Utils::Xml::DecodeEscapedXmlText(idNode.GetText());
+ m_idHasBeenSet = true;
+ }
+ XmlNode eventsNode = resultNode.FirstChild("Event");
+ if(!eventsNode.IsNull())
+ {
+ XmlNode eventMember = eventsNode;
+ while(!eventMember.IsNull())
+ {
+ m_events.push_back(EventMapper::GetEventForName(StringUtils::Trim(eventMember.GetText().c_str())));
+ eventMember = eventMember.NextNode("Event");
+ }
+
+ m_eventsHasBeenSet = true;
+ }
+ XmlNode topicNode = resultNode.FirstChild("Topic");
+ if(!topicNode.IsNull())
+ {
+ m_topic = Aws::Utils::Xml::DecodeEscapedXmlText(topicNode.GetText());
+ m_topicHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void TopicConfigurationDeprecated::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_idHasBeenSet)
+ {
+ XmlNode idNode = parentNode.CreateChildElement("Id");
+ idNode.SetText(m_id);
+ }
+
+ if(m_eventsHasBeenSet)
+ {
+ for(const auto& item : m_events)
+ {
+ XmlNode eventsNode = parentNode.CreateChildElement("Event");
+ eventsNode.SetText(EventMapper::GetNameForEvent(item));
+ }
+ }
+
+ if(m_topicHasBeenSet)
+ {
+ XmlNode topicNode = parentNode.CreateChildElement("Topic");
+ topicNode.SetText(m_topic);
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Transition.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Transition.cpp
new file mode 100644
index 00000000000..8dcefe5df29
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Transition.cpp
@@ -0,0 +1,98 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Transition.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+Transition::Transition() :
+ m_dateHasBeenSet(false),
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_storageClass(TransitionStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false)
+{
+}
+
+Transition::Transition(const XmlNode& xmlNode) :
+ m_dateHasBeenSet(false),
+ m_days(0),
+ m_daysHasBeenSet(false),
+ m_storageClass(TransitionStorageClass::NOT_SET),
+ m_storageClassHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+Transition& Transition::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode dateNode = resultNode.FirstChild("Date");
+ if(!dateNode.IsNull())
+ {
+ m_date = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(dateNode.GetText()).c_str()).c_str(), DateFormat::ISO_8601);
+ m_dateHasBeenSet = true;
+ }
+ XmlNode daysNode = resultNode.FirstChild("Days");
+ if(!daysNode.IsNull())
+ {
+ m_days = StringUtils::ConvertToInt32(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(daysNode.GetText()).c_str()).c_str());
+ m_daysHasBeenSet = true;
+ }
+ XmlNode storageClassNode = resultNode.FirstChild("StorageClass");
+ if(!storageClassNode.IsNull())
+ {
+ m_storageClass = TransitionStorageClassMapper::GetTransitionStorageClassForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(storageClassNode.GetText()).c_str()).c_str());
+ m_storageClassHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void Transition::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_dateHasBeenSet)
+ {
+ XmlNode dateNode = parentNode.CreateChildElement("Date");
+ dateNode.SetText(m_date.ToGmtString(DateFormat::ISO_8601));
+ }
+
+ if(m_daysHasBeenSet)
+ {
+ XmlNode daysNode = parentNode.CreateChildElement("Days");
+ ss << m_days;
+ daysNode.SetText(ss.str());
+ ss.str("");
+ }
+
+ if(m_storageClassHasBeenSet)
+ {
+ XmlNode storageClassNode = parentNode.CreateChildElement("StorageClass");
+ storageClassNode.SetText(TransitionStorageClassMapper::GetNameForTransitionStorageClass(m_storageClass));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TransitionStorageClass.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TransitionStorageClass.cpp
new file mode 100644
index 00000000000..21491770715
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/TransitionStorageClass.cpp
@@ -0,0 +1,91 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/TransitionStorageClass.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace TransitionStorageClassMapper
+ {
+
+ static const int GLACIER_HASH = HashingUtils::HashString("GLACIER");
+ static const int STANDARD_IA_HASH = HashingUtils::HashString("STANDARD_IA");
+ static const int ONEZONE_IA_HASH = HashingUtils::HashString("ONEZONE_IA");
+ static const int INTELLIGENT_TIERING_HASH = HashingUtils::HashString("INTELLIGENT_TIERING");
+ static const int DEEP_ARCHIVE_HASH = HashingUtils::HashString("DEEP_ARCHIVE");
+
+
+ TransitionStorageClass GetTransitionStorageClassForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == GLACIER_HASH)
+ {
+ return TransitionStorageClass::GLACIER;
+ }
+ else if (hashCode == STANDARD_IA_HASH)
+ {
+ return TransitionStorageClass::STANDARD_IA;
+ }
+ else if (hashCode == ONEZONE_IA_HASH)
+ {
+ return TransitionStorageClass::ONEZONE_IA;
+ }
+ else if (hashCode == INTELLIGENT_TIERING_HASH)
+ {
+ return TransitionStorageClass::INTELLIGENT_TIERING;
+ }
+ else if (hashCode == DEEP_ARCHIVE_HASH)
+ {
+ return TransitionStorageClass::DEEP_ARCHIVE;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<TransitionStorageClass>(hashCode);
+ }
+
+ return TransitionStorageClass::NOT_SET;
+ }
+
+ Aws::String GetNameForTransitionStorageClass(TransitionStorageClass enumValue)
+ {
+ switch(enumValue)
+ {
+ case TransitionStorageClass::GLACIER:
+ return "GLACIER";
+ case TransitionStorageClass::STANDARD_IA:
+ return "STANDARD_IA";
+ case TransitionStorageClass::ONEZONE_IA:
+ return "ONEZONE_IA";
+ case TransitionStorageClass::INTELLIGENT_TIERING:
+ return "INTELLIGENT_TIERING";
+ case TransitionStorageClass::DEEP_ARCHIVE:
+ return "DEEP_ARCHIVE";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace TransitionStorageClassMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Type.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Type.cpp
new file mode 100644
index 00000000000..3e325609a20
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/Type.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/Type.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/Globals.h>
+#include <aws/core/utils/EnumParseOverflowContainer.h>
+
+using namespace Aws::Utils;
+
+
+namespace Aws
+{
+ namespace S3
+ {
+ namespace Model
+ {
+ namespace TypeMapper
+ {
+
+ static const int CanonicalUser_HASH = HashingUtils::HashString("CanonicalUser");
+ static const int AmazonCustomerByEmail_HASH = HashingUtils::HashString("AmazonCustomerByEmail");
+ static const int Group_HASH = HashingUtils::HashString("Group");
+
+
+ Type GetTypeForName(const Aws::String& name)
+ {
+ int hashCode = HashingUtils::HashString(name.c_str());
+ if (hashCode == CanonicalUser_HASH)
+ {
+ return Type::CanonicalUser;
+ }
+ else if (hashCode == AmazonCustomerByEmail_HASH)
+ {
+ return Type::AmazonCustomerByEmail;
+ }
+ else if (hashCode == Group_HASH)
+ {
+ return Type::Group;
+ }
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ overflowContainer->StoreOverflow(hashCode, name);
+ return static_cast<Type>(hashCode);
+ }
+
+ return Type::NOT_SET;
+ }
+
+ Aws::String GetNameForType(Type enumValue)
+ {
+ switch(enumValue)
+ {
+ case Type::CanonicalUser:
+ return "CanonicalUser";
+ case Type::AmazonCustomerByEmail:
+ return "AmazonCustomerByEmail";
+ case Type::Group:
+ return "Group";
+ default:
+ EnumParseOverflowContainer* overflowContainer = Aws::GetEnumOverflowContainer();
+ if(overflowContainer)
+ {
+ return overflowContainer->RetrieveOverflow(static_cast<int>(enumValue));
+ }
+
+ return {};
+ }
+ }
+
+ } // namespace TypeMapper
+ } // namespace Model
+ } // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyRequest.cpp
new file mode 100644
index 00000000000..364af9b8fc7
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyRequest.cpp
@@ -0,0 +1,190 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/UploadPartCopyRequest.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+
+UploadPartCopyRequest::UploadPartCopyRequest() :
+ m_bucketHasBeenSet(false),
+ m_copySourceHasBeenSet(false),
+ m_copySourceIfMatchHasBeenSet(false),
+ m_copySourceIfModifiedSinceHasBeenSet(false),
+ m_copySourceIfNoneMatchHasBeenSet(false),
+ m_copySourceIfUnmodifiedSinceHasBeenSet(false),
+ m_copySourceRangeHasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false),
+ m_uploadIdHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_copySourceSSECustomerAlgorithmHasBeenSet(false),
+ m_copySourceSSECustomerKeyHasBeenSet(false),
+ m_copySourceSSECustomerKeyMD5HasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_expectedSourceBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+Aws::String UploadPartCopyRequest::SerializePayload() const
+{
+ return {};
+}
+
+void UploadPartCopyRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_partNumberHasBeenSet)
+ {
+ ss << m_partNumber;
+ uri.AddQueryStringParameter("partNumber", ss.str());
+ ss.str("");
+ }
+
+ if(m_uploadIdHasBeenSet)
+ {
+ ss << m_uploadId;
+ uri.AddQueryStringParameter("uploadId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection UploadPartCopyRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_copySourceHasBeenSet)
+ {
+ ss << m_copySource;
+ headers.emplace("x-amz-copy-source", URI::URLEncodePath(ss.str()));
+ ss.str("");
+ }
+
+ if(m_copySourceIfMatchHasBeenSet)
+ {
+ ss << m_copySourceIfMatch;
+ headers.emplace("x-amz-copy-source-if-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceIfModifiedSinceHasBeenSet)
+ {
+ headers.emplace("x-amz-copy-source-if-modified-since", m_copySourceIfModifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_copySourceIfNoneMatchHasBeenSet)
+ {
+ ss << m_copySourceIfNoneMatch;
+ headers.emplace("x-amz-copy-source-if-none-match", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceIfUnmodifiedSinceHasBeenSet)
+ {
+ headers.emplace("x-amz-copy-source-if-unmodified-since", m_copySourceIfUnmodifiedSince.ToGmtString(DateFormat::RFC822));
+ }
+
+ if(m_copySourceRangeHasBeenSet)
+ {
+ ss << m_copySourceRange;
+ headers.emplace("x-amz-copy-source-range", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceSSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_copySourceSSECustomerAlgorithm;
+ headers.emplace("x-amz-copy-source-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceSSECustomerKeyHasBeenSet)
+ {
+ ss << m_copySourceSSECustomerKey;
+ headers.emplace("x-amz-copy-source-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_copySourceSSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_copySourceSSECustomerKeyMD5;
+ headers.emplace("x-amz-copy-source-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ if(m_expectedSourceBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedSourceBucketOwner;
+ headers.emplace("x-amz-source-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyResult.cpp
new file mode 100644
index 00000000000..22cd2cf4d73
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartCopyResult.cpp
@@ -0,0 +1,88 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/UploadPartCopyResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+UploadPartCopyResult::UploadPartCopyResult() :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+UploadPartCopyResult::UploadPartCopyResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+UploadPartCopyResult& UploadPartCopyResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ m_copyPartResult = resultNode;
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& copySourceVersionIdIter = headers.find("x-amz-copy-source-version-id");
+ if(copySourceVersionIdIter != headers.end())
+ {
+ m_copySourceVersionId = copySourceVersionIdIter->second;
+ }
+
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ const auto& sSECustomerAlgorithmIter = headers.find("x-amz-server-side-encryption-customer-algorithm");
+ if(sSECustomerAlgorithmIter != headers.end())
+ {
+ m_sSECustomerAlgorithm = sSECustomerAlgorithmIter->second;
+ }
+
+ const auto& sSECustomerKeyMD5Iter = headers.find("x-amz-server-side-encryption-customer-key-md5");
+ if(sSECustomerKeyMD5Iter != headers.end())
+ {
+ m_sSECustomerKeyMD5 = sSECustomerKeyMD5Iter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartRequest.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartRequest.cpp
new file mode 100644
index 00000000000..ee4a67ee07a
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartRequest.cpp
@@ -0,0 +1,129 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/UploadPartRequest.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/http/URI.h>
+#include <aws/core/utils/HashingUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Stream;
+using namespace Aws::Utils;
+using namespace Aws::Http;
+using namespace Aws;
+
+UploadPartRequest::UploadPartRequest() :
+ m_bucketHasBeenSet(false),
+ m_contentLength(0),
+ m_contentLengthHasBeenSet(false),
+ m_contentMD5HasBeenSet(false),
+ m_keyHasBeenSet(false),
+ m_partNumber(0),
+ m_partNumberHasBeenSet(false),
+ m_uploadIdHasBeenSet(false),
+ m_sSECustomerAlgorithmHasBeenSet(false),
+ m_sSECustomerKeyHasBeenSet(false),
+ m_sSECustomerKeyMD5HasBeenSet(false),
+ m_requestPayer(RequestPayer::NOT_SET),
+ m_requestPayerHasBeenSet(false),
+ m_expectedBucketOwnerHasBeenSet(false),
+ m_customizedAccessLogTagHasBeenSet(false)
+{
+}
+
+
+void UploadPartRequest::AddQueryStringParameters(URI& uri) const
+{
+ Aws::StringStream ss;
+ if(m_partNumberHasBeenSet)
+ {
+ ss << m_partNumber;
+ uri.AddQueryStringParameter("partNumber", ss.str());
+ ss.str("");
+ }
+
+ if(m_uploadIdHasBeenSet)
+ {
+ ss << m_uploadId;
+ uri.AddQueryStringParameter("uploadId", ss.str());
+ ss.str("");
+ }
+
+ if(!m_customizedAccessLogTag.empty())
+ {
+ // only accept customized LogTag which starts with "x-"
+ Aws::Map<Aws::String, Aws::String> collectedLogTags;
+ for(const auto& entry: m_customizedAccessLogTag)
+ {
+ if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
+ {
+ collectedLogTags.emplace(entry.first, entry.second);
+ }
+ }
+
+ if (!collectedLogTags.empty())
+ {
+ uri.AddQueryStringParameter(collectedLogTags);
+ }
+ }
+}
+
+Aws::Http::HeaderValueCollection UploadPartRequest::GetRequestSpecificHeaders() const
+{
+ Aws::Http::HeaderValueCollection headers;
+ Aws::StringStream ss;
+ if(m_contentLengthHasBeenSet)
+ {
+ ss << m_contentLength;
+ headers.emplace("content-length", ss.str());
+ ss.str("");
+ }
+
+ if(m_contentMD5HasBeenSet)
+ {
+ ss << m_contentMD5;
+ headers.emplace("content-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerAlgorithmHasBeenSet)
+ {
+ ss << m_sSECustomerAlgorithm;
+ headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyHasBeenSet)
+ {
+ ss << m_sSECustomerKey;
+ headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
+ ss.str("");
+ }
+
+ if(m_sSECustomerKeyMD5HasBeenSet)
+ {
+ ss << m_sSECustomerKeyMD5;
+ headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
+ ss.str("");
+ }
+
+ if(m_requestPayerHasBeenSet)
+ {
+ headers.emplace("x-amz-request-payer", RequestPayerMapper::GetNameForRequestPayer(m_requestPayer));
+ }
+
+ if(m_expectedBucketOwnerHasBeenSet)
+ {
+ ss << m_expectedBucketOwner;
+ headers.emplace("x-amz-expected-bucket-owner", ss.str());
+ ss.str("");
+ }
+
+ return headers;
+
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartResult.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartResult.cpp
new file mode 100644
index 00000000000..13ad60a4636
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/UploadPartResult.cpp
@@ -0,0 +1,87 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/UploadPartResult.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/AmazonWebServiceResult.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::S3::Model;
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+using namespace Aws;
+
+UploadPartResult::UploadPartResult() :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+}
+
+UploadPartResult::UploadPartResult(const Aws::AmazonWebServiceResult<XmlDocument>& result) :
+ m_serverSideEncryption(ServerSideEncryption::NOT_SET),
+ m_bucketKeyEnabled(false),
+ m_requestCharged(RequestCharged::NOT_SET)
+{
+ *this = result;
+}
+
+UploadPartResult& UploadPartResult::operator =(const Aws::AmazonWebServiceResult<XmlDocument>& result)
+{
+ const XmlDocument& xmlDocument = result.GetPayload();
+ XmlNode resultNode = xmlDocument.GetRootElement();
+
+ if(!resultNode.IsNull())
+ {
+ }
+
+ const auto& headers = result.GetHeaderValueCollection();
+ const auto& serverSideEncryptionIter = headers.find("x-amz-server-side-encryption");
+ if(serverSideEncryptionIter != headers.end())
+ {
+ m_serverSideEncryption = ServerSideEncryptionMapper::GetServerSideEncryptionForName(serverSideEncryptionIter->second);
+ }
+
+ const auto& eTagIter = headers.find("etag");
+ if(eTagIter != headers.end())
+ {
+ m_eTag = eTagIter->second;
+ }
+
+ const auto& sSECustomerAlgorithmIter = headers.find("x-amz-server-side-encryption-customer-algorithm");
+ if(sSECustomerAlgorithmIter != headers.end())
+ {
+ m_sSECustomerAlgorithm = sSECustomerAlgorithmIter->second;
+ }
+
+ const auto& sSECustomerKeyMD5Iter = headers.find("x-amz-server-side-encryption-customer-key-md5");
+ if(sSECustomerKeyMD5Iter != headers.end())
+ {
+ m_sSECustomerKeyMD5 = sSECustomerKeyMD5Iter->second;
+ }
+
+ const auto& sSEKMSKeyIdIter = headers.find("x-amz-server-side-encryption-aws-kms-key-id");
+ if(sSEKMSKeyIdIter != headers.end())
+ {
+ m_sSEKMSKeyId = sSEKMSKeyIdIter->second;
+ }
+
+ const auto& bucketKeyEnabledIter = headers.find("x-amz-server-side-encryption-bucket-key-enabled");
+ if(bucketKeyEnabledIter != headers.end())
+ {
+ m_bucketKeyEnabled = StringUtils::ConvertToBool(bucketKeyEnabledIter->second.c_str());
+ }
+
+ const auto& requestChargedIter = headers.find("x-amz-request-charged");
+ if(requestChargedIter != headers.end())
+ {
+ m_requestCharged = RequestChargedMapper::GetRequestChargedForName(requestChargedIter->second);
+ }
+
+ return *this;
+}
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/VersioningConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/VersioningConfiguration.cpp
new file mode 100644
index 00000000000..aee5ece27d5
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/VersioningConfiguration.cpp
@@ -0,0 +1,82 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/VersioningConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+VersioningConfiguration::VersioningConfiguration() :
+ m_mFADelete(MFADelete::NOT_SET),
+ m_mFADeleteHasBeenSet(false),
+ m_status(BucketVersioningStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+}
+
+VersioningConfiguration::VersioningConfiguration(const XmlNode& xmlNode) :
+ m_mFADelete(MFADelete::NOT_SET),
+ m_mFADeleteHasBeenSet(false),
+ m_status(BucketVersioningStatus::NOT_SET),
+ m_statusHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+VersioningConfiguration& VersioningConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode mFADeleteNode = resultNode.FirstChild("MfaDelete");
+ if(!mFADeleteNode.IsNull())
+ {
+ m_mFADelete = MFADeleteMapper::GetMFADeleteForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(mFADeleteNode.GetText()).c_str()).c_str());
+ m_mFADeleteHasBeenSet = true;
+ }
+ XmlNode statusNode = resultNode.FirstChild("Status");
+ if(!statusNode.IsNull())
+ {
+ m_status = BucketVersioningStatusMapper::GetBucketVersioningStatusForName(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(statusNode.GetText()).c_str()).c_str());
+ m_statusHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void VersioningConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_mFADeleteHasBeenSet)
+ {
+ XmlNode mFADeleteNode = parentNode.CreateChildElement("MfaDelete");
+ mFADeleteNode.SetText(MFADeleteMapper::GetNameForMFADelete(m_mFADelete));
+ }
+
+ if(m_statusHasBeenSet)
+ {
+ XmlNode statusNode = parentNode.CreateChildElement("Status");
+ statusNode.SetText(BucketVersioningStatusMapper::GetNameForBucketVersioningStatus(m_status));
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/WebsiteConfiguration.cpp b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/WebsiteConfiguration.cpp
new file mode 100644
index 00000000000..c911eae8381
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/source/model/WebsiteConfiguration.cpp
@@ -0,0 +1,116 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+
+#include <aws/s3/model/WebsiteConfiguration.h>
+#include <aws/core/utils/xml/XmlSerializer.h>
+#include <aws/core/utils/StringUtils.h>
+#include <aws/core/utils/memory/stl/AWSStringStream.h>
+
+#include <utility>
+
+using namespace Aws::Utils::Xml;
+using namespace Aws::Utils;
+
+namespace Aws
+{
+namespace S3
+{
+namespace Model
+{
+
+WebsiteConfiguration::WebsiteConfiguration() :
+ m_errorDocumentHasBeenSet(false),
+ m_indexDocumentHasBeenSet(false),
+ m_redirectAllRequestsToHasBeenSet(false),
+ m_routingRulesHasBeenSet(false)
+{
+}
+
+WebsiteConfiguration::WebsiteConfiguration(const XmlNode& xmlNode) :
+ m_errorDocumentHasBeenSet(false),
+ m_indexDocumentHasBeenSet(false),
+ m_redirectAllRequestsToHasBeenSet(false),
+ m_routingRulesHasBeenSet(false)
+{
+ *this = xmlNode;
+}
+
+WebsiteConfiguration& WebsiteConfiguration::operator =(const XmlNode& xmlNode)
+{
+ XmlNode resultNode = xmlNode;
+
+ if(!resultNode.IsNull())
+ {
+ XmlNode errorDocumentNode = resultNode.FirstChild("ErrorDocument");
+ if(!errorDocumentNode.IsNull())
+ {
+ m_errorDocument = errorDocumentNode;
+ m_errorDocumentHasBeenSet = true;
+ }
+ XmlNode indexDocumentNode = resultNode.FirstChild("IndexDocument");
+ if(!indexDocumentNode.IsNull())
+ {
+ m_indexDocument = indexDocumentNode;
+ m_indexDocumentHasBeenSet = true;
+ }
+ XmlNode redirectAllRequestsToNode = resultNode.FirstChild("RedirectAllRequestsTo");
+ if(!redirectAllRequestsToNode.IsNull())
+ {
+ m_redirectAllRequestsTo = redirectAllRequestsToNode;
+ m_redirectAllRequestsToHasBeenSet = true;
+ }
+ XmlNode routingRulesNode = resultNode.FirstChild("RoutingRules");
+ if(!routingRulesNode.IsNull())
+ {
+ XmlNode routingRulesMember = routingRulesNode.FirstChild("RoutingRule");
+ while(!routingRulesMember.IsNull())
+ {
+ m_routingRules.push_back(routingRulesMember);
+ routingRulesMember = routingRulesMember.NextNode("RoutingRule");
+ }
+
+ m_routingRulesHasBeenSet = true;
+ }
+ }
+
+ return *this;
+}
+
+void WebsiteConfiguration::AddToNode(XmlNode& parentNode) const
+{
+ Aws::StringStream ss;
+ if(m_errorDocumentHasBeenSet)
+ {
+ XmlNode errorDocumentNode = parentNode.CreateChildElement("ErrorDocument");
+ m_errorDocument.AddToNode(errorDocumentNode);
+ }
+
+ if(m_indexDocumentHasBeenSet)
+ {
+ XmlNode indexDocumentNode = parentNode.CreateChildElement("IndexDocument");
+ m_indexDocument.AddToNode(indexDocumentNode);
+ }
+
+ if(m_redirectAllRequestsToHasBeenSet)
+ {
+ XmlNode redirectAllRequestsToNode = parentNode.CreateChildElement("RedirectAllRequestsTo");
+ m_redirectAllRequestsTo.AddToNode(redirectAllRequestsToNode);
+ }
+
+ if(m_routingRulesHasBeenSet)
+ {
+ XmlNode routingRulesParentNode = parentNode.CreateChildElement("RoutingRules");
+ for(const auto& item : m_routingRules)
+ {
+ XmlNode routingRulesNode = routingRulesParentNode.CreateChildElement("RoutingRule");
+ item.AddToNode(routingRulesNode);
+ }
+ }
+
+}
+
+} // namespace Model
+} // namespace S3
+} // namespace Aws
diff --git a/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/ya.make b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/ya.make
new file mode 100644
index 00000000000..df8594d6cca
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/ya.make
@@ -0,0 +1,390 @@
+# Generated by devtools/yamaker.
+
+LIBRARY()
+
+OWNER(
+ orivej
+ shindo
+ g:cpp-contrib
+)
+
+LICENSE(Apache-2.0)
+
+LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
+
+PEERDIR(
+ contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core
+ contrib/restricted/aws/aws-c-common
+ contrib/restricted/aws/aws-c-event-stream
+)
+
+ADDINCL(
+ GLOBAL contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3/include
+ contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core/include
+)
+
+NO_COMPILER_WARNINGS()
+
+NO_UTIL()
+
+CFLAGS(
+ -DAWS_CAL_USE_IMPORT_EXPORT
+ -DAWS_CHECKSUMS_USE_IMPORT_EXPORT
+ -DAWS_COMMON_USE_IMPORT_EXPORT
+ -DAWS_EVENT_STREAM_USE_IMPORT_EXPORT
+ -DAWS_IO_USE_IMPORT_EXPORT
+ -DAWS_SDK_VERSION_MAJOR=1
+ -DAWS_SDK_VERSION_MINOR=8
+ -DAWS_SDK_VERSION_PATCH=113
+ -DAWS_USE_EPOLL
+ -DENABLE_CURL_CLIENT
+ -DENABLE_OPENSSL_ENCRYPTION
+ -DHAS_PATHCONF
+ -DHAS_UMASK
+ -DS2N_ADX
+ -DS2N_CPUID_AVAILABLE
+ -DS2N_HAVE_EXECINFO
+ -DS2N_SIKEP434R2_ASM
+)
+
+SRCS(
+ source/S3ARN.cpp
+ source/S3Client.cpp
+ source/S3Endpoint.cpp
+ source/S3ErrorMarshaller.cpp
+ source/S3Errors.cpp
+ source/model/AbortIncompleteMultipartUpload.cpp
+ source/model/AbortMultipartUploadRequest.cpp
+ source/model/AbortMultipartUploadResult.cpp
+ source/model/AccelerateConfiguration.cpp
+ source/model/AccessControlPolicy.cpp
+ source/model/AccessControlTranslation.cpp
+ source/model/AnalyticsAndOperator.cpp
+ source/model/AnalyticsConfiguration.cpp
+ source/model/AnalyticsExportDestination.cpp
+ source/model/AnalyticsFilter.cpp
+ source/model/AnalyticsS3BucketDestination.cpp
+ source/model/AnalyticsS3ExportFileFormat.cpp
+ source/model/ArchiveStatus.cpp
+ source/model/Bucket.cpp
+ source/model/BucketAccelerateStatus.cpp
+ source/model/BucketCannedACL.cpp
+ source/model/BucketLifecycleConfiguration.cpp
+ source/model/BucketLocationConstraint.cpp
+ source/model/BucketLoggingStatus.cpp
+ source/model/BucketLogsPermission.cpp
+ source/model/BucketVersioningStatus.cpp
+ source/model/CORSConfiguration.cpp
+ source/model/CORSRule.cpp
+ source/model/CSVInput.cpp
+ source/model/CSVOutput.cpp
+ source/model/CloudFunctionConfiguration.cpp
+ source/model/CommonPrefix.cpp
+ source/model/CompleteMultipartUploadRequest.cpp
+ source/model/CompleteMultipartUploadResult.cpp
+ source/model/CompletedMultipartUpload.cpp
+ source/model/CompletedPart.cpp
+ source/model/CompressionType.cpp
+ source/model/Condition.cpp
+ source/model/CopyObjectRequest.cpp
+ source/model/CopyObjectResult.cpp
+ source/model/CopyObjectResultDetails.cpp
+ source/model/CopyPartResult.cpp
+ source/model/CreateBucketConfiguration.cpp
+ source/model/CreateBucketRequest.cpp
+ source/model/CreateBucketResult.cpp
+ source/model/CreateMultipartUploadRequest.cpp
+ source/model/CreateMultipartUploadResult.cpp
+ source/model/DefaultRetention.cpp
+ source/model/Delete.cpp
+ source/model/DeleteBucketAnalyticsConfigurationRequest.cpp
+ source/model/DeleteBucketCorsRequest.cpp
+ source/model/DeleteBucketEncryptionRequest.cpp
+ source/model/DeleteBucketIntelligentTieringConfigurationRequest.cpp
+ source/model/DeleteBucketInventoryConfigurationRequest.cpp
+ source/model/DeleteBucketLifecycleRequest.cpp
+ source/model/DeleteBucketMetricsConfigurationRequest.cpp
+ source/model/DeleteBucketOwnershipControlsRequest.cpp
+ source/model/DeleteBucketPolicyRequest.cpp
+ source/model/DeleteBucketReplicationRequest.cpp
+ source/model/DeleteBucketRequest.cpp
+ source/model/DeleteBucketTaggingRequest.cpp
+ source/model/DeleteBucketWebsiteRequest.cpp
+ source/model/DeleteMarkerEntry.cpp
+ source/model/DeleteMarkerReplication.cpp
+ source/model/DeleteMarkerReplicationStatus.cpp
+ source/model/DeleteObjectRequest.cpp
+ source/model/DeleteObjectResult.cpp
+ source/model/DeleteObjectTaggingRequest.cpp
+ source/model/DeleteObjectTaggingResult.cpp
+ source/model/DeleteObjectsRequest.cpp
+ source/model/DeleteObjectsResult.cpp
+ source/model/DeletePublicAccessBlockRequest.cpp
+ source/model/DeletedObject.cpp
+ source/model/Destination.cpp
+ source/model/EncodingType.cpp
+ source/model/Encryption.cpp
+ source/model/EncryptionConfiguration.cpp
+ source/model/Error.cpp
+ source/model/ErrorDocument.cpp
+ source/model/Event.cpp
+ source/model/ExistingObjectReplication.cpp
+ source/model/ExistingObjectReplicationStatus.cpp
+ source/model/ExpirationStatus.cpp
+ source/model/ExpressionType.cpp
+ source/model/FileHeaderInfo.cpp
+ source/model/FilterRule.cpp
+ source/model/FilterRuleName.cpp
+ source/model/GetBucketAccelerateConfigurationRequest.cpp
+ source/model/GetBucketAccelerateConfigurationResult.cpp
+ source/model/GetBucketAclRequest.cpp
+ source/model/GetBucketAclResult.cpp
+ source/model/GetBucketAnalyticsConfigurationRequest.cpp
+ source/model/GetBucketAnalyticsConfigurationResult.cpp
+ source/model/GetBucketCorsRequest.cpp
+ source/model/GetBucketCorsResult.cpp
+ source/model/GetBucketEncryptionRequest.cpp
+ source/model/GetBucketEncryptionResult.cpp
+ source/model/GetBucketIntelligentTieringConfigurationRequest.cpp
+ source/model/GetBucketIntelligentTieringConfigurationResult.cpp
+ source/model/GetBucketInventoryConfigurationRequest.cpp
+ source/model/GetBucketInventoryConfigurationResult.cpp
+ source/model/GetBucketLifecycleConfigurationRequest.cpp
+ source/model/GetBucketLifecycleConfigurationResult.cpp
+ source/model/GetBucketLocationRequest.cpp
+ source/model/GetBucketLocationResult.cpp
+ source/model/GetBucketLoggingRequest.cpp
+ source/model/GetBucketLoggingResult.cpp
+ source/model/GetBucketMetricsConfigurationRequest.cpp
+ source/model/GetBucketMetricsConfigurationResult.cpp
+ source/model/GetBucketNotificationConfigurationRequest.cpp
+ source/model/GetBucketNotificationConfigurationResult.cpp
+ source/model/GetBucketOwnershipControlsRequest.cpp
+ source/model/GetBucketOwnershipControlsResult.cpp
+ source/model/GetBucketPolicyRequest.cpp
+ source/model/GetBucketPolicyResult.cpp
+ source/model/GetBucketPolicyStatusRequest.cpp
+ source/model/GetBucketPolicyStatusResult.cpp
+ source/model/GetBucketReplicationRequest.cpp
+ source/model/GetBucketReplicationResult.cpp
+ source/model/GetBucketRequestPaymentRequest.cpp
+ source/model/GetBucketRequestPaymentResult.cpp
+ source/model/GetBucketTaggingRequest.cpp
+ source/model/GetBucketTaggingResult.cpp
+ source/model/GetBucketVersioningRequest.cpp
+ source/model/GetBucketVersioningResult.cpp
+ source/model/GetBucketWebsiteRequest.cpp
+ source/model/GetBucketWebsiteResult.cpp
+ source/model/GetObjectAclRequest.cpp
+ source/model/GetObjectAclResult.cpp
+ source/model/GetObjectLegalHoldRequest.cpp
+ source/model/GetObjectLegalHoldResult.cpp
+ source/model/GetObjectLockConfigurationRequest.cpp
+ source/model/GetObjectLockConfigurationResult.cpp
+ source/model/GetObjectRequest.cpp
+ source/model/GetObjectResult.cpp
+ source/model/GetObjectRetentionRequest.cpp
+ source/model/GetObjectRetentionResult.cpp
+ source/model/GetObjectTaggingRequest.cpp
+ source/model/GetObjectTaggingResult.cpp
+ source/model/GetObjectTorrentRequest.cpp
+ source/model/GetObjectTorrentResult.cpp
+ source/model/GetPublicAccessBlockRequest.cpp
+ source/model/GetPublicAccessBlockResult.cpp
+ source/model/GlacierJobParameters.cpp
+ source/model/Grant.cpp
+ source/model/Grantee.cpp
+ source/model/HeadBucketRequest.cpp
+ source/model/HeadObjectRequest.cpp
+ source/model/HeadObjectResult.cpp
+ source/model/IndexDocument.cpp
+ source/model/Initiator.cpp
+ source/model/InputSerialization.cpp
+ source/model/IntelligentTieringAccessTier.cpp
+ source/model/IntelligentTieringAndOperator.cpp
+ source/model/IntelligentTieringConfiguration.cpp
+ source/model/IntelligentTieringFilter.cpp
+ source/model/IntelligentTieringStatus.cpp
+ source/model/InvalidObjectState.cpp
+ source/model/InventoryConfiguration.cpp
+ source/model/InventoryDestination.cpp
+ source/model/InventoryEncryption.cpp
+ source/model/InventoryFilter.cpp
+ source/model/InventoryFormat.cpp
+ source/model/InventoryFrequency.cpp
+ source/model/InventoryIncludedObjectVersions.cpp
+ source/model/InventoryOptionalField.cpp
+ source/model/InventoryS3BucketDestination.cpp
+ source/model/InventorySchedule.cpp
+ source/model/JSONInput.cpp
+ source/model/JSONOutput.cpp
+ source/model/JSONType.cpp
+ source/model/LambdaFunctionConfiguration.cpp
+ source/model/LifecycleConfiguration.cpp
+ source/model/LifecycleExpiration.cpp
+ source/model/LifecycleRule.cpp
+ source/model/LifecycleRuleAndOperator.cpp
+ source/model/LifecycleRuleFilter.cpp
+ source/model/ListBucketAnalyticsConfigurationsRequest.cpp
+ source/model/ListBucketAnalyticsConfigurationsResult.cpp
+ source/model/ListBucketIntelligentTieringConfigurationsRequest.cpp
+ source/model/ListBucketIntelligentTieringConfigurationsResult.cpp
+ source/model/ListBucketInventoryConfigurationsRequest.cpp
+ source/model/ListBucketInventoryConfigurationsResult.cpp
+ source/model/ListBucketMetricsConfigurationsRequest.cpp
+ source/model/ListBucketMetricsConfigurationsResult.cpp
+ source/model/ListBucketsResult.cpp
+ source/model/ListMultipartUploadsRequest.cpp
+ source/model/ListMultipartUploadsResult.cpp
+ source/model/ListObjectVersionsRequest.cpp
+ source/model/ListObjectVersionsResult.cpp
+ source/model/ListObjectsRequest.cpp
+ source/model/ListObjectsResult.cpp
+ source/model/ListObjectsV2Request.cpp
+ source/model/ListObjectsV2Result.cpp
+ source/model/ListPartsRequest.cpp
+ source/model/ListPartsResult.cpp
+ source/model/LoggingEnabled.cpp
+ source/model/MFADelete.cpp
+ source/model/MFADeleteStatus.cpp
+ source/model/MetadataDirective.cpp
+ source/model/MetadataEntry.cpp
+ source/model/Metrics.cpp
+ source/model/MetricsAndOperator.cpp
+ source/model/MetricsConfiguration.cpp
+ source/model/MetricsFilter.cpp
+ source/model/MetricsStatus.cpp
+ source/model/MultipartUpload.cpp
+ source/model/NoncurrentVersionExpiration.cpp
+ source/model/NoncurrentVersionTransition.cpp
+ source/model/NotificationConfiguration.cpp
+ source/model/NotificationConfigurationDeprecated.cpp
+ source/model/NotificationConfigurationFilter.cpp
+ source/model/Object.cpp
+ source/model/ObjectCannedACL.cpp
+ source/model/ObjectIdentifier.cpp
+ source/model/ObjectLockConfiguration.cpp
+ source/model/ObjectLockEnabled.cpp
+ source/model/ObjectLockLegalHold.cpp
+ source/model/ObjectLockLegalHoldStatus.cpp
+ source/model/ObjectLockMode.cpp
+ source/model/ObjectLockRetention.cpp
+ source/model/ObjectLockRetentionMode.cpp
+ source/model/ObjectLockRule.cpp
+ source/model/ObjectOwnership.cpp
+ source/model/ObjectStorageClass.cpp
+ source/model/ObjectVersion.cpp
+ source/model/ObjectVersionStorageClass.cpp
+ source/model/OutputLocation.cpp
+ source/model/OutputSerialization.cpp
+ source/model/Owner.cpp
+ source/model/OwnerOverride.cpp
+ source/model/OwnershipControls.cpp
+ source/model/OwnershipControlsRule.cpp
+ source/model/ParquetInput.cpp
+ source/model/Part.cpp
+ source/model/Payer.cpp
+ source/model/Permission.cpp
+ source/model/PolicyStatus.cpp
+ source/model/Progress.cpp
+ source/model/ProgressEvent.cpp
+ source/model/Protocol.cpp
+ source/model/PublicAccessBlockConfiguration.cpp
+ source/model/PutBucketAccelerateConfigurationRequest.cpp
+ source/model/PutBucketAclRequest.cpp
+ source/model/PutBucketAnalyticsConfigurationRequest.cpp
+ source/model/PutBucketCorsRequest.cpp
+ source/model/PutBucketEncryptionRequest.cpp
+ source/model/PutBucketIntelligentTieringConfigurationRequest.cpp
+ source/model/PutBucketInventoryConfigurationRequest.cpp
+ source/model/PutBucketLifecycleConfigurationRequest.cpp
+ source/model/PutBucketLoggingRequest.cpp
+ source/model/PutBucketMetricsConfigurationRequest.cpp
+ source/model/PutBucketNotificationConfigurationRequest.cpp
+ source/model/PutBucketOwnershipControlsRequest.cpp
+ source/model/PutBucketPolicyRequest.cpp
+ source/model/PutBucketReplicationRequest.cpp
+ source/model/PutBucketRequestPaymentRequest.cpp
+ source/model/PutBucketTaggingRequest.cpp
+ source/model/PutBucketVersioningRequest.cpp
+ source/model/PutBucketWebsiteRequest.cpp
+ source/model/PutObjectAclRequest.cpp
+ source/model/PutObjectAclResult.cpp
+ source/model/PutObjectLegalHoldRequest.cpp
+ source/model/PutObjectLegalHoldResult.cpp
+ source/model/PutObjectLockConfigurationRequest.cpp
+ source/model/PutObjectLockConfigurationResult.cpp
+ source/model/PutObjectRequest.cpp
+ source/model/PutObjectResult.cpp
+ source/model/PutObjectRetentionRequest.cpp
+ source/model/PutObjectRetentionResult.cpp
+ source/model/PutObjectTaggingRequest.cpp
+ source/model/PutObjectTaggingResult.cpp
+ source/model/PutPublicAccessBlockRequest.cpp
+ source/model/QueueConfiguration.cpp
+ source/model/QueueConfigurationDeprecated.cpp
+ source/model/QuoteFields.cpp
+ source/model/Redirect.cpp
+ source/model/RedirectAllRequestsTo.cpp
+ source/model/ReplicaModifications.cpp
+ source/model/ReplicaModificationsStatus.cpp
+ source/model/ReplicationConfiguration.cpp
+ source/model/ReplicationRule.cpp
+ source/model/ReplicationRuleAndOperator.cpp
+ source/model/ReplicationRuleFilter.cpp
+ source/model/ReplicationRuleStatus.cpp
+ source/model/ReplicationStatus.cpp
+ source/model/ReplicationTime.cpp
+ source/model/ReplicationTimeStatus.cpp
+ source/model/ReplicationTimeValue.cpp
+ source/model/RequestCharged.cpp
+ source/model/RequestPayer.cpp
+ source/model/RequestPaymentConfiguration.cpp
+ source/model/RequestProgress.cpp
+ source/model/RestoreObjectRequest.cpp
+ source/model/RestoreObjectResult.cpp
+ source/model/RestoreRequest.cpp
+ source/model/RestoreRequestType.cpp
+ source/model/RoutingRule.cpp
+ source/model/Rule.cpp
+ source/model/S3KeyFilter.cpp
+ source/model/S3Location.cpp
+ source/model/SSEKMS.cpp
+ source/model/SSES3.cpp
+ source/model/ScanRange.cpp
+ source/model/SelectObjectContentHandler.cpp
+ source/model/SelectObjectContentRequest.cpp
+ source/model/SelectParameters.cpp
+ source/model/ServerSideEncryption.cpp
+ source/model/ServerSideEncryptionByDefault.cpp
+ source/model/ServerSideEncryptionConfiguration.cpp
+ source/model/ServerSideEncryptionRule.cpp
+ source/model/SourceSelectionCriteria.cpp
+ source/model/SseKmsEncryptedObjects.cpp
+ source/model/SseKmsEncryptedObjectsStatus.cpp
+ source/model/Stats.cpp
+ source/model/StatsEvent.cpp
+ source/model/StorageClass.cpp
+ source/model/StorageClassAnalysis.cpp
+ source/model/StorageClassAnalysisDataExport.cpp
+ source/model/StorageClassAnalysisSchemaVersion.cpp
+ source/model/Tag.cpp
+ source/model/Tagging.cpp
+ source/model/TaggingDirective.cpp
+ source/model/TargetGrant.cpp
+ source/model/Tier.cpp
+ source/model/Tiering.cpp
+ source/model/TopicConfiguration.cpp
+ source/model/TopicConfigurationDeprecated.cpp
+ source/model/Transition.cpp
+ source/model/TransitionStorageClass.cpp
+ source/model/Type.cpp
+ source/model/UploadPartCopyRequest.cpp
+ source/model/UploadPartCopyResult.cpp
+ source/model/UploadPartRequest.cpp
+ source/model/UploadPartResult.cpp
+ source/model/VersioningConfiguration.cpp
+ source/model/WebsiteConfiguration.cpp
+)
+
+END()
diff --git a/contrib/libs/aws-sdk-cpp/ya.make b/contrib/libs/aws-sdk-cpp/ya.make
new file mode 100644
index 00000000000..d9fcb0818de
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/ya.make
@@ -0,0 +1,17 @@
+# Generated by devtools/yamaker from nixpkgs 980c4c3c2f664ccc5002f7fd6e08059cf1f00e75.
+
+OWNER(orivej shindo g:cpp-contrib)
+
+VERSION(1.8.113)
+
+ORIGINAL_SOURCE(https://github.com/awslabs/aws-sdk-cpp/archive/1.8.113.tar.gz)
+
+RECURSE(
+ aws-cpp-sdk-core
+ aws-cpp-sdk-s3
+ aws-cpp-sdk-s3-integration-tests
+ aws-cpp-sdk-sqs
+ aws-cpp-sdk-kinesis
+ aws-cpp-sdk-transfer
+ testing-resources
+)