aws-sdk-costexplorer 1.78.0 → 1.80.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73e0a5282f76f86618932dca1cee2bd696861dd37a0f210a9b07c3d042253490
4
- data.tar.gz: '008366c116ae2d567bb2008a109b57dbb356b6e9921e1e7259493281a9859016'
3
+ metadata.gz: f29b723690f77b46793898db81ba6e1f209f34e2354626394a2d2b8efd17b35b
4
+ data.tar.gz: cb6e46daf2706629f949d5ef43238ae6d27dfca49bc916d9c4475181f017d44a
5
5
  SHA512:
6
- metadata.gz: 46559160286a73bfa4366b5067bc5e783d39bf8fc9f57a10827eba04ab6c3265d8b3d199f5d1fc29615aedb78cd532e4e4605b00f85e81c64bc84c3c0b1f6ce1
7
- data.tar.gz: 61c27afe6938e945607d9118e2405a63a9b1e93172d6597606e0a499c6c581c24c5fb9ba535d3ab7ea9c142ff7949173e2155baca69c5890b0036a60603b28f5
6
+ metadata.gz: b34ff974f7f1e5a69df15f3ceb033001b4f73771ddcaabedcb05d598499fc1e386f00d4cf10767d8888335c9b176c66d327f0ae2d6c39f775833adeda9806441
7
+ data.tar.gz: 77c3259379b7d91dc6fc6a0048c5ed9a52d16fd77c81738ea8a33c5c4265210e9606f5ea32a266be4fd4b1f912427c584a093057b08d440c1fe793a28ea27c2c
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.80.0 (2022-12-05)
5
+ ------------------
6
+
7
+ * Feature - This release introduces two new APIs that offer a 1-click experience to refresh Savings Plans recommendations. The two APIs are StartSavingsPlansPurchaseRecommendationGeneration and ListSavingsPlansPurchaseRecommendationGeneration.
8
+
9
+ 1.79.0 (2022-10-25)
10
+ ------------------
11
+
12
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
13
+
4
14
  1.78.0 (2022-09-27)
5
15
  ------------------
6
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.78.0
1
+ 1.80.0
@@ -30,7 +30,7 @@ require 'aws-sdk-core/plugins/http_checksum.rb'
30
30
  require 'aws-sdk-core/plugins/checksum_algorithm.rb'
31
31
  require 'aws-sdk-core/plugins/defaults_mode.rb'
32
32
  require 'aws-sdk-core/plugins/recursion_detection.rb'
33
- require 'aws-sdk-core/plugins/signature_v4.rb'
33
+ require 'aws-sdk-core/plugins/sign.rb'
34
34
  require 'aws-sdk-core/plugins/protocols/json_rpc.rb'
35
35
 
36
36
  Aws::Plugins::GlobalConfiguration.add_identifier(:costexplorer)
@@ -79,8 +79,9 @@ module Aws::CostExplorer
79
79
  add_plugin(Aws::Plugins::ChecksumAlgorithm)
80
80
  add_plugin(Aws::Plugins::DefaultsMode)
81
81
  add_plugin(Aws::Plugins::RecursionDetection)
82
- add_plugin(Aws::Plugins::SignatureV4)
82
+ add_plugin(Aws::Plugins::Sign)
83
83
  add_plugin(Aws::Plugins::Protocols::JsonRpc)
84
+ add_plugin(Aws::CostExplorer::Plugins::Endpoints)
84
85
 
85
86
  # @overload initialize(options)
86
87
  # @param [Hash] options
@@ -297,6 +298,19 @@ module Aws::CostExplorer
297
298
  # ** Please note ** When response stubbing is enabled, no HTTP
298
299
  # requests are made, and retries are disabled.
299
300
  #
301
+ # @option options [Aws::TokenProvider] :token_provider
302
+ # A Bearer Token Provider. This can be an instance of any one of the
303
+ # following classes:
304
+ #
305
+ # * `Aws::StaticTokenProvider` - Used for configuring static, non-refreshing
306
+ # tokens.
307
+ #
308
+ # * `Aws::SSOTokenProvider` - Used for loading tokens from AWS SSO using an
309
+ # access token generated from `aws login`.
310
+ #
311
+ # When `:token_provider` is not configured directly, the `Aws::TokenProviderChain`
312
+ # will be used to search for tokens configured for your profile in shared configuration files.
313
+ #
300
314
  # @option options [Boolean] :use_dualstack_endpoint
301
315
  # When set to `true`, dualstack enabled endpoints (with `.aws` TLD)
302
316
  # will be used if available.
@@ -310,6 +324,9 @@ module Aws::CostExplorer
310
324
  # When `true`, request parameters are validated before
311
325
  # sending the request.
312
326
  #
327
+ # @option options [Aws::CostExplorer::EndpointProvider] :endpoint_provider
328
+ # The endpoint provider used to resolve endpoints. Any object that responds to `#resolve_endpoint(parameters)` where `parameters` is a Struct similar to `Aws::CostExplorer::EndpointParameters`
329
+ #
313
330
  # @option options [URI::HTTP,String] :http_proxy A proxy to send
314
331
  # requests through. Formatted like 'http://proxy.com:123'.
315
332
  #
@@ -3275,8 +3292,10 @@ module Aws::CostExplorer
3275
3292
  req.send_request(options)
3276
3293
  end
3277
3294
 
3278
- # Retrieves your request parameters, Savings Plan Recommendations
3279
- # Summary and Details.
3295
+ # Retrieves the Savings Plans recommendations for your account. First
3296
+ # use `StartSavingsPlansPurchaseRecommendationGeneration` to generate a
3297
+ # new set of recommendations, and then use
3298
+ # `GetSavingsPlansPurchaseRecommendation` to retrieve them.
3280
3299
  #
3281
3300
  # @option params [required, String] :savings_plans_type
3282
3301
  # The Savings Plans recommendation type that's requested.
@@ -4191,6 +4210,55 @@ module Aws::CostExplorer
4191
4210
  req.send_request(options)
4192
4211
  end
4193
4212
 
4213
+ # Retrieves a list of your historical recommendation generations within
4214
+ # the past 30 days.
4215
+ #
4216
+ # @option params [String] :generation_status
4217
+ # The status of the recommendation generation.
4218
+ #
4219
+ # @option params [Array<String>] :recommendation_ids
4220
+ # The IDs for each specific recommendation.
4221
+ #
4222
+ # @option params [Integer] :page_size
4223
+ # The number of recommendations that you want returned in a single
4224
+ # response object.
4225
+ #
4226
+ # @option params [String] :next_page_token
4227
+ # The token to retrieve the next set of results.
4228
+ #
4229
+ # @return [Types::ListSavingsPlansPurchaseRecommendationGenerationResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
4230
+ #
4231
+ # * {Types::ListSavingsPlansPurchaseRecommendationGenerationResponse#generation_summary_list #generation_summary_list} => Array&lt;Types::GenerationSummary&gt;
4232
+ # * {Types::ListSavingsPlansPurchaseRecommendationGenerationResponse#next_page_token #next_page_token} => String
4233
+ #
4234
+ # @example Request syntax with placeholder values
4235
+ #
4236
+ # resp = client.list_savings_plans_purchase_recommendation_generation({
4237
+ # generation_status: "SUCCEEDED", # accepts SUCCEEDED, PROCESSING, FAILED
4238
+ # recommendation_ids: ["RecommendationId"],
4239
+ # page_size: 1,
4240
+ # next_page_token: "NextPageToken",
4241
+ # })
4242
+ #
4243
+ # @example Response structure
4244
+ #
4245
+ # resp.generation_summary_list #=> Array
4246
+ # resp.generation_summary_list[0].recommendation_id #=> String
4247
+ # resp.generation_summary_list[0].generation_status #=> String, one of "SUCCEEDED", "PROCESSING", "FAILED"
4248
+ # resp.generation_summary_list[0].generation_started_time #=> String
4249
+ # resp.generation_summary_list[0].generation_completion_time #=> String
4250
+ # resp.generation_summary_list[0].estimated_completion_time #=> String
4251
+ # resp.next_page_token #=> String
4252
+ #
4253
+ # @see http://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ListSavingsPlansPurchaseRecommendationGeneration AWS API Documentation
4254
+ #
4255
+ # @overload list_savings_plans_purchase_recommendation_generation(params = {})
4256
+ # @param [Hash] params ({})
4257
+ def list_savings_plans_purchase_recommendation_generation(params = {}, options = {})
4258
+ req = build_request(:list_savings_plans_purchase_recommendation_generation, params)
4259
+ req.send_request(options)
4260
+ end
4261
+
4194
4262
  # Returns a list of resource tags associated with the resource specified
4195
4263
  # by the Amazon Resource Name (ARN).
4196
4264
  #
@@ -4260,6 +4328,39 @@ module Aws::CostExplorer
4260
4328
  req.send_request(options)
4261
4329
  end
4262
4330
 
4331
+ # Requests a Savings Plans recommendation generation. This enables you
4332
+ # to calculate a fresh set of Savings Plans recommendations that takes
4333
+ # your latest usage data and current Savings Plans inventory into
4334
+ # account. You can refresh Savings Plans recommendations up to three
4335
+ # times daily for a consolidated billing family.
4336
+ #
4337
+ # <note markdown="1"> `StartSavingsPlansPurchaseRecommendationGeneration` has no request
4338
+ # syntax because no input parameters are needed to support this
4339
+ # operation.
4340
+ #
4341
+ # </note>
4342
+ #
4343
+ # @return [Types::StartSavingsPlansPurchaseRecommendationGenerationResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
4344
+ #
4345
+ # * {Types::StartSavingsPlansPurchaseRecommendationGenerationResponse#recommendation_id #recommendation_id} => String
4346
+ # * {Types::StartSavingsPlansPurchaseRecommendationGenerationResponse#generation_started_time #generation_started_time} => String
4347
+ # * {Types::StartSavingsPlansPurchaseRecommendationGenerationResponse#estimated_completion_time #estimated_completion_time} => String
4348
+ #
4349
+ # @example Response structure
4350
+ #
4351
+ # resp.recommendation_id #=> String
4352
+ # resp.generation_started_time #=> String
4353
+ # resp.estimated_completion_time #=> String
4354
+ #
4355
+ # @see http://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/StartSavingsPlansPurchaseRecommendationGeneration AWS API Documentation
4356
+ #
4357
+ # @overload start_savings_plans_purchase_recommendation_generation(params = {})
4358
+ # @param [Hash] params ({})
4359
+ def start_savings_plans_purchase_recommendation_generation(params = {}, options = {})
4360
+ req = build_request(:start_savings_plans_purchase_recommendation_generation, params)
4361
+ req.send_request(options)
4362
+ end
4363
+
4263
4364
  # An API operation for adding one or more tags (key-value pairs) to a
4264
4365
  # resource.
4265
4366
  #
@@ -4617,7 +4718,7 @@ module Aws::CostExplorer
4617
4718
  params: params,
4618
4719
  config: config)
4619
4720
  context[:gem_name] = 'aws-sdk-costexplorer'
4620
- context[:gem_version] = '1.78.0'
4721
+ context[:gem_version] = '1.80.0'
4621
4722
  Seahorse::Client::Request.new(handlers, context)
4622
4723
  end
4623
4724
 
@@ -113,6 +113,10 @@ module Aws::CostExplorer
113
113
  FindingReasonCodes = Shapes::ListShape.new(name: 'FindingReasonCodes')
114
114
  ForecastResult = Shapes::StructureShape.new(name: 'ForecastResult')
115
115
  ForecastResultsByTime = Shapes::ListShape.new(name: 'ForecastResultsByTime')
116
+ GenerationExistsException = Shapes::StructureShape.new(name: 'GenerationExistsException')
117
+ GenerationStatus = Shapes::StringShape.new(name: 'GenerationStatus')
118
+ GenerationSummary = Shapes::StructureShape.new(name: 'GenerationSummary')
119
+ GenerationSummaryList = Shapes::ListShape.new(name: 'GenerationSummaryList')
116
120
  GenericBoolean = Shapes::BooleanShape.new(name: 'GenericBoolean')
117
121
  GenericDouble = Shapes::FloatShape.new(name: 'GenericDouble')
118
122
  GenericString = Shapes::StringShape.new(name: 'GenericString')
@@ -169,6 +173,8 @@ module Aws::CostExplorer
169
173
  ListCostAllocationTagsResponse = Shapes::StructureShape.new(name: 'ListCostAllocationTagsResponse')
170
174
  ListCostCategoryDefinitionsRequest = Shapes::StructureShape.new(name: 'ListCostCategoryDefinitionsRequest')
171
175
  ListCostCategoryDefinitionsResponse = Shapes::StructureShape.new(name: 'ListCostCategoryDefinitionsResponse')
176
+ ListSavingsPlansPurchaseRecommendationGenerationRequest = Shapes::StructureShape.new(name: 'ListSavingsPlansPurchaseRecommendationGenerationRequest')
177
+ ListSavingsPlansPurchaseRecommendationGenerationResponse = Shapes::StructureShape.new(name: 'ListSavingsPlansPurchaseRecommendationGenerationResponse')
172
178
  ListTagsForResourceRequest = Shapes::StructureShape.new(name: 'ListTagsForResourceRequest')
173
179
  ListTagsForResourceResponse = Shapes::StructureShape.new(name: 'ListTagsForResourceResponse')
174
180
  LookbackPeriodInDays = Shapes::StringShape.new(name: 'LookbackPeriodInDays')
@@ -209,6 +215,8 @@ module Aws::CostExplorer
209
215
  RDSInstanceDetails = Shapes::StructureShape.new(name: 'RDSInstanceDetails')
210
216
  RICostForUnusedHours = Shapes::StringShape.new(name: 'RICostForUnusedHours')
211
217
  RealizedSavings = Shapes::StringShape.new(name: 'RealizedSavings')
218
+ RecommendationId = Shapes::StringShape.new(name: 'RecommendationId')
219
+ RecommendationIdList = Shapes::ListShape.new(name: 'RecommendationIdList')
212
220
  RecommendationTarget = Shapes::StringShape.new(name: 'RecommendationTarget')
213
221
  RedshiftInstanceDetails = Shapes::StructureShape.new(name: 'RedshiftInstanceDetails')
214
222
  RequestChangedException = Shapes::StructureShape.new(name: 'RequestChangedException')
@@ -272,6 +280,8 @@ module Aws::CostExplorer
272
280
  SortDefinitionKey = Shapes::StringShape.new(name: 'SortDefinitionKey')
273
281
  SortDefinitions = Shapes::ListShape.new(name: 'SortDefinitions')
274
282
  SortOrder = Shapes::StringShape.new(name: 'SortOrder')
283
+ StartSavingsPlansPurchaseRecommendationGenerationRequest = Shapes::StructureShape.new(name: 'StartSavingsPlansPurchaseRecommendationGenerationRequest')
284
+ StartSavingsPlansPurchaseRecommendationGenerationResponse = Shapes::StructureShape.new(name: 'StartSavingsPlansPurchaseRecommendationGenerationResponse')
275
285
  Subscriber = Shapes::StructureShape.new(name: 'Subscriber')
276
286
  SubscriberAddress = Shapes::StringShape.new(name: 'SubscriberAddress')
277
287
  SubscriberStatus = Shapes::StringShape.new(name: 'SubscriberStatus')
@@ -645,6 +655,18 @@ module Aws::CostExplorer
645
655
 
646
656
  ForecastResultsByTime.member = Shapes::ShapeRef.new(shape: ForecastResult)
647
657
 
658
+ GenerationExistsException.add_member(:message, Shapes::ShapeRef.new(shape: ErrorMessage, location_name: "Message"))
659
+ GenerationExistsException.struct_class = Types::GenerationExistsException
660
+
661
+ GenerationSummary.add_member(:recommendation_id, Shapes::ShapeRef.new(shape: RecommendationId, location_name: "RecommendationId"))
662
+ GenerationSummary.add_member(:generation_status, Shapes::ShapeRef.new(shape: GenerationStatus, location_name: "GenerationStatus"))
663
+ GenerationSummary.add_member(:generation_started_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "GenerationStartedTime"))
664
+ GenerationSummary.add_member(:generation_completion_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "GenerationCompletionTime"))
665
+ GenerationSummary.add_member(:estimated_completion_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "EstimatedCompletionTime"))
666
+ GenerationSummary.struct_class = Types::GenerationSummary
667
+
668
+ GenerationSummaryList.member = Shapes::ShapeRef.new(shape: GenerationSummary)
669
+
648
670
  GetAnomaliesRequest.add_member(:monitor_arn, Shapes::ShapeRef.new(shape: GenericString, location_name: "MonitorArn"))
649
671
  GetAnomaliesRequest.add_member(:date_interval, Shapes::ShapeRef.new(shape: AnomalyDateInterval, required: true, location_name: "DateInterval"))
650
672
  GetAnomaliesRequest.add_member(:feedback, Shapes::ShapeRef.new(shape: AnomalyFeedbackType, location_name: "Feedback"))
@@ -937,6 +959,16 @@ module Aws::CostExplorer
937
959
  ListCostCategoryDefinitionsResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextPageToken, location_name: "NextToken"))
938
960
  ListCostCategoryDefinitionsResponse.struct_class = Types::ListCostCategoryDefinitionsResponse
939
961
 
962
+ ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:generation_status, Shapes::ShapeRef.new(shape: GenerationStatus, location_name: "GenerationStatus"))
963
+ ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:recommendation_ids, Shapes::ShapeRef.new(shape: RecommendationIdList, location_name: "RecommendationIds"))
964
+ ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:page_size, Shapes::ShapeRef.new(shape: NonNegativeInteger, location_name: "PageSize"))
965
+ ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:next_page_token, Shapes::ShapeRef.new(shape: NextPageToken, location_name: "NextPageToken"))
966
+ ListSavingsPlansPurchaseRecommendationGenerationRequest.struct_class = Types::ListSavingsPlansPurchaseRecommendationGenerationRequest
967
+
968
+ ListSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:generation_summary_list, Shapes::ShapeRef.new(shape: GenerationSummaryList, location_name: "GenerationSummaryList"))
969
+ ListSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:next_page_token, Shapes::ShapeRef.new(shape: NextPageToken, location_name: "NextPageToken"))
970
+ ListSavingsPlansPurchaseRecommendationGenerationResponse.struct_class = Types::ListSavingsPlansPurchaseRecommendationGenerationResponse
971
+
940
972
  ListTagsForResourceRequest.add_member(:resource_arn, Shapes::ShapeRef.new(shape: Arn, required: true, location_name: "ResourceArn"))
941
973
  ListTagsForResourceRequest.struct_class = Types::ListTagsForResourceRequest
942
974
 
@@ -985,6 +1017,8 @@ module Aws::CostExplorer
985
1017
  RDSInstanceDetails.add_member(:size_flex_eligible, Shapes::ShapeRef.new(shape: GenericBoolean, location_name: "SizeFlexEligible"))
986
1018
  RDSInstanceDetails.struct_class = Types::RDSInstanceDetails
987
1019
 
1020
+ RecommendationIdList.member = Shapes::ShapeRef.new(shape: RecommendationId)
1021
+
988
1022
  RedshiftInstanceDetails.add_member(:family, Shapes::ShapeRef.new(shape: GenericString, location_name: "Family"))
989
1023
  RedshiftInstanceDetails.add_member(:node_type, Shapes::ShapeRef.new(shape: GenericString, location_name: "NodeType"))
990
1024
  RedshiftInstanceDetails.add_member(:region, Shapes::ShapeRef.new(shape: GenericString, location_name: "Region"))
@@ -1247,6 +1281,13 @@ module Aws::CostExplorer
1247
1281
 
1248
1282
  SortDefinitions.member = Shapes::ShapeRef.new(shape: SortDefinition)
1249
1283
 
1284
+ StartSavingsPlansPurchaseRecommendationGenerationRequest.struct_class = Types::StartSavingsPlansPurchaseRecommendationGenerationRequest
1285
+
1286
+ StartSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:recommendation_id, Shapes::ShapeRef.new(shape: RecommendationId, location_name: "RecommendationId"))
1287
+ StartSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:generation_started_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "GenerationStartedTime"))
1288
+ StartSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:estimated_completion_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "EstimatedCompletionTime"))
1289
+ StartSavingsPlansPurchaseRecommendationGenerationResponse.struct_class = Types::StartSavingsPlansPurchaseRecommendationGenerationResponse
1290
+
1250
1291
  Subscriber.add_member(:address, Shapes::ShapeRef.new(shape: SubscriberAddress, location_name: "Address"))
1251
1292
  Subscriber.add_member(:type, Shapes::ShapeRef.new(shape: SubscriberType, location_name: "Type"))
1252
1293
  Subscriber.add_member(:status, Shapes::ShapeRef.new(shape: SubscriberStatus, location_name: "Status"))
@@ -1695,6 +1736,16 @@ module Aws::CostExplorer
1695
1736
  )
1696
1737
  end)
1697
1738
 
1739
+ api.add_operation(:list_savings_plans_purchase_recommendation_generation, Seahorse::Model::Operation.new.tap do |o|
1740
+ o.name = "ListSavingsPlansPurchaseRecommendationGeneration"
1741
+ o.http_method = "POST"
1742
+ o.http_request_uri = "/"
1743
+ o.input = Shapes::ShapeRef.new(shape: ListSavingsPlansPurchaseRecommendationGenerationRequest)
1744
+ o.output = Shapes::ShapeRef.new(shape: ListSavingsPlansPurchaseRecommendationGenerationResponse)
1745
+ o.errors << Shapes::ShapeRef.new(shape: LimitExceededException)
1746
+ o.errors << Shapes::ShapeRef.new(shape: InvalidNextTokenException)
1747
+ end)
1748
+
1698
1749
  api.add_operation(:list_tags_for_resource, Seahorse::Model::Operation.new.tap do |o|
1699
1750
  o.name = "ListTagsForResource"
1700
1751
  o.http_method = "POST"
@@ -1714,6 +1765,17 @@ module Aws::CostExplorer
1714
1765
  o.errors << Shapes::ShapeRef.new(shape: LimitExceededException)
1715
1766
  end)
