/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file 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.
 */
/*
 * Do not modify this file. This file is generated from the ec2-2016-11-15.normal.json service model.
 */
using System;
using System.Runtime.ExceptionServices;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Net;
using Amazon.EC2.Model;
using Amazon.EC2.Model.Internal.MarshallTransformations;
using Amazon.EC2.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace Amazon.EC2
{
    /// 
    /// Implementation for accessing EC2
    ///
    /// Amazon Elastic Compute Cloud 
    /// 
    /// Amazon Elastic Compute Cloud (Amazon EC2) provides secure and resizable computing
    /// capacity in the Amazon Web Services Cloud. Using Amazon EC2 eliminates the need to
    /// invest in hardware up front, so you can develop and deploy applications faster. Amazon
    /// Virtual Private Cloud (Amazon VPC) enables you to provision a logically isolated section
    /// of the Amazon Web Services Cloud where you can launch Amazon Web Services resources
    /// in a virtual network that you've defined. Amazon Elastic Block Store (Amazon EBS)
    /// provides block level storage volumes for use with EC2 instances. EBS volumes are highly
    /// available and reliable storage volumes that can be attached to any running instance
    /// and used like a hard drive.
    /// 
    ///  
    /// 
    /// To learn more, see the following resources:
    /// 
    ///  
    /// 
    public partial class AmazonEC2Client : AmazonServiceClient, IAmazonEC2
    {
        private static IServiceMetadata serviceMetadata = new AmazonEC2Metadata();
        
        #region Constructors
        /// 
        /// Constructs AmazonEC2Client with the credentials loaded from the application's
        /// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
        /// 
        /// Example App.config with credentials set. 
        /// 
        /// <?xml version="1.0" encoding="utf-8" ?>
        /// <configuration>
        ///     <appSettings>
        ///         <add key="AWSProfileName" value="AWS Default"/>
        ///     </appSettings>
        /// </configuration>
        /// 
        ///
        /// 
        public AmazonEC2Client()
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonEC2Config()) { }
        /// 
        /// Constructs AmazonEC2Client with the credentials loaded from the application's
        /// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
        /// 
        /// Example App.config with credentials set. 
        /// 
        /// <?xml version="1.0" encoding="utf-8" ?>
        /// <configuration>
        ///     <appSettings>
        ///         <add key="AWSProfileName" value="AWS Default"/>
        ///     </appSettings>
        /// </configuration>
        /// 
        ///
        /// 
        /// The region to connect.
        public AmazonEC2Client(RegionEndpoint region)
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonEC2Config{RegionEndpoint = region}) { }
        /// 
        /// Constructs AmazonEC2Client with the credentials loaded from the application's
        /// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
        /// 
        /// Example App.config with credentials set. 
        /// 
        /// <?xml version="1.0" encoding="utf-8" ?>
        /// <configuration>
        ///     <appSettings>
        ///         <add key="AWSProfileName" value="AWS Default"/>
        ///     </appSettings>
        /// </configuration>
        /// 
        ///
        /// 
        /// The AmazonEC2Client Configuration Object
        public AmazonEC2Client(AmazonEC2Config config)
            : base(FallbackCredentialsFactory.GetCredentials(config), config){}
        /// 
        /// Constructs AmazonEC2Client with AWS Credentials
        /// 
        /// AWS Credentials
        public AmazonEC2Client(AWSCredentials credentials)
            : this(credentials, new AmazonEC2Config())
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Credentials
        /// 
        /// AWS Credentials
        /// The region to connect.
        public AmazonEC2Client(AWSCredentials credentials, RegionEndpoint region)
            : this(credentials, new AmazonEC2Config{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Credentials and an
        /// AmazonEC2Client Configuration object.
        /// 
        /// AWS Credentials
        /// The AmazonEC2Client Configuration Object
        public AmazonEC2Client(AWSCredentials credentials, AmazonEC2Config clientConfig)
            : base(credentials, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        public AmazonEC2Client(string awsAccessKeyId, string awsSecretAccessKey)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonEC2Config())
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The region to connect.
        public AmazonEC2Client(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonEC2Config() {RegionEndpoint=region})
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Access Key ID, AWS Secret Key and an
        /// AmazonEC2Client Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The AmazonEC2Client Configuration Object
        public AmazonEC2Client(string awsAccessKeyId, string awsSecretAccessKey, AmazonEC2Config clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        public AmazonEC2Client(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonEC2Config())
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The region to connect.
        public AmazonEC2Client(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonEC2Config{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonEC2Client with AWS Access Key ID, AWS Secret Key and an
        /// AmazonEC2Client Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The AmazonEC2Client Configuration Object
        public AmazonEC2Client(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, AmazonEC2Config clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, clientConfig)
        {
        }
        #endregion
#if AWS_ASYNC_ENUMERABLES_API
        private IEC2PaginatorFactory _paginators;
        /// 
        /// Paginators for the service
        /// 
        public IEC2PaginatorFactory Paginators 
        {
            get 
            {
                if (this._paginators == null) 
                {
                    this._paginators = new EC2PaginatorFactory(this);
                }
                return this._paginators;
            }
        }
#endif
        #region Overrides
        /// 
        /// Creates the signer for the service.
        /// 
        protected override AbstractAWSSigner CreateSigner()
        {
            return new AWS4Signer();
        } 
        /// 
        /// Customizes the runtime pipeline.
        /// 
        /// Runtime pipeline for the current client.
        protected override void CustomizeRuntimePipeline(RuntimePipeline pipeline)
        {
            pipeline.AddHandlerBefore(new Amazon.EC2.Internal.AmazonEC2PreMarshallHandler(this.Credentials));
            pipeline.AddHandlerAfter(new Amazon.EC2.Internal.AmazonEC2PostMarshallHandler());
            pipeline.AddHandlerBefore(new Amazon.EC2.Internal.AmazonEC2ResponseHandler());
            if(this.Config.RetryMode == RequestRetryMode.Legacy)
            {
                pipeline.ReplaceHandler(new Amazon.Runtime.Internal.RetryHandler(new Amazon.EC2.Internal.EC2RetryPolicy(this.Config)));
            }
            if(this.Config.RetryMode == RequestRetryMode.Standard)
            {
                pipeline.ReplaceHandler(new Amazon.Runtime.Internal.RetryHandler(new Amazon.EC2.Internal.EC2StandardRetryPolicy(this.Config)));
            }
            if(this.Config.RetryMode == RequestRetryMode.Adaptive)
            {
                pipeline.ReplaceHandler(new Amazon.Runtime.Internal.RetryHandler(new Amazon.EC2.Internal.EC2AdaptiveRetryPolicy(this.Config)));
            }
            pipeline.RemoveHandler();
            pipeline.AddHandlerAfter(new AmazonEC2EndpointResolver());
        }
        /// 
        /// Capture metadata for the service.
        /// 
        protected override IServiceMetadata ServiceMetadata
        {
            get
            {
                return serviceMetadata;
            }
        }
        #endregion
        #region Dispose
        /// 
        /// Disposes the service client.
        /// 
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }
        #endregion
        #region  AcceptAddressTransfer
        internal virtual AcceptAddressTransferResponse AcceptAddressTransfer(AcceptAddressTransferRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptAddressTransferRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptAddressTransferResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Accepts an Elastic IP address transfer. For more information, see Accept
        /// a transferred Elastic IP address in the Amazon Virtual Private Cloud User Guide.
        /// 
        /// Container for the necessary parameters to execute the AcceptAddressTransfer service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AcceptAddressTransfer service method, as returned by EC2.
        /// REST API Reference for AcceptAddressTransfer Operation
        public virtual Task AcceptAddressTransferAsync(AcceptAddressTransferRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptAddressTransferRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptAddressTransferResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AcceptReservedInstancesExchangeQuote
        internal virtual AcceptReservedInstancesExchangeQuoteResponse AcceptReservedInstancesExchangeQuote(AcceptReservedInstancesExchangeQuoteRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptReservedInstancesExchangeQuoteRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptReservedInstancesExchangeQuoteResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Accepts the Convertible Reserved Instance exchange quote described in the GetReservedInstancesExchangeQuote
        /// call.
        /// 
        /// Container for the necessary parameters to execute the AcceptReservedInstancesExchangeQuote service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AcceptReservedInstancesExchangeQuote service method, as returned by EC2.
        /// REST API Reference for AcceptReservedInstancesExchangeQuote Operation
        public virtual Task AcceptReservedInstancesExchangeQuoteAsync(AcceptReservedInstancesExchangeQuoteRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptReservedInstancesExchangeQuoteRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptReservedInstancesExchangeQuoteResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AcceptTransitGatewayMulticastDomainAssociations
        internal virtual AcceptTransitGatewayMulticastDomainAssociationsResponse AcceptTransitGatewayMulticastDomainAssociations(AcceptTransitGatewayMulticastDomainAssociationsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptTransitGatewayMulticastDomainAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptTransitGatewayMulticastDomainAssociationsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Accepts a request to associate subnets with a transit gateway multicast domain.
        /// 
        /// Container for the necessary parameters to execute the AcceptTransitGatewayMulticastDomainAssociations service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AcceptTransitGatewayMulticastDomainAssociations service method, as returned by EC2.
        /// REST API Reference for AcceptTransitGatewayMulticastDomainAssociations Operation
        public virtual Task AcceptTransitGatewayMulticastDomainAssociationsAsync(AcceptTransitGatewayMulticastDomainAssociationsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptTransitGatewayMulticastDomainAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptTransitGatewayMulticastDomainAssociationsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AcceptTransitGatewayPeeringAttachment
        internal virtual AcceptTransitGatewayPeeringAttachmentResponse AcceptTransitGatewayPeeringAttachment(AcceptTransitGatewayPeeringAttachmentRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptTransitGatewayPeeringAttachmentRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptTransitGatewayPeeringAttachmentResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Accepts a transit gateway peering attachment request. The peering attachment must
        /// be in the pendingAcceptance state.
        /// 
        /// Container for the necessary parameters to execute the AcceptTransitGatewayPeeringAttachment service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AcceptTransitGatewayPeeringAttachment service method, as returned by EC2.
        /// REST API Reference for AcceptTransitGatewayPeeringAttachment Operation
        public virtual Task AcceptTransitGatewayPeeringAttachmentAsync(AcceptTransitGatewayPeeringAttachmentRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptTransitGatewayPeeringAttachmentRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptTransitGatewayPeeringAttachmentResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AcceptTransitGatewayVpcAttachment
        internal virtual AcceptTransitGatewayVpcAttachmentResponse AcceptTransitGatewayVpcAttachment(AcceptTransitGatewayVpcAttachmentRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptTransitGatewayVpcAttachmentRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptTransitGatewayVpcAttachmentResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Accepts a request to attach a VPC to a transit gateway.
        /// 
        ///  
        /// 
        /// The VPC attachment must be in the pendingAcceptance state. Use DescribeTransitGatewayVpcAttachments
        /// to view your pending VPC attachment requests. Use RejectTransitGatewayVpcAttachment
        /// to reject a VPC attachment request.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AcceptTransitGatewayVpcAttachment service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AcceptTransitGatewayVpcAttachment service method, as returned by EC2.
        /// REST API Reference for AcceptTransitGatewayVpcAttachment Operation
        public virtual Task AcceptTransitGatewayVpcAttachmentAsync(AcceptTransitGatewayVpcAttachmentRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptTransitGatewayVpcAttachmentRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptTransitGatewayVpcAttachmentResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AcceptVpcEndpointConnections
        internal virtual AcceptVpcEndpointConnectionsResponse AcceptVpcEndpointConnections(AcceptVpcEndpointConnectionsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptVpcEndpointConnectionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptVpcEndpointConnectionsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Accepts connection requests to your VPC endpoint service.
        /// 
        /// Container for the necessary parameters to execute the AcceptVpcEndpointConnections service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AcceptVpcEndpointConnections service method, as returned by EC2.
        /// REST API Reference for AcceptVpcEndpointConnections Operation
        public virtual Task AcceptVpcEndpointConnectionsAsync(AcceptVpcEndpointConnectionsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptVpcEndpointConnectionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptVpcEndpointConnectionsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AcceptVpcPeeringConnection
        internal virtual AcceptVpcPeeringConnectionResponse AcceptVpcPeeringConnection(AcceptVpcPeeringConnectionRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptVpcPeeringConnectionRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptVpcPeeringConnectionResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Accept a VPC peering connection request. To accept a request, the VPC peering connection
        /// must be in the pending-acceptance state, and you must be the owner of
        /// the peer VPC. Use DescribeVpcPeeringConnections to view your outstanding VPC
        /// peering connection requests.
        /// 
        ///  
        /// 
        /// For an inter-Region VPC peering connection request, you must accept the VPC peering
        /// connection in the Region of the accepter VPC.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AcceptVpcPeeringConnection service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AcceptVpcPeeringConnection service method, as returned by EC2.
        /// REST API Reference for AcceptVpcPeeringConnection Operation
        public virtual Task AcceptVpcPeeringConnectionAsync(AcceptVpcPeeringConnectionRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AcceptVpcPeeringConnectionRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AcceptVpcPeeringConnectionResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AdvertiseByoipCidr
        internal virtual AdvertiseByoipCidrResponse AdvertiseByoipCidr(AdvertiseByoipCidrRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AdvertiseByoipCidrRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AdvertiseByoipCidrResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Advertises an IPv4 or IPv6 address range that is provisioned for use with your Amazon
        /// Web Services resources through bring your own IP addresses (BYOIP).
        /// 
        ///  
        /// 
        /// You can perform this operation at most once every 10 seconds, even if you specify
        /// different address ranges each time.
        /// 
        ///  
        /// 
        /// We recommend that you stop advertising the BYOIP CIDR from other locations when you
        /// advertise it from Amazon Web Services. To minimize down time, you can configure your
        /// Amazon Web Services resources to use an address from a BYOIP CIDR before it is advertised,
        /// and then simultaneously stop advertising it from the current location and start advertising
        /// it through Amazon Web Services.
        /// 
        ///  
        /// 
        /// It can take a few minutes before traffic to the specified addresses starts routing
        /// to Amazon Web Services because of BGP propagation delays.
        /// 
        ///  
        /// 
        /// To stop advertising the BYOIP CIDR, use WithdrawByoipCidr.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AdvertiseByoipCidr service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AdvertiseByoipCidr service method, as returned by EC2.
        /// REST API Reference for AdvertiseByoipCidr Operation
        public virtual Task AdvertiseByoipCidrAsync(AdvertiseByoipCidrRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AdvertiseByoipCidrRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AdvertiseByoipCidrResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AllocateAddress
        internal virtual AllocateAddressResponse AllocateAddress()
        {
            return AllocateAddress(new AllocateAddressRequest());
        }
        internal virtual AllocateAddressResponse AllocateAddress(AllocateAddressRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AllocateAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AllocateAddressResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Allocates an Elastic IP address to your Amazon Web Services account. After you allocate
        /// the Elastic IP address you can associate it with an instance or network interface.
        /// After you release an Elastic IP address, it is released to the IP address pool and
        /// can be allocated to a different Amazon Web Services account.
        /// 
        ///  
        /// 
        /// You can allocate an Elastic IP address from an address pool owned by Amazon Web Services
        /// or from an address pool created from a public IPv4 address range that you have brought
        /// to Amazon Web Services for use with your Amazon Web Services resources using bring
        /// your own IP addresses (BYOIP). For more information, see Bring
        /// Your Own IP Addresses (BYOIP) in the Amazon Elastic Compute Cloud User Guide.
        /// 
        ///  
        /// 
        /// If you release an Elastic IP address, you might be able to recover it. You cannot
        /// recover an Elastic IP address that you released after it is allocated to another Amazon
        /// Web Services account. To attempt to recover an Elastic IP address that you released,
        /// specify it in this operation.
        /// 
        ///  
        /// 
        /// For more information, see Elastic
        /// IP Addresses in the Amazon Elastic Compute Cloud User Guide.
        /// 
        ///  
        /// 
        /// You can allocate a carrier IP address which is a public IP address from a telecommunication
        /// carrier, to a network interface which resides in a subnet in a Wavelength Zone (for
        /// example an EC2 instance).
        /// 
        /// 
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AllocateAddress service method, as returned by EC2.
        /// REST API Reference for AllocateAddress Operation
        public virtual Task AllocateAddressAsync(System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            return AllocateAddressAsync(new AllocateAddressRequest(), cancellationToken);
        }
        /// 
        /// Allocates an Elastic IP address to your Amazon Web Services account. After you allocate
        /// the Elastic IP address you can associate it with an instance or network interface.
        /// After you release an Elastic IP address, it is released to the IP address pool and
        /// can be allocated to a different Amazon Web Services account.
        /// 
        ///  
        /// 
        /// You can allocate an Elastic IP address from an address pool owned by Amazon Web Services
        /// or from an address pool created from a public IPv4 address range that you have brought
        /// to Amazon Web Services for use with your Amazon Web Services resources using bring
        /// your own IP addresses (BYOIP). For more information, see Bring
        /// Your Own IP Addresses (BYOIP) in the Amazon Elastic Compute Cloud User Guide.
        /// 
        ///  
        /// 
        /// If you release an Elastic IP address, you might be able to recover it. You cannot
        /// recover an Elastic IP address that you released after it is allocated to another Amazon
        /// Web Services account. To attempt to recover an Elastic IP address that you released,
        /// specify it in this operation.
        /// 
        ///  
        /// 
        /// For more information, see Elastic
        /// IP Addresses in the Amazon Elastic Compute Cloud User Guide.
        /// 
        ///  
        /// 
        /// You can allocate a carrier IP address which is a public IP address from a telecommunication
        /// carrier, to a network interface which resides in a subnet in a Wavelength Zone (for
        /// example an EC2 instance).
        /// 
        /// 
        /// Container for the necessary parameters to execute the AllocateAddress service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AllocateAddress service method, as returned by EC2.
        /// REST API Reference for AllocateAddress Operation
        public virtual Task AllocateAddressAsync(AllocateAddressRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AllocateAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AllocateAddressResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AllocateHosts
        internal virtual AllocateHostsResponse AllocateHosts(AllocateHostsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AllocateHostsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AllocateHostsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Allocates a Dedicated Host to your account. At a minimum, specify the supported instance
        /// type or instance family, the Availability Zone in which to allocate the host, and
        /// the number of hosts to allocate.
        /// 
        /// Container for the necessary parameters to execute the AllocateHosts service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AllocateHosts service method, as returned by EC2.
        /// REST API Reference for AllocateHosts Operation
        public virtual Task AllocateHostsAsync(AllocateHostsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AllocateHostsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AllocateHostsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AllocateIpamPoolCidr
        internal virtual AllocateIpamPoolCidrResponse AllocateIpamPoolCidr(AllocateIpamPoolCidrRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AllocateIpamPoolCidrRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AllocateIpamPoolCidrResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Allocate a CIDR from an IPAM pool. The Region you use should be the IPAM pool locale.
        /// The locale is the Amazon Web Services Region where this IPAM pool is available for
        /// allocations.
        /// 
        ///  
        /// 
        /// In IPAM, an allocation is a CIDR assignment from an IPAM pool to another IPAM pool
        /// or to a resource. For more information, see Allocate
        /// CIDRs in the Amazon VPC IPAM User Guide.
        /// 
        ///   
        /// 
        /// This action creates an allocation with strong consistency. The returned CIDR will
        /// not overlap with any other allocations from the same pool.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the AllocateIpamPoolCidr service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AllocateIpamPoolCidr service method, as returned by EC2.
        /// REST API Reference for AllocateIpamPoolCidr Operation
        public virtual Task AllocateIpamPoolCidrAsync(AllocateIpamPoolCidrRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AllocateIpamPoolCidrRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AllocateIpamPoolCidrResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ApplySecurityGroupsToClientVpnTargetNetwork
        internal virtual ApplySecurityGroupsToClientVpnTargetNetworkResponse ApplySecurityGroupsToClientVpnTargetNetwork(ApplySecurityGroupsToClientVpnTargetNetworkRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ApplySecurityGroupsToClientVpnTargetNetworkRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ApplySecurityGroupsToClientVpnTargetNetworkResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Applies a security group to the association between the target network and the Client
        /// VPN endpoint. This action replaces the existing security groups with the specified
        /// security groups.
        /// 
        /// Container for the necessary parameters to execute the ApplySecurityGroupsToClientVpnTargetNetwork service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ApplySecurityGroupsToClientVpnTargetNetwork service method, as returned by EC2.
        /// REST API Reference for ApplySecurityGroupsToClientVpnTargetNetwork Operation
        public virtual Task ApplySecurityGroupsToClientVpnTargetNetworkAsync(ApplySecurityGroupsToClientVpnTargetNetworkRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ApplySecurityGroupsToClientVpnTargetNetworkRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ApplySecurityGroupsToClientVpnTargetNetworkResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssignIpv6Addresses
        internal virtual AssignIpv6AddressesResponse AssignIpv6Addresses(AssignIpv6AddressesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssignIpv6AddressesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssignIpv6AddressesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Assigns one or more IPv6 addresses to the specified network interface. You can specify
        /// one or more specific IPv6 addresses, or you can specify the number of IPv6 addresses
        /// to be automatically assigned from within the subnet's IPv6 CIDR block range. You can
        /// assign as many IPv6 addresses to a network interface as you can assign private IPv4
        /// addresses, and the limit varies per instance type. For information, see IP
        /// Addresses Per Network Interface Per Instance Type in the Amazon Elastic Compute
        /// Cloud User Guide.
        /// 
        ///  
        /// 
        /// You must specify either the IPv6 addresses or the IPv6 address count in the request.
        /// 
        /// 
        ///  
        /// 
        /// You can optionally use Prefix Delegation on the network interface. You must specify
        /// either the IPV6 Prefix Delegation prefixes, or the IPv6 Prefix Delegation count. For
        /// information, see 
        /// Assigning prefixes to Amazon EC2 network interfaces in the Amazon Elastic Compute
        /// Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssignIpv6Addresses service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssignIpv6Addresses service method, as returned by EC2.
        /// REST API Reference for AssignIpv6Addresses Operation
        public virtual Task AssignIpv6AddressesAsync(AssignIpv6AddressesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssignIpv6AddressesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssignIpv6AddressesResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssignPrivateIpAddresses
        internal virtual AssignPrivateIpAddressesResponse AssignPrivateIpAddresses(AssignPrivateIpAddressesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssignPrivateIpAddressesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssignPrivateIpAddressesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Assigns one or more secondary private IP addresses to the specified network interface.
        /// 
        ///  
        /// 
        /// You can specify one or more specific secondary IP addresses, or you can specify the
        /// number of secondary IP addresses to be automatically assigned within the subnet's
        /// CIDR block range. The number of secondary IP addresses that you can assign to an instance
        /// varies by instance type. For information about instance types, see Instance
        /// Types in the Amazon Elastic Compute Cloud User Guide. For more information
        /// about Elastic IP addresses, see Elastic
        /// IP Addresses in the Amazon Elastic Compute Cloud User Guide.
        /// 
        ///  
        /// 
        /// When you move a secondary private IP address to another network interface, any Elastic
        /// IP address that is associated with the IP address is also moved.
        /// 
        ///  
        /// 
        /// Remapping an IP address is an asynchronous operation. When you move an IP address
        /// from one network interface to another, check network/interfaces/macs/mac/local-ipv4s
        /// in the instance metadata to confirm that the remapping is complete.
        /// 
        ///  
        /// 
        /// You must specify either the IP addresses or the IP address count in the request.
        /// 
        ///  
        /// 
        /// You can optionally use Prefix Delegation on the network interface. You must specify
        /// either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count. For
        /// information, see 
        /// Assigning prefixes to Amazon EC2 network interfaces in the Amazon Elastic Compute
        /// Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssignPrivateIpAddresses service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssignPrivateIpAddresses service method, as returned by EC2.
        /// REST API Reference for AssignPrivateIpAddresses Operation
        public virtual Task AssignPrivateIpAddressesAsync(AssignPrivateIpAddressesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssignPrivateIpAddressesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssignPrivateIpAddressesResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssignPrivateNatGatewayAddress
        internal virtual AssignPrivateNatGatewayAddressResponse AssignPrivateNatGatewayAddress(AssignPrivateNatGatewayAddressRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssignPrivateNatGatewayAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssignPrivateNatGatewayAddressResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Assigns one or more private IPv4 addresses to a private NAT gateway. For more information,
        /// see Work
        /// with NAT gateways in the Amazon VPC User Guide.
        /// 
        /// Container for the necessary parameters to execute the AssignPrivateNatGatewayAddress service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssignPrivateNatGatewayAddress service method, as returned by EC2.
        /// REST API Reference for AssignPrivateNatGatewayAddress Operation
        public virtual Task AssignPrivateNatGatewayAddressAsync(AssignPrivateNatGatewayAddressRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssignPrivateNatGatewayAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssignPrivateNatGatewayAddressResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateAddress
        internal virtual AssociateAddressResponse AssociateAddress(AssociateAddressRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateAddressResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates an Elastic IP address, or carrier IP address (for instances that are in
        /// subnets in Wavelength Zones) with an instance or a network interface. Before you can
        /// use an Elastic IP address, you must allocate it to your account.
        /// 
        ///  
        /// 
        /// If the Elastic IP address is already associated with a different instance, it is disassociated
        /// from that instance and associated with the specified instance. If you associate an
        /// Elastic IP address with an instance that has an existing Elastic IP address, the existing
        /// address is disassociated from the instance, but remains allocated to your account.
        /// 
        ///  
        /// 
        /// [Subnets in Wavelength Zones] You can associate an IP address from the telecommunication
        /// carrier to the instance or network interface. 
        /// 
        ///  
        /// 
        /// You cannot associate an Elastic IP address with an interface in a different network
        /// border group.
        /// 
        ///   
        /// 
        /// This is an idempotent operation. If you perform the operation more than once, Amazon
        /// EC2 doesn't return an error, and you may be charged for each time the Elastic IP address
        /// is remapped to the same instance. For more information, see the Elastic IP Addresses
        /// section of Amazon EC2 Pricing.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the AssociateAddress service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateAddress service method, as returned by EC2.
        /// REST API Reference for AssociateAddress Operation
        public virtual Task AssociateAddressAsync(AssociateAddressRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateAddressResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateClientVpnTargetNetwork
        internal virtual AssociateClientVpnTargetNetworkResponse AssociateClientVpnTargetNetwork(AssociateClientVpnTargetNetworkRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateClientVpnTargetNetworkRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateClientVpnTargetNetworkResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates a target network with a Client VPN endpoint. A target network is a subnet
        /// in a VPC. You can associate multiple subnets from the same VPC with a Client VPN endpoint.
        /// You can associate only one subnet in each Availability Zone. We recommend that you
        /// associate at least two subnets to provide Availability Zone redundancy.
        /// 
        ///  
        /// 
        /// If you specified a VPC when you created the Client VPN endpoint or if you have previous
        /// subnet associations, the specified subnet must be in the same VPC. To specify a subnet
        /// that's in a different VPC, you must first modify the Client VPN endpoint (ModifyClientVpnEndpoint)
        /// and change the VPC that's associated with it.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateClientVpnTargetNetwork service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateClientVpnTargetNetwork service method, as returned by EC2.
        /// REST API Reference for AssociateClientVpnTargetNetwork Operation
        public virtual Task AssociateClientVpnTargetNetworkAsync(AssociateClientVpnTargetNetworkRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateClientVpnTargetNetworkRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateClientVpnTargetNetworkResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateDhcpOptions
        internal virtual AssociateDhcpOptionsResponse AssociateDhcpOptions(AssociateDhcpOptionsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateDhcpOptionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateDhcpOptionsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates a set of DHCP options (that you've previously created) with the specified
        /// VPC, or associates no DHCP options with the VPC.
        /// 
        ///  
        /// 
        /// After you associate the options with the VPC, any existing instances and all new instances
        /// that you launch in that VPC use the options. You don't need to restart or relaunch
        /// the instances. They automatically pick up the changes within a few hours, depending
        /// on how frequently the instance renews its DHCP lease. You can explicitly renew the
        /// lease using the operating system on the instance.
        /// 
        ///  
        /// 
        /// For more information, see DHCP
        /// options sets in the Amazon VPC User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateDhcpOptions service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateDhcpOptions service method, as returned by EC2.
        /// REST API Reference for AssociateDhcpOptions Operation
        public virtual Task AssociateDhcpOptionsAsync(AssociateDhcpOptionsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateDhcpOptionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateDhcpOptionsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateEnclaveCertificateIamRole
        internal virtual AssociateEnclaveCertificateIamRoleResponse AssociateEnclaveCertificateIamRole(AssociateEnclaveCertificateIamRoleRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateEnclaveCertificateIamRoleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateEnclaveCertificateIamRoleResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates an Identity and Access Management (IAM) role with an Certificate Manager
        /// (ACM) certificate. This enables the certificate to be used by the ACM for Nitro Enclaves
        /// application inside an enclave. For more information, see Certificate
        /// Manager for Nitro Enclaves in the Amazon Web Services Nitro Enclaves User Guide.
        /// 
        ///  
        /// 
        /// When the IAM role is associated with the ACM certificate, the certificate, certificate
        /// chain, and encrypted private key are placed in an Amazon S3 location that only the
        /// associated IAM role can access. The private key of the certificate is encrypted with
        /// an Amazon Web Services managed key that has an attached attestation-based key policy.
        /// 
        ///  
        /// 
        /// To enable the IAM role to access the Amazon S3 object, you must grant it permission
        /// to call s3:GetObject on the Amazon S3 bucket returned by the command.
        /// To enable the IAM role to access the KMS key, you must grant it permission to call
        /// kms:Decrypt on the KMS key returned by the command. For more information,
        /// see 
        /// Grant the role permission to access the certificate and encryption key in the
        /// Amazon Web Services Nitro Enclaves User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateEnclaveCertificateIamRole service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateEnclaveCertificateIamRole service method, as returned by EC2.
        /// REST API Reference for AssociateEnclaveCertificateIamRole Operation
        public virtual Task AssociateEnclaveCertificateIamRoleAsync(AssociateEnclaveCertificateIamRoleRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateEnclaveCertificateIamRoleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateEnclaveCertificateIamRoleResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateIamInstanceProfile
        internal virtual AssociateIamInstanceProfileResponse AssociateIamInstanceProfile(AssociateIamInstanceProfileRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateIamInstanceProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateIamInstanceProfileResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates an IAM instance profile with a running or stopped instance. You cannot
        /// associate more than one IAM instance profile with an instance.
        /// 
        /// Container for the necessary parameters to execute the AssociateIamInstanceProfile service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateIamInstanceProfile service method, as returned by EC2.
        /// REST API Reference for AssociateIamInstanceProfile Operation
        public virtual Task AssociateIamInstanceProfileAsync(AssociateIamInstanceProfileRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateIamInstanceProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateIamInstanceProfileResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateInstanceEventWindow
        internal virtual AssociateInstanceEventWindowResponse AssociateInstanceEventWindow(AssociateInstanceEventWindowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateInstanceEventWindowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateInstanceEventWindowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates one or more targets with an event window. Only one type of target (instance
        /// IDs, Dedicated Host IDs, or tags) can be specified with an event window.
        /// 
        ///  
        /// 
        /// For more information, see Define
        /// event windows for scheduled events in the Amazon EC2 User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateInstanceEventWindow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateInstanceEventWindow service method, as returned by EC2.
        /// REST API Reference for AssociateInstanceEventWindow Operation
        public virtual Task AssociateInstanceEventWindowAsync(AssociateInstanceEventWindowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateInstanceEventWindowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateInstanceEventWindowResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateIpamResourceDiscovery
        internal virtual AssociateIpamResourceDiscoveryResponse AssociateIpamResourceDiscovery(AssociateIpamResourceDiscoveryRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateIpamResourceDiscoveryRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateIpamResourceDiscoveryResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates an IPAM resource discovery with an Amazon VPC IPAM. A resource discovery
        /// is an IPAM component that enables IPAM to manage and monitor resources that belong
        /// to the owning account.
        /// 
        /// Container for the necessary parameters to execute the AssociateIpamResourceDiscovery service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateIpamResourceDiscovery service method, as returned by EC2.
        /// REST API Reference for AssociateIpamResourceDiscovery Operation
        public virtual Task AssociateIpamResourceDiscoveryAsync(AssociateIpamResourceDiscoveryRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateIpamResourceDiscoveryRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateIpamResourceDiscoveryResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateNatGatewayAddress
        internal virtual AssociateNatGatewayAddressResponse AssociateNatGatewayAddress(AssociateNatGatewayAddressRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateNatGatewayAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateNatGatewayAddressResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates Elastic IP addresses (EIPs) and private IPv4 addresses with a public NAT
        /// gateway. For more information, see Work
        /// with NAT gateways in the Amazon VPC User Guide.
        /// 
        ///  
        /// 
        /// By default, you can associate up to 2 Elastic IP addresses per public NAT gateway.
        /// You can increase the limit by requesting a quota adjustment. For more information,
        /// see Elastic
        /// IP address quotas in the Amazon VPC User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateNatGatewayAddress service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateNatGatewayAddress service method, as returned by EC2.
        /// REST API Reference for AssociateNatGatewayAddress Operation
        public virtual Task AssociateNatGatewayAddressAsync(AssociateNatGatewayAddressRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateNatGatewayAddressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateNatGatewayAddressResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateRouteTable
        internal virtual AssociateRouteTableResponse AssociateRouteTable(AssociateRouteTableRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateRouteTableRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateRouteTableResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates a subnet in your VPC or an internet gateway or virtual private gateway
        /// attached to your VPC with a route table in your VPC. This association causes traffic
        /// from the subnet or gateway to be routed according to the routes in the route table.
        /// The action returns an association ID, which you need in order to disassociate the
        /// route table later. A route table can be associated with multiple subnets.
        /// 
        ///  
        /// 
        /// For more information, see Route
        /// tables in the Amazon VPC User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateRouteTable service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateRouteTable service method, as returned by EC2.
        /// REST API Reference for AssociateRouteTable Operation
        public virtual Task AssociateRouteTableAsync(AssociateRouteTableRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateRouteTableRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateRouteTableResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateSubnetCidrBlock
        internal virtual AssociateSubnetCidrBlockResponse AssociateSubnetCidrBlock(AssociateSubnetCidrBlockRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateSubnetCidrBlockRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateSubnetCidrBlockResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates a CIDR block with your subnet. You can only associate a single IPv6 CIDR
        /// block with your subnet. An IPv6 CIDR block must have a prefix length of /64.
        /// 
        /// Container for the necessary parameters to execute the AssociateSubnetCidrBlock service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateSubnetCidrBlock service method, as returned by EC2.
        /// REST API Reference for AssociateSubnetCidrBlock Operation
        public virtual Task AssociateSubnetCidrBlockAsync(AssociateSubnetCidrBlockRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateSubnetCidrBlockRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateSubnetCidrBlockResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateTransitGatewayMulticastDomain
        internal virtual AssociateTransitGatewayMulticastDomainResponse AssociateTransitGatewayMulticastDomain(AssociateTransitGatewayMulticastDomainRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTransitGatewayMulticastDomainRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTransitGatewayMulticastDomainResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates the specified subnets and transit gateway attachments with the specified
        /// transit gateway multicast domain.
        /// 
        ///  
        /// 
        /// The transit gateway attachment must be in the available state before you can add a
        /// resource. Use DescribeTransitGatewayAttachments
        /// to see the state of the attachment.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateTransitGatewayMulticastDomain service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateTransitGatewayMulticastDomain service method, as returned by EC2.
        /// REST API Reference for AssociateTransitGatewayMulticastDomain Operation
        public virtual Task AssociateTransitGatewayMulticastDomainAsync(AssociateTransitGatewayMulticastDomainRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTransitGatewayMulticastDomainRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTransitGatewayMulticastDomainResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateTransitGatewayPolicyTable
        internal virtual AssociateTransitGatewayPolicyTableResponse AssociateTransitGatewayPolicyTable(AssociateTransitGatewayPolicyTableRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTransitGatewayPolicyTableRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTransitGatewayPolicyTableResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates the specified transit gateway attachment with a transit gateway policy
        /// table.
        /// 
        /// Container for the necessary parameters to execute the AssociateTransitGatewayPolicyTable service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateTransitGatewayPolicyTable service method, as returned by EC2.
        /// REST API Reference for AssociateTransitGatewayPolicyTable Operation
        public virtual Task AssociateTransitGatewayPolicyTableAsync(AssociateTransitGatewayPolicyTableRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTransitGatewayPolicyTableRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTransitGatewayPolicyTableResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateTransitGatewayRouteTable
        internal virtual AssociateTransitGatewayRouteTableResponse AssociateTransitGatewayRouteTable(AssociateTransitGatewayRouteTableRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTransitGatewayRouteTableRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTransitGatewayRouteTableResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates the specified attachment with the specified transit gateway route table.
        /// You can associate only one route table with an attachment.
        /// 
        /// Container for the necessary parameters to execute the AssociateTransitGatewayRouteTable service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateTransitGatewayRouteTable service method, as returned by EC2.
        /// REST API Reference for AssociateTransitGatewayRouteTable Operation
        public virtual Task AssociateTransitGatewayRouteTableAsync(AssociateTransitGatewayRouteTableRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTransitGatewayRouteTableRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTransitGatewayRouteTableResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateTrunkInterface
        internal virtual AssociateTrunkInterfaceResponse AssociateTrunkInterface(AssociateTrunkInterfaceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTrunkInterfaceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTrunkInterfaceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        ///  
        /// 
        /// This API action is currently in limited preview only. If you are interested
        /// in using this feature, contact your account manager.
        /// 
        ///   
        /// 
        /// Associates a branch network interface with a trunk network interface.
        /// 
        ///  
        /// 
        /// Before you create the association, run the create-network-interface
        /// command and set --interface-type to trunk. You must also
        /// create a network interface for each branch network interface that you want to associate
        /// with the trunk network interface.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateTrunkInterface service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateTrunkInterface service method, as returned by EC2.
        /// REST API Reference for AssociateTrunkInterface Operation
        public virtual Task AssociateTrunkInterfaceAsync(AssociateTrunkInterfaceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateTrunkInterfaceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateTrunkInterfaceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociateVpcCidrBlock
        internal virtual AssociateVpcCidrBlockResponse AssociateVpcCidrBlock(AssociateVpcCidrBlockRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateVpcCidrBlockRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateVpcCidrBlockResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block,
        /// an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address pool
        /// that you provisioned through bring your own IP addresses (BYOIP).
        /// The IPv6 CIDR block size is fixed at /56.
        /// 
        ///  
        /// 
        /// You must specify one of the following in the request: an IPv4 CIDR block, an IPv6
        /// pool, or an Amazon-provided IPv6 CIDR block.
        /// 
        ///  
        /// 
        /// For more information about associating CIDR blocks with your VPC and applicable restrictions,
        /// see IP
        /// addressing for your VPCs and subnets in the Amazon VPC User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateVpcCidrBlock service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateVpcCidrBlock service method, as returned by EC2.
        /// REST API Reference for AssociateVpcCidrBlock Operation
        public virtual Task AssociateVpcCidrBlockAsync(AssociateVpcCidrBlockRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateVpcCidrBlockRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateVpcCidrBlockResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AttachClassicLinkVpc
        internal virtual AttachClassicLinkVpcResponse AttachClassicLinkVpc(AttachClassicLinkVpcRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachClassicLinkVpcRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachClassicLinkVpcResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        ///  
        /// 
        /// This action is deprecated.
        /// 
        ///   
        /// 
        /// Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of
        /// the VPC security groups. You cannot link an EC2-Classic instance to more than one
        /// VPC at a time. You can only link an instance that's in the running state.
        /// An instance is automatically unlinked from a VPC when it's stopped - you can link
        /// it to the VPC again when you restart it.
        /// 
        ///  
        /// 
        /// After you've linked an instance, you cannot change the VPC security groups that are
        /// associated with it. To change the security groups, you must first unlink the instance,
        /// and then link it again.
        /// 
        ///  
        /// 
        /// Linking your instance to a VPC is sometimes referred to as attaching your instance.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AttachClassicLinkVpc service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AttachClassicLinkVpc service method, as returned by EC2.
        /// REST API Reference for AttachClassicLinkVpc Operation
        public virtual Task AttachClassicLinkVpcAsync(AttachClassicLinkVpcRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachClassicLinkVpcRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachClassicLinkVpcResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AttachInternetGateway
        internal virtual AttachInternetGatewayResponse AttachInternetGateway(AttachInternetGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachInternetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachInternetGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Attaches an internet gateway or a virtual private gateway to a VPC, enabling connectivity
        /// between the internet and the VPC. For more information, see Internet
        /// gateways in the Amazon VPC User Guide.
        /// 
        /// Container for the necessary parameters to execute the AttachInternetGateway service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AttachInternetGateway service method, as returned by EC2.
        /// REST API Reference for AttachInternetGateway Operation
        public virtual Task AttachInternetGatewayAsync(AttachInternetGatewayRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachInternetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachInternetGatewayResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AttachNetworkInterface
        internal virtual AttachNetworkInterfaceResponse AttachNetworkInterface(AttachNetworkInterfaceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachNetworkInterfaceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachNetworkInterfaceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Attaches a network interface to an instance.
        /// 
        /// Container for the necessary parameters to execute the AttachNetworkInterface service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AttachNetworkInterface service method, as returned by EC2.
        /// REST API Reference for AttachNetworkInterface Operation
        public virtual Task AttachNetworkInterfaceAsync(AttachNetworkInterfaceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachNetworkInterfaceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachNetworkInterfaceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AttachVerifiedAccessTrustProvider
        internal virtual AttachVerifiedAccessTrustProviderResponse AttachVerifiedAccessTrustProvider(AttachVerifiedAccessTrustProviderRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachVerifiedAccessTrustProviderRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachVerifiedAccessTrustProviderResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Attaches the specified Amazon Web Services Verified Access trust provider to the specified
        /// Amazon Web Services Verified Access instance.
        /// 
        /// Container for the necessary parameters to execute the AttachVerifiedAccessTrustProvider service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AttachVerifiedAccessTrustProvider service method, as returned by EC2.
        /// REST API Reference for AttachVerifiedAccessTrustProvider Operation
        public virtual Task AttachVerifiedAccessTrustProviderAsync(AttachVerifiedAccessTrustProviderRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachVerifiedAccessTrustProviderRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachVerifiedAccessTrustProviderResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AttachVolume
        internal virtual AttachVolumeResponse AttachVolume(AttachVolumeRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachVolumeRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachVolumeResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Attaches an EBS volume to a running or stopped instance and exposes it to the instance
        /// with the specified device name.
        /// 
        ///  
        /// 
        /// Encrypted EBS volumes must be attached to instances that support Amazon EBS encryption.
        /// For more information, see Amazon
        /// EBS encryption in the Amazon Elastic Compute Cloud User Guide.
        /// 
        ///  
        /// 
        /// After you attach an EBS volume, you must make it available. For more information,
        /// see Make
        /// an EBS volume available for use.
        /// 
        ///  
        /// 
        /// If a volume has an Amazon Web Services Marketplace product code:
        /// 
        ///   -  
        /// 
        /// The volume can be attached only to a stopped instance.
        /// 
        ///  
  -  
        /// 
        /// Amazon Web Services Marketplace product codes are copied from the volume to the instance.
        /// 
        ///  
  -  
        /// 
        /// You must be subscribed to the product.
        /// 
        ///  
  -  
        /// 
        /// The instance type and operating system of the instance must support the product. For
        /// example, you can't detach a volume from a Windows instance and attach it to a Linux
        /// instance.
        /// 
        ///  
  
 
        /// 
        /// For more information, see Attach
        /// an Amazon EBS volume to an instance in the Amazon Elastic Compute Cloud User
        /// Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AttachVolume service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AttachVolume service method, as returned by EC2.
        /// REST API Reference for AttachVolume Operation
        public virtual Task AttachVolumeAsync(AttachVolumeRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachVolumeRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachVolumeResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AttachVpnGateway
        internal virtual AttachVpnGatewayResponse AttachVpnGateway(AttachVpnGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachVpnGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachVpnGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Attaches a virtual private gateway to a VPC. You can attach one virtual private gateway
        /// to one VPC at a time.
        /// 
        ///  
        /// 
        /// For more information, see Amazon
        /// Web Services Site-to-Site VPN in the Amazon Web Services Site-to-Site VPN User
        /// Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AttachVpnGateway service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AttachVpnGateway service method, as returned by EC2.
        /// REST API Reference for AttachVpnGateway Operation
        public virtual Task AttachVpnGatewayAsync(AttachVpnGatewayRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AttachVpnGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AttachVpnGatewayResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AuthorizeClientVpnIngress
        internal virtual AuthorizeClientVpnIngressResponse AuthorizeClientVpnIngress(AuthorizeClientVpnIngressRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AuthorizeClientVpnIngressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AuthorizeClientVpnIngressResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Adds an ingress authorization rule to a Client VPN endpoint. Ingress authorization
        /// rules act as firewall rules that grant access to networks. You must configure ingress
        /// authorization rules to enable clients to access resources in Amazon Web Services or
        /// on-premises networks.
        /// 
        /// Container for the necessary parameters to execute the AuthorizeClientVpnIngress service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AuthorizeClientVpnIngress service method, as returned by EC2.
        /// REST API Reference for AuthorizeClientVpnIngress Operation
        public virtual Task AuthorizeClientVpnIngressAsync(AuthorizeClientVpnIngressRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AuthorizeClientVpnIngressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AuthorizeClientVpnIngressResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AuthorizeSecurityGroupEgress
        internal virtual AuthorizeSecurityGroupEgressResponse AuthorizeSecurityGroupEgress(AuthorizeSecurityGroupEgressRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AuthorizeSecurityGroupEgressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AuthorizeSecurityGroupEgressResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Adds the specified outbound (egress) rules to a security group for use with a VPC.
        /// 
        ///  
        /// 
        /// An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 CIDR
        /// address ranges, or to the instances that are associated with the specified source
        /// security groups. When specifying an outbound rule for your security group in a VPC,
        /// the IpPermissions must include a destination for the traffic.
        /// 
        ///  
        /// 
        /// You specify a protocol for each rule (for example, TCP). For the TCP and UDP protocols,
        /// you must also specify the destination port or port range. For the ICMP protocol, you
        /// must also specify the ICMP type and code. You can use -1 for the type or code to mean
        /// all types or all codes.
        /// 
        ///  
        /// 
        /// Rule changes are propagated to affected instances as quickly as possible. However,
        /// a small delay might occur.
        /// 
        ///  
        /// 
        /// For information about VPC security group quotas, see Amazon
        /// VPC quotas.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AuthorizeSecurityGroupEgress service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AuthorizeSecurityGroupEgress service method, as returned by EC2.
        /// REST API Reference for AuthorizeSecurityGroupEgress Operation
        public virtual Task AuthorizeSecurityGroupEgressAsync(AuthorizeSecurityGroupEgressRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AuthorizeSecurityGroupEgressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AuthorizeSecurityGroupEgressResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AuthorizeSecurityGroupIngress
        internal virtual AuthorizeSecurityGroupIngressResponse AuthorizeSecurityGroupIngress(AuthorizeSecurityGroupIngressRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AuthorizeSecurityGroupIngressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AuthorizeSecurityGroupIngressResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Adds the specified inbound (ingress) rules to a security group.
        /// 
        ///  
        /// 
        /// An inbound rule permits instances to receive traffic from the specified IPv4 or IPv6
        /// CIDR address range, or from the instances that are associated with the specified destination
        /// security groups. When specifying an inbound rule for your security group in a VPC,
        /// the IpPermissions must include a source for the traffic.
        /// 
        ///  
        /// 
        /// You specify a protocol for each rule (for example, TCP). For TCP and UDP, you must
        /// also specify the destination port or port range. For ICMP/ICMPv6, you must also specify
        /// the ICMP/ICMPv6 type and code. You can use -1 to mean all types or all codes.
        /// 
        ///  
        /// 
        /// Rule changes are propagated to instances within the security group as quickly as possible.
        /// However, a small delay might occur.
        /// 
        ///  
        /// 
        /// For more information about VPC security group quotas, see Amazon
        /// VPC quotas.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AuthorizeSecurityGroupIngress service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AuthorizeSecurityGroupIngress service method, as returned by EC2.
        /// REST API Reference for AuthorizeSecurityGroupIngress Operation
        public virtual Task AuthorizeSecurityGroupIngressAsync(AuthorizeSecurityGroupIngressRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AuthorizeSecurityGroupIngressRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AuthorizeSecurityGroupIngressResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  BundleInstance
        internal virtual BundleInstanceResponse BundleInstance(BundleInstanceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = BundleInstanceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = BundleInstanceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Bundles an Amazon instance store-backed Windows instance.
        /// 
        ///  
        /// 
        /// During bundling, only the root device volume (C:\) is bundled. Data on other instance
        /// store volumes is not preserved.
        /// 
        ///   
        /// 
        /// This action is not applicable for Linux/Unix instances or Windows instances that are
        /// backed by Amazon EBS.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the BundleInstance service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the BundleInstance service method, as returned by EC2.
        /// REST API Reference for BundleInstance Operation
        public virtual Task BundleInstanceAsync(BundleInstanceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = BundleInstanceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = BundleInstanceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelBundleTask
        internal virtual CancelBundleTaskResponse CancelBundleTask(CancelBundleTaskRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelBundleTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelBundleTaskResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels a bundling operation for an instance store-backed Windows instance.
        /// 
        /// Container for the necessary parameters to execute the CancelBundleTask service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelBundleTask service method, as returned by EC2.
        /// REST API Reference for CancelBundleTask Operation
        public virtual Task CancelBundleTaskAsync(CancelBundleTaskRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelBundleTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelBundleTaskResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelCapacityReservation
        internal virtual CancelCapacityReservationResponse CancelCapacityReservation(CancelCapacityReservationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelCapacityReservationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelCapacityReservationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels the specified Capacity Reservation, releases the reserved capacity, and changes
        /// the Capacity Reservation's state to cancelled.
        /// 
        ///  
        /// 
        /// Instances running in the reserved capacity continue running until you stop them. Stopped
        /// instances that target the Capacity Reservation can no longer launch. Modify these
        /// instances to either target a different Capacity Reservation, launch On-Demand Instance
        /// capacity, or run in any open Capacity Reservation that has matching attributes and
        /// sufficient capacity.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CancelCapacityReservation service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelCapacityReservation service method, as returned by EC2.
        /// REST API Reference for CancelCapacityReservation Operation
        public virtual Task CancelCapacityReservationAsync(CancelCapacityReservationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelCapacityReservationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelCapacityReservationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelCapacityReservationFleets
        internal virtual CancelCapacityReservationFleetsResponse CancelCapacityReservationFleets(CancelCapacityReservationFleetsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelCapacityReservationFleetsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelCapacityReservationFleetsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels one or more Capacity Reservation Fleets. When you cancel a Capacity Reservation
        /// Fleet, the following happens:
        /// 
        ///   -  
        /// 
        /// The Capacity Reservation Fleet's status changes to 
cancelled.
        /// 
        ///    -  
        /// 
        /// The individual Capacity Reservations in the Fleet are cancelled. Instances running
        /// in the Capacity Reservations at the time of cancelling the Fleet continue to run in
        /// shared capacity.
        /// 
        ///  
  -  
        /// 
        /// The Fleet stops creating new Capacity Reservations.
        /// 
        ///  
  
        /// 
        /// Container for the necessary parameters to execute the CancelCapacityReservationFleets service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelCapacityReservationFleets service method, as returned by EC2.
        /// REST API Reference for CancelCapacityReservationFleets Operation
        public virtual Task CancelCapacityReservationFleetsAsync(CancelCapacityReservationFleetsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelCapacityReservationFleetsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelCapacityReservationFleetsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelConversionTask
        internal virtual CancelConversionTaskResponse CancelConversionTask(CancelConversionTaskRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelConversionTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelConversionTaskResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels an active conversion task. The task can be the import of an instance or volume.
        /// The action removes all artifacts of the conversion, including a partially uploaded
        /// volume or instance. If the conversion is complete or is in the process of transferring
        /// the final disk image, the command fails and returns an exception.
        /// 
        ///  
        /// 
        /// For more information, see Importing
        /// a Virtual Machine Using the Amazon EC2 CLI.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CancelConversionTask service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelConversionTask service method, as returned by EC2.
        /// REST API Reference for CancelConversionTask Operation
        public virtual Task CancelConversionTaskAsync(CancelConversionTaskRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelConversionTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelConversionTaskResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelExportTask
        internal virtual CancelExportTaskResponse CancelExportTask(CancelExportTaskRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelExportTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelExportTaskResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels an active export task. The request removes all artifacts of the export, including
        /// any partially-created Amazon S3 objects. If the export task is complete or is in the
        /// process of transferring the final disk image, the command fails and returns an error.
        /// 
        /// Container for the necessary parameters to execute the CancelExportTask service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelExportTask service method, as returned by EC2.
        /// REST API Reference for CancelExportTask Operation
        public virtual Task CancelExportTaskAsync(CancelExportTaskRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelExportTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelExportTaskResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelImageLaunchPermission
        internal virtual CancelImageLaunchPermissionResponse CancelImageLaunchPermission(CancelImageLaunchPermissionRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelImageLaunchPermissionRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelImageLaunchPermissionResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Removes your Amazon Web Services account from the launch permissions for the specified
        /// AMI. For more information, see 
        /// Cancel having an AMI shared with your Amazon Web Services account in the Amazon
        /// EC2 User Guide.
        /// 
        /// Container for the necessary parameters to execute the CancelImageLaunchPermission service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelImageLaunchPermission service method, as returned by EC2.
        /// REST API Reference for CancelImageLaunchPermission Operation
        public virtual Task CancelImageLaunchPermissionAsync(CancelImageLaunchPermissionRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelImageLaunchPermissionRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelImageLaunchPermissionResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelImportTask
        internal virtual CancelImportTaskResponse CancelImportTask(CancelImportTaskRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelImportTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelImportTaskResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels an in-process import virtual machine or import snapshot task.
        /// 
        /// Container for the necessary parameters to execute the CancelImportTask service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelImportTask service method, as returned by EC2.
        /// REST API Reference for CancelImportTask Operation
        public virtual Task CancelImportTaskAsync(CancelImportTaskRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelImportTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelImportTaskResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelReservedInstancesListing
        internal virtual CancelReservedInstancesListingResponse CancelReservedInstancesListing(CancelReservedInstancesListingRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelReservedInstancesListingRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelReservedInstancesListingResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels the specified Reserved Instance listing in the Reserved Instance Marketplace.
        /// 
        ///  
        /// 
        /// For more information, see Reserved
        /// Instance Marketplace in the Amazon EC2 User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CancelReservedInstancesListing service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelReservedInstancesListing service method, as returned by EC2.
        /// REST API Reference for CancelReservedInstancesListing Operation
        public virtual Task CancelReservedInstancesListingAsync(CancelReservedInstancesListingRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelReservedInstancesListingRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelReservedInstancesListingResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelSpotFleetRequests
        internal virtual CancelSpotFleetRequestsResponse CancelSpotFleetRequests(CancelSpotFleetRequestsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelSpotFleetRequestsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelSpotFleetRequestsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels the specified Spot Fleet requests.
        /// 
        ///  
        /// 
        /// After you cancel a Spot Fleet request, the Spot Fleet launches no new instances.
        /// 
        ///  
        /// 
        /// You must also specify whether a canceled Spot Fleet request should terminate its instances.
        /// If you choose to terminate the instances, the Spot Fleet request enters the cancelled_terminating
        /// state. Otherwise, the Spot Fleet request enters the cancelled_running
        /// state and the instances continue to run until they are interrupted or you terminate
        /// them manually.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CancelSpotFleetRequests service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelSpotFleetRequests service method, as returned by EC2.
        /// REST API Reference for CancelSpotFleetRequests Operation
        public virtual Task CancelSpotFleetRequestsAsync(CancelSpotFleetRequestsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelSpotFleetRequestsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelSpotFleetRequestsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CancelSpotInstanceRequests
        internal virtual CancelSpotInstanceRequestsResponse CancelSpotInstanceRequests(CancelSpotInstanceRequestsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelSpotInstanceRequestsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelSpotInstanceRequestsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels one or more Spot Instance requests.
        /// 
        ///   
        /// 
        /// Canceling a Spot Instance request does not terminate running Spot Instances associated
        /// with the request.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the CancelSpotInstanceRequests service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelSpotInstanceRequests service method, as returned by EC2.
        /// REST API Reference for CancelSpotInstanceRequests Operation
        public virtual Task CancelSpotInstanceRequestsAsync(CancelSpotInstanceRequestsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelSpotInstanceRequestsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelSpotInstanceRequestsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ConfirmProductInstance
        internal virtual ConfirmProductInstanceResponse ConfirmProductInstance(ConfirmProductInstanceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ConfirmProductInstanceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ConfirmProductInstanceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Determines whether a product code is associated with an instance. This action can
        /// only be used by the owner of the product code. It is useful when a product code owner
        /// must verify whether another user's instance is eligible for support.
        /// 
        /// Container for the necessary parameters to execute the ConfirmProductInstance service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ConfirmProductInstance service method, as returned by EC2.
        /// REST API Reference for ConfirmProductInstance Operation
        public virtual Task ConfirmProductInstanceAsync(ConfirmProductInstanceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ConfirmProductInstanceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ConfirmProductInstanceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CopyFpgaImage
        internal virtual CopyFpgaImageResponse CopyFpgaImage(CopyFpgaImageRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CopyFpgaImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CopyFpgaImageResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Copies the specified Amazon FPGA Image (AFI) to the current Region.
        /// 
        /// Container for the necessary parameters to execute the CopyFpgaImage service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CopyFpgaImage service method, as returned by EC2.
        /// REST API Reference for CopyFpgaImage Operation
        public virtual Task CopyFpgaImageAsync(CopyFpgaImageRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CopyFpgaImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CopyFpgaImageResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CopyImage
        internal virtual CopyImageResponse CopyImage(CopyImageRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CopyImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CopyImageResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the copy of an AMI. You can copy an AMI from one Region to another, or from
        /// a Region to an Outpost. You can't copy an AMI from an Outpost to a Region, from one
        /// Outpost to another, or within the same Outpost. To copy an AMI to another partition,
        /// see CreateStoreImageTask.
        /// 
        ///  
        /// 
        /// To copy an AMI from one Region to another, specify the source Region using the SourceRegion
        /// parameter, and specify the destination Region using its endpoint. Copies of encrypted
        /// backing snapshots for the AMI are encrypted. Copies of unencrypted backing snapshots
        /// remain unencrypted, unless you set Encrypted during the copy operation.
        /// You cannot create an unencrypted copy of an encrypted backing snapshot.
        /// 
        ///  
        /// 
        /// To copy an AMI from a Region to an Outpost, specify the source Region using the SourceRegion
        /// parameter, and specify the ARN of the destination Outpost using DestinationOutpostArn.
        /// Backing snapshots copied to an Outpost are encrypted by default using the default
        /// encryption key for the Region, or a different key that you specify in the request
        /// using KmsKeyId. Outposts do not support unencrypted snapshots. For more information,
        /// 
        /// Amazon EBS local snapshots on Outposts in the Amazon EC2 User Guide.
        /// 
        ///  
        /// 
        /// For more information about the prerequisites and limits when copying an AMI, see Copy an
        /// AMI in the Amazon EC2 User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CopyImage service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CopyImage service method, as returned by EC2.
        /// REST API Reference for CopyImage Operation
        public virtual Task CopyImageAsync(CopyImageRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CopyImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CopyImageResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CopySnapshot
        internal virtual CopySnapshotResponse CopySnapshot(CopySnapshotRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CopySnapshotRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CopySnapshotResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can
        /// copy a snapshot within the same Region, from one Region to another, or from a Region
        /// to an Outpost. You can't copy a snapshot from an Outpost to a Region, from one Outpost
        /// to another, or within the same Outpost.
        /// 
        ///  
        /// 
        /// You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs).
        /// 
        ///  
        /// 
        /// When copying snapshots to a Region, copies of encrypted EBS snapshots remain encrypted.
        /// Copies of unencrypted snapshots remain unencrypted, unless you enable encryption for
        /// the snapshot copy operation. By default, encrypted snapshot copies use the default
        /// Key Management Service (KMS) KMS key; however, you can specify a different KMS key.
        /// To copy an encrypted snapshot that has been shared from another account, you must
        /// have permissions for the KMS key used to encrypt the snapshot.
        /// 
        ///  
        /// 
        /// Snapshots copied to an Outpost are encrypted by default using the default encryption
        /// key for the Region, or a different key that you specify in the request using KmsKeyId.
        /// Outposts do not support unencrypted snapshots. For more information, 
        /// Amazon EBS local snapshots on Outposts in the Amazon Elastic Compute Cloud
        /// User Guide.
        /// 
        ///  
        /// 
        /// Snapshots created by copying another snapshot have an arbitrary volume ID that should
        /// not be used for any purpose.
        /// 
        ///  
        /// 
        /// For more information, see Copy
        /// an Amazon EBS snapshot in the Amazon Elastic Compute Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CopySnapshot service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CopySnapshot service method, as returned by EC2.
        /// REST API Reference for CopySnapshot Operation
        public virtual Task CopySnapshotAsync(CopySnapshotRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CopySnapshotRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CopySnapshotResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateCapacityReservation
        internal virtual CreateCapacityReservationResponse CreateCapacityReservation(CreateCapacityReservationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCapacityReservationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCapacityReservationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a new Capacity Reservation with the specified attributes.
        /// 
        ///  
        /// 
        /// Capacity Reservations enable you to reserve capacity for your Amazon EC2 instances
        /// in a specific Availability Zone for any duration. This gives you the flexibility to
        /// selectively add capacity reservations and still get the Regional RI discounts for
        /// that usage. By creating Capacity Reservations, you ensure that you always have access
        /// to Amazon EC2 capacity when you need it, for as long as you need it. For more information,
        /// see Capacity
        /// Reservations in the Amazon EC2 User Guide.
        /// 
        ///  
        /// 
        /// Your request to create a Capacity Reservation could fail if Amazon EC2 does not have
        /// sufficient capacity to fulfill the request. If your request fails due to Amazon EC2
        /// capacity constraints, either try again at a later time, try in a different Availability
        /// Zone, or request a smaller capacity reservation. If your application is flexible across
        /// instance types and sizes, try to create a Capacity Reservation with different instance
        /// attributes.
        /// 
        ///  
        /// 
        /// Your request could also fail if the requested quantity exceeds your On-Demand Instance
        /// limit for the selected instance type. If your request fails due to limit constraints,
        /// increase your On-Demand Instance limit for the required instance type and try again.
        /// For more information about increasing your instance limits, see Amazon
        /// EC2 Service Quotas in the Amazon EC2 User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateCapacityReservation service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateCapacityReservation service method, as returned by EC2.
        /// REST API Reference for CreateCapacityReservation Operation
        public virtual Task CreateCapacityReservationAsync(CreateCapacityReservationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCapacityReservationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCapacityReservationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateCapacityReservationFleet
        internal virtual CreateCapacityReservationFleetResponse CreateCapacityReservationFleet(CreateCapacityReservationFleetRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCapacityReservationFleetRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCapacityReservationFleetResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a Capacity Reservation Fleet. For more information, see Create
        /// a Capacity Reservation Fleet in the Amazon EC2 User Guide.
        /// 
        /// Container for the necessary parameters to execute the CreateCapacityReservationFleet service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateCapacityReservationFleet service method, as returned by EC2.
        /// REST API Reference for CreateCapacityReservationFleet Operation
        public virtual Task CreateCapacityReservationFleetAsync(CreateCapacityReservationFleetRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCapacityReservationFleetRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCapacityReservationFleetResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateCarrierGateway
        internal virtual CreateCarrierGatewayResponse CreateCarrierGateway(CreateCarrierGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCarrierGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCarrierGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a carrier gateway. For more information about carrier gateways, see Carrier
        /// gateways in the Amazon Web Services Wavelength Developer Guide.
        /// 
        /// Container for the necessary parameters to execute the CreateCarrierGateway service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateCarrierGateway service method, as returned by EC2.
        /// REST API Reference for CreateCarrierGateway Operation
        public virtual Task CreateCarrierGatewayAsync(CreateCarrierGatewayRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCarrierGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCarrierGatewayResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateClientVpnEndpoint
        internal virtual CreateClientVpnEndpointResponse CreateClientVpnEndpoint(CreateClientVpnEndpointRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateClientVpnEndpointRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateClientVpnEndpointResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a Client VPN endpoint. A Client VPN endpoint is the resource you create and
        /// configure to enable and manage client VPN sessions. It is the destination endpoint
        /// at which all client VPN sessions are terminated.
        /// 
        /// Container for the necessary parameters to execute the CreateClientVpnEndpoint service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateClientVpnEndpoint service method, as returned by EC2.
        /// REST API Reference for CreateClientVpnEndpoint Operation
        public virtual Task CreateClientVpnEndpointAsync(CreateClientVpnEndpointRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateClientVpnEndpointRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateClientVpnEndpointResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateClientVpnRoute
        internal virtual CreateClientVpnRouteResponse CreateClientVpnRoute(CreateClientVpnRouteRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateClientVpnRouteRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateClientVpnRouteResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Adds a route to a network to a Client VPN endpoint. Each Client VPN endpoint has a
        /// route table that describes the available destination network routes. Each route in
        /// the route table specifies the path for traffic to specific resources or networks.
        /// 
        /// Container for the necessary parameters to execute the CreateClientVpnRoute service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateClientVpnRoute service method, as returned by EC2.
        /// REST API Reference for CreateClientVpnRoute Operation
        public virtual Task CreateClientVpnRouteAsync(CreateClientVpnRouteRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateClientVpnRouteRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateClientVpnRouteResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateCoipCidr
        internal virtual CreateCoipCidrResponse CreateCoipCidr(CreateCoipCidrRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCoipCidrRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCoipCidrResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a range of customer-owned IP addresses.
        /// 
        /// Container for the necessary parameters to execute the CreateCoipCidr service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateCoipCidr service method, as returned by EC2.
        /// REST API Reference for CreateCoipCidr Operation
        public virtual Task CreateCoipCidrAsync(CreateCoipCidrRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCoipCidrRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCoipCidrResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateCoipPool
        internal virtual CreateCoipPoolResponse CreateCoipPool(CreateCoipPoolRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCoipPoolRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCoipPoolResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a pool of customer-owned IP (CoIP) addresses.
        /// 
        /// Container for the necessary parameters to execute the CreateCoipPool service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateCoipPool service method, as returned by EC2.
        /// REST API Reference for CreateCoipPool Operation
        public virtual Task CreateCoipPoolAsync(CreateCoipPoolRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCoipPoolRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCoipPoolResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateCustomerGateway
        internal virtual CreateCustomerGatewayResponse CreateCustomerGateway(CreateCustomerGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCustomerGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCustomerGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Provides information to Amazon Web Services about your customer gateway device. The
        /// customer gateway device is the appliance at your end of the VPN connection. You must
        /// provide the IP address of the customer gateway device’s external interface. The IP
        /// address must be static and can be behind a device performing network address translation
        /// (NAT).
        /// 
        ///  
        /// 
        /// For devices that use Border Gateway Protocol (BGP), you can also provide the device's
        /// BGP Autonomous System Number (ASN). You can use an existing ASN assigned to your network.
        /// If you don't have an ASN already, you can use a private ASN. For more information,
        /// see Customer
        /// gateway options for your Site-to-Site VPN connection in the Amazon Web Services
        /// Site-to-Site VPN User Guide.
        /// 
        ///  
        /// 
        /// To create more than one customer gateway with the same VPN type, IP address, and BGP
        /// ASN, specify a unique device name for each customer gateway. An identical request
        /// returns information about the existing customer gateway; it doesn't create a new customer
        /// gateway.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateCustomerGateway service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateCustomerGateway service method, as returned by EC2.
        /// REST API Reference for CreateCustomerGateway Operation
        public virtual Task CreateCustomerGatewayAsync(CreateCustomerGatewayRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCustomerGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCustomerGatewayResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateDefaultSubnet
        internal virtual CreateDefaultSubnetResponse CreateDefaultSubnet(CreateDefaultSubnetRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDefaultSubnetRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDefaultSubnetResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a default subnet with a size /20 IPv4 CIDR block in the specified
        /// Availability Zone in your default VPC. You can have only one default subnet per Availability
        /// Zone. For more information, see Create
        /// a default subnet in the Amazon VPC User Guide.
        /// 
        /// Container for the necessary parameters to execute the CreateDefaultSubnet service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateDefaultSubnet service method, as returned by EC2.
        /// REST API Reference for CreateDefaultSubnet Operation
        public virtual Task CreateDefaultSubnetAsync(CreateDefaultSubnetRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDefaultSubnetRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDefaultSubnetResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateDefaultVpc
        internal virtual CreateDefaultVpcResponse CreateDefaultVpc(CreateDefaultVpcRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDefaultVpcRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDefaultVpcResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a default VPC with a size /16 IPv4 CIDR block and a default subnet
        /// in each Availability Zone. For more information about the components of a default
        /// VPC, see Default
        /// VPCs in the Amazon VPC User Guide. You cannot specify the components of
        /// the default VPC yourself.
        /// 
        ///  
        /// 
        /// If you deleted your previous default VPC, you can create a default VPC. You cannot
        /// have more than one default VPC per Region.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateDefaultVpc service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateDefaultVpc service method, as returned by EC2.
        /// REST API Reference for CreateDefaultVpc Operation
        public virtual Task CreateDefaultVpcAsync(CreateDefaultVpcRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDefaultVpcRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDefaultVpcResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateDhcpOptions
        internal virtual CreateDhcpOptionsResponse CreateDhcpOptions(CreateDhcpOptionsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDhcpOptionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDhcpOptionsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a set of DHCP options for your VPC. After creating the set, you must associate
        /// it with the VPC, causing all existing and new instances that you launch in the VPC
        /// to use this set of DHCP options. The following are the individual DHCP options you
        /// can specify. For more information about the options, see RFC
        /// 2132.
        /// 
        ///   -  
        /// 
        ///  
domain-name-servers - The IP addresses of up to four domain name servers,
        /// or AmazonProvidedDNS. The default DHCP option set specifies AmazonProvidedDNS. If
        /// specifying more than one domain name server, specify the IP addresses in a single
        /// parameter, separated by commas. To have your instance receive a custom DNS hostname
        /// as specified in domain-name, you must set domain-name-servers
        /// to a custom DNS server.
        /// 
        ///    -  
        /// 
        ///  
domain-name - If you're using AmazonProvidedDNS in us-east-1,
        /// specify ec2.internal. If you're using AmazonProvidedDNS in another Region,
        /// specify region.compute.internal (for example, ap-northeast-1.compute.internal).
        /// Otherwise, specify a domain name (for example, ExampleCompany.com). This
        /// value is used to complete unqualified DNS hostnames. Important: Some Linux
        /// operating systems accept multiple domain names separated by spaces. However, Windows
        /// and other Linux operating systems treat the value as a single domain, which results
        /// in unexpected behavior. If your DHCP options set is associated with a VPC that has
        /// instances with multiple operating systems, specify only one domain name.
        /// 
        ///    -  
        /// 
        ///  
ntp-servers - The IP addresses of up to four Network Time Protocol (NTP)
        /// servers.
        /// 
        ///    -  
        /// 
        ///  
netbios-name-servers - The IP addresses of up to four NetBIOS name servers.
        /// 
        ///    -  
        /// 
        ///  
netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend
        /// that you specify 2 (broadcast and multicast are not currently supported). For more
        /// information about these node types, see RFC
        /// 2132.
        /// 
        ///    
 
        /// 
        /// Your VPC automatically starts out with a set of DHCP options that includes only a
        /// DNS server that we provide (AmazonProvidedDNS). If you create a set of options, and
        /// if your VPC has an internet gateway, make sure to set the domain-name-servers
        /// option either to AmazonProvidedDNS or to a domain name server of your
        /// choice. For more information, see DHCP
        /// options sets in the Amazon VPC User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateDhcpOptions service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateDhcpOptions service method, as returned by EC2.
        /// REST API Reference for CreateDhcpOptions Operation
        public virtual Task CreateDhcpOptionsAsync(CreateDhcpOptionsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDhcpOptionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDhcpOptionsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateEgressOnlyInternetGateway
        internal virtual CreateEgressOnlyInternetGatewayResponse CreateEgressOnlyInternetGateway(CreateEgressOnlyInternetGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateEgressOnlyInternetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateEgressOnlyInternetGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// [IPv6 only] Creates an egress-only internet gateway for your VPC. An egress-only internet
        /// gateway is used to enable outbound communication over IPv6 from instances in your
        /// VPC to the internet, and prevents hosts outside of your VPC from initiating an IPv6
        /// connection with your instance.
        /// 
        /// Container for the necessary parameters to execute the CreateEgressOnlyInternetGateway service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateEgressOnlyInternetGateway service method, as returned by EC2.
        /// REST API Reference for CreateEgressOnlyInternetGateway Operation
        public virtual Task CreateEgressOnlyInternetGatewayAsync(CreateEgressOnlyInternetGatewayRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateEgressOnlyInternetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateEgressOnlyInternetGatewayResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateFleet
        internal virtual CreateFleetResponse CreateFleet(CreateFleetRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFleetRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFleetResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an EC2 Fleet that contains the configuration information for On-Demand Instances
        /// and Spot Instances. Instances are launched immediately if there is available capacity.
        /// 
        ///  
        /// 
        /// A single EC2 Fleet can include multiple launch specifications that vary by instance
        /// type, AMI, Availability Zone, or subnet.
        /// 
        ///  
        /// 
        /// For more information, see EC2
        /// Fleet in the Amazon EC2 User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateFleet service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateFleet service method, as returned by EC2.
        /// REST API Reference for CreateFleet Operation
        public virtual Task CreateFleetAsync(CreateFleetRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFleetRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFleetResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateFlowLogs
        internal virtual CreateFlowLogsResponse CreateFlowLogs(CreateFlowLogsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFlowLogsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFlowLogsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates one or more flow logs to capture information about IP traffic for a specific
        /// network interface, subnet, or VPC. 
        /// 
        ///  
        /// 
        /// Flow log data for a monitored network interface is recorded as flow log records, which
        /// are log events consisting of fields that describe the traffic flow. For more information,
        /// see Flow
        /// log records in the Amazon Virtual Private Cloud User Guide.
        /// 
        ///  
        /// 
        /// When publishing to CloudWatch Logs, flow log records are published to a log group,
        /// and each network interface has a unique log stream in the log group. When publishing
        /// to Amazon S3, flow log records for all of the monitored network interfaces are published
        /// to a single log file object that is stored in the specified bucket.
        /// 
        ///  
        /// 
        /// For more information, see VPC
        /// Flow Logs in the Amazon Virtual Private Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateFlowLogs service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateFlowLogs service method, as returned by EC2.
        /// REST API Reference for CreateFlowLogs Operation
        public virtual Task CreateFlowLogsAsync(CreateFlowLogsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFlowLogsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFlowLogsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateFpgaImage
        internal virtual CreateFpgaImageResponse CreateFpgaImage(CreateFpgaImageRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFpgaImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFpgaImageResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP).
        /// 
        ///  
        /// 
        /// The create operation is asynchronous. To verify that the AFI is ready for use, check
        /// the output logs.
        /// 
        ///  
        /// 
        /// An AFI contains the FPGA bitstream that is ready to download to an FPGA. You can securely
        /// deploy an AFI on multiple FPGA-accelerated instances. For more information, see the
        /// Amazon Web Services FPGA Hardware Development
        /// Kit.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateFpgaImage service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateFpgaImage service method, as returned by EC2.
        /// REST API Reference for CreateFpgaImage Operation
        public virtual Task CreateFpgaImageAsync(CreateFpgaImageRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFpgaImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFpgaImageResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateImage
        internal virtual CreateImageResponse CreateImage(CreateImageRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateImageResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either
        /// running or stopped.
        /// 
        ///  
        /// 
        /// If you customized your instance with instance store volumes or Amazon EBS volumes
        /// in addition to the root device volume, the new AMI contains block device mapping information
        /// for those volumes. When you launch an instance from this new AMI, the instance automatically
        /// launches with those additional volumes.
        /// 
        ///  
        /// 
        /// For more information, see Create
        /// an Amazon EBS-backed Linux AMI in the Amazon Elastic Compute Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateImage service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateImage service method, as returned by EC2.
        /// REST API Reference for CreateImage Operation
        public virtual Task CreateImageAsync(CreateImageRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateImageRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateImageResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateInstanceConnectEndpoint
        internal virtual CreateInstanceConnectEndpointResponse CreateInstanceConnectEndpoint(CreateInstanceConnectEndpointRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInstanceConnectEndpointRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInstanceConnectEndpointResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an EC2 Instance Connect Endpoint.
        /// 
        ///  
        /// 
        /// An EC2 Instance Connect Endpoint allows you to connect to an instance, without requiring
        /// the instance to have a public IPv4 address. For more information, see Connect
        /// to your instances without requiring a public IPv4 address using EC2 Instance Connect
        /// Endpoint in the Amazon EC2 User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateInstanceConnectEndpoint service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateInstanceConnectEndpoint service method, as returned by EC2.
        /// REST API Reference for CreateInstanceConnectEndpoint Operation
        public virtual Task CreateInstanceConnectEndpointAsync(CreateInstanceConnectEndpointRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInstanceConnectEndpointRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInstanceConnectEndpointResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateInstanceEventWindow
        internal virtual CreateInstanceEventWindowResponse CreateInstanceEventWindow(CreateInstanceEventWindowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInstanceEventWindowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInstanceEventWindowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an event window in which scheduled events for the associated Amazon EC2 instances
        /// can run.
        /// 
        ///  
        /// 
        /// You can define either a set of time ranges or a cron expression when creating the
        /// event window, but not both. All event window times are in UTC.
        /// 
        ///  
        /// 
        /// You can create up to 200 event windows per Amazon Web Services Region.
        /// 
        ///  
        /// 
        /// When you create the event window, targets (instance IDs, Dedicated Host IDs, or tags)
        /// are not yet associated with it. To ensure that the event window can be used, you must
        /// associate one or more targets with it by using the AssociateInstanceEventWindow
        /// API.
        /// 
        ///   
        /// 
        /// Event windows are applicable only for scheduled events that stop, reboot, or terminate
        /// instances.
        /// 
        ///  
        /// 
        /// Event windows are not applicable for:
        /// 
        ///   -  
        /// 
        /// Expedited scheduled events and network maintenance events. 
        /// 
        ///  
  -  
        /// 
        /// Unscheduled maintenance such as AutoRecovery and unplanned reboots.
        /// 
        ///  
  
  
        /// 
        /// For more information, see Define
        /// event windows for scheduled events in the Amazon EC2 User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateInstanceEventWindow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateInstanceEventWindow service method, as returned by EC2.
        /// REST API Reference for CreateInstanceEventWindow Operation
        public virtual Task CreateInstanceEventWindowAsync(CreateInstanceEventWindowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInstanceEventWindowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInstanceEventWindowResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateInstanceExportTask
        internal virtual CreateInstanceExportTaskResponse CreateInstanceExportTask(CreateInstanceExportTaskRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInstanceExportTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInstanceExportTaskResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Exports a running or stopped instance to an Amazon S3 bucket.
        /// 
        ///  
        /// 
        /// For information about the prerequisites for your Amazon S3 bucket, supported operating
        /// systems, image formats, and known limitations for the types of instances you can export,
        /// see Exporting
        /// an instance as a VM Using VM Import/Export in the VM Import/Export User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateInstanceExportTask service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateInstanceExportTask service method, as returned by EC2.
        /// REST API Reference for CreateInstanceExportTask Operation
        public virtual Task CreateInstanceExportTaskAsync(CreateInstanceExportTaskRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInstanceExportTaskRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInstanceExportTaskResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateInternetGateway
        internal virtual CreateInternetGatewayResponse CreateInternetGateway()
        {
            return CreateInternetGateway(new CreateInternetGatewayRequest());
        }
        internal virtual CreateInternetGatewayResponse CreateInternetGateway(CreateInternetGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInternetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInternetGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an internet gateway for use with a VPC. After creating the internet gateway,
        /// you attach it to a VPC using AttachInternetGateway.
        /// 
        ///  
        /// 
        /// For more information, see Internet
        /// gateways in the Amazon VPC User Guide.
        /// 
        /// 
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateInternetGateway service method, as returned by EC2.
        /// REST API Reference for CreateInternetGateway Operation
        public virtual Task CreateInternetGatewayAsync(System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            return CreateInternetGatewayAsync(new CreateInternetGatewayRequest(), cancellationToken);
        }
        /// 
        /// Creates an internet gateway for use with a VPC. After creating the internet gateway,
        /// you attach it to a VPC using AttachInternetGateway.
        /// 
        ///  
        /// 
        /// For more information, see Internet
        /// gateways in the Amazon VPC User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateInternetGateway service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateInternetGateway service method, as returned by EC2.
        /// REST API Reference for CreateInternetGateway Operation
        public virtual Task CreateInternetGatewayAsync(CreateInternetGatewayRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateInternetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateInternetGatewayResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateIpam
        internal virtual CreateIpamResponse CreateIpam(CreateIpamRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Create an IPAM. Amazon VPC IP Address Manager (IPAM) is a VPC feature that you can
        /// use to automate your IP address management workflows including assigning, tracking,
        /// troubleshooting, and auditing IP addresses across Amazon Web Services Regions and
        /// accounts throughout your Amazon Web Services Organization.
        /// 
        ///  
        /// 
        /// For more information, see Create
        /// an IPAM in the Amazon VPC IPAM User Guide. 
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateIpam service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateIpam service method, as returned by EC2.
        /// REST API Reference for CreateIpam Operation
        public virtual Task CreateIpamAsync(CreateIpamRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateIpamPool
        internal virtual CreateIpamPoolResponse CreateIpamPool(CreateIpamPoolRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamPoolRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamPoolResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Create an IP address pool for Amazon VPC IP Address Manager (IPAM). In IPAM, a pool
        /// is a collection of contiguous IP addresses CIDRs. Pools enable you to organize your
        /// IP addresses according to your routing and security needs. For example, if you have
        /// separate routing and security needs for development and production applications, you
        /// can create a pool for each.
        /// 
        ///  
        /// 
        /// For more information, see Create
        /// a top-level pool in the Amazon VPC IPAM User Guide. 
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateIpamPool service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateIpamPool service method, as returned by EC2.
        /// REST API Reference for CreateIpamPool Operation
        public virtual Task CreateIpamPoolAsync(CreateIpamPoolRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamPoolRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamPoolResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateIpamResourceDiscovery
        internal virtual CreateIpamResourceDiscoveryResponse CreateIpamResourceDiscovery(CreateIpamResourceDiscoveryRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamResourceDiscoveryRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamResourceDiscoveryResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an IPAM resource discovery. A resource discovery is an IPAM component that
        /// enables IPAM to manage and monitor resources that belong to the owning account.
        /// 
        /// Container for the necessary parameters to execute the CreateIpamResourceDiscovery service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateIpamResourceDiscovery service method, as returned by EC2.
        /// REST API Reference for CreateIpamResourceDiscovery Operation
        public virtual Task CreateIpamResourceDiscoveryAsync(CreateIpamResourceDiscoveryRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamResourceDiscoveryRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamResourceDiscoveryResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateIpamScope
        internal virtual CreateIpamScopeResponse CreateIpamScope(CreateIpamScopeRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamScopeRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamScopeResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Create an IPAM scope. In IPAM, a scope is the highest-level container within IPAM.
        /// An IPAM contains two default scopes. Each scope represents the IP space for a single
        /// network. The private scope is intended for all private IP address space. The public
        /// scope is intended for all public IP address space. Scopes enable you to reuse IP addresses
        /// across multiple unconnected networks without causing IP address overlap or conflict.
        /// 
        ///  
        /// 
        /// For more information, see Add
        /// a scope in the Amazon VPC IPAM User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateIpamScope service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateIpamScope service method, as returned by EC2.
        /// REST API Reference for CreateIpamScope Operation
        public virtual Task CreateIpamScopeAsync(CreateIpamScopeRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateIpamScopeRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateIpamScopeResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateKeyPair
        internal virtual CreateKeyPairResponse CreateKeyPair(CreateKeyPairRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateKeyPairRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateKeyPairResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an ED25519 or 2048-bit RSA key pair with the specified name and in the specified
        /// PEM or PPK format. Amazon EC2 stores the public key and displays the private key for
        /// you to save to a file. The private key is returned as an unencrypted PEM encoded PKCS#1
        /// private key or an unencrypted PPK formatted private key for use with PuTTY. If a key
        /// with the specified name already exists, Amazon EC2 returns an error.
        /// 
        ///  
        /// 
        /// The key pair returned to you is available only in the Amazon Web Services Region in
        /// which you create it. If you prefer, you can create your own key pair using a third-party
        /// tool and upload it to any Region using ImportKeyPair.
        /// 
        ///  
        /// 
        /// You can have up to 5,000 key pairs per Amazon Web Services Region.
        /// 
        ///  
        /// 
        /// For more information, see Amazon
        /// EC2 key pairs in the Amazon Elastic Compute Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateKeyPair service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateKeyPair service method, as returned by EC2.
        /// REST API Reference for CreateKeyPair Operation
        public virtual Task CreateKeyPairAsync(CreateKeyPairRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateKeyPairRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateKeyPairResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateLaunchTemplate
        internal virtual CreateLaunchTemplateResponse CreateLaunchTemplate(CreateLaunchTemplateRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateLaunchTemplateRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateLaunchTemplateResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a launch template.
        /// 
        ///  
        /// 
        /// A launch template contains the parameters to launch an instance. When you launch an
        /// instance using RunInstances, you can specify a launch template instead of providing
        /// the launch parameters in the request. For more information, see Launch
        /// an instance from a launch template in the Amazon Elastic Compute Cloud User
        /// Guide.
        /// 
        ///  
        /// 
        /// If you want to clone an existing launch template as the basis for creating a new launch
        /// template, you can use the Amazon EC2 console. The API, SDKs, and CLI do not support
        /// cloning a template. For more information, see Create
        /// a launch template from an existing launch template in the Amazon Elastic Compute
        /// Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateLaunchTemplate service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateLaunchTemplate service method, as returned by EC2.
        /// REST API Reference for CreateLaunchTemplate Operation
        public virtual Task CreateLaunchTemplateAsync(CreateLaunchTemplateRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateLaunchTemplateRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateLaunchTemplateResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateLaunchTemplateVersion
        internal virtual CreateLaunchTemplateVersionResponse CreateLaunchTemplateVersion(CreateLaunchTemplateVersionRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateLaunchTemplateVersionRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateLaunchTemplateVersionResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a new version of a launch template. You can specify an existing version of
        /// launch template from which to base the new version.
        /// 
        ///  
        /// 
        /// Launch template versions are numbered in the order in which they are created. You
        /// cannot specify, change, or replace the numbering of launch template versions.
        /// 
        ///  
        /// 
        /// Launch templates are immutable; after you create a launch template, you can't modify
        /// it. Instead, you can create a new version of the launch template that includes any
        /// changes you require.
        /// 
        ///  
        /// 
        /// For more information, see Modify
        /// a launch template (manage launch template versions) in the Amazon Elastic Compute
        /// Cloud User Guide.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateLaunchTemplateVersion service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateLaunchTemplateVersion service method, as returned by EC2.
        /// REST API Reference for CreateLaunchTemplateVersion Operation
        public virtual Task CreateLaunchTemplateVersionAsync(CreateLaunchTemplateVersionRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateLaunchTemplateVersionRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateLaunchTemplateVersionResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateLocalGatewayRoute
        internal virtual CreateLocalGatewayRouteResponse CreateLocalGatewayRoute(CreateLocalGatewayRouteRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateLocalGatewayRouteRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateLocalGatewayRouteResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        ///