<?php return [
  'service' => [
    'actions' => [
      'ChangePassword' => [
        'request' => [
          'operation' => 'ChangePassword',
        ],
      ],
      'CreateAccountAlias' => [
        'request' => [
          'operation' => 'CreateAccountAlias',
        ],
      ],
      'CreateAccountPasswordPolicy' => [
        'request' => [
          'operation' => 'UpdateAccountPasswordPolicy',
        ],
        'resource' => [
          'type' => 'AccountPasswordPolicy',
          'identifiers' => [
          ],
        ],
      ],
      'CreateGroup' => [
        'request' => [
          'operation' => 'CreateGroup',
        ],
        'resource' => [
          'type' => 'Group',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'requestParameter',
              'path' => 'GroupName',
            ],
          ],
          'path' => 'Group',
        ],
      ],
      'CreateInstanceProfile' => [
        'request' => [
          'operation' => 'CreateInstanceProfile',
        ],
        'resource' => [
          'type' => 'InstanceProfile',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'requestParameter',
              'path' => 'InstanceProfileName',
            ],
          ],
          'path' => 'InstanceProfile',
        ],
      ],
      'CreatePolicy' => [
        'request' => [
          'operation' => 'CreatePolicy',
        ],
        'resource' => [
          'type' => 'Policy',
          'identifiers' => [
            [
              'target' => 'Arn',
              'source' => 'response',
              'path' => 'Policy.Arn',
            ],
          ],
        ],
      ],
      'CreateRole' => [
        'request' => [
          'operation' => 'CreateRole',
        ],
        'resource' => [
          'type' => 'Role',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'requestParameter',
              'path' => 'RoleName',
            ],
          ],
          'path' => 'Role',
        ],
      ],
      'CreateSamlProvider' => [
        'request' => [
          'operation' => 'CreateSAMLProvider',
        ],
        'resource' => [
          'type' => 'SamlProvider',
          'identifiers' => [
            [
              'target' => 'Arn',
              'source' => 'response',
              'path' => 'SAMLProviderArn',
            ],
          ],
        ],
      ],
      'CreateServerCertificate' => [
        'request' => [
          'operation' => 'UploadServerCertificate',
        ],
        'resource' => [
          'type' => 'ServerCertificate',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'requestParameter',
              'path' => 'ServerCertificateName',
            ],
          ],
        ],
      ],
      'CreateSigningCertificate' => [
        'request' => [
          'operation' => 'UploadSigningCertificate',
        ],
        'resource' => [
          'type' => 'SigningCertificate',
          'identifiers' => [
            [
              'target' => 'Id',
              'source' => 'response',
              'path' => 'Certificate.CertificateId',
            ],
          ],
          'path' => 'Certificate',
        ],
      ],
      'CreateUser' => [
        'request' => [
          'operation' => 'CreateUser',
        ],
        'resource' => [
          'type' => 'User',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'requestParameter',
              'path' => 'UserName',
            ],
          ],
          'path' => 'User',
        ],
      ],
      'CreateVirtualMfaDevice' => [
        'request' => [
          'operation' => 'CreateVirtualMFADevice',
        ],
        'resource' => [
          'type' => 'VirtualMfaDevice',
          'identifiers' => [
            [
              'target' => 'SerialNumber',
              'source' => 'response',
              'path' => 'VirtualMFADevice.SerialNumber',
            ],
          ],
          'path' => 'VirtualMFADevice',
        ],
      ],
    ],
    'has' => [
      'AccountPasswordPolicy' => [
        'resource' => [
          'type' => 'AccountPasswordPolicy',
          'identifiers' => [
          ],
        ],
      ],
      'AccountSummary' => [
        'resource' => [
          'type' => 'AccountSummary',
          'identifiers' => [
          ],
        ],
      ],
      'CurrentUser' => [
        'resource' => [
          'type' => 'CurrentUser',
          'identifiers' => [
          ],
        ],
      ],
      'Group' => [
        'resource' => [
          'type' => 'Group',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'input',
            ],
          ],
        ],
      ],
      'InstanceProfile' => [
        'resource' => [
          'type' => 'InstanceProfile',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'input',
            ],
          ],
        ],
      ],
      'Policy' => [
        'resource' => [
          'type' => 'Policy',
          'identifiers' => [
            [
              'target' => 'Arn',
              'source' => 'input',
            ],
          ],
        ],
      ],
      'Role' => [
        'resource' => [
          'type' => 'Role',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'input',
            ],
          ],
        ],
      ],
      'SamlProvider' => [
        'resource' => [
          'type' => 'SamlProvider',
          'identifiers' => [
            [
              'target' => 'Arn',
              'source' => 'input',
            ],
          ],
        ],
      ],
      'ServerCertificate' => [
        'resource' => [
          'type' => 'ServerCertificate',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'input',
            ],
          ],
        ],
      ],
      'User' => [
        'resource' => [
          'type' => 'User',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'input',
            ],
          ],
        ],
      ],
      'VirtualMfaDevice' => [
        'resource' => [
          'type' => 'VirtualMfaDevice',
          'identifiers' => [
            [
              'target' => 'SerialNumber',
              'source' => 'input',
            ],
          ],
        ],
      ],
    ],
    'hasMany' => [
      'Groups' => [
        'request' => [
          'operation' => 'ListGroups',
        ],
        'resource' => [
          'type' => 'Group',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'response',
              'path' => 'Groups[].GroupName',
            ],
          ],
          'path' => 'Groups[]',
        ],
      ],
      'InstanceProfiles' => [
        'request' => [
          'operation' => 'ListInstanceProfiles',
        ],
        'resource' => [
          'type' => 'InstanceProfile',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'response',
              'path' => 'InstanceProfiles[].InstanceProfileName',
            ],
          ],
          'path' => 'InstanceProfiles[]',
        ],
      ],
      'Policies' => [
        'request' => [
          'operation' => 'ListPolicies',
        ],
        'resource' => [
          'type' => 'Policy',
          'identifiers' => [
            [
              'target' => 'Arn',
              'source' => 'response',
              'path' => 'Policies[].Arn',
            ],
          ],
          'path' => 'Policies[]',
        ],
      ],
      'Roles' => [
        'request' => [
          'operation' => 'ListRoles',
        ],
        'resource' => [
          'type' => 'Role',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'response',
              'path' => 'Roles[].RoleName',
            ],
          ],
          'path' => 'Roles[]',
        ],
      ],
      'SamlProviders' => [
        'request' => [
          'operation' => 'ListSAMLProviders',
        ],
        'resource' => [
          'type' => 'SamlProvider',
          'identifiers' => [
            [
              'target' => 'Arn',
              'source' => 'response',
              'path' => 'SAMLProviderList[].Arn',
            ],
          ],
        ],
      ],
      'ServerCertificates' => [
        'request' => [
          'operation' => 'ListServerCertificates',
        ],
        'resource' => [
          'type' => 'ServerCertificate',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'response',
              'path' => 'ServerCertificateMetadataList[].ServerCertificateName',
            ],
          ],
        ],
      ],
      'Users' => [
        'request' => [
          'operation' => 'ListUsers',
        ],
        'resource' => [
          'type' => 'User',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'response',
              'path' => 'Users[].UserName',
            ],
          ],
          'path' => 'Users[]',
        ],
      ],
      'VirtualMfaDevices' => [
        'request' => [
          'operation' => 'ListVirtualMFADevices',
        ],
        'resource' => [
          'type' => 'VirtualMfaDevice',
          'identifiers' => [
            [
              'target' => 'SerialNumber',
              'source' => 'response',
              'path' => 'VirtualMFADevices[].SerialNumber',
            ],
          ],
          'path' => 'VirtualMFADevices[]',
        ],
      ],
    ],
  ],
  'resources' => [
    'AccessKey' => [
      'identifiers' => [
        [
          'name' => 'UserName',
          'memberName' => 'UserName',
        ],
        [
          'name' => 'Id',
          'memberName' => 'AccessKeyId',
        ],
      ],
      'shape' => 'AccessKeyMetadata',
      'actions' => [
        'Activate' => [
          'request' => [
            'operation' => 'UpdateAccessKey',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'AccessKeyId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Status',
                'source' => 'string',
                'value' => 'Active',
              ],
            ],
          ],
        ],
        'Deactivate' => [
          'request' => [
            'operation' => 'UpdateAccessKey',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'AccessKeyId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Status',
                'source' => 'string',
                'value' => 'Inactive',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteAccessKey',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'AccessKeyId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'User' => [
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
        ],
      ],
    ],
    'AccessKeyPair' => [
      'identifiers' => [
        [
          'name' => 'UserName',
          'memberName' => 'UserName',
        ],
        [
          'name' => 'Id',
          'memberName' => 'AccessKeyId',
        ],
        [
          'name' => 'Secret',
          'memberName' => 'SecretAccessKey',
        ],
      ],
      'shape' => 'AccessKey',
      'actions' => [
        'Activate' => [
          'request' => [
            'operation' => 'UpdateAccessKey',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'AccessKeyId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Status',
                'source' => 'string',
                'value' => 'Active',
              ],
            ],
          ],
        ],
        'Deactivate' => [
          'request' => [
            'operation' => 'UpdateAccessKey',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'AccessKeyId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Status',
                'source' => 'string',
                'value' => 'Inactive',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteAccessKey',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'AccessKeyId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
      ],
    ],
    'AccountPasswordPolicy' => [
      'identifiers' => [
      ],
      'shape' => 'PasswordPolicy',
      'load' => [
        'request' => [
          'operation' => 'GetAccountPasswordPolicy',
        ],
        'path' => 'PasswordPolicy',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteAccountPasswordPolicy',
          ],
        ],
        'Update' => [
          'request' => [
            'operation' => 'UpdateAccountPasswordPolicy',
          ],
        ],
      ],
    ],
    'AccountSummary' => [
      'identifiers' => [
      ],
      'shape' => 'GetAccountSummaryResponse',
      'load' => [
        'request' => [
          'operation' => 'GetAccountSummary',
        ],
        'path' => '@',
      ],
    ],
    'AssumeRolePolicy' => [
      'identifiers' => [
        [
          'name' => 'RoleName',
        ],
      ],
      'actions' => [
        'Update' => [
          'request' => [
            'operation' => 'UpdateAssumeRolePolicy',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'RoleName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Role' => [
          'resource' => [
            'type' => 'Role',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'RoleName',
              ],
            ],
          ],
        ],
      ],
    ],
    'CurrentUser' => [
      'identifiers' => [
      ],
      'shape' => 'User',
      'load' => [
        'request' => [
          'operation' => 'GetUser',
        ],
        'path' => 'User',
      ],
      'has' => [
        'User' => [
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'data',
                'path' => 'UserName',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'AccessKeys' => [
          'request' => [
            'operation' => 'ListAccessKeys',
          ],
          'resource' => [
            'type' => 'AccessKey',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'response',
                'path' => 'AccessKeyMetadata[].UserName',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'AccessKeyMetadata[].AccessKeyId',
              ],
            ],
            'path' => 'AccessKeyMetadata[]',
          ],
        ],
        'MfaDevices' => [
          'request' => [
            'operation' => 'ListMFADevices',
          ],
          'resource' => [
            'type' => 'MfaDevice',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'response',
                'path' => 'MFADevices[].UserName',
              ],
              [
                'target' => 'SerialNumber',
                'source' => 'response',
                'path' => 'MFADevices[].SerialNumber',
              ],
            ],
            'path' => 'MFADevices[]',
          ],
        ],
        'SigningCertificates' => [
          'request' => [
            'operation' => 'ListSigningCertificates',
          ],
          'resource' => [
            'type' => 'SigningCertificate',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'response',
                'path' => 'Certificates[].UserName',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'Certificates[].CertificateId',
              ],
            ],
            'path' => 'Certificates[]',
          ],
        ],
      ],
    ],
    'Group' => [
      'identifiers' => [
        [
          'name' => 'Name',
          'memberName' => 'GroupName',
        ],
      ],
      'shape' => 'Group',
      'load' => [
        'request' => [
          'operation' => 'GetGroup',
          'params' => [
            [
              'target' => 'GroupName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => 'Group',
      ],
      'actions' => [
        'AddUser' => [
          'request' => [
            'operation' => 'AddUserToGroup',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'AttachPolicy' => [
          'request' => [
            'operation' => 'AttachGroupPolicy',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Create' => [
          'request' => [
            'operation' => 'CreateGroup',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Group',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'GroupName',
              ],
            ],
            'path' => 'Group',
          ],
        ],
        'CreatePolicy' => [
          'request' => [
            'operation' => 'PutGroupPolicy',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'GroupPolicy',
            'identifiers' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'PolicyName',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteGroup',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'DetachPolicy' => [
          'request' => [
            'operation' => 'DetachGroupPolicy',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'RemoveUser' => [
          'request' => [
            'operation' => 'RemoveUserFromGroup',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Update' => [
          'request' => [
            'operation' => 'UpdateGroup',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Group',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'NewGroupName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Policy' => [
          'resource' => [
            'type' => 'GroupPolicy',
            'identifiers' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'input',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'AttachedPolicies' => [
          'request' => [
            'operation' => 'ListAttachedGroupPolicies',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Policy',
            'identifiers' => [
              [
                'target' => 'Arn',
                'source' => 'response',
                'path' => 'AttachedPolicies[].PolicyArn',
              ],
            ],
          ],
        ],
        'Policies' => [
          'request' => [
            'operation' => 'ListGroupPolicies',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'GroupPolicy',
            'identifiers' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'PolicyNames[]',
              ],
            ],
          ],
        ],
        'Users' => [
          'request' => [
            'operation' => 'GetGroup',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'Users[].UserName',
              ],
            ],
            'path' => 'Users[]',
          ],
        ],
      ],
    ],
    'GroupPolicy' => [
      'identifiers' => [
        [
          'name' => 'GroupName',
          'memberName' => 'GroupName',
        ],
        [
          'name' => 'Name',
          'memberName' => 'PolicyName',
        ],
      ],
      'shape' => 'GetGroupPolicyResponse',
      'load' => [
        'request' => [
          'operation' => 'GetGroupPolicy',
          'params' => [
            [
              'target' => 'GroupName',
              'source' => 'identifier',
              'name' => 'GroupName',
            ],
            [
              'target' => 'PolicyName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteGroupPolicy',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'GroupName',
              ],
              [
                'target' => 'PolicyName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutGroupPolicy',
            'params' => [
              [
                'target' => 'GroupName',
                'source' => 'identifier',
                'name' => 'GroupName',
              ],
              [
                'target' => 'PolicyName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Group' => [
          'resource' => [
            'type' => 'Group',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'GroupName',
              ],
            ],
          ],
        ],
      ],
    ],
    'InstanceProfile' => [
      'identifiers' => [
        [
          'name' => 'Name',
          'memberName' => 'InstanceProfileName',
        ],
      ],
      'shape' => 'InstanceProfile',
      'load' => [
        'request' => [
          'operation' => 'GetInstanceProfile',
          'params' => [
            [
              'target' => 'InstanceProfileName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => 'InstanceProfile',
      ],
      'actions' => [
        'AddRole' => [
          'request' => [
            'operation' => 'AddRoleToInstanceProfile',
            'params' => [
              [
                'target' => 'InstanceProfileName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteInstanceProfile',
            'params' => [
              [
                'target' => 'InstanceProfileName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'RemoveRole' => [
          'request' => [
            'operation' => 'RemoveRoleFromInstanceProfile',
            'params' => [
              [
                'target' => 'InstanceProfileName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'waiters' => [
        'Exists' => [
          'waiterName' => 'InstanceProfileExists',
          'params' => [
            [
              'target' => 'InstanceProfileName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
      ],
      'has' => [
        'Roles' => [
          'resource' => [
            'type' => 'Role',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'data',
                'path' => 'Roles[].RoleName',
              ],
            ],
            'path' => 'Roles[]',
          ],
        ],
      ],
    ],
    'LoginProfile' => [
      'identifiers' => [
        [
          'name' => 'UserName',
          'memberName' => 'UserName',
        ],
      ],
      'shape' => 'LoginProfile',
      'load' => [
        'request' => [
          'operation' => 'GetLoginProfile',
          'params' => [
            [
              'target' => 'UserName',
              'source' => 'identifier',
              'name' => 'UserName',
            ],
          ],
        ],
        'path' => 'LoginProfile',
      ],
      'actions' => [
        'Create' => [
          'request' => [
            'operation' => 'CreateLoginProfile',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
          'resource' => [
            'type' => 'LoginProfile',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'response',
                'path' => 'LoginProfile.UserName',
              ],
            ],
            'path' => 'LoginProfile',
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteLoginProfile',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
        ],
        'Update' => [
          'request' => [
            'operation' => 'UpdateLoginProfile',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'User' => [
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
        ],
      ],
    ],
    'MfaDevice' => [
      'identifiers' => [
        [
          'name' => 'UserName',
          'memberName' => 'UserName',
        ],
        [
          'name' => 'SerialNumber',
          'memberName' => 'SerialNumber',
        ],
      ],
      'shape' => 'MFADevice',
      'actions' => [
        'Associate' => [
          'request' => [
            'operation' => 'EnableMFADevice',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'SerialNumber',
                'source' => 'identifier',
                'name' => 'SerialNumber',
              ],
            ],
          ],
        ],
        'Disassociate' => [
          'request' => [
            'operation' => 'DeactivateMFADevice',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'SerialNumber',
                'source' => 'identifier',
                'name' => 'SerialNumber',
              ],
            ],
          ],
        ],
        'Resync' => [
          'request' => [
            'operation' => 'ResyncMFADevice',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'SerialNumber',
                'source' => 'identifier',
                'name' => 'SerialNumber',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'User' => [
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
        ],
      ],
    ],
    'Policy' => [
      'identifiers' => [
        [
          'name' => 'Arn',
          'memberName' => 'PolicyArn',
        ],
      ],
      'shape' => 'Policy',
      'load' => [
        'request' => [
          'operation' => 'GetPolicy',
          'params' => [
            [
              'target' => 'PolicyArn',
              'source' => 'identifier',
              'name' => 'Arn',
            ],
          ],
        ],
        'path' => 'Policy',
      ],
      'actions' => [
        'AttachGroup' => [
          'request' => [
            'operation' => 'AttachGroupPolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
        'AttachRole' => [
          'request' => [
            'operation' => 'AttachRolePolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
        'AttachUser' => [
          'request' => [
            'operation' => 'AttachUserPolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
        'CreateVersion' => [
          'request' => [
            'operation' => 'CreatePolicyVersion',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
          'resource' => [
            'type' => 'PolicyVersion',
            'identifiers' => [
              [
                'target' => 'Arn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'VersionId',
                'source' => 'response',
                'path' => 'PolicyVersion.VersionId',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeletePolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
        'DetachGroup' => [
          'request' => [
            'operation' => 'DetachGroupPolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
        'DetachRole' => [
          'request' => [
            'operation' => 'DetachRolePolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
        'DetachUser' => [
          'request' => [
            'operation' => 'DetachUserPolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'DefaultVersion' => [
          'resource' => [
            'type' => 'PolicyVersion',
            'identifiers' => [
              [
                'target' => 'Arn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'VersionId',
                'source' => 'data',
                'path' => 'DefaultVersionId',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'AttachedGroups' => [
          'request' => [
            'operation' => 'ListEntitiesForPolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'EntityFilter',
                'source' => 'string',
                'value' => 'Group',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Group',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'PolicyGroups[].GroupName',
              ],
            ],
            'path' => 'PolicyGroups[]',
          ],
        ],
        'AttachedRoles' => [
          'request' => [
            'operation' => 'ListEntitiesForPolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'EntityFilter',
                'source' => 'string',
                'value' => 'Role',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Role',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'PolicyRoles[].RoleName',
              ],
            ],
            'path' => 'PolicyRoles[]',
          ],
        ],
        'AttachedUsers' => [
          'request' => [
            'operation' => 'ListEntitiesForPolicy',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'EntityFilter',
                'source' => 'string',
                'value' => 'User',
              ],
            ],
          ],
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'PolicyUsers[].UserName',
              ],
            ],
            'path' => 'PolicyRoles[]',
          ],
        ],
        'Versions' => [
          'request' => [
            'operation' => 'ListPolicyVersions',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
          'resource' => [
            'type' => 'PolicyVersion',
            'identifiers' => [
              [
                'target' => 'Arn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'VersionId',
                'source' => 'response',
                'path' => 'Versions[].VersionId',
              ],
            ],
            'path' => 'Versions[]',
          ],
        ],
      ],
    ],
    'PolicyVersion' => [
      'identifiers' => [
        [
          'name' => 'Arn',
        ],
        [
          'name' => 'VersionId',
        ],
      ],
      'shape' => 'PolicyVersion',
      'load' => [
        'request' => [
          'operation' => 'GetPolicyVersion',
          'params' => [
            [
              'target' => 'PolicyArn',
              'source' => 'identifier',
              'name' => 'Arn',
            ],
            [
              'target' => 'VersionId',
              'source' => 'identifier',
              'name' => 'VersionId',
            ],
          ],
        ],
        'path' => 'PolicyVersion',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeletePolicyVersion',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'VersionId',
                'source' => 'identifier',
                'name' => 'VersionId',
              ],
            ],
          ],
        ],
        'SetAsDefault' => [
          'request' => [
            'operation' => 'SetDefaultPolicyVersion',
            'params' => [
              [
                'target' => 'PolicyArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
              [
                'target' => 'VersionId',
                'source' => 'identifier',
                'name' => 'VersionId',
              ],
            ],
          ],
        ],
      ],
    ],
    'Role' => [
      'identifiers' => [
        [
          'name' => 'Name',
          'memberName' => 'RoleName',
        ],
      ],
      'shape' => 'Role',
      'load' => [
        'request' => [
          'operation' => 'GetRole',
          'params' => [
            [
              'target' => 'RoleName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => 'Role',
      ],
      'actions' => [
        'AttachPolicy' => [
          'request' => [
            'operation' => 'AttachRolePolicy',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteRole',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'DetachPolicy' => [
          'request' => [
            'operation' => 'DetachRolePolicy',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'AssumeRolePolicy' => [
          'resource' => [
            'type' => 'AssumeRolePolicy',
            'identifiers' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Policy' => [
          'resource' => [
            'type' => 'RolePolicy',
            'identifiers' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'input',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'AttachedPolicies' => [
          'request' => [
            'operation' => 'ListAttachedRolePolicies',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Policy',
            'identifiers' => [
              [
                'target' => 'Arn',
                'source' => 'response',
                'path' => 'AttachedPolicies[].PolicyArn',
              ],
            ],
          ],
        ],
        'InstanceProfiles' => [
          'request' => [
            'operation' => 'ListInstanceProfilesForRole',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'InstanceProfile',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'InstanceProfiles[].InstanceProfileName',
              ],
            ],
            'path' => 'InstanceProfiles[]',
          ],
        ],
        'Policies' => [
          'request' => [
            'operation' => 'ListRolePolicies',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'RolePolicy',
            'identifiers' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'PolicyNames[]',
              ],
            ],
          ],
        ],
      ],
    ],
    'RolePolicy' => [
      'identifiers' => [
        [
          'name' => 'RoleName',
          'memberName' => 'RoleName',
        ],
        [
          'name' => 'Name',
          'memberName' => 'PolicyName',
        ],
      ],
      'shape' => 'GetRolePolicyResponse',
      'load' => [
        'request' => [
          'operation' => 'GetRolePolicy',
          'params' => [
            [
              'target' => 'RoleName',
              'source' => 'identifier',
              'name' => 'RoleName',
            ],
            [
              'target' => 'PolicyName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteRolePolicy',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'RoleName',
              ],
              [
                'target' => 'PolicyName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutRolePolicy',
            'params' => [
              [
                'target' => 'RoleName',
                'source' => 'identifier',
                'name' => 'RoleName',
              ],
              [
                'target' => 'PolicyName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Role' => [
          'resource' => [
            'type' => 'Role',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'RoleName',
              ],
            ],
          ],
        ],
      ],
    ],
    'SamlProvider' => [
      'identifiers' => [
        [
          'name' => 'Arn',
        ],
      ],
      'shape' => 'GetSAMLProviderResponse',
      'load' => [
        'request' => [
          'operation' => 'GetSAMLProvider',
          'params' => [
            [
              'target' => 'SAMLProviderArn',
              'source' => 'identifier',
              'name' => 'Arn',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteSAMLProvider',
            'params' => [
              [
                'target' => 'SAMLProviderArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
        'Update' => [
          'request' => [
            'operation' => 'UpdateSAMLProvider',
            'params' => [
              [
                'target' => 'SAMLProviderArn',
                'source' => 'identifier',
                'name' => 'Arn',
              ],
            ],
          ],
        ],
      ],
    ],
    'ServerCertificate' => [
      'identifiers' => [
        [
          'name' => 'Name',
        ],
      ],
      'shape' => 'ServerCertificate',
      'load' => [
        'request' => [
          'operation' => 'GetServerCertificate',
          'params' => [
            [
              'target' => 'ServerCertificateName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => 'ServerCertificate',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteServerCertificate',
            'params' => [
              [
                'target' => 'ServerCertificateName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Update' => [
          'request' => [
            'operation' => 'UpdateServerCertificate',
            'params' => [
              [
                'target' => 'ServerCertificateName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'ServerCertificate',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'NewServerCertificateName',
              ],
            ],
          ],
        ],
      ],
    ],
    'SigningCertificate' => [
      'identifiers' => [
        [
          'name' => 'UserName',
          'memberName' => 'UserName',
        ],
        [
          'name' => 'Id',
          'memberName' => 'CertificateId',
        ],
      ],
      'shape' => 'SigningCertificate',
      'actions' => [
        'Activate' => [
          'request' => [
            'operation' => 'UpdateSigningCertificate',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'CertificateId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Status',
                'source' => 'string',
                'value' => 'Active',
              ],
            ],
          ],
        ],
        'Deactivate' => [
          'request' => [
            'operation' => 'UpdateSigningCertificate',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'CertificateId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'Status',
                'source' => 'string',
                'value' => 'Inactive',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteSigningCertificate',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'CertificateId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'User' => [
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
        ],
      ],
    ],
    'User' => [
      'identifiers' => [
        [
          'name' => 'Name',
          'memberName' => 'UserName',
        ],
      ],
      'shape' => 'User',
      'load' => [
        'request' => [
          'operation' => 'GetUser',
          'params' => [
            [
              'target' => 'UserName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => 'User',
      ],
      'actions' => [
        'AddGroup' => [
          'request' => [
            'operation' => 'AddUserToGroup',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'AttachPolicy' => [
          'request' => [
            'operation' => 'AttachUserPolicy',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Create' => [
          'request' => [
            'operation' => 'CreateUser',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'UserName',
              ],
            ],
            'path' => 'User',
          ],
        ],
        'CreateAccessKeyPair' => [
          'request' => [
            'operation' => 'CreateAccessKey',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'AccessKeyPair',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'AccessKey.AccessKeyId',
              ],
              [
                'target' => 'Secret',
                'source' => 'response',
                'path' => 'AccessKey.SecretAccessKey',
              ],
            ],
            'path' => 'AccessKey',
          ],
        ],
        'CreateLoginProfile' => [
          'request' => [
            'operation' => 'CreateLoginProfile',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'LoginProfile',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'response',
                'path' => 'LoginProfile.UserName',
              ],
            ],
            'path' => 'LoginProfile',
          ],
        ],
        'CreatePolicy' => [
          'request' => [
            'operation' => 'PutUserPolicy',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'UserPolicy',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'PolicyName',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteUser',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'DetachPolicy' => [
          'request' => [
            'operation' => 'DetachUserPolicy',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'EnableMfa' => [
          'request' => [
            'operation' => 'EnableMFADevice',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MfaDevice',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'SerialNumber',
                'source' => 'requestParameter',
                'path' => 'SerialNumber',
              ],
            ],
          ],
        ],
        'RemoveGroup' => [
          'request' => [
            'operation' => 'RemoveUserFromGroup',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Update' => [
          'request' => [
            'operation' => 'UpdateUser',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'requestParameter',
                'path' => 'NewUserName',
              ],
            ],
          ],
        ],
      ],
      'waiters' => [
        'Exists' => [
          'waiterName' => 'UserExists',
          'params' => [
            [
              'target' => 'UserName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
      ],
      'has' => [
        'AccessKey' => [
          'resource' => [
            'type' => 'AccessKey',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'LoginProfile' => [
          'resource' => [
            'type' => 'LoginProfile',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'MfaDevice' => [
          'resource' => [
            'type' => 'MfaDevice',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'SerialNumber',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'Policy' => [
          'resource' => [
            'type' => 'UserPolicy',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'SigningCertificate' => [
          'resource' => [
            'type' => 'SigningCertificate',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'AccessKeys' => [
          'request' => [
            'operation' => 'ListAccessKeys',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'AccessKey',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'AccessKeyMetadata[].AccessKeyId',
              ],
            ],
            'path' => 'AccessKeyMetadata[]',
          ],
        ],
        'AttachedPolicies' => [
          'request' => [
            'operation' => 'ListAttachedUserPolicies',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Policy',
            'identifiers' => [
              [
                'target' => 'Arn',
                'source' => 'response',
                'path' => 'AttachedPolicies[].PolicyArn',
              ],
            ],
          ],
        ],
        'Groups' => [
          'request' => [
            'operation' => 'ListGroupsForUser',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Group',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'Groups[].GroupName',
              ],
            ],
            'path' => 'Groups[]',
          ],
        ],
        'MfaDevices' => [
          'request' => [
            'operation' => 'ListMFADevices',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MfaDevice',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'SerialNumber',
                'source' => 'response',
                'path' => 'MFADevices[].SerialNumber',
              ],
            ],
            'path' => 'MFADevices[]',
          ],
        ],
        'Policies' => [
          'request' => [
            'operation' => 'ListUserPolicies',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'UserPolicy',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Name',
                'source' => 'response',
                'path' => 'PolicyNames[]',
              ],
            ],
          ],
        ],
        'SigningCertificates' => [
          'request' => [
            'operation' => 'ListSigningCertificates',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'SigningCertificate',
            'identifiers' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'Certificates[].CertificateId',
              ],
            ],
            'path' => 'Certificates[]',
          ],
        ],
      ],
    ],
    'UserPolicy' => [
      'identifiers' => [
        [
          'name' => 'UserName',
          'memberName' => 'UserName',
        ],
        [
          'name' => 'Name',
          'memberName' => 'PolicyName',
        ],
      ],
      'shape' => 'GetUserPolicyResponse',
      'load' => [
        'request' => [
          'operation' => 'GetUserPolicy',
          'params' => [
            [
              'target' => 'UserName',
              'source' => 'identifier',
              'name' => 'UserName',
            ],
            [
              'target' => 'PolicyName',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteUserPolicy',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'PolicyName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutUserPolicy',
            'params' => [
              [
                'target' => 'UserName',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
              [
                'target' => 'PolicyName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'User' => [
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'UserName',
              ],
            ],
          ],
        ],
      ],
    ],
    'VirtualMfaDevice' => [
      'identifiers' => [
        [
          'name' => 'SerialNumber',
          'memberName' => 'SerialNumber',
        ],
      ],
      'shape' => 'VirtualMFADevice',
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteVirtualMFADevice',
            'params' => [
              [
                'target' => 'SerialNumber',
                'source' => 'identifier',
                'name' => 'SerialNumber',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'User' => [
          'resource' => [
            'type' => 'User',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'data',
                'path' => 'User.UserName',
              ],
            ],
          ],
        ],
      ],
    ],
  ],
];