1716
1767
 
1768
+ api.add_operation(:start_savings_plans_purchase_recommendation_generation, Seahorse::Model::Operation.new.tap do |o|
1769
+ o.name = "StartSavingsPlansPurchaseRecommendationGeneration"
1770
+ o.http_method = "POST"
1771
+ o.http_request_uri = "/"
1772
+ o.input = Shapes::ShapeRef.new(shape: StartSavingsPlansPurchaseRecommendationGenerationRequest)
1773
+ o.output = Shapes::ShapeRef.new(shape: StartSavingsPlansPurchaseRecommendationGenerationResponse)
1774
+ o.errors << Shapes::ShapeRef.new(shape: LimitExceededException)
1775
+ o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
1776
+ o.errors << Shapes::ShapeRef.new(shape: GenerationExistsException)
1777
+ end)
1778
+
1717
1779
  api.add_operation(:tag_resource, Seahorse::Model::Operation.new.tap do |o|
1718
1780
  o.name = "TagResource"
1719
1781
  o.http_method = "POST"
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::CostExplorer
11
+ # Endpoint parameters used to influence endpoints per request.
12
+ #
13
+ # @!attribute region
14
+ # The AWS region used to dispatch the request.
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @!attribute use_dual_stack
19
+ # When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
20
+ #
21
+ # @return [Boolean]
22
+ #
23
+ # @!attribute use_fips
24
+ # When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
25
+ #
26
+ # @return [Boolean]
27
+ #
28
+ # @!attribute endpoint
29
+ # Override the endpoint used to send this request
30
+ #
31
+ # @return [String]
32
+ #
33
+ EndpointParameters = Struct.new(
34
+ :region,
35
+ :use_dual_stack,
36
+ :use_fips,
37
+ :endpoint,
38
+ ) do
39
+ include Aws::Structure
40
+
41
+ # @api private
42
+ class << self
43
+ PARAM_MAP = {
44
+ 'Region' => :region,
45
+ 'UseDualStack' => :use_dual_stack,
46
+ 'UseFIPS' => :use_fips,
47
+ 'Endpoint' => :endpoint,
48
+ }.freeze
49
+ end
50
+
51
+ def initialize(options = {})
52
+ self[:region] = options[:region]
53
+ if self[:region].nil?
54
+ raise ArgumentError, "Missing required EndpointParameter: :region"
55
+ end
56
+ self[:use_dual_stack] = options[:use_dual_stack]
57
+ self[:use_dual_stack] = false if self[:use_dual_stack].nil?
58
+ if self[:use_dual_stack].nil?
59
+ raise ArgumentError, "Missing required EndpointParameter: :use_dual_stack"
60
+ end
61
+ self[:use_fips] = options[:use_fips]
62
+ self[:use_fips] = false if self[:use_fips].nil?
63
+ if self[:use_fips].nil?
64
+ raise ArgumentError, "Missing required EndpointParameter: :use_fips"
65
+ end
66
+ self[:endpoint] = options[:endpoint]
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,222 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::CostExplorer
11
+ class EndpointProvider
12
+ def initialize(rule_set = nil)
13
+ @@rule_set ||= begin
14
+ endpoint_rules = Aws::Json.load(Base64.decode64(RULES))
15
+ Aws::Endpoints::RuleSet.new(
16
+ version: endpoint_rules['version'],
17
+ service_id: endpoint_rules['serviceId'],
18
+ parameters: endpoint_rules['parameters'],
19
+ rules: endpoint_rules['rules']
20
+ )
21
+ end
22
+ @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
+ end
24
+
25
+ def resolve_endpoint(parameters)
26
+ @provider.resolve_endpoint(parameters)
27
+ end
28
+
29
+ # @api private
30
+ RULES = <<-JSON
31
+ eyJ2ZXJzaW9uIjoiMS4wIiwicGFyYW1ldGVycyI6eyJSZWdpb24iOnsiYnVp
32
+ bHRJbiI6IkFXUzo6UmVnaW9uIiwicmVxdWlyZWQiOnRydWUsImRvY3VtZW50
33
+ YXRpb24iOiJUaGUgQVdTIHJlZ2lvbiB1c2VkIHRvIGRpc3BhdGNoIHRoZSBy
34
+ ZXF1ZXN0LiIsInR5cGUiOiJTdHJpbmcifSwiVXNlRHVhbFN0YWNrIjp7ImJ1
35
+ aWx0SW4iOiJBV1M6OlVzZUR1YWxTdGFjayIsInJlcXVpcmVkIjp0cnVlLCJk
36
+ ZWZhdWx0IjpmYWxzZSwiZG9jdW1lbnRhdGlvbiI6IldoZW4gdHJ1ZSwgdXNl
37
+ IHRoZSBkdWFsLXN0YWNrIGVuZHBvaW50LiBJZiB0aGUgY29uZmlndXJlZCBl
38
+ bmRwb2ludCBkb2VzIG5vdCBzdXBwb3J0IGR1YWwtc3RhY2ssIGRpc3BhdGNo
39
+ aW5nIHRoZSByZXF1ZXN0IE1BWSByZXR1cm4gYW4gZXJyb3IuIiwidHlwZSI6
40
+ IkJvb2xlYW4ifSwiVXNlRklQUyI6eyJidWlsdEluIjoiQVdTOjpVc2VGSVBT
41
+ IiwicmVxdWlyZWQiOnRydWUsImRlZmF1bHQiOmZhbHNlLCJkb2N1bWVudGF0
42
+ aW9uIjoiV2hlbiB0cnVlLCBzZW5kIHRoaXMgcmVxdWVzdCB0byB0aGUgRklQ
43
+ Uy1jb21wbGlhbnQgcmVnaW9uYWwgZW5kcG9pbnQuIElmIHRoZSBjb25maWd1
44
+ cmVkIGVuZHBvaW50IGRvZXMgbm90IGhhdmUgYSBGSVBTIGNvbXBsaWFudCBl
45
+ bmRwb2ludCwgZGlzcGF0Y2hpbmcgdGhlIHJlcXVlc3Qgd2lsbCByZXR1cm4g
46
+ YW4gZXJyb3IuIiwidHlwZSI6IkJvb2xlYW4ifSwiRW5kcG9pbnQiOnsiYnVp
47
+ bHRJbiI6IlNESzo6RW5kcG9pbnQiLCJyZXF1aXJlZCI6ZmFsc2UsImRvY3Vt
48
+ ZW50YXRpb24iOiJPdmVycmlkZSB0aGUgZW5kcG9pbnQgdXNlZCB0byBzZW5k
49
+ IHRoaXMgcmVxdWVzdCIsInR5cGUiOiJTdHJpbmcifX0sInJ1bGVzIjpbeyJj
50
+ b25kaXRpb25zIjpbeyJmbiI6ImF3cy5wYXJ0aXRpb24iLCJhcmd2IjpbeyJy
51
+ ZWYiOiJSZWdpb24ifV0sImFzc2lnbiI6IlBhcnRpdGlvblJlc3VsdCJ9XSwi
52
+ dHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W3siZm4iOiJp
53
+ c1NldCIsImFyZ3YiOlt7InJlZiI6IkVuZHBvaW50In1dfV0sInR5cGUiOiJ0
54
+ cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVx
55
+ dWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUZJUFMifSx0cnVlXX1dLCJlcnJv
56
+ ciI6IkludmFsaWQgQ29uZmlndXJhdGlvbjogRklQUyBhbmQgY3VzdG9tIGVu
57
+ ZHBvaW50IGFyZSBub3Qgc3VwcG9ydGVkIiwidHlwZSI6ImVycm9yIn0seyJj
58
+ b25kaXRpb25zIjpbXSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0
59
+ aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoi
60
+ VXNlRHVhbFN0YWNrIn0sdHJ1ZV19XSwiZXJyb3IiOiJJbnZhbGlkIENvbmZp
61
+ Z3VyYXRpb246IER1YWxzdGFjayBhbmQgY3VzdG9tIGVuZHBvaW50IGFyZSBu
62
+ b3Qgc3VwcG9ydGVkIiwidHlwZSI6ImVycm9yIn0seyJjb25kaXRpb25zIjpb
63
+ XSwiZW5kcG9pbnQiOnsidXJsIjp7InJlZiI6IkVuZHBvaW50In0sInByb3Bl
64
+ cnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9XX1d
65
+ fSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoic3RyaW5nRXF1YWxzIiwiYXJndiI6
66
+ W3siZm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVz
67
+ dWx0In0sIm5hbWUiXX0sImF3cyJdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMi
68
+ Olt7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3Yi
69
+ Olt7InJlZiI6IlVzZUZJUFMifSx0cnVlXX0seyJmbiI6ImJvb2xlYW5FcXVh
70
+ bHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFsU3RhY2sifSx0cnVlXX1dLCJ0
71
+ eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRpb25zIjpbeyJmbiI6ImJv
72
+ b2xlYW5FcXVhbHMiLCJhcmd2IjpbdHJ1ZSx7ImZuIjoiZ2V0QXR0ciIsImFy
73
+ Z3YiOlt7InJlZiI6IlBhcnRpdGlvblJlc3VsdCJ9LCJzdXBwb3J0c0ZJUFMi
74
+ XX1dfSx7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4i
75
+ OiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0s
76
+ InN1cHBvcnRzRHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVz
77
+ IjpbeyJjb25kaXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6
78
+ Ly9jb3N0LWV4cGxvcmVyLWZpcHMue1JlZ2lvbn0uYXBpLmF3cyIsInByb3Bl
79
+ cnRpZXMiOnsiYXV0aFNjaGVtZXMiOlt7Im5hbWUiOiJzaWd2NCIsInNpZ25p
80
+ bmdSZWdpb24iOiJ1cy1lYXN0LTEiLCJzaWduaW5nTmFtZSI6ImNlIn1dfSwi
81
+ aGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsiY29uZGl0aW9u
82
+ cyI6W10sImVycm9yIjoiRklQUyBhbmQgRHVhbFN0YWNrIGFyZSBlbmFibGVk
83
+ LCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBvbmUgb3Ig
84
+ Ym90aCIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25zIjpbeyJmbiI6
85
+ ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VGSVBTIn0sdHJ1
86
+ ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W3si
87
+ Zm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJmbiI6ImdldEF0
88
+ dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwic3VwcG9y
89
+ dHNGSVBTIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRp
90
+ b25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9jb3N0LWV4cGxv
91
+ cmVyLWZpcHMue1JlZ2lvbn0uYW1hem9uYXdzLmNvbSIsInByb3BlcnRpZXMi
92
+ OnsiYXV0aFNjaGVtZXMiOlt7Im5hbWUiOiJzaWd2NCIsInNpZ25pbmdSZWdp
93
+ b24iOiJ1cy1lYXN0LTEiLCJzaWduaW5nTmFtZSI6ImNlIn1dfSwiaGVhZGVy
94
+ cyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsiY29uZGl0aW9ucyI6W10s
95
+ ImVycm9yIjoiRklQUyBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBk
96
+ b2VzIG5vdCBzdXBwb3J0IEZJUFMiLCJ0eXBlIjoiZXJyb3IifV19LHsiY29u
97
+ ZGl0aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVm
98
+ IjoiVXNlRHVhbFN0YWNrIn0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxl
99
+ cyI6W3siY29uZGl0aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJn
100
+ diI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0
101
+ aXRpb25SZXN1bHQifSwic3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5cGUi
102
+ OiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6
103
+ eyJ1cmwiOiJodHRwczovL2Nvc3QtZXhwbG9yZXIue1JlZ2lvbn0uYXBpLmF3
104
+ cyIsInByb3BlcnRpZXMiOnsiYXV0aFNjaGVtZXMiOlt7Im5hbWUiOiJzaWd2
105
+ NCIsInNpZ25pbmdSZWdpb24iOiJ1cy1lYXN0LTEiLCJzaWduaW5nTmFtZSI6
106
+ ImNlIn1dfSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsi
107
+ Y29uZGl0aW9ucyI6W10sImVycm9yIjoiRHVhbFN0YWNrIGlzIGVuYWJsZWQg
108
+ YnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRHVhbFN0YWNr
109
+ IiwidHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2lu
110
+ dCI6eyJ1cmwiOiJodHRwczovL2NlLnVzLWVhc3QtMS5hbWF6b25hd3MuY29t
111
+ IiwicHJvcGVydGllcyI6eyJhdXRoU2NoZW1lcyI6W3sibmFtZSI6InNpZ3Y0
112
+ Iiwic2lnbmluZ1JlZ2lvbiI6InVzLWVhc3QtMSIsInNpZ25pbmdOYW1lIjoi
113
+ Y2UifV19LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9XX0seyJj
114
+ b25kaXRpb25zIjpbeyJmbiI6InN0cmluZ0VxdWFscyIsImFyZ3YiOlt7ImZu
115
+ IjoiZ2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRpdGlvblJlc3VsdCJ9
116
+ LCJuYW1lIl19LCJhd3MtY24iXX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpb
117
+ eyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2Ijpb
118
+ eyJyZWYiOiJVc2VGSVBTIn0sdHJ1ZV19LHsiZm4iOiJib29sZWFuRXF1YWxz
119
+ IiwiYXJndiI6W3sicmVmIjoiVXNlRHVhbFN0YWNrIn0sdHJ1ZV19XSwidHlw
120
+ ZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W3siZm4iOiJib29s
121
+ ZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2
122
+ IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNGSVBTIl19
123
+ XX0seyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbdHJ1ZSx7ImZuIjoi
124
+ Z2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRpdGlvblJlc3VsdCJ9LCJz
125
+ dXBwb3J0c0R1YWxTdGFjayJdfV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6
126
+ W3siY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8v
127
+ Y29zdC1leHBsb3Jlci1maXBzLntSZWdpb259LmFwaS5hbWF6b253ZWJzZXJ2
128
+ aWNlcy5jb20uY24iLCJwcm9wZXJ0aWVzIjp7ImF1dGhTY2hlbWVzIjpbeyJu
129
+ YW1lIjoic2lndjQiLCJzaWduaW5nUmVnaW9uIjoiY24tbm9ydGh3ZXN0LTEi
130
+ LCJzaWduaW5nTmFtZSI6ImNlIn1dfSwiaGVhZGVycyI6e319LCJ0eXBlIjoi
131
+ ZW5kcG9pbnQifV19LHsiY29uZGl0aW9ucyI6W10sImVycm9yIjoiRklQUyBh
132
+ bmQgRHVhbFN0YWNrIGFyZSBlbmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24g
133
+ ZG9lcyBub3Qgc3VwcG9ydCBvbmUgb3IgYm90aCIsInR5cGUiOiJlcnJvciJ9
134
+ XX0seyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2
135
+ IjpbeyJyZWYiOiJVc2VGSVBTIn0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJy
136
+ dWxlcyI6W3siY29uZGl0aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwi
137
+ YXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQ
138
+ YXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNGSVBTIl19XX1dLCJ0eXBlIjoi
139
+ dHJlZSIsInJ1bGVzIjpbeyJjb25kaXRpb25zIjpbXSwiZW5kcG9pbnQiOnsi
140
+ dXJsIjoiaHR0cHM6Ly9jb3N0LWV4cGxvcmVyLWZpcHMue1JlZ2lvbn0uYW1h
141
+ em9uYXdzLmNvbS5jbiIsInByb3BlcnRpZXMiOnsiYXV0aFNjaGVtZXMiOlt7
142
+ Im5hbWUiOiJzaWd2NCIsInNpZ25pbmdSZWdpb24iOiJjbi1ub3J0aHdlc3Qt
143
+ MSIsInNpZ25pbmdOYW1lIjoiY2UifV19LCJoZWFkZXJzIjp7fX0sInR5cGUi
144
+ OiJlbmRwb2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJyb3IiOiJGSVBT
145
+ IGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBv
146
+ cnQgRklQUyIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25zIjpbeyJm
147
+ biI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFsU3Rh
148
+ Y2sifSx0cnVlXX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRp
149
+ b25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbdHJ1ZSx7ImZu
150
+ IjoiZ2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRpdGlvblJlc3VsdCJ9
151
+ LCJzdXBwb3J0c0R1YWxTdGFjayJdfV19XSwidHlwZSI6InRyZWUiLCJydWxl
152
+ cyI6W3siY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBz
153
+ Oi8vY29zdC1leHBsb3Jlci57UmVnaW9ufS5hcGkuYW1hem9ud2Vic2Vydmlj
154
+ ZXMuY29tLmNuIiwicHJvcGVydGllcyI6eyJhdXRoU2NoZW1lcyI6W3sibmFt
155
+ ZSI6InNpZ3Y0Iiwic2lnbmluZ1JlZ2lvbiI6ImNuLW5vcnRod2VzdC0xIiwi
156
+ c2lnbmluZ05hbWUiOiJjZSJ9XX0sImhlYWRlcnMiOnt9fSwidHlwZSI6ImVu
157
+ ZHBvaW50In1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkR1YWxTdGFj
158
+ ayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBw
159
+ b3J0IER1YWxTdGFjayIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25z
160
+ IjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9jZS5jbi1ub3J0aHdl
161
+ c3QtMS5hbWF6b25hd3MuY29tLmNuIiwicHJvcGVydGllcyI6eyJhdXRoU2No
162
+ ZW1lcyI6W3sibmFtZSI6InNpZ3Y0Iiwic2lnbmluZ1JlZ2lvbiI6ImNuLW5v
163
+ cnRod2VzdC0xIiwic2lnbmluZ05hbWUiOiJjZSJ9XX0sImhlYWRlcnMiOnt9
164
+ fSwidHlwZSI6ImVuZHBvaW50In1dfSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoi
165
+ Ym9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUZJUFMifSx0cnVl
166
+ XX0seyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VE
167
+ dWFsU3RhY2sifSx0cnVlXX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJj
168
+ b25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbdHJ1
169
+ ZSx7ImZuIjoiZ2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRpdGlvblJl
170
+ c3VsdCJ9LCJzdXBwb3J0c0ZJUFMiXX1dfSx7ImZuIjoiYm9vbGVhbkVxdWFs
171
+ cyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVm
172
+ IjoiUGFydGl0aW9uUmVzdWx0In0sInN1cHBvcnRzRHVhbFN0YWNrIl19XX1d
173
+ LCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRpb25zIjpbXSwiZW5k
174
+ cG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9jZS1maXBzLntSZWdpb259LntQYXJ0
175
+ aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4fSIsInByb3BlcnRpZXMi
176
+ Ont9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9XX0seyJjb25k
177
+ aXRpb25zIjpbXSwiZXJyb3IiOiJGSVBTIGFuZCBEdWFsU3RhY2sgYXJlIGVu
178
+ YWJsZWQsIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9u
179
+ ZSBvciBib3RoIiwidHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7
180
+ ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUZJUFMi
181
+ fSx0cnVlXX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRpb25z
182
+ IjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbdHJ1ZSx7ImZuIjoi
183
+ Z2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRpdGlvblJlc3VsdCJ9LCJz
184
+ dXBwb3J0c0ZJUFMiXX1dfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNv
185
+ bmRpdGlvbnMiOltdLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRp
186
+ b25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9jZS1maXBzLntS
187
+ ZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fSIsInByb3BlcnRp
188
+ ZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9XX1dfSx7
189
+ ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgaXMgZW5hYmxlZCBidXQg
190
+ dGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBGSVBTIiwidHlwZSI6
191
+ ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFs
192
+ cyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxTdGFjayJ9LHRydWVdfV0sInR5
193
+ cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9v
194
+ bGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJnZXRBdHRyIiwiYXJn
195
+ diI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0sInN1cHBvcnRzRHVhbFN0
196
+ YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRpb25z
197
+ IjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9jZS57UmVnaW9ufS57
198
+ UGFydGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH0iLCJwcm9wZXJ0
199
+ aWVzIjp7fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsi
200
+ Y29uZGl0aW9ucyI6W10sImVycm9yIjoiRHVhbFN0YWNrIGlzIGVuYWJsZWQg
201
+ YnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRHVhbFN0YWNr
202
+ IiwidHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOltdLCJ0eXBlIjoi
203
+ dHJlZSIsInJ1bGVzIjpbeyJjb25kaXRpb25zIjpbeyJmbiI6InN0cmluZ0Vx
204
+ dWFscyIsImFyZ3YiOlt7InJlZiI6IlJlZ2lvbiJ9LCJhd3MtZ2xvYmFsIl19
205
+ XSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9jZS51cy1lYXN0LTEuYW1h
206
+ em9uYXdzLmNvbSIsInByb3BlcnRpZXMiOnsiYXV0aFNjaGVtZXMiOlt7Im5h
207
+ bWUiOiJzaWd2NCIsInNpZ25pbmdSZWdpb24iOiJ1cy1lYXN0LTEiLCJzaWdu
208
+ aW5nTmFtZSI6ImNlIn1dfSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9p
209
+ bnQifSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoic3RyaW5nRXF1YWxzIiwiYXJn
210
+ diI6W3sicmVmIjoiUmVnaW9uIn0sImF3cy1jbi1nbG9iYWwiXX1dLCJlbmRw
211
+ b2ludCI6eyJ1cmwiOiJodHRwczovL2NlLmNuLW5vcnRod2VzdC0xLmFtYXpv
212
+ bmF3cy5jb20uY24iLCJwcm9wZXJ0aWVzIjp7ImF1dGhTY2hlbWVzIjpbeyJu
213
+ YW1lIjoic2lndjQiLCJzaWduaW5nUmVnaW9uIjoiY24tbm9ydGh3ZXN0LTEi
214
+ LCJzaWduaW5nTmFtZSI6ImNlIn1dfSwiaGVhZGVycyI6e319LCJ0eXBlIjoi
215
+ ZW5kcG9pbnQifSx7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwi
216
+ OiJodHRwczovL2NlLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3Vm
217
+ Zml4fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJl
218
+ bmRwb2ludCJ9XX1dfV19
219
+
220
+ JSON
221
+ end
222
+ end