<?php
namespace Aws\Ec2\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the Amazon Elastic Compute Cloud service.
 */
class Ec2Exception extends AwsException {}


<?php
namespace Aws\EC2InstanceConnect;

use Aws\AwsClient;

/**
 * This client is used to interact with the **AWS EC2 Instance Connect** service.
 * @method \Aws\Result sendSSHPublicKey(array $args = [])
 * @method \GuzzleHttp\Promise\Promise sendSSHPublicKeyAsync(array $args = [])
 * @method \Aws\Result sendSerialConsoleSSHPublicKey(array $args = [])
 * @method \GuzzleHttp\Promise\Promise sendSerialConsoleSSHPublicKeyAsync(array $args = [])
 */
class EC2InstanceConnectClient extends AwsClient {}


<?php
namespace Aws\EC2InstanceConnect\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **AWS EC2 Instance Connect** service.
 */
class EC2InstanceConnectException extends AwsException {}


<?php
namespace Aws\Ecr;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon EC2 Container Registry** service.
 *
 * @method \Aws\Result batchCheckLayerAvailability(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchCheckLayerAvailabilityAsync(array $args = [])
 * @method \Aws\Result batchDeleteImage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchDeleteImageAsync(array $args = [])
 * @method \Aws\Result batchGetImage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchGetImageAsync(array $args = [])
 * @method \Aws\Result batchGetRepositoryScanningConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchGetRepositoryScanningConfigurationAsync(array $args = [])
 * @method \Aws\Result completeLayerUpload(array $args = [])
 * @method \GuzzleHttp\Promise\Promise completeLayerUploadAsync(array $args = [])
 * @method \Aws\Result createPullThroughCacheRule(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createPullThroughCacheRuleAsync(array $args = [])
 * @method \Aws\Result createRepository(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createRepositoryAsync(array $args = [])
 * @method \Aws\Result deleteLifecyclePolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteLifecyclePolicyAsync(array $args = [])
 * @method \Aws\Result deletePullThroughCacheRule(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deletePullThroughCacheRuleAsync(array $args = [])
 * @method \Aws\Result deleteRegistryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteRegistryPolicyAsync(array $args = [])
 * @method \Aws\Result deleteRepository(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteRepositoryAsync(array $args = [])
 * @method \Aws\Result deleteRepositoryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteRepositoryPolicyAsync(array $args = [])
 * @method \Aws\Result describeImageReplicationStatus(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeImageReplicationStatusAsync(array $args = [])
 * @method \Aws\Result describeImageScanFindings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeImageScanFindingsAsync(array $args = [])
 * @method \Aws\Result describeImages(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = [])
 * @method \Aws\Result describePullThroughCacheRules(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describePullThroughCacheRulesAsync(array $args = [])
 * @method \Aws\Result describeRegistry(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeRegistryAsync(array $args = [])
 * @method \Aws\Result describeRepositories(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeRepositoriesAsync(array $args = [])
 * @method \Aws\Result getAuthorizationToken(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getAuthorizationTokenAsync(array $args = [])
 * @method \Aws\Result getDownloadUrlForLayer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getDownloadUrlForLayerAsync(array $args = [])
 * @method \Aws\Result getLifecyclePolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getLifecyclePolicyAsync(array $args = [])
 * @method \Aws\Result getLifecyclePolicyPreview(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getLifecyclePolicyPreviewAsync(array $args = [])
 * @method \Aws\Result getRegistryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getRegistryPolicyAsync(array $args = [])
 * @method \Aws\Result getRegistryScanningConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getRegistryScanningConfigurationAsync(array $args = [])
 * @method \Aws\Result getRepositoryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getRepositoryPolicyAsync(array $args = [])
 * @method \Aws\Result initiateLayerUpload(array $args = [])
 * @method \GuzzleHttp\Promise\Promise initiateLayerUploadAsync(array $args = [])
 * @method \Aws\Result listImages(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listImagesAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result putImage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putImageAsync(array $args = [])
 * @method \Aws\Result putImageScanningConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putImageScanningConfigurationAsync(array $args = [])
 * @method \Aws\Result putImageTagMutability(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putImageTagMutabilityAsync(array $args = [])
 * @method \Aws\Result putLifecyclePolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putLifecyclePolicyAsync(array $args = [])
 * @method \Aws\Result putRegistryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putRegistryPolicyAsync(array $args = [])
 * @method \Aws\Result putRegistryScanningConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putRegistryScanningConfigurationAsync(array $args = [])
 * @method \Aws\Result putReplicationConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putReplicationConfigurationAsync(array $args = [])
 * @method \Aws\Result setRepositoryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setRepositoryPolicyAsync(array $args = [])
 * @method \Aws\Result startImageScan(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startImageScanAsync(array $args = [])
 * @method \Aws\Result startLifecyclePolicyPreview(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startLifecyclePolicyPreviewAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 * @method \Aws\Result uploadLayerPart(array $args = [])
 * @method \GuzzleHttp\Promise\Promise uploadLayerPartAsync(array $args = [])
 */
class EcrClient extends AwsClient {}


<?php
namespace Aws\Ecr\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **Amazon EC2 Container Registry** service.
 */
class EcrException extends AwsException {}


<?php
namespace Aws\ECRPublic;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon Elastic Container Registry Public** service.
 * @method \Aws\Result batchCheckLayerAvailability(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchCheckLayerAvailabilityAsync(array $args = [])
 * @method \Aws\Result batchDeleteImage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchDeleteImageAsync(array $args = [])
 * @method \Aws\Result completeLayerUpload(array $args = [])
 * @method \GuzzleHttp\Promise\Promise completeLayerUploadAsync(array $args = [])
 * @method \Aws\Result createRepository(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createRepositoryAsync(array $args = [])
 * @method \Aws\Result deleteRepository(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteRepositoryAsync(array $args = [])
 * @method \Aws\Result deleteRepositoryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteRepositoryPolicyAsync(array $args = [])
 * @method \Aws\Result describeImageTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeImageTagsAsync(array $args = [])
 * @method \Aws\Result describeImages(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = [])
 * @method \Aws\Result describeRegistries(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeRegistriesAsync(array $args = [])
 * @method \Aws\Result describeRepositories(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeRepositoriesAsync(array $args = [])
 * @method \Aws\Result getAuthorizationToken(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getAuthorizationTokenAsync(array $args = [])
 * @method \Aws\Result getRegistryCatalogData(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getRegistryCatalogDataAsync(array $args = [])
 * @method \Aws\Result getRepositoryCatalogData(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getRepositoryCatalogDataAsync(array $args = [])
 * @method \Aws\Result getRepositoryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getRepositoryPolicyAsync(array $args = [])
 * @method \Aws\Result initiateLayerUpload(array $args = [])
 * @method \GuzzleHttp\Promise\Promise initiateLayerUploadAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result putImage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putImageAsync(array $args = [])
 * @method \Aws\Result putRegistryCatalogData(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putRegistryCatalogDataAsync(array $args = [])
 * @method \Aws\Result putRepositoryCatalogData(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putRepositoryCatalogDataAsync(array $args = [])
 * @method \Aws\Result setRepositoryPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setRepositoryPolicyAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 * @method \Aws\Result uploadLayerPart(array $args = [])
 * @method \GuzzleHttp\Promise\Promise uploadLayerPartAsync(array $args = [])
 */
class ECRPublicClient extends AwsClient {}


<?php
namespace Aws\ECRPublic\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **Amazon Elastic Container Registry Public** service.
 */
class ECRPublicException extends AwsException {}


<?php
namespace Aws\Ecs;

use Aws\AwsClient;

/**
 * This client is used to interact with **Amazon ECS**.
 *
 * @method \Aws\Result createCapacityProvider(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createCapacityProviderAsync(array $args = [])
 * @method \Aws\Result createCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
 * @method \Aws\Result createService(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createServiceAsync(array $args = [])
 * @method \Aws\Result createTaskSet(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createTaskSetAsync(array $args = [])
 * @method \Aws\Result deleteAccountSetting(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteAccountSettingAsync(array $args = [])
 * @method \Aws\Result deleteAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteAttributesAsync(array $args = [])
 * @method \Aws\Result deleteCapacityProvider(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteCapacityProviderAsync(array $args = [])
 * @method \Aws\Result deleteCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
 * @method \Aws\Result deleteService(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteServiceAsync(array $args = [])
 * @method \Aws\Result deleteTaskDefinitions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteTaskDefinitionsAsync(array $args = [])
 * @method \Aws\Result deleteTaskSet(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteTaskSetAsync(array $args = [])
 * @method \Aws\Result deregisterContainerInstance(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deregisterContainerInstanceAsync(array $args = [])
 * @method \Aws\Result deregisterTaskDefinition(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deregisterTaskDefinitionAsync(array $args = [])
 * @method \Aws\Result describeCapacityProviders(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeCapacityProvidersAsync(array $args = [])
 * @method \Aws\Result describeClusters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeClustersAsync(array $args = [])
 * @method \Aws\Result describeContainerInstances(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeContainerInstancesAsync(array $args = [])
 * @method \Aws\Result describeServices(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeServicesAsync(array $args = [])
 * @method \Aws\Result describeTaskDefinition(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTaskDefinitionAsync(array $args = [])
 * @method \Aws\Result describeTaskSets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTaskSetsAsync(array $args = [])
 * @method \Aws\Result describeTasks(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTasksAsync(array $args = [])
 * @method \Aws\Result discoverPollEndpoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise discoverPollEndpointAsync(array $args = [])
 * @method \Aws\Result executeCommand(array $args = [])
 * @method \GuzzleHttp\Promise\Promise executeCommandAsync(array $args = [])
 * @method \Aws\Result getTaskProtection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getTaskProtectionAsync(array $args = [])
 * @method \Aws\Result listAccountSettings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listAccountSettingsAsync(array $args = [])
 * @method \Aws\Result listAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listAttributesAsync(array $args = [])
 * @method \Aws\Result listClusters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = [])
 * @method \Aws\Result listContainerInstances(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listContainerInstancesAsync(array $args = [])
 * @method \Aws\Result listServices(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listServicesAsync(array $args = [])
 * @method \Aws\Result listServicesByNamespace(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listServicesByNamespaceAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result listTaskDefinitionFamilies(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTaskDefinitionFamiliesAsync(array $args = [])
 * @method \Aws\Result listTaskDefinitions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTaskDefinitionsAsync(array $args = [])
 * @method \Aws\Result listTasks(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTasksAsync(array $args = [])
 * @method \Aws\Result putAccountSetting(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putAccountSettingAsync(array $args = [])
 * @method \Aws\Result putAccountSettingDefault(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putAccountSettingDefaultAsync(array $args = [])
 * @method \Aws\Result putAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putAttributesAsync(array $args = [])
 * @method \Aws\Result putClusterCapacityProviders(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putClusterCapacityProvidersAsync(array $args = [])
 * @method \Aws\Result registerContainerInstance(array $args = [])
 * @method \GuzzleHttp\Promise\Promise registerContainerInstanceAsync(array $args = [])
 * @method \Aws\Result registerTaskDefinition(array $args = [])
 * @method \GuzzleHttp\Promise\Promise registerTaskDefinitionAsync(array $args = [])
 * @method \Aws\Result runTask(array $args = [])
 * @method \GuzzleHttp\Promise\Promise runTaskAsync(array $args = [])
 * @method \Aws\Result startTask(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startTaskAsync(array $args = [])
 * @method \Aws\Result stopTask(array $args = [])
 * @method \GuzzleHttp\Promise\Promise stopTaskAsync(array $args = [])
 * @method \Aws\Result submitAttachmentStateChanges(array $args = [])
 * @method \GuzzleHttp\Promise\Promise submitAttachmentStateChangesAsync(array $args = [])
 * @method \Aws\Result submitContainerStateChange(array $args = [])
 * @method \GuzzleHttp\Promise\Promise submitContainerStateChangeAsync(array $args = [])
 * @method \Aws\Result submitTaskStateChange(array $args = [])
 * @method \GuzzleHttp\Promise\Promise submitTaskStateChangeAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 * @method \Aws\Result updateCapacityProvider(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateCapacityProviderAsync(array $args = [])
 * @method \Aws\Result updateCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateClusterAsync(array $args = [])
 * @method \Aws\Result updateClusterSettings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateClusterSettingsAsync(array $args = [])
 * @method \Aws\Result updateContainerAgent(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateContainerAgentAsync(array $args = [])
 * @method \Aws\Result updateContainerInstancesState(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateContainerInstancesStateAsync(array $args = [])
 * @method \Aws\Result updateService(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateServiceAsync(array $args = [])
 * @method \Aws\Result updateServicePrimaryTaskSet(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateServicePrimaryTaskSetAsync(array $args = [])
 * @method \Aws\Result updateTaskProtection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateTaskProtectionAsync(array $args = [])
 * @method \Aws\Result updateTaskSet(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateTaskSetAsync(array $args = [])
 */
class EcsClient extends AwsClient {}


<?php
namespace Aws\Ecs\Exception;

use Aws\Exception\AwsException;

/**
 * Amazon ECS exception.
 */
class EcsException extends AwsException {}


<?php
namespace Aws\Efs;

use Aws\AwsClient;

/**
 * This client is used to interact with **Amazon EFS**.
 *
 * @method \Aws\Result createAccessPoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createAccessPointAsync(array $args = [])
 * @method \Aws\Result createFileSystem(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createFileSystemAsync(array $args = [])
 * @method \Aws\Result createMountTarget(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createMountTargetAsync(array $args = [])
 * @method \Aws\Result createReplicationConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createReplicationConfigurationAsync(array $args = [])
 * @method \Aws\Result createTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createTagsAsync(array $args = [])
 * @method \Aws\Result deleteAccessPoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteAccessPointAsync(array $args = [])
 * @method \Aws\Result deleteFileSystem(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteFileSystemAsync(array $args = [])
 * @method \Aws\Result deleteFileSystemPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteFileSystemPolicyAsync(array $args = [])
 * @method \Aws\Result deleteMountTarget(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteMountTargetAsync(array $args = [])
 * @method \Aws\Result deleteReplicationConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteReplicationConfigurationAsync(array $args = [])
 * @method \Aws\Result deleteTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteTagsAsync(array $args = [])
 * @method \Aws\Result describeAccessPoints(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAccessPointsAsync(array $args = [])
 * @method \Aws\Result describeAccountPreferences(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAccountPreferencesAsync(array $args = [])
 * @method \Aws\Result describeBackupPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeBackupPolicyAsync(array $args = [])
 * @method \Aws\Result describeFileSystemPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeFileSystemPolicyAsync(array $args = [])
 * @method \Aws\Result describeFileSystems(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeFileSystemsAsync(array $args = [])
 * @method \Aws\Result describeLifecycleConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeLifecycleConfigurationAsync(array $args = [])
 * @method \Aws\Result describeMountTargetSecurityGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeMountTargetSecurityGroupsAsync(array $args = [])
 * @method \Aws\Result describeMountTargets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeMountTargetsAsync(array $args = [])
 * @method \Aws\Result describeReplicationConfigurations(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeReplicationConfigurationsAsync(array $args = [])
 * @method \Aws\Result describeTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTagsAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result modifyMountTargetSecurityGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyMountTargetSecurityGroupsAsync(array $args = [])
 * @method \Aws\Result putAccountPreferences(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putAccountPreferencesAsync(array $args = [])
 * @method \Aws\Result putBackupPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putBackupPolicyAsync(array $args = [])
 * @method \Aws\Result putFileSystemPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putFileSystemPolicyAsync(array $args = [])
 * @method \Aws\Result putLifecycleConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putLifecycleConfigurationAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 * @method \Aws\Result updateFileSystem(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateFileSystemAsync(array $args = [])
 */
class EfsClient extends AwsClient {}


<?php
namespace Aws\Efs\Exception;

use Aws\Exception\AwsException;

/**
 * Amazon EFS exception.
 */
class EfsException extends AwsException {}


<?php
namespace Aws\EKS;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon Elastic Container Service for Kubernetes** service.
 * @method \Aws\Result associateEncryptionConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise associateEncryptionConfigAsync(array $args = [])
 * @method \Aws\Result associateIdentityProviderConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise associateIdentityProviderConfigAsync(array $args = [])
 * @method \Aws\Result createAddon(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createAddonAsync(array $args = [])
 * @method \Aws\Result createCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
 * @method \Aws\Result createFargateProfile(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createFargateProfileAsync(array $args = [])
 * @method \Aws\Result createNodegroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createNodegroupAsync(array $args = [])
 * @method \Aws\Result deleteAddon(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteAddonAsync(array $args = [])
 * @method \Aws\Result deleteCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
 * @method \Aws\Result deleteFargateProfile(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteFargateProfileAsync(array $args = [])
 * @method \Aws\Result deleteNodegroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteNodegroupAsync(array $args = [])
 * @method \Aws\Result deregisterCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deregisterClusterAsync(array $args = [])
 * @method \Aws\Result describeAddon(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAddonAsync(array $args = [])
 * @method \Aws\Result describeAddonConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAddonConfigurationAsync(array $args = [])
 * @method \Aws\Result describeAddonVersions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAddonVersionsAsync(array $args = [])
 * @method \Aws\Result describeCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeClusterAsync(array $args = [])
 * @method \Aws\Result describeFargateProfile(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeFargateProfileAsync(array $args = [])
 * @method \Aws\Result describeIdentityProviderConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeIdentityProviderConfigAsync(array $args = [])
 * @method \Aws\Result describeNodegroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeNodegroupAsync(array $args = [])
 * @method \Aws\Result describeUpdate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeUpdateAsync(array $args = [])
 * @method \Aws\Result disassociateIdentityProviderConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise disassociateIdentityProviderConfigAsync(array $args = [])
 * @method \Aws\Result listAddons(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listAddonsAsync(array $args = [])
 * @method \Aws\Result listClusters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = [])
 * @method \Aws\Result listFargateProfiles(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listFargateProfilesAsync(array $args = [])
 * @method \Aws\Result listIdentityProviderConfigs(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listIdentityProviderConfigsAsync(array $args = [])
 * @method \Aws\Result listNodegroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listNodegroupsAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result listUpdates(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listUpdatesAsync(array $args = [])
 * @method \Aws\Result registerCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise registerClusterAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 * @method \Aws\Result updateAddon(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateAddonAsync(array $args = [])
 * @method \Aws\Result updateClusterConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateClusterConfigAsync(array $args = [])
 * @method \Aws\Result updateClusterVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateClusterVersionAsync(array $args = [])
 * @method \Aws\Result updateNodegroupConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateNodegroupConfigAsync(array $args = [])
 * @method \Aws\Result updateNodegroupVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateNodegroupVersionAsync(array $args = [])
 */
class EKSClient extends AwsClient {}


<?php
namespace Aws\EKS\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **Amazon Elastic Container Service for Kubernetes** service.
 */
class EKSException extends AwsException {}


<?php
namespace Aws\ElastiCache;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon ElastiCache** service.
 *
 * @method \Aws\Result addTagsToResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addTagsToResourceAsync(array $args = [])
 * @method \Aws\Result authorizeCacheSecurityGroupIngress(array $args = [])
 * @method \GuzzleHttp\Promise\Promise authorizeCacheSecurityGroupIngressAsync(array $args = [])
 * @method \Aws\Result batchApplyUpdateAction(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchApplyUpdateActionAsync(array $args = [])
 * @method \Aws\Result batchStopUpdateAction(array $args = [])
 * @method \GuzzleHttp\Promise\Promise batchStopUpdateActionAsync(array $args = [])
 * @method \Aws\Result completeMigration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise completeMigrationAsync(array $args = [])
 * @method \Aws\Result copySnapshot(array $args = [])
 * @method \GuzzleHttp\Promise\Promise copySnapshotAsync(array $args = [])
 * @method \Aws\Result createCacheCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createCacheClusterAsync(array $args = [])
 * @method \Aws\Result createCacheParameterGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createCacheParameterGroupAsync(array $args = [])
 * @method \Aws\Result createCacheSecurityGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createCacheSecurityGroupAsync(array $args = [])
 * @method \Aws\Result createCacheSubnetGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createCacheSubnetGroupAsync(array $args = [])
 * @method \Aws\Result createGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result createReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createReplicationGroupAsync(array $args = [])
 * @method \Aws\Result createSnapshot(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createSnapshotAsync(array $args = [])
 * @method \Aws\Result createUser(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createUserAsync(array $args = [])
 * @method \Aws\Result createUserGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createUserGroupAsync(array $args = [])
 * @method \Aws\Result decreaseNodeGroupsInGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise decreaseNodeGroupsInGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result decreaseReplicaCount(array $args = [])
 * @method \GuzzleHttp\Promise\Promise decreaseReplicaCountAsync(array $args = [])
 * @method \Aws\Result deleteCacheCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteCacheClusterAsync(array $args = [])
 * @method \Aws\Result deleteCacheParameterGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteCacheParameterGroupAsync(array $args = [])
 * @method \Aws\Result deleteCacheSecurityGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteCacheSecurityGroupAsync(array $args = [])
 * @method \Aws\Result deleteCacheSubnetGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteCacheSubnetGroupAsync(array $args = [])
 * @method \Aws\Result deleteGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result deleteReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteReplicationGroupAsync(array $args = [])
 * @method \Aws\Result deleteSnapshot(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteSnapshotAsync(array $args = [])
 * @method \Aws\Result deleteUser(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteUserAsync(array $args = [])
 * @method \Aws\Result deleteUserGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteUserGroupAsync(array $args = [])
 * @method \Aws\Result describeCacheClusters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeCacheClustersAsync(array $args = [])
 * @method \Aws\Result describeCacheEngineVersions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeCacheEngineVersionsAsync(array $args = [])
 * @method \Aws\Result describeCacheParameterGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeCacheParameterGroupsAsync(array $args = [])
 * @method \Aws\Result describeCacheParameters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeCacheParametersAsync(array $args = [])
 * @method \Aws\Result describeCacheSecurityGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeCacheSecurityGroupsAsync(array $args = [])
 * @method \Aws\Result describeCacheSubnetGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeCacheSubnetGroupsAsync(array $args = [])
 * @method \Aws\Result describeEngineDefaultParameters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEngineDefaultParametersAsync(array $args = [])
 * @method \Aws\Result describeEvents(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEventsAsync(array $args = [])
 * @method \Aws\Result describeGlobalReplicationGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeGlobalReplicationGroupsAsync(array $args = [])
 * @method \Aws\Result describeReplicationGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeReplicationGroupsAsync(array $args = [])
 * @method \Aws\Result describeReservedCacheNodes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeReservedCacheNodesAsync(array $args = [])
 * @method \Aws\Result describeReservedCacheNodesOfferings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeReservedCacheNodesOfferingsAsync(array $args = [])
 * @method \Aws\Result describeServiceUpdates(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeServiceUpdatesAsync(array $args = [])
 * @method \Aws\Result describeSnapshots(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeSnapshotsAsync(array $args = [])
 * @method \Aws\Result describeUpdateActions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeUpdateActionsAsync(array $args = [])
 * @method \Aws\Result describeUserGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeUserGroupsAsync(array $args = [])
 * @method \Aws\Result describeUsers(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeUsersAsync(array $args = [])
 * @method \Aws\Result disassociateGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise disassociateGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result failoverGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise failoverGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result increaseNodeGroupsInGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise increaseNodeGroupsInGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result increaseReplicaCount(array $args = [])
 * @method \GuzzleHttp\Promise\Promise increaseReplicaCountAsync(array $args = [])
 * @method \Aws\Result listAllowedNodeTypeModifications(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listAllowedNodeTypeModificationsAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result modifyCacheCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyCacheClusterAsync(array $args = [])
 * @method \Aws\Result modifyCacheParameterGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyCacheParameterGroupAsync(array $args = [])
 * @method \Aws\Result modifyCacheSubnetGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyCacheSubnetGroupAsync(array $args = [])
 * @method \Aws\Result modifyGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result modifyReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyReplicationGroupAsync(array $args = [])
 * @method \Aws\Result modifyReplicationGroupShardConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyReplicationGroupShardConfigurationAsync(array $args = [])
 * @method \Aws\Result modifyUser(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyUserAsync(array $args = [])
 * @method \Aws\Result modifyUserGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyUserGroupAsync(array $args = [])
 * @method \Aws\Result purchaseReservedCacheNodesOffering(array $args = [])
 * @method \GuzzleHttp\Promise\Promise purchaseReservedCacheNodesOfferingAsync(array $args = [])
 * @method \Aws\Result rebalanceSlotsInGlobalReplicationGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise rebalanceSlotsInGlobalReplicationGroupAsync(array $args = [])
 * @method \Aws\Result rebootCacheCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise rebootCacheClusterAsync(array $args = [])
 * @method \Aws\Result removeTagsFromResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeTagsFromResourceAsync(array $args = [])
 * @method \Aws\Result resetCacheParameterGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise resetCacheParameterGroupAsync(array $args = [])
 * @method \Aws\Result revokeCacheSecurityGroupIngress(array $args = [])
 * @method \GuzzleHttp\Promise\Promise revokeCacheSecurityGroupIngressAsync(array $args = [])
 * @method \Aws\Result startMigration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startMigrationAsync(array $args = [])
 * @method \Aws\Result testFailover(array $args = [])
 * @method \GuzzleHttp\Promise\Promise testFailoverAsync(array $args = [])
 */
class ElastiCacheClient extends AwsClient {}


<?php
namespace Aws\ElastiCache\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the Amazon ElastiCache service.
 */
class ElastiCacheException extends AwsException {}


<?php
namespace Aws\ElasticBeanstalk;

use Aws\AwsClient;

/**
 * This client is used to interact with the **AWS Elastic Beanstalk** service.
 *
 * @method \Aws\Result abortEnvironmentUpdate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise abortEnvironmentUpdateAsync(array $args = [])
 * @method \Aws\Result applyEnvironmentManagedAction(array $args = [])
 * @method \GuzzleHttp\Promise\Promise applyEnvironmentManagedActionAsync(array $args = [])
 * @method \Aws\Result associateEnvironmentOperationsRole(array $args = [])
 * @method \GuzzleHttp\Promise\Promise associateEnvironmentOperationsRoleAsync(array $args = [])
 * @method \Aws\Result checkDNSAvailability(array $args = [])
 * @method \GuzzleHttp\Promise\Promise checkDNSAvailabilityAsync(array $args = [])
 * @method \Aws\Result composeEnvironments(array $args = [])
 * @method \GuzzleHttp\Promise\Promise composeEnvironmentsAsync(array $args = [])
 * @method \Aws\Result createApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createApplicationAsync(array $args = [])
 * @method \Aws\Result createApplicationVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createApplicationVersionAsync(array $args = [])
 * @method \Aws\Result createConfigurationTemplate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createConfigurationTemplateAsync(array $args = [])
 * @method \Aws\Result createEnvironment(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createEnvironmentAsync(array $args = [])
 * @method \Aws\Result createPlatformVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createPlatformVersionAsync(array $args = [])
 * @method \Aws\Result createStorageLocation(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createStorageLocationAsync(array $args = [])
 * @method \Aws\Result deleteApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteApplicationAsync(array $args = [])
 * @method \Aws\Result deleteApplicationVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteApplicationVersionAsync(array $args = [])
 * @method \Aws\Result deleteConfigurationTemplate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteConfigurationTemplateAsync(array $args = [])
 * @method \Aws\Result deleteEnvironmentConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteEnvironmentConfigurationAsync(array $args = [])
 * @method \Aws\Result deletePlatformVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deletePlatformVersionAsync(array $args = [])
 * @method \Aws\Result describeAccountAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAccountAttributesAsync(array $args = [])
 * @method \Aws\Result describeApplicationVersions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeApplicationVersionsAsync(array $args = [])
 * @method \Aws\Result describeApplications(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeApplicationsAsync(array $args = [])
 * @method \Aws\Result describeConfigurationOptions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeConfigurationOptionsAsync(array $args = [])
 * @method \Aws\Result describeConfigurationSettings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeConfigurationSettingsAsync(array $args = [])
 * @method \Aws\Result describeEnvironmentHealth(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEnvironmentHealthAsync(array $args = [])
 * @method \Aws\Result describeEnvironmentManagedActionHistory(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEnvironmentManagedActionHistoryAsync(array $args = [])
 * @method \Aws\Result describeEnvironmentManagedActions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEnvironmentManagedActionsAsync(array $args = [])
 * @method \Aws\Result describeEnvironmentResources(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEnvironmentResourcesAsync(array $args = [])
 * @method \Aws\Result describeEnvironments(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEnvironmentsAsync(array $args = [])
 * @method \Aws\Result describeEvents(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeEventsAsync(array $args = [])
 * @method \Aws\Result describeInstancesHealth(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeInstancesHealthAsync(array $args = [])
 * @method \Aws\Result describePlatformVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describePlatformVersionAsync(array $args = [])
 * @method \Aws\Result disassociateEnvironmentOperationsRole(array $args = [])
 * @method \GuzzleHttp\Promise\Promise disassociateEnvironmentOperationsRoleAsync(array $args = [])
 * @method \Aws\Result listAvailableSolutionStacks(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listAvailableSolutionStacksAsync(array $args = [])
 * @method \Aws\Result listPlatformBranches(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listPlatformBranchesAsync(array $args = [])
 * @method \Aws\Result listPlatformVersions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listPlatformVersionsAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result rebuildEnvironment(array $args = [])
 * @method \GuzzleHttp\Promise\Promise rebuildEnvironmentAsync(array $args = [])
 * @method \Aws\Result requestEnvironmentInfo(array $args = [])
 * @method \GuzzleHttp\Promise\Promise requestEnvironmentInfoAsync(array $args = [])
 * @method \Aws\Result restartAppServer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise restartAppServerAsync(array $args = [])
 * @method \Aws\Result retrieveEnvironmentInfo(array $args = [])
 * @method \GuzzleHttp\Promise\Promise retrieveEnvironmentInfoAsync(array $args = [])
 * @method \Aws\Result swapEnvironmentCNAMEs(array $args = [])
 * @method \GuzzleHttp\Promise\Promise swapEnvironmentCNAMEsAsync(array $args = [])
 * @method \Aws\Result terminateEnvironment(array $args = [])
 * @method \GuzzleHttp\Promise\Promise terminateEnvironmentAsync(array $args = [])
 * @method \Aws\Result updateApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateApplicationAsync(array $args = [])
 * @method \Aws\Result updateApplicationResourceLifecycle(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateApplicationResourceLifecycleAsync(array $args = [])
 * @method \Aws\Result updateApplicationVersion(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateApplicationVersionAsync(array $args = [])
 * @method \Aws\Result updateConfigurationTemplate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateConfigurationTemplateAsync(array $args = [])
 * @method \Aws\Result updateEnvironment(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateEnvironmentAsync(array $args = [])
 * @method \Aws\Result updateTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateTagsForResourceAsync(array $args = [])
 * @method \Aws\Result validateConfigurationSettings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise validateConfigurationSettingsAsync(array $args = [])
 */
class ElasticBeanstalkClient extends AwsClient {}


<?php
namespace Aws\ElasticBeanstalk\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the AWS Elastic Beanstalk service.
 */
class ElasticBeanstalkException extends AwsException {}


<?php
namespace Aws\ElasticInference;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon Elastic  Inference** service.
 * @method \Aws\Result describeAcceleratorOfferings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAcceleratorOfferingsAsync(array $args = [])
 * @method \Aws\Result describeAcceleratorTypes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAcceleratorTypesAsync(array $args = [])
 * @method \Aws\Result describeAccelerators(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAcceleratorsAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 */
class ElasticInferenceClient extends AwsClient {}


<?php
namespace Aws\ElasticInference\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **Amazon Elastic  Inference** service.
 */
class ElasticInferenceException extends AwsException {}


<?php
namespace Aws\ElasticLoadBalancing;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Elastic Load Balancing** service.
 *
 * @method \Aws\Result addTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addTagsAsync(array $args = [])
 * @method \Aws\Result applySecurityGroupsToLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise applySecurityGroupsToLoadBalancerAsync(array $args = [])
 * @method \Aws\Result attachLoadBalancerToSubnets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise attachLoadBalancerToSubnetsAsync(array $args = [])
 * @method \Aws\Result configureHealthCheck(array $args = [])
 * @method \GuzzleHttp\Promise\Promise configureHealthCheckAsync(array $args = [])
 * @method \Aws\Result createAppCookieStickinessPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createAppCookieStickinessPolicyAsync(array $args = [])
 * @method \Aws\Result createLBCookieStickinessPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createLBCookieStickinessPolicyAsync(array $args = [])
 * @method \Aws\Result createLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createLoadBalancerAsync(array $args = [])
 * @method \Aws\Result createLoadBalancerListeners(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createLoadBalancerListenersAsync(array $args = [])
 * @method \Aws\Result createLoadBalancerPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createLoadBalancerPolicyAsync(array $args = [])
 * @method \Aws\Result deleteLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteLoadBalancerAsync(array $args = [])
 * @method \Aws\Result deleteLoadBalancerListeners(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteLoadBalancerListenersAsync(array $args = [])
 * @method \Aws\Result deleteLoadBalancerPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteLoadBalancerPolicyAsync(array $args = [])
 * @method \Aws\Result deregisterInstancesFromLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deregisterInstancesFromLoadBalancerAsync(array $args = [])
 * @method \Aws\Result describeAccountLimits(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAccountLimitsAsync(array $args = [])
 * @method \Aws\Result describeInstanceHealth(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeInstanceHealthAsync(array $args = [])
 * @method \Aws\Result describeLoadBalancerAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeLoadBalancerAttributesAsync(array $args = [])
 * @method \Aws\Result describeLoadBalancerPolicies(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeLoadBalancerPoliciesAsync(array $args = [])
 * @method \Aws\Result describeLoadBalancerPolicyTypes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeLoadBalancerPolicyTypesAsync(array $args = [])
 * @method \Aws\Result describeLoadBalancers(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeLoadBalancersAsync(array $args = [])
 * @method \Aws\Result describeTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTagsAsync(array $args = [])
 * @method \Aws\Result detachLoadBalancerFromSubnets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise detachLoadBalancerFromSubnetsAsync(array $args = [])
 * @method \Aws\Result disableAvailabilityZonesForLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise disableAvailabilityZonesForLoadBalancerAsync(array $args = [])
 * @method \Aws\Result enableAvailabilityZonesForLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise enableAvailabilityZonesForLoadBalancerAsync(array $args = [])
 * @method \Aws\Result modifyLoadBalancerAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyLoadBalancerAttributesAsync(array $args = [])
 * @method \Aws\Result registerInstancesWithLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise registerInstancesWithLoadBalancerAsync(array $args = [])
 * @method \Aws\Result removeTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeTagsAsync(array $args = [])
 * @method \Aws\Result setLoadBalancerListenerSSLCertificate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setLoadBalancerListenerSSLCertificateAsync(array $args = [])
 * @method \Aws\Result setLoadBalancerPoliciesForBackendServer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setLoadBalancerPoliciesForBackendServerAsync(array $args = [])
 * @method \Aws\Result setLoadBalancerPoliciesOfListener(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setLoadBalancerPoliciesOfListenerAsync(array $args = [])
 */
class ElasticLoadBalancingClient extends AwsClient {}


<?php
namespace Aws\ElasticLoadBalancing\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the Elastic Load Balancing service.
 */
class ElasticLoadBalancingException extends AwsException {}


<?php
namespace Aws\ElasticLoadBalancingV2;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Elastic Load Balancing** service.
 * @method \Aws\Result addListenerCertificates(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addListenerCertificatesAsync(array $args = [])
 * @method \Aws\Result addTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addTagsAsync(array $args = [])
 * @method \Aws\Result createListener(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createListenerAsync(array $args = [])
 * @method \Aws\Result createLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createLoadBalancerAsync(array $args = [])
 * @method \Aws\Result createRule(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createRuleAsync(array $args = [])
 * @method \Aws\Result createTargetGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createTargetGroupAsync(array $args = [])
 * @method \Aws\Result deleteListener(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteListenerAsync(array $args = [])
 * @method \Aws\Result deleteLoadBalancer(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteLoadBalancerAsync(array $args = [])
 * @method \Aws\Result deleteRule(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteRuleAsync(array $args = [])
 * @method \Aws\Result deleteTargetGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteTargetGroupAsync(array $args = [])
 * @method \Aws\Result deregisterTargets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deregisterTargetsAsync(array $args = [])
 * @method \Aws\Result describeAccountLimits(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeAccountLimitsAsync(array $args = [])
 * @method \Aws\Result describeListenerCertificates(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeListenerCertificatesAsync(array $args = [])
 * @method \Aws\Result describeListeners(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeListenersAsync(array $args = [])
 * @method \Aws\Result describeLoadBalancerAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeLoadBalancerAttributesAsync(array $args = [])
 * @method \Aws\Result describeLoadBalancers(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeLoadBalancersAsync(array $args = [])
 * @method \Aws\Result describeRules(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeRulesAsync(array $args = [])
 * @method \Aws\Result describeSSLPolicies(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeSSLPoliciesAsync(array $args = [])
 * @method \Aws\Result describeTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTagsAsync(array $args = [])
 * @method \Aws\Result describeTargetGroupAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTargetGroupAttributesAsync(array $args = [])
 * @method \Aws\Result describeTargetGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTargetGroupsAsync(array $args = [])
 * @method \Aws\Result describeTargetHealth(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeTargetHealthAsync(array $args = [])
 * @method \Aws\Result modifyListener(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyListenerAsync(array $args = [])
 * @method \Aws\Result modifyLoadBalancerAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyLoadBalancerAttributesAsync(array $args = [])
 * @method \Aws\Result modifyRule(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyRuleAsync(array $args = [])
 * @method \Aws\Result modifyTargetGroup(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyTargetGroupAsync(array $args = [])
 * @method \Aws\Result modifyTargetGroupAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyTargetGroupAttributesAsync(array $args = [])
 * @method \Aws\Result registerTargets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise registerTargetsAsync(array $args = [])
 * @method \Aws\Result removeListenerCertificates(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeListenerCertificatesAsync(array $args = [])
 * @method \Aws\Result removeTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeTagsAsync(array $args = [])
 * @method \Aws\Result setIpAddressType(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setIpAddressTypeAsync(array $args = [])
 * @method \Aws\Result setRulePriorities(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setRulePrioritiesAsync(array $args = [])
 * @method \Aws\Result setSecurityGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setSecurityGroupsAsync(array $args = [])
 * @method \Aws\Result setSubnets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setSubnetsAsync(array $args = [])
 */
class ElasticLoadBalancingV2Client extends AwsClient {}


<?php
namespace Aws\ElasticLoadBalancingV2\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **Elastic Load Balancing** service.
 */
class ElasticLoadBalancingV2Exception extends AwsException {}


<?php
namespace Aws\ElasticsearchService;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon Elasticsearch Service** service.
 *
 * @method \Aws\Result acceptInboundCrossClusterSearchConnection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise acceptInboundCrossClusterSearchConnectionAsync(array $args = [])
 * @method \Aws\Result addTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addTagsAsync(array $args = [])
 * @method \Aws\Result associatePackage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise associatePackageAsync(array $args = [])
 * @method \Aws\Result authorizeVpcEndpointAccess(array $args = [])
 * @method \GuzzleHttp\Promise\Promise authorizeVpcEndpointAccessAsync(array $args = [])
 * @method \Aws\Result cancelElasticsearchServiceSoftwareUpdate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise cancelElasticsearchServiceSoftwareUpdateAsync(array $args = [])
 * @method \Aws\Result createElasticsearchDomain(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createElasticsearchDomainAsync(array $args = [])
 * @method \Aws\Result createOutboundCrossClusterSearchConnection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createOutboundCrossClusterSearchConnectionAsync(array $args = [])
 * @method \Aws\Result createPackage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createPackageAsync(array $args = [])
 * @method \Aws\Result createVpcEndpoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createVpcEndpointAsync(array $args = [])
 * @method \Aws\Result deleteElasticsearchDomain(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteElasticsearchDomainAsync(array $args = [])
 * @method \Aws\Result deleteElasticsearchServiceRole(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteElasticsearchServiceRoleAsync(array $args = [])
 * @method \Aws\Result deleteInboundCrossClusterSearchConnection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteInboundCrossClusterSearchConnectionAsync(array $args = [])
 * @method \Aws\Result deleteOutboundCrossClusterSearchConnection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteOutboundCrossClusterSearchConnectionAsync(array $args = [])
 * @method \Aws\Result deletePackage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deletePackageAsync(array $args = [])
 * @method \Aws\Result deleteVpcEndpoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteVpcEndpointAsync(array $args = [])
 * @method \Aws\Result describeDomainAutoTunes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeDomainAutoTunesAsync(array $args = [])
 * @method \Aws\Result describeDomainChangeProgress(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeDomainChangeProgressAsync(array $args = [])
 * @method \Aws\Result describeElasticsearchDomain(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeElasticsearchDomainAsync(array $args = [])
 * @method \Aws\Result describeElasticsearchDomainConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeElasticsearchDomainConfigAsync(array $args = [])
 * @method \Aws\Result describeElasticsearchDomains(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeElasticsearchDomainsAsync(array $args = [])
 * @method \Aws\Result describeElasticsearchInstanceTypeLimits(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeElasticsearchInstanceTypeLimitsAsync(array $args = [])
 * @method \Aws\Result describeInboundCrossClusterSearchConnections(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeInboundCrossClusterSearchConnectionsAsync(array $args = [])
 * @method \Aws\Result describeOutboundCrossClusterSearchConnections(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeOutboundCrossClusterSearchConnectionsAsync(array $args = [])
 * @method \Aws\Result describePackages(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describePackagesAsync(array $args = [])
 * @method \Aws\Result describeReservedElasticsearchInstanceOfferings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeReservedElasticsearchInstanceOfferingsAsync(array $args = [])
 * @method \Aws\Result describeReservedElasticsearchInstances(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeReservedElasticsearchInstancesAsync(array $args = [])
 * @method \Aws\Result describeVpcEndpoints(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeVpcEndpointsAsync(array $args = [])
 * @method \Aws\Result dissociatePackage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise dissociatePackageAsync(array $args = [])
 * @method \Aws\Result getCompatibleElasticsearchVersions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getCompatibleElasticsearchVersionsAsync(array $args = [])
 * @method \Aws\Result getPackageVersionHistory(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getPackageVersionHistoryAsync(array $args = [])
 * @method \Aws\Result getUpgradeHistory(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getUpgradeHistoryAsync(array $args = [])
 * @method \Aws\Result getUpgradeStatus(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getUpgradeStatusAsync(array $args = [])
 * @method \Aws\Result listDomainNames(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listDomainNamesAsync(array $args = [])
 * @method \Aws\Result listDomainsForPackage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listDomainsForPackageAsync(array $args = [])
 * @method \Aws\Result listElasticsearchInstanceTypes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listElasticsearchInstanceTypesAsync(array $args = [])
 * @method \Aws\Result listElasticsearchVersions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listElasticsearchVersionsAsync(array $args = [])
 * @method \Aws\Result listPackagesForDomain(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listPackagesForDomainAsync(array $args = [])
 * @method \Aws\Result listTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsAsync(array $args = [])
 * @method \Aws\Result listVpcEndpointAccess(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listVpcEndpointAccessAsync(array $args = [])
 * @method \Aws\Result listVpcEndpoints(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listVpcEndpointsAsync(array $args = [])
 * @method \Aws\Result listVpcEndpointsForDomain(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listVpcEndpointsForDomainAsync(array $args = [])
 * @method \Aws\Result purchaseReservedElasticsearchInstanceOffering(array $args = [])
 * @method \GuzzleHttp\Promise\Promise purchaseReservedElasticsearchInstanceOfferingAsync(array $args = [])
 * @method \Aws\Result rejectInboundCrossClusterSearchConnection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise rejectInboundCrossClusterSearchConnectionAsync(array $args = [])
 * @method \Aws\Result removeTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeTagsAsync(array $args = [])
 * @method \Aws\Result revokeVpcEndpointAccess(array $args = [])
 * @method \GuzzleHttp\Promise\Promise revokeVpcEndpointAccessAsync(array $args = [])
 * @method \Aws\Result startElasticsearchServiceSoftwareUpdate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startElasticsearchServiceSoftwareUpdateAsync(array $args = [])
 * @method \Aws\Result updateElasticsearchDomainConfig(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateElasticsearchDomainConfigAsync(array $args = [])
 * @method \Aws\Result updatePackage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updatePackageAsync(array $args = [])
 * @method \Aws\Result updateVpcEndpoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateVpcEndpointAsync(array $args = [])
 * @method \Aws\Result upgradeElasticsearchDomain(array $args = [])
 * @method \GuzzleHttp\Promise\Promise upgradeElasticsearchDomainAsync(array $args = [])
 */
class ElasticsearchServiceClient extends AwsClient {}


<?php
namespace Aws\ElasticsearchService\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **Amazon Elasticsearch Service** service.
 */
class ElasticsearchServiceException extends AwsException {}


<?php
namespace Aws\ElasticTranscoder;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon Elastic Transcoder** service.
 *
 * @method \Aws\Result cancelJob(array $args = [])
 * @method \GuzzleHttp\Promise\Promise cancelJobAsync(array $args = [])
 * @method \Aws\Result createJob(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createJobAsync(array $args = [])
 * @method \Aws\Result createPipeline(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createPipelineAsync(array $args = [])
 * @method \Aws\Result createPreset(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createPresetAsync(array $args = [])
 * @method \Aws\Result deletePipeline(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deletePipelineAsync(array $args = [])
 * @method \Aws\Result deletePreset(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deletePresetAsync(array $args = [])
 * @method \Aws\Result listJobsByPipeline(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listJobsByPipelineAsync(array $args = [])
 * @method \Aws\Result listJobsByStatus(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listJobsByStatusAsync(array $args = [])
 * @method \Aws\Result listPipelines(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listPipelinesAsync(array $args = [])
 * @method \Aws\Result listPresets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listPresetsAsync(array $args = [])
 * @method \Aws\Result readJob(array $args = [])
 * @method \GuzzleHttp\Promise\Promise readJobAsync(array $args = [])
 * @method \Aws\Result readPipeline(array $args = [])
 * @method \GuzzleHttp\Promise\Promise readPipelineAsync(array $args = [])
 * @method \Aws\Result readPreset(array $args = [])
 * @method \GuzzleHttp\Promise\Promise readPresetAsync(array $args = [])
 * @method \Aws\Result testRole(array $args = [])
 * @method \GuzzleHttp\Promise\Promise testRoleAsync(array $args = [])
 * @method \Aws\Result updatePipeline(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updatePipelineAsync(array $args = [])
 * @method \Aws\Result updatePipelineNotifications(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updatePipelineNotificationsAsync(array $args = [])
 * @method \Aws\Result updatePipelineStatus(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updatePipelineStatusAsync(array $args = [])
 */
class ElasticTranscoderClient extends AwsClient {}


<?php
namespace Aws\ElasticTranscoder\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the Amazon Elastic Transcoder service.
 */
class ElasticTranscoderException extends AwsException {}


<?php
namespace Aws\Emr;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon Elastic MapReduce (Amazon EMR)** service.
 *
 * @method \Aws\Result addInstanceFleet(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addInstanceFleetAsync(array $args = [])
 * @method \Aws\Result addInstanceGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addInstanceGroupsAsync(array $args = [])
 * @method \Aws\Result addJobFlowSteps(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addJobFlowStepsAsync(array $args = [])
 * @method \Aws\Result addTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addTagsAsync(array $args = [])
 * @method \Aws\Result cancelSteps(array $args = [])
 * @method \GuzzleHttp\Promise\Promise cancelStepsAsync(array $args = [])
 * @method \Aws\Result createSecurityConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createSecurityConfigurationAsync(array $args = [])
 * @method \Aws\Result createStudio(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createStudioAsync(array $args = [])
 * @method \Aws\Result createStudioSessionMapping(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createStudioSessionMappingAsync(array $args = [])
 * @method \Aws\Result deleteSecurityConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteSecurityConfigurationAsync(array $args = [])
 * @method \Aws\Result deleteStudio(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteStudioAsync(array $args = [])
 * @method \Aws\Result deleteStudioSessionMapping(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteStudioSessionMappingAsync(array $args = [])
 * @method \Aws\Result describeCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeClusterAsync(array $args = [])
 * @method \Aws\Result describeJobFlows(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeJobFlowsAsync(array $args = [])
 * @method \Aws\Result describeNotebookExecution(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeNotebookExecutionAsync(array $args = [])
 * @method \Aws\Result describeReleaseLabel(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeReleaseLabelAsync(array $args = [])
 * @method \Aws\Result describeSecurityConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeSecurityConfigurationAsync(array $args = [])
 * @method \Aws\Result describeStep(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeStepAsync(array $args = [])
 * @method \Aws\Result describeStudio(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeStudioAsync(array $args = [])
 * @method \Aws\Result getAutoTerminationPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getAutoTerminationPolicyAsync(array $args = [])
 * @method \Aws\Result getBlockPublicAccessConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getBlockPublicAccessConfigurationAsync(array $args = [])
 * @method \Aws\Result getClusterSessionCredentials(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getClusterSessionCredentialsAsync(array $args = [])
 * @method \Aws\Result getManagedScalingPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getManagedScalingPolicyAsync(array $args = [])
 * @method \Aws\Result getStudioSessionMapping(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getStudioSessionMappingAsync(array $args = [])
 * @method \Aws\Result listBootstrapActions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listBootstrapActionsAsync(array $args = [])
 * @method \Aws\Result listClusters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = [])
 * @method \Aws\Result listInstanceFleets(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listInstanceFleetsAsync(array $args = [])
 * @method \Aws\Result listInstanceGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listInstanceGroupsAsync(array $args = [])
 * @method \Aws\Result listInstances(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listInstancesAsync(array $args = [])
 * @method \Aws\Result listNotebookExecutions(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listNotebookExecutionsAsync(array $args = [])
 * @method \Aws\Result listReleaseLabels(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listReleaseLabelsAsync(array $args = [])
 * @method \Aws\Result listSecurityConfigurations(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listSecurityConfigurationsAsync(array $args = [])
 * @method \Aws\Result listSteps(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listStepsAsync(array $args = [])
 * @method \Aws\Result listStudioSessionMappings(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listStudioSessionMappingsAsync(array $args = [])
 * @method \Aws\Result listStudios(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listStudiosAsync(array $args = [])
 * @method \Aws\Result listSupportedInstanceTypes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listSupportedInstanceTypesAsync(array $args = [])
 * @method \Aws\Result modifyCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyClusterAsync(array $args = [])
 * @method \Aws\Result modifyInstanceFleet(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyInstanceFleetAsync(array $args = [])
 * @method \Aws\Result modifyInstanceGroups(array $args = [])
 * @method \GuzzleHttp\Promise\Promise modifyInstanceGroupsAsync(array $args = [])
 * @method \Aws\Result putAutoScalingPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putAutoScalingPolicyAsync(array $args = [])
 * @method \Aws\Result putAutoTerminationPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putAutoTerminationPolicyAsync(array $args = [])
 * @method \Aws\Result putBlockPublicAccessConfiguration(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putBlockPublicAccessConfigurationAsync(array $args = [])
 * @method \Aws\Result putManagedScalingPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise putManagedScalingPolicyAsync(array $args = [])
 * @method \Aws\Result removeAutoScalingPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeAutoScalingPolicyAsync(array $args = [])
 * @method \Aws\Result removeAutoTerminationPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeAutoTerminationPolicyAsync(array $args = [])
 * @method \Aws\Result removeManagedScalingPolicy(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeManagedScalingPolicyAsync(array $args = [])
 * @method \Aws\Result removeTags(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removeTagsAsync(array $args = [])
 * @method \Aws\Result runJobFlow(array $args = [])
 * @method \GuzzleHttp\Promise\Promise runJobFlowAsync(array $args = [])
 * @method \Aws\Result setTerminationProtection(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setTerminationProtectionAsync(array $args = [])
 * @method \Aws\Result setVisibleToAllUsers(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setVisibleToAllUsersAsync(array $args = [])
 * @method \Aws\Result startNotebookExecution(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startNotebookExecutionAsync(array $args = [])
 * @method \Aws\Result stopNotebookExecution(array $args = [])
 * @method \GuzzleHttp\Promise\Promise stopNotebookExecutionAsync(array $args = [])
 * @method \Aws\Result terminateJobFlows(array $args = [])
 * @method \GuzzleHttp\Promise\Promise terminateJobFlowsAsync(array $args = [])
 * @method \Aws\Result updateStudio(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateStudioAsync(array $args = [])
 * @method \Aws\Result updateStudioSessionMapping(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateStudioSessionMappingAsync(array $args = [])
 */
class EmrClient extends AwsClient {}


<?php
namespace Aws\Emr\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the Amazon Elastic MapReduce service.
 */
class EmrException extends AwsException {}


<?php
namespace Aws\EMRContainers;

use Aws\AwsClient;

/**
 * This client is used to interact with the **Amazon EMR Containers** service.
 * @method \Aws\Result cancelJobRun(array $args = [])
 * @method \GuzzleHttp\Promise\Promise cancelJobRunAsync(array $args = [])
 * @method \Aws\Result createJobTemplate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createJobTemplateAsync(array $args = [])
 * @method \Aws\Result createManagedEndpoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createManagedEndpointAsync(array $args = [])
 * @method \Aws\Result createVirtualCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createVirtualClusterAsync(array $args = [])
 * @method \Aws\Result deleteJobTemplate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteJobTemplateAsync(array $args = [])
 * @method \Aws\Result deleteManagedEndpoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteManagedEndpointAsync(array $args = [])
 * @method \Aws\Result deleteVirtualCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteVirtualClusterAsync(array $args = [])
 * @method \Aws\Result describeJobRun(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeJobRunAsync(array $args = [])
 * @method \Aws\Result describeJobTemplate(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeJobTemplateAsync(array $args = [])
 * @method \Aws\Result describeManagedEndpoint(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeManagedEndpointAsync(array $args = [])
 * @method \Aws\Result describeVirtualCluster(array $args = [])
 * @method \GuzzleHttp\Promise\Promise describeVirtualClusterAsync(array $args = [])
 * @method \Aws\Result getManagedEndpointSessionCredentials(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getManagedEndpointSessionCredentialsAsync(array $args = [])
 * @method \Aws\Result listJobRuns(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listJobRunsAsync(array $args = [])
 * @method \Aws\Result listJobTemplates(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listJobTemplatesAsync(array $args = [])
 * @method \Aws\Result listManagedEndpoints(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listManagedEndpointsAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result listVirtualClusters(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listVirtualClustersAsync(array $args = [])
 * @method \Aws\Result startJobRun(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startJobRunAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 */
class EMRContainersClient extends AwsClient {}


<?php
namespace Aws\EMRContainers\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **Amazon EMR Containers** service.
 */
class EMRContainersException extends AwsException {}


<?php
namespace Aws\EMRServerless;

use Aws\AwsClient;

/**
 * This client is used to interact with the **EMR Serverless** service.
 * @method \Aws\Result cancelJobRun(array $args = [])
 * @method \GuzzleHttp\Promise\Promise cancelJobRunAsync(array $args = [])
 * @method \Aws\Result createApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createApplicationAsync(array $args = [])
 * @method \Aws\Result deleteApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteApplicationAsync(array $args = [])
 * @method \Aws\Result getApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getApplicationAsync(array $args = [])
 * @method \Aws\Result getDashboardForJobRun(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getDashboardForJobRunAsync(array $args = [])
 * @method \Aws\Result getJobRun(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getJobRunAsync(array $args = [])
 * @method \Aws\Result listApplications(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listApplicationsAsync(array $args = [])
 * @method \Aws\Result listJobRuns(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listJobRunsAsync(array $args = [])
 * @method \Aws\Result listTagsForResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
 * @method \Aws\Result startApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startApplicationAsync(array $args = [])
 * @method \Aws\Result startJobRun(array $args = [])
 * @method \GuzzleHttp\Promise\Promise startJobRunAsync(array $args = [])
 * @method \Aws\Result stopApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise stopApplicationAsync(array $args = [])
 * @method \Aws\Result tagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
 * @method \Aws\Result untagResource(array $args = [])
 * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
 * @method \Aws\Result updateApplication(array $args = [])
 * @method \GuzzleHttp\Promise\Promise updateApplicationAsync(array $args = [])
 */
class EMRServerlessClient extends AwsClient {}


<?php
namespace Aws\EMRServerless\Exception;

use Aws\Exception\AwsException;

/**
 * Represents an error interacting with the **EMR Serverless** service.
 */
class EMRServerlessException extends AwsException {}


<?php
namespace Aws\Endpoint;

use Aws\Exception\UnresolvedEndpointException;

/**
 * Endpoint providers.
 *
 * An endpoint provider is a function that accepts a hash of endpoint options,
 * including but not limited to "service" and "region" key value pairs. The
 * endpoint provider function returns a hash of endpoint data, which MUST
 * include an "endpoint" key value pair that represents the resolved endpoint
 * or NULL if an endpoint cannot be determined.
 *
 * You can wrap your calls to an endpoint provider with the
 * {@see EndpointProvider::resolve} function to ensure that an endpoint hash is
 * created. If an endpoint hash is not created, then the resolve() function
 * will throw an {@see Aws\Exception\UnresolvedEndpointException}.
 *
 *     use Aws\Endpoint\EndpointProvider;
 *     $provider = EndpointProvider::defaultProvider();
 *     // Returns an array or NULL.
 *     $endpoint = $provider(['service' => 'ec2', 'region' => 'us-west-2']);
 *     // Returns an endpoint array or throws.
 *     $endpoint = EndpointProvider::resolve($provider, [
 *         'service' => 'ec2',
 *         'region'  => 'us-west-2'
 *     ]);
 *
 * You can compose multiple providers into a single provider using
 * {@see Aws\or_chain}. This function accepts providers as arguments and
 * returns a new function that will invoke each provider until a non-null value
 * is returned.
 *
 *     $a = function (array $args) {
 *         if ($args['region'] === 'my-test-region') {
 *             return ['endpoint' => 'http://localhost:123/api'];
 *         }
 *     };
 *     $b = EndpointProvider::defaultProvider();
 *     $c = \Aws\or_chain($a, $b);
 *     $config = ['service' => 'ec2', 'region' => 'my-test-region'];
 *     $res = $c($config);  // $a handles this.
 *     $config['region'] = 'us-west-2';
 *     $res = $c($config); // $b handles this.
 */
class EndpointProvider
{
    /**
     * Resolves and endpoint provider and ensures a non-null return value.
     *
     * @param callable $provider Provider function to invoke.
     * @param array    $args     Endpoint arguments to pass to the provider.
     *
     * @return array
     * @throws UnresolvedEndpointException
     */
    public static function resolve(callable $provider, array $args = [])
    {
        $result = $provider($args);
        if (is_array($result)) {
            return $result;
        }

        throw new UnresolvedEndpointException(
            'Unable to resolve an endpoint using the provider arguments: '
            . json_encode($args) . '. Note: you can provide an "endpoint" '
            . 'option to a client constructor to bypass invoking an endpoint '
            . 'provider.');
    }

    /**
     * Creates and returns the default SDK endpoint provider.
     *
     * @deprecated Use an instance of \Aws\Endpoint\Partition instead.
     *
     * @return callable
     */
    public static function defaultProvider()
    {
        return PartitionEndpointProvider::defaultProvider();
    }

    /**
     * Creates and returns an endpoint provider that uses patterns from an
     * array.
     *
     * @param array $patterns Endpoint patterns
     *
     * @return callable
     */
    public static function patterns(array $patterns)
    {
        return new PatternEndpointProvider($patterns);
    }
}


<?php
namespace Aws\Endpoint;

use ArrayAccess;
use Aws\HasDataTrait;
use Aws\Sts\RegionalEndpoints\ConfigurationProvider;
use Aws\S3\RegionalEndpoint\ConfigurationProvider as S3ConfigurationProvider;
use InvalidArgumentException as Iae;

/**
 * Default implementation of an AWS partition.
 */
final class Partition implements ArrayAccess, PartitionInterface
{
    use HasDataTrait;

    private $stsLegacyGlobalRegions = [
        'ap-northeast-1',
        'ap-south-1',
        'ap-southeast-1',
        'ap-southeast-2',
        'aws-global',
        'ca-central-1',
        'eu-central-1',
        'eu-north-1',
        'eu-west-1',
        'eu-west-2',
        'eu-west-3',
        'sa-east-1',
        'us-east-1',
        'us-east-2',
        'us-west-1',
        'us-west-2',
    ];

    /**
     * The partition constructor accepts the following options:
     *
     * - `partition`: (string, required) The partition name as specified in an
     *   ARN (e.g., `aws`)
     * - `partitionName`: (string) The human readable name of the partition
     *   (e.g., "AWS Standard")
     * - `dnsSuffix`: (string, required) The DNS suffix of the partition. This
     *   value is used to determine how endpoints in the partition are resolved.
     * - `regionRegex`: (string) A PCRE regular expression that specifies the
     *   pattern that region names in the endpoint adhere to.
     * - `regions`: (array, required) A map of the regions in the partition.
     *   Each key is the region as present in a hostname (e.g., `us-east-1`),
     *   and each value is a structure containing region information.
     * - `defaults`: (array) A map of default key value pairs to apply to each
     *   endpoint of the partition. Any value in an `endpoint` definition will
     *   supersede any values specified in `defaults`.
     * - `services`: (array, required) A map of service endpoint prefix name
     *   (the value found in a hostname) to information about the service.
     *
     * @param array $definition
     *
     * @throws Iae if any required options are missing
     */
    public function __construct(array $definition)
    {
        foreach (['partition', 'regions', 'services', 'dnsSuffix'] as $key) {
            if (!isset($definition[$key])) {
                throw new Iae("Partition missing required $key field");
            }
        }

        $this->data = $definition;
    }

    public function getName()
    {
        return $this->data['partition'];
    }

    /**
     * @internal
     * @return mixed
     */
    public function getDnsSuffix()
    {
        return $this->data['dnsSuffix'];
    }

    public function isRegionMatch($region, $service)
    {
        if (isset($this->data['regions'][$region])
            || isset($this->data['services'][$service]['endpoints'][$region])
        ) {
            return true;
        }

        if (isset($this->data['regionRegex'])) {
            return (bool) preg_match(
                "@{$this->data['regionRegex']}@",
                $region
            );
        }

        return false;
    }

    public function getAvailableEndpoints(
        $service,
        $allowNonRegionalEndpoints = false
    ) {
        if ($this->isServicePartitionGlobal($service)) {
            return [$this->getPartitionEndpoint($service)];
        }

        if (isset($this->data['services'][$service]['endpoints'])) {
            $serviceRegions = array_keys(
                $this->data['services'][$service]['endpoints']
            );

            return $allowNonRegionalEndpoints
                ? $serviceRegions
                : array_intersect($serviceRegions, array_keys(
                    $this->data['regions']
                ));
        }

        return [];
    }

    public function __invoke(array $args = [])
    {
        $service = isset($args['service']) ? $args['service'] : '';
        $region = isset($args['region']) ? $args['region'] : '';
        $scheme = isset($args['scheme']) ? $args['scheme'] : 'https';
        $options = isset($args['options']) ? $args['options'] : [];
        $data = $this->getEndpointData($service, $region, $options);
        $variant = $this->getVariant($options, $data);
        if (isset($variant['hostname'])) {
            $template = $variant['hostname'];
        } else {
            $template = isset($data['hostname']) ? $data['hostname'] : '';
        }
        $dnsSuffix = isset($variant['dnsSuffix'])
            ? $variant['dnsSuffix']
            : $this->data['dnsSuffix'];
        return [
            'endpoint' => "{$scheme}://" . $this->formatEndpoint(
                    $template,
                    $service,
                    $region,
                    $dnsSuffix
                ),
            'signatureVersion' => $this->getSignatureVersion($data),
            'signingRegion' => isset($data['credentialScope']['region'])
                ? $data['credentialScope']['region']
                : $region,
            'signingName' => isset($data['credentialScope']['service'])
                ? $data['credentialScope']['service']
                : $service,
        ];
    }

    private function getEndpointData($service, $region, $options)
    {
        $defaultRegion = $this->resolveRegion($service, $region, $options);
        $data = isset($this->data['services'][$service]['endpoints'][$defaultRegion])
            ? $this->data['services'][$service]['endpoints'][$defaultRegion]
            : [];
        $data += isset($this->data['services'][$service]['defaults'])
            ? $this->data['services'][$service]['defaults']
            : [];
        $data += isset($this->data['defaults'])
            ? $this->data['defaults']
            : [];

        return $data;
    }

    private function getSignatureVersion(array $data)
    {
        static $supportedBySdk = [
            's3v4',
            'v4',
            'anonymous',
        ];

        $possibilities = array_intersect(
            $supportedBySdk,
            isset($data['signatureVersions'])
                ? $data['signatureVersions']
                : ['v4']
        );

        return array_shift($possibilities);
    }

    private function resolveRegion($service, $region, $options)
    {
        if (isset($this->data['services'][$service]['endpoints'][$region])
            && $this->isFipsEndpointUsed($region)
        ) {
            return $region;
        }

        if ($this->isServicePartitionGlobal($service)
            || $this->isStsLegacyEndpointUsed($service, $region, $options)
            || $this->isS3LegacyEndpointUsed($service, $region, $options)
        ) {
            return $this->getPartitionEndpoint($service);
        }

        return $region;
    }

    private function isServicePartitionGlobal($service)
    {
        return isset($this->data['services'][$service]['isRegionalized'])
            && false === $this->data['services'][$service]['isRegionalized']
            && isset($this->data['services'][$service]['partitionEndpoint']);
    }

    /**
     * STS legacy endpoints used for valid regions unless option is explicitly
     * set to 'regional'
     *
     * @param string $service
     * @param string $region
     * @param array $options
     * @return bool
     */
    private function isStsLegacyEndpointUsed($service, $region, $options)
    {
        return $service === 'sts'
            && in_array($region, $this->stsLegacyGlobalRegions)
            && (empty($options['sts_regional_endpoints'])
                || ConfigurationProvider::unwrap(
                    $options['sts_regional_endpoints']
                )->getEndpointsType() !== 'regional'
            );
    }

    /**
     * S3 legacy us-east-1 endpoint used for valid regions unless option is explicitly
     * set to 'regional'
     *
     * @param string $service
     * @param string $region
     * @param array $options
     * @return bool
     */
    private function isS3LegacyEndpointUsed($service, $region, $options)
    {
        return $service === 's3'
            && $region === 'us-east-1'
            && (empty($options['s3_us_east_1_regional_endpoint'])
                || S3ConfigurationProvider::unwrap(
                    $options['s3_us_east_1_regional_endpoint']
                )->getEndpointsType() !== 'regional'
            );
    }

    private function getPartitionEndpoint($service)
    {
        return $this->data['services'][$service]['partitionEndpoint'];
    }

    private function formatEndpoint($template, $service, $region, $dnsSuffix)
    {
        return strtr($template, [
            '{service}' => $service,
            '{region}' => $region,
            '{dnsSuffix}' => $dnsSuffix,
        ]);
    }

    /**
     * @param $region
     * @return bool
     */
    private function isFipsEndpointUsed($region)
    {
        return strpos($region, "fips") !== false;
    }

    /**
     * @param array $options
     * @param array $data
     * @return array
     */
    private function getVariant(array $options, array $data)
    {
        $variantTags = [];
        if (isset($options['use_fips_endpoint'])) {
            $useFips = $options['use_fips_endpoint'];
            if (is_bool($useFips)) {
                $useFips && $variantTags[] = 'fips';
            } elseif ($useFips->isUseFipsEndpoint()) {
                $variantTags[] = 'fips';
            }
        }
        if (isset($options['use_dual_stack_endpoint'])) {
            $useDualStack = $options['use_dual_stack_endpoint'];
            if (is_bool($useDualStack)) {
                $useDualStack && $variantTags[] = 'dualstack';
            } elseif ($useDualStack->isUseDualStackEndpoint()) {
                $variantTags[] = 'dualstack';
            }
        }
        if (!empty($variantTags)) {
            if (isset($data['variants'])) {
                foreach ($data['variants'] as $variant) {
                    if (array_count_values($variant['tags']) == array_count_values($variantTags)) {
                        return $variant;
                    }
                }
            }
            if (isset($this->data['defaults']['variants'])) {
                foreach ($this->data['defaults']['variants'] as $variant) {
                    if (array_count_values($variant['tags']) == array_count_values($variantTags)) {
                        return $variant;
                    }
                }
            }
        }
    }
}