text: # -*- coding: utf-8 -*-
  
  """
  This module
  """
  
  import attr
  import typing
  
  from ..core.model import (
      Property, Resource, Tag, GetAtt, TypeHint, TypeCheck,
  )
  from ..core.constant import AttrMeta
  
  #--- Property declaration ---
  
  @attr.s
  class RecordingConfigurationS3DestinationConfiguration(Property):
      """
      AWS Object Type = "AWS::IVS::RecordingConfiguration.S3DestinationConfiguration"
  
      Resource Document: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-s3destinationconfiguration.html
  
      Property Document:
      
      - ``rp_BucketName``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-s3destinationconfiguration.html#cfn-ivs-recordingconfiguration-s3destinationconfiguration-bucketname
      """
      AWS_OBJECT_TYPE = "AWS::IVS::RecordingConfiguration.S3DestinationConfiguration"
      
      rp_BucketName: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.instance_of(TypeCheck.intrinsic_str_type),
          metadata={AttrMeta.PROPERTY_NAME: "BucketName"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-s3destinationconfiguration.html#cfn-ivs-recordingconfiguration-s3destinationconfiguration-bucketname"""
  
  @attr.s
  class RecordingConfigurationDestinationConfiguration(Property):
      """
      AWS Object Type = "AWS::IVS::RecordingConfiguration.DestinationConfiguration"
  
      Resource Document: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-destinationconfiguration.html
  
      Property Document:
      
      - ``rp_S3``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-destinationconfiguration.html#cfn-ivs-recordingconfiguration-destinationconfiguration-s3
      """
      AWS_OBJECT_TYPE = "AWS::IVS::RecordingConfiguration.DestinationConfiguration"
      
      rp_S3: typing.Union['RecordingConfigurationS3DestinationConfiguration', dict] = attr.ib(
          default=None,
          converter=RecordingConfigurationS3DestinationConfiguration.from_dict,
          validator=attr.validators.instance_of(RecordingConfigurationS3DestinationConfiguration),
          metadata={AttrMeta.PROPERTY_NAME: "S3"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-destinationconfiguration.html#cfn-ivs-recordingconfiguration-destinationconfiguration-s3"""
  
  
  #--- Resource declaration ---
  
  @attr.s
  class StreamKey(Resource):
      """
      AWS Object Type = "AWS::IVS::StreamKey"
  
      Resource Document: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html
  
      Property Document:
      
      - ``rp_ChannelArn``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#cfn-ivs-streamkey-channelarn
      - ``p_Tags``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#cfn-ivs-streamkey-tags
      """
      AWS_OBJECT_TYPE = "AWS::IVS::StreamKey"
  
      
      rp_ChannelArn: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.instance_of(TypeCheck.intrinsic_str_type),
          metadata={AttrMeta.PROPERTY_NAME: "ChannelArn"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#cfn-ivs-streamkey-channelarn"""
      p_Tags: typing.List[typing.Union[Tag, dict]] = attr.ib(
          default=None,
          converter=Tag.from_list,
          validator=attr.validators.optional(attr.validators.deep_iterable(member_validator=attr.validators.instance_of(Tag), iterable_validator=attr.validators.instance_of(list))),
          metadata={AttrMeta.PROPERTY_NAME: "Tags"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#cfn-ivs-streamkey-tags"""
  
      
      @property
      def rv_Arn(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#aws-resource-ivs-streamkey-return-values"""
          return GetAtt(resource=self, attr_name="Arn")
      
      @property
      def rv_Value(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#aws-resource-ivs-streamkey-return-values"""
          return GetAtt(resource=self, attr_name="Value")
      
  
  @attr.s
  class Channel(Resource):
      """
      AWS Object Type = "AWS::IVS::Channel"
  
      Resource Document: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html
  
      Property Document:
      
      - ``p_Authorized``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-authorized
      - ``p_LatencyMode``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-latencymode
      - ``p_Name``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-name
      - ``p_RecordingConfigurationArn``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-recordingconfigurationarn
      - ``p_Type``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-type
      - ``p_Tags``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-tags
      """
      AWS_OBJECT_TYPE = "AWS::IVS::Channel"
  
      
      p_Authorized: bool = attr.ib(
          default=None,
          validator=attr.validators.optional(attr.validators.instance_of(bool)),
          metadata={AttrMeta.PROPERTY_NAME: "Authorized"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-authorized"""
      p_LatencyMode: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.optional(attr.validators.instance_of(TypeCheck.intrinsic_str_type)),
          metadata={AttrMeta.PROPERTY_NAME: "LatencyMode"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-latencymode"""
      p_Name: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.optional(attr.validators.instance_of(TypeCheck.intrinsic_str_type)),
          metadata={AttrMeta.PROPERTY_NAME: "Name"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-name"""
      p_RecordingConfigurationArn: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.optional(attr.validators.instance_of(TypeCheck.intrinsic_str_type)),
          metadata={AttrMeta.PROPERTY_NAME: "RecordingConfigurationArn"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-recordingconfigurationarn"""
      p_Type: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.optional(attr.validators.instance_of(TypeCheck.intrinsic_str_type)),
          metadata={AttrMeta.PROPERTY_NAME: "Type"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-type"""
      p_Tags: typing.List[typing.Union[Tag, dict]] = attr.ib(
          default=None,
          converter=Tag.from_list,
          validator=attr.validators.optional(attr.validators.deep_iterable(member_validator=attr.validators.instance_of(Tag), iterable_validator=attr.validators.instance_of(list))),
          metadata={AttrMeta.PROPERTY_NAME: "Tags"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-tags"""
  
      
      @property
      def rv_Arn(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#aws-resource-ivs-channel-return-values"""
          return GetAtt(resource=self, attr_name="Arn")
      
      @property
      def rv_PlaybackUrl(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#aws-resource-ivs-channel-return-values"""
          return GetAtt(resource=self, attr_name="PlaybackUrl")
      
      @property
      def rv_IngestEndpoint(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#aws-resource-ivs-channel-return-values"""
          return GetAtt(resource=self, attr_name="IngestEndpoint")
      
  
  @attr.s
  class PlaybackKeyPair(Resource):
      """
      AWS Object Type = "AWS::IVS::PlaybackKeyPair"
  
      Resource Document: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html
  
      Property Document:
      
      - ``rp_PublicKeyMaterial``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-publickeymaterial
      - ``p_Name``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-name
      - ``p_Tags``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-tags
      """
      AWS_OBJECT_TYPE = "AWS::IVS::PlaybackKeyPair"
  
      
      rp_PublicKeyMaterial: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.instance_of(TypeCheck.intrinsic_str_type),
          metadata={AttrMeta.PROPERTY_NAME: "PublicKeyMaterial"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-publickeymaterial"""
      p_Name: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.optional(attr.validators.instance_of(TypeCheck.intrinsic_str_type)),
          metadata={AttrMeta.PROPERTY_NAME: "Name"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-name"""
      p_Tags: typing.List[typing.Union[Tag, dict]] = attr.ib(
          default=None,
          converter=Tag.from_list,
          validator=attr.validators.optional(attr.validators.deep_iterable(member_validator=attr.validators.instance_of(Tag), iterable_validator=attr.validators.instance_of(list))),
          metadata={AttrMeta.PROPERTY_NAME: "Tags"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-tags"""
  
      
      @property
      def rv_Fingerprint(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#aws-resource-ivs-playbackkeypair-return-values"""
          return GetAtt(resource=self, attr_name="Fingerprint")
      
      @property
      def rv_Arn(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#aws-resource-ivs-playbackkeypair-return-values"""
          return GetAtt(resource=self, attr_name="Arn")
      
  
  @attr.s
  class RecordingConfiguration(Resource):
      """
      AWS Object Type = "AWS::IVS::RecordingConfiguration"
  
      Resource Document: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html
  
      Property Document:
      
      - ``rp_DestinationConfiguration``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#cfn-ivs-recordingconfiguration-destinationconfiguration
      - ``p_Name``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#cfn-ivs-recordingconfiguration-name
      - ``p_Tags``: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#cfn-ivs-recordingconfiguration-tags
      """
      AWS_OBJECT_TYPE = "AWS::IVS::RecordingConfiguration"
  
      
      rp_DestinationConfiguration: typing.Union['RecordingConfigurationDestinationConfiguration', dict] = attr.ib(
          default=None,
          converter=RecordingConfigurationDestinationConfiguration.from_dict,
          validator=attr.validators.instance_of(RecordingConfigurationDestinationConfiguration),
          metadata={AttrMeta.PROPERTY_NAME: "DestinationConfiguration"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#cfn-ivs-recordingconfiguration-destinationconfiguration"""
      p_Name: TypeHint.intrinsic_str = attr.ib(
          default=None,
          validator=attr.validators.optional(attr.validators.instance_of(TypeCheck.intrinsic_str_type)),
          metadata={AttrMeta.PROPERTY_NAME: "Name"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#cfn-ivs-recordingconfiguration-name"""
      p_Tags: typing.List[typing.Union[Tag, dict]] = attr.ib(
          default=None,
          converter=Tag.from_list,
          validator=attr.validators.optional(attr.validators.deep_iterable(member_validator=attr.validators.instance_of(Tag), iterable_validator=attr.validators.instance_of(list))),
          metadata={AttrMeta.PROPERTY_NAME: "Tags"},
      )
      """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#cfn-ivs-recordingconfiguration-tags"""
  
      
      @property
      def rv_Arn(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#aws-resource-ivs-recordingconfiguration-return-values"""
          return GetAtt(resource=self, attr_name="Arn")
      
      @property
      def rv_State(self) -> GetAtt:
          """Doc: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-recordingconfiguration.html#aws-resource-ivs-recordingconfiguration-return-values"""
          return GetAtt(resource=self, attr_name="State")
      
  