diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign.hs
@@ -0,0 +1,121 @@
+module Stratosphere.ConnectCampaignsV2.Campaign (
+        module Exports, Campaign(..), mkCampaign
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.ChannelSubtypeConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.CommunicationTimeConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.ScheduleProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.SourceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Campaign
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html>
+    Campaign {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-channelsubtypeconfig>
+              channelSubtypeConfig :: ChannelSubtypeConfigProperty,
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-communicationlimitsoverride>
+              communicationLimitsOverride :: (Prelude.Maybe CommunicationLimitsConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-communicationtimeconfig>
+              communicationTimeConfig :: (Prelude.Maybe CommunicationTimeConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-connectcampaignflowarn>
+              connectCampaignFlowArn :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-connectinstanceid>
+              connectInstanceId :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-name>
+              name :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-schedule>
+              schedule :: (Prelude.Maybe ScheduleProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-source>
+              source :: (Prelude.Maybe SourceProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connectcampaignsv2-campaign.html#cfn-connectcampaignsv2-campaign-tags>
+              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCampaign ::
+  ChannelSubtypeConfigProperty
+  -> Value Prelude.Text -> Value Prelude.Text -> Campaign
+mkCampaign channelSubtypeConfig connectInstanceId name
+  = Campaign
+      {haddock_workaround_ = (),
+       channelSubtypeConfig = channelSubtypeConfig,
+       connectInstanceId = connectInstanceId, name = name,
+       communicationLimitsOverride = Prelude.Nothing,
+       communicationTimeConfig = Prelude.Nothing,
+       connectCampaignFlowArn = Prelude.Nothing,
+       schedule = Prelude.Nothing, source = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties Campaign where
+  toResourceProperties Campaign {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ChannelSubtypeConfig" JSON..= channelSubtypeConfig,
+                            "ConnectInstanceId" JSON..= connectInstanceId, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CommunicationLimitsOverride"
+                                 Prelude.<$> communicationLimitsOverride,
+                               (JSON..=) "CommunicationTimeConfig"
+                                 Prelude.<$> communicationTimeConfig,
+                               (JSON..=) "ConnectCampaignFlowArn"
+                                 Prelude.<$> connectCampaignFlowArn,
+                               (JSON..=) "Schedule" Prelude.<$> schedule,
+                               (JSON..=) "Source" Prelude.<$> source,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Campaign where
+  toJSON Campaign {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ChannelSubtypeConfig" JSON..= channelSubtypeConfig,
+               "ConnectInstanceId" JSON..= connectInstanceId, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "CommunicationLimitsOverride"
+                    Prelude.<$> communicationLimitsOverride,
+                  (JSON..=) "CommunicationTimeConfig"
+                    Prelude.<$> communicationTimeConfig,
+                  (JSON..=) "ConnectCampaignFlowArn"
+                    Prelude.<$> connectCampaignFlowArn,
+                  (JSON..=) "Schedule" Prelude.<$> schedule,
+                  (JSON..=) "Source" Prelude.<$> source,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ChannelSubtypeConfig" Campaign where
+  type PropertyType "ChannelSubtypeConfig" Campaign = ChannelSubtypeConfigProperty
+  set newValue Campaign {..}
+    = Campaign {channelSubtypeConfig = newValue, ..}
+instance Property "CommunicationLimitsOverride" Campaign where
+  type PropertyType "CommunicationLimitsOverride" Campaign = CommunicationLimitsConfigProperty
+  set newValue Campaign {..}
+    = Campaign
+        {communicationLimitsOverride = Prelude.pure newValue, ..}
+instance Property "CommunicationTimeConfig" Campaign where
+  type PropertyType "CommunicationTimeConfig" Campaign = CommunicationTimeConfigProperty
+  set newValue Campaign {..}
+    = Campaign {communicationTimeConfig = Prelude.pure newValue, ..}
+instance Property "ConnectCampaignFlowArn" Campaign where
+  type PropertyType "ConnectCampaignFlowArn" Campaign = Value Prelude.Text
+  set newValue Campaign {..}
+    = Campaign {connectCampaignFlowArn = Prelude.pure newValue, ..}
+instance Property "ConnectInstanceId" Campaign where
+  type PropertyType "ConnectInstanceId" Campaign = Value Prelude.Text
+  set newValue Campaign {..}
+    = Campaign {connectInstanceId = newValue, ..}
+instance Property "Name" Campaign where
+  type PropertyType "Name" Campaign = Value Prelude.Text
+  set newValue Campaign {..} = Campaign {name = newValue, ..}
+instance Property "Schedule" Campaign where
+  type PropertyType "Schedule" Campaign = ScheduleProperty
+  set newValue Campaign {..}
+    = Campaign {schedule = Prelude.pure newValue, ..}
+instance Property "Source" Campaign where
+  type PropertyType "Source" Campaign = SourceProperty
+  set newValue Campaign {..}
+    = Campaign {source = Prelude.pure newValue, ..}
+instance Property "Tags" Campaign where
+  type PropertyType "Tags" Campaign = [Tag]
+  set newValue Campaign {..}
+    = Campaign {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/AnswerMachineDetectionConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/AnswerMachineDetectionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/AnswerMachineDetectionConfigProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.AnswerMachineDetectionConfigProperty (
+        AnswerMachineDetectionConfigProperty(..),
+        mkAnswerMachineDetectionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnswerMachineDetectionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-answermachinedetectionconfig.html>
+    AnswerMachineDetectionConfigProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-answermachinedetectionconfig.html#cfn-connectcampaignsv2-campaign-answermachinedetectionconfig-awaitanswermachineprompt>
+                                          awaitAnswerMachinePrompt :: (Prelude.Maybe (Value Prelude.Bool)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-answermachinedetectionconfig.html#cfn-connectcampaignsv2-campaign-answermachinedetectionconfig-enableanswermachinedetection>
+                                          enableAnswerMachineDetection :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnswerMachineDetectionConfigProperty ::
+  Value Prelude.Bool -> AnswerMachineDetectionConfigProperty
+mkAnswerMachineDetectionConfigProperty enableAnswerMachineDetection
+  = AnswerMachineDetectionConfigProperty
+      {haddock_workaround_ = (),
+       enableAnswerMachineDetection = enableAnswerMachineDetection,
+       awaitAnswerMachinePrompt = Prelude.Nothing}
+instance ToResourceProperties AnswerMachineDetectionConfigProperty where
+  toResourceProperties AnswerMachineDetectionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.AnswerMachineDetectionConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EnableAnswerMachineDetection"
+                              JSON..= enableAnswerMachineDetection]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AwaitAnswerMachinePrompt"
+                                 Prelude.<$> awaitAnswerMachinePrompt]))}
+instance JSON.ToJSON AnswerMachineDetectionConfigProperty where
+  toJSON AnswerMachineDetectionConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EnableAnswerMachineDetection"
+                 JSON..= enableAnswerMachineDetection]
+              (Prelude.catMaybes
+                 [(JSON..=) "AwaitAnswerMachinePrompt"
+                    Prelude.<$> awaitAnswerMachinePrompt])))
+instance Property "AwaitAnswerMachinePrompt" AnswerMachineDetectionConfigProperty where
+  type PropertyType "AwaitAnswerMachinePrompt" AnswerMachineDetectionConfigProperty = Value Prelude.Bool
+  set newValue AnswerMachineDetectionConfigProperty {..}
+    = AnswerMachineDetectionConfigProperty
+        {awaitAnswerMachinePrompt = Prelude.pure newValue, ..}
+instance Property "EnableAnswerMachineDetection" AnswerMachineDetectionConfigProperty where
+  type PropertyType "EnableAnswerMachineDetection" AnswerMachineDetectionConfigProperty = Value Prelude.Bool
+  set newValue AnswerMachineDetectionConfigProperty {..}
+    = AnswerMachineDetectionConfigProperty
+        {enableAnswerMachineDetection = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/AnswerMachineDetectionConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/AnswerMachineDetectionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/AnswerMachineDetectionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.AnswerMachineDetectionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnswerMachineDetectionConfigProperty :: Prelude.Type
+instance ToResourceProperties AnswerMachineDetectionConfigProperty
+instance Prelude.Eq AnswerMachineDetectionConfigProperty
+instance Prelude.Show AnswerMachineDetectionConfigProperty
+instance JSON.ToJSON AnswerMachineDetectionConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/ChannelSubtypeConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ChannelSubtypeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ChannelSubtypeConfigProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.ChannelSubtypeConfigProperty (
+        module Exports, ChannelSubtypeConfigProperty(..),
+        mkChannelSubtypeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.EmailChannelSubtypeConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.SmsChannelSubtypeConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.TelephonyChannelSubtypeConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data ChannelSubtypeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-channelsubtypeconfig.html>
+    ChannelSubtypeConfigProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-channelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-channelsubtypeconfig-email>
+                                  email :: (Prelude.Maybe EmailChannelSubtypeConfigProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-channelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-channelsubtypeconfig-sms>
+                                  sms :: (Prelude.Maybe SmsChannelSubtypeConfigProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-channelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-channelsubtypeconfig-telephony>
+                                  telephony :: (Prelude.Maybe TelephonyChannelSubtypeConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkChannelSubtypeConfigProperty :: ChannelSubtypeConfigProperty
+mkChannelSubtypeConfigProperty
+  = ChannelSubtypeConfigProperty
+      {haddock_workaround_ = (), email = Prelude.Nothing,
+       sms = Prelude.Nothing, telephony = Prelude.Nothing}
+instance ToResourceProperties ChannelSubtypeConfigProperty where
+  toResourceProperties ChannelSubtypeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.ChannelSubtypeConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Email" Prelude.<$> email,
+                            (JSON..=) "Sms" Prelude.<$> sms,
+                            (JSON..=) "Telephony" Prelude.<$> telephony])}
+instance JSON.ToJSON ChannelSubtypeConfigProperty where
+  toJSON ChannelSubtypeConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Email" Prelude.<$> email,
+               (JSON..=) "Sms" Prelude.<$> sms,
+               (JSON..=) "Telephony" Prelude.<$> telephony]))
+instance Property "Email" ChannelSubtypeConfigProperty where
+  type PropertyType "Email" ChannelSubtypeConfigProperty = EmailChannelSubtypeConfigProperty
+  set newValue ChannelSubtypeConfigProperty {..}
+    = ChannelSubtypeConfigProperty {email = Prelude.pure newValue, ..}
+instance Property "Sms" ChannelSubtypeConfigProperty where
+  type PropertyType "Sms" ChannelSubtypeConfigProperty = SmsChannelSubtypeConfigProperty
+  set newValue ChannelSubtypeConfigProperty {..}
+    = ChannelSubtypeConfigProperty {sms = Prelude.pure newValue, ..}
+instance Property "Telephony" ChannelSubtypeConfigProperty where
+  type PropertyType "Telephony" ChannelSubtypeConfigProperty = TelephonyChannelSubtypeConfigProperty
+  set newValue ChannelSubtypeConfigProperty {..}
+    = ChannelSubtypeConfigProperty
+        {telephony = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/ChannelSubtypeConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ChannelSubtypeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ChannelSubtypeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.ChannelSubtypeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ChannelSubtypeConfigProperty :: Prelude.Type
+instance ToResourceProperties ChannelSubtypeConfigProperty
+instance Prelude.Eq ChannelSubtypeConfigProperty
+instance Prelude.Show ChannelSubtypeConfigProperty
+instance JSON.ToJSON ChannelSubtypeConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitProperty (
+        CommunicationLimitProperty(..), mkCommunicationLimitProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CommunicationLimitProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimit.html>
+    CommunicationLimitProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimit.html#cfn-connectcampaignsv2-campaign-communicationlimit-frequency>
+                                frequency :: (Value Prelude.Integer),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimit.html#cfn-connectcampaignsv2-campaign-communicationlimit-maxcountperrecipient>
+                                maxCountPerRecipient :: (Value Prelude.Integer),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimit.html#cfn-connectcampaignsv2-campaign-communicationlimit-unit>
+                                unit :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCommunicationLimitProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer
+     -> Value Prelude.Text -> CommunicationLimitProperty
+mkCommunicationLimitProperty frequency maxCountPerRecipient unit
+  = CommunicationLimitProperty
+      {haddock_workaround_ = (), frequency = frequency,
+       maxCountPerRecipient = maxCountPerRecipient, unit = unit}
+instance ToResourceProperties CommunicationLimitProperty where
+  toResourceProperties CommunicationLimitProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.CommunicationLimit",
+         supportsTags = Prelude.False,
+         properties = ["Frequency" JSON..= frequency,
+                       "MaxCountPerRecipient" JSON..= maxCountPerRecipient,
+                       "Unit" JSON..= unit]}
+instance JSON.ToJSON CommunicationLimitProperty where
+  toJSON CommunicationLimitProperty {..}
+    = JSON.object
+        ["Frequency" JSON..= frequency,
+         "MaxCountPerRecipient" JSON..= maxCountPerRecipient,
+         "Unit" JSON..= unit]
+instance Property "Frequency" CommunicationLimitProperty where
+  type PropertyType "Frequency" CommunicationLimitProperty = Value Prelude.Integer
+  set newValue CommunicationLimitProperty {..}
+    = CommunicationLimitProperty {frequency = newValue, ..}
+instance Property "MaxCountPerRecipient" CommunicationLimitProperty where
+  type PropertyType "MaxCountPerRecipient" CommunicationLimitProperty = Value Prelude.Integer
+  set newValue CommunicationLimitProperty {..}
+    = CommunicationLimitProperty {maxCountPerRecipient = newValue, ..}
+instance Property "Unit" CommunicationLimitProperty where
+  type PropertyType "Unit" CommunicationLimitProperty = Value Prelude.Text
+  set newValue CommunicationLimitProperty {..}
+    = CommunicationLimitProperty {unit = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CommunicationLimitProperty :: Prelude.Type
+instance ToResourceProperties CommunicationLimitProperty
+instance Prelude.Eq CommunicationLimitProperty
+instance Prelude.Show CommunicationLimitProperty
+instance JSON.ToJSON CommunicationLimitProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsConfigProperty (
+        module Exports, CommunicationLimitsConfigProperty(..),
+        mkCommunicationLimitsConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CommunicationLimitsConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimitsconfig.html>
+    CommunicationLimitsConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimitsconfig.html#cfn-connectcampaignsv2-campaign-communicationlimitsconfig-allchannelssubtypes>
+                                       allChannelsSubtypes :: (Prelude.Maybe CommunicationLimitsProperty),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimitsconfig.html#cfn-connectcampaignsv2-campaign-communicationlimitsconfig-instancelimitshandling>
+                                       instanceLimitsHandling :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCommunicationLimitsConfigProperty ::
+  CommunicationLimitsConfigProperty
+mkCommunicationLimitsConfigProperty
+  = CommunicationLimitsConfigProperty
+      {haddock_workaround_ = (), allChannelsSubtypes = Prelude.Nothing,
+       instanceLimitsHandling = Prelude.Nothing}
+instance ToResourceProperties CommunicationLimitsConfigProperty where
+  toResourceProperties CommunicationLimitsConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.CommunicationLimitsConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllChannelsSubtypes" Prelude.<$> allChannelsSubtypes,
+                            (JSON..=) "InstanceLimitsHandling"
+                              Prelude.<$> instanceLimitsHandling])}
+instance JSON.ToJSON CommunicationLimitsConfigProperty where
+  toJSON CommunicationLimitsConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllChannelsSubtypes" Prelude.<$> allChannelsSubtypes,
+               (JSON..=) "InstanceLimitsHandling"
+                 Prelude.<$> instanceLimitsHandling]))
+instance Property "AllChannelsSubtypes" CommunicationLimitsConfigProperty where
+  type PropertyType "AllChannelsSubtypes" CommunicationLimitsConfigProperty = CommunicationLimitsProperty
+  set newValue CommunicationLimitsConfigProperty {..}
+    = CommunicationLimitsConfigProperty
+        {allChannelsSubtypes = Prelude.pure newValue, ..}
+instance Property "InstanceLimitsHandling" CommunicationLimitsConfigProperty where
+  type PropertyType "InstanceLimitsHandling" CommunicationLimitsConfigProperty = Value Prelude.Text
+  set newValue CommunicationLimitsConfigProperty {..}
+    = CommunicationLimitsConfigProperty
+        {instanceLimitsHandling = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CommunicationLimitsConfigProperty :: Prelude.Type
+instance ToResourceProperties CommunicationLimitsConfigProperty
+instance Prelude.Eq CommunicationLimitsConfigProperty
+instance Prelude.Show CommunicationLimitsConfigProperty
+instance JSON.ToJSON CommunicationLimitsConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsProperty (
+        module Exports, CommunicationLimitsProperty(..),
+        mkCommunicationLimitsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitProperty as Exports
+import Stratosphere.ResourceProperties
+data CommunicationLimitsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimits.html>
+    CommunicationLimitsProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationlimits.html#cfn-connectcampaignsv2-campaign-communicationlimits-communicationlimitlist>
+                                 communicationLimitList :: (Prelude.Maybe [CommunicationLimitProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCommunicationLimitsProperty :: CommunicationLimitsProperty
+mkCommunicationLimitsProperty
+  = CommunicationLimitsProperty
+      {haddock_workaround_ = (),
+       communicationLimitList = Prelude.Nothing}
+instance ToResourceProperties CommunicationLimitsProperty where
+  toResourceProperties CommunicationLimitsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.CommunicationLimits",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CommunicationLimitList"
+                              Prelude.<$> communicationLimitList])}
+instance JSON.ToJSON CommunicationLimitsProperty where
+  toJSON CommunicationLimitsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CommunicationLimitList"
+                 Prelude.<$> communicationLimitList]))
+instance Property "CommunicationLimitList" CommunicationLimitsProperty where
+  type PropertyType "CommunicationLimitList" CommunicationLimitsProperty = [CommunicationLimitProperty]
+  set newValue CommunicationLimitsProperty {..}
+    = CommunicationLimitsProperty
+        {communicationLimitList = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationLimitsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CommunicationLimitsProperty :: Prelude.Type
+instance ToResourceProperties CommunicationLimitsProperty
+instance Prelude.Eq CommunicationLimitsProperty
+instance Prelude.Show CommunicationLimitsProperty
+instance JSON.ToJSON CommunicationLimitsProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationTimeConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationTimeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationTimeConfigProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationTimeConfigProperty (
+        module Exports, CommunicationTimeConfigProperty(..),
+        mkCommunicationTimeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.LocalTimeZoneConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.TimeWindowProperty as Exports
+import Stratosphere.ResourceProperties
+data CommunicationTimeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationtimeconfig.html>
+    CommunicationTimeConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationtimeconfig.html#cfn-connectcampaignsv2-campaign-communicationtimeconfig-email>
+                                     email :: (Prelude.Maybe TimeWindowProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationtimeconfig.html#cfn-connectcampaignsv2-campaign-communicationtimeconfig-localtimezoneconfig>
+                                     localTimeZoneConfig :: LocalTimeZoneConfigProperty,
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationtimeconfig.html#cfn-connectcampaignsv2-campaign-communicationtimeconfig-sms>
+                                     sms :: (Prelude.Maybe TimeWindowProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-communicationtimeconfig.html#cfn-connectcampaignsv2-campaign-communicationtimeconfig-telephony>
+                                     telephony :: (Prelude.Maybe TimeWindowProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCommunicationTimeConfigProperty ::
+  LocalTimeZoneConfigProperty -> CommunicationTimeConfigProperty
+mkCommunicationTimeConfigProperty localTimeZoneConfig
+  = CommunicationTimeConfigProperty
+      {haddock_workaround_ = (),
+       localTimeZoneConfig = localTimeZoneConfig, email = Prelude.Nothing,
+       sms = Prelude.Nothing, telephony = Prelude.Nothing}
+instance ToResourceProperties CommunicationTimeConfigProperty where
+  toResourceProperties CommunicationTimeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.CommunicationTimeConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LocalTimeZoneConfig" JSON..= localTimeZoneConfig]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Email" Prelude.<$> email,
+                               (JSON..=) "Sms" Prelude.<$> sms,
+                               (JSON..=) "Telephony" Prelude.<$> telephony]))}
+instance JSON.ToJSON CommunicationTimeConfigProperty where
+  toJSON CommunicationTimeConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LocalTimeZoneConfig" JSON..= localTimeZoneConfig]
+              (Prelude.catMaybes
+                 [(JSON..=) "Email" Prelude.<$> email,
+                  (JSON..=) "Sms" Prelude.<$> sms,
+                  (JSON..=) "Telephony" Prelude.<$> telephony])))
+instance Property "Email" CommunicationTimeConfigProperty where
+  type PropertyType "Email" CommunicationTimeConfigProperty = TimeWindowProperty
+  set newValue CommunicationTimeConfigProperty {..}
+    = CommunicationTimeConfigProperty
+        {email = Prelude.pure newValue, ..}
+instance Property "LocalTimeZoneConfig" CommunicationTimeConfigProperty where
+  type PropertyType "LocalTimeZoneConfig" CommunicationTimeConfigProperty = LocalTimeZoneConfigProperty
+  set newValue CommunicationTimeConfigProperty {..}
+    = CommunicationTimeConfigProperty
+        {localTimeZoneConfig = newValue, ..}
+instance Property "Sms" CommunicationTimeConfigProperty where
+  type PropertyType "Sms" CommunicationTimeConfigProperty = TimeWindowProperty
+  set newValue CommunicationTimeConfigProperty {..}
+    = CommunicationTimeConfigProperty {sms = Prelude.pure newValue, ..}
+instance Property "Telephony" CommunicationTimeConfigProperty where
+  type PropertyType "Telephony" CommunicationTimeConfigProperty = TimeWindowProperty
+  set newValue CommunicationTimeConfigProperty {..}
+    = CommunicationTimeConfigProperty
+        {telephony = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationTimeConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationTimeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/CommunicationTimeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.CommunicationTimeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CommunicationTimeConfigProperty :: Prelude.Type
+instance ToResourceProperties CommunicationTimeConfigProperty
+instance Prelude.Eq CommunicationTimeConfigProperty
+instance Prelude.Show CommunicationTimeConfigProperty
+instance JSON.ToJSON CommunicationTimeConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/DailyHourProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/DailyHourProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/DailyHourProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.DailyHourProperty (
+        module Exports, DailyHourProperty(..), mkDailyHourProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.TimeRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DailyHourProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-dailyhour.html>
+    DailyHourProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-dailyhour.html#cfn-connectcampaignsv2-campaign-dailyhour-key>
+                       key :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-dailyhour.html#cfn-connectcampaignsv2-campaign-dailyhour-value>
+                       value :: (Prelude.Maybe [TimeRangeProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDailyHourProperty :: DailyHourProperty
+mkDailyHourProperty
+  = DailyHourProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties DailyHourProperty where
+  toResourceProperties DailyHourProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.DailyHour",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON DailyHourProperty where
+  toJSON DailyHourProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Key" DailyHourProperty where
+  type PropertyType "Key" DailyHourProperty = Value Prelude.Text
+  set newValue DailyHourProperty {..}
+    = DailyHourProperty {key = Prelude.pure newValue, ..}
+instance Property "Value" DailyHourProperty where
+  type PropertyType "Value" DailyHourProperty = [TimeRangeProperty]
+  set newValue DailyHourProperty {..}
+    = DailyHourProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/DailyHourProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/DailyHourProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/DailyHourProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.DailyHourProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DailyHourProperty :: Prelude.Type
+instance ToResourceProperties DailyHourProperty
+instance Prelude.Eq DailyHourProperty
+instance Prelude.Show DailyHourProperty
+instance JSON.ToJSON DailyHourProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailChannelSubtypeConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailChannelSubtypeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailChannelSubtypeConfigProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EmailChannelSubtypeConfigProperty (
+        module Exports, EmailChannelSubtypeConfigProperty(..),
+        mkEmailChannelSubtypeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundModeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EmailChannelSubtypeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailchannelsubtypeconfig.html>
+    EmailChannelSubtypeConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailchannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-emailchannelsubtypeconfig-capacity>
+                                       capacity :: (Prelude.Maybe (Value Prelude.Double)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailchannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-emailchannelsubtypeconfig-defaultoutboundconfig>
+                                       defaultOutboundConfig :: EmailOutboundConfigProperty,
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailchannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-emailchannelsubtypeconfig-outboundmode>
+                                       outboundMode :: EmailOutboundModeProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEmailChannelSubtypeConfigProperty ::
+  EmailOutboundConfigProperty
+  -> EmailOutboundModeProperty -> EmailChannelSubtypeConfigProperty
+mkEmailChannelSubtypeConfigProperty
+  defaultOutboundConfig
+  outboundMode
+  = EmailChannelSubtypeConfigProperty
+      {haddock_workaround_ = (),
+       defaultOutboundConfig = defaultOutboundConfig,
+       outboundMode = outboundMode, capacity = Prelude.Nothing}
+instance ToResourceProperties EmailChannelSubtypeConfigProperty where
+  toResourceProperties EmailChannelSubtypeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.EmailChannelSubtypeConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DefaultOutboundConfig" JSON..= defaultOutboundConfig,
+                            "OutboundMode" JSON..= outboundMode]
+                           (Prelude.catMaybes [(JSON..=) "Capacity" Prelude.<$> capacity]))}
+instance JSON.ToJSON EmailChannelSubtypeConfigProperty where
+  toJSON EmailChannelSubtypeConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DefaultOutboundConfig" JSON..= defaultOutboundConfig,
+               "OutboundMode" JSON..= outboundMode]
+              (Prelude.catMaybes [(JSON..=) "Capacity" Prelude.<$> capacity])))
+instance Property "Capacity" EmailChannelSubtypeConfigProperty where
+  type PropertyType "Capacity" EmailChannelSubtypeConfigProperty = Value Prelude.Double
+  set newValue EmailChannelSubtypeConfigProperty {..}
+    = EmailChannelSubtypeConfigProperty
+        {capacity = Prelude.pure newValue, ..}
+instance Property "DefaultOutboundConfig" EmailChannelSubtypeConfigProperty where
+  type PropertyType "DefaultOutboundConfig" EmailChannelSubtypeConfigProperty = EmailOutboundConfigProperty
+  set newValue EmailChannelSubtypeConfigProperty {..}
+    = EmailChannelSubtypeConfigProperty
+        {defaultOutboundConfig = newValue, ..}
+instance Property "OutboundMode" EmailChannelSubtypeConfigProperty where
+  type PropertyType "OutboundMode" EmailChannelSubtypeConfigProperty = EmailOutboundModeProperty
+  set newValue EmailChannelSubtypeConfigProperty {..}
+    = EmailChannelSubtypeConfigProperty {outboundMode = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailChannelSubtypeConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailChannelSubtypeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailChannelSubtypeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EmailChannelSubtypeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EmailChannelSubtypeConfigProperty :: Prelude.Type
+instance ToResourceProperties EmailChannelSubtypeConfigProperty
+instance Prelude.Eq EmailChannelSubtypeConfigProperty
+instance Prelude.Show EmailChannelSubtypeConfigProperty
+instance JSON.ToJSON EmailChannelSubtypeConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundConfigProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundConfigProperty (
+        EmailOutboundConfigProperty(..), mkEmailOutboundConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EmailOutboundConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailoutboundconfig.html>
+    EmailOutboundConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailoutboundconfig.html#cfn-connectcampaignsv2-campaign-emailoutboundconfig-connectsourceemailaddress>
+                                 connectSourceEmailAddress :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailoutboundconfig.html#cfn-connectcampaignsv2-campaign-emailoutboundconfig-sourceemailaddressdisplayname>
+                                 sourceEmailAddressDisplayName :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailoutboundconfig.html#cfn-connectcampaignsv2-campaign-emailoutboundconfig-wisdomtemplatearn>
+                                 wisdomTemplateArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEmailOutboundConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> EmailOutboundConfigProperty
+mkEmailOutboundConfigProperty
+  connectSourceEmailAddress
+  wisdomTemplateArn
+  = EmailOutboundConfigProperty
+      {haddock_workaround_ = (),
+       connectSourceEmailAddress = connectSourceEmailAddress,
+       wisdomTemplateArn = wisdomTemplateArn,
+       sourceEmailAddressDisplayName = Prelude.Nothing}
+instance ToResourceProperties EmailOutboundConfigProperty where
+  toResourceProperties EmailOutboundConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.EmailOutboundConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConnectSourceEmailAddress" JSON..= connectSourceEmailAddress,
+                            "WisdomTemplateArn" JSON..= wisdomTemplateArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SourceEmailAddressDisplayName"
+                                 Prelude.<$> sourceEmailAddressDisplayName]))}
+instance JSON.ToJSON EmailOutboundConfigProperty where
+  toJSON EmailOutboundConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConnectSourceEmailAddress" JSON..= connectSourceEmailAddress,
+               "WisdomTemplateArn" JSON..= wisdomTemplateArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "SourceEmailAddressDisplayName"
+                    Prelude.<$> sourceEmailAddressDisplayName])))
+instance Property "ConnectSourceEmailAddress" EmailOutboundConfigProperty where
+  type PropertyType "ConnectSourceEmailAddress" EmailOutboundConfigProperty = Value Prelude.Text
+  set newValue EmailOutboundConfigProperty {..}
+    = EmailOutboundConfigProperty
+        {connectSourceEmailAddress = newValue, ..}
+instance Property "SourceEmailAddressDisplayName" EmailOutboundConfigProperty where
+  type PropertyType "SourceEmailAddressDisplayName" EmailOutboundConfigProperty = Value Prelude.Text
+  set newValue EmailOutboundConfigProperty {..}
+    = EmailOutboundConfigProperty
+        {sourceEmailAddressDisplayName = Prelude.pure newValue, ..}
+instance Property "WisdomTemplateArn" EmailOutboundConfigProperty where
+  type PropertyType "WisdomTemplateArn" EmailOutboundConfigProperty = Value Prelude.Text
+  set newValue EmailOutboundConfigProperty {..}
+    = EmailOutboundConfigProperty {wisdomTemplateArn = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EmailOutboundConfigProperty :: Prelude.Type
+instance ToResourceProperties EmailOutboundConfigProperty
+instance Prelude.Eq EmailOutboundConfigProperty
+instance Prelude.Show EmailOutboundConfigProperty
+instance JSON.ToJSON EmailOutboundConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundModeProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundModeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundModeProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundModeProperty (
+        EmailOutboundModeProperty(..), mkEmailOutboundModeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+data EmailOutboundModeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailoutboundmode.html>
+    EmailOutboundModeProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-emailoutboundmode.html#cfn-connectcampaignsv2-campaign-emailoutboundmode-agentlessconfig>
+                               agentlessConfig :: (Prelude.Maybe JSON.Object)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEmailOutboundModeProperty :: EmailOutboundModeProperty
+mkEmailOutboundModeProperty
+  = EmailOutboundModeProperty
+      {haddock_workaround_ = (), agentlessConfig = Prelude.Nothing}
+instance ToResourceProperties EmailOutboundModeProperty where
+  toResourceProperties EmailOutboundModeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.EmailOutboundMode",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AgentlessConfig" Prelude.<$> agentlessConfig])}
+instance JSON.ToJSON EmailOutboundModeProperty where
+  toJSON EmailOutboundModeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AgentlessConfig" Prelude.<$> agentlessConfig]))
+instance Property "AgentlessConfig" EmailOutboundModeProperty where
+  type PropertyType "AgentlessConfig" EmailOutboundModeProperty = JSON.Object
+  set newValue EmailOutboundModeProperty {..}
+    = EmailOutboundModeProperty
+        {agentlessConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundModeProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundModeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EmailOutboundModeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundModeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EmailOutboundModeProperty :: Prelude.Type
+instance ToResourceProperties EmailOutboundModeProperty
+instance Prelude.Eq EmailOutboundModeProperty
+instance Prelude.Show EmailOutboundModeProperty
+instance JSON.ToJSON EmailOutboundModeProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EventTriggerProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EventTriggerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EventTriggerProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EventTriggerProperty (
+        EventTriggerProperty(..), mkEventTriggerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EventTriggerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-eventtrigger.html>
+    EventTriggerProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-eventtrigger.html#cfn-connectcampaignsv2-campaign-eventtrigger-customerprofilesdomainarn>
+                          customerProfilesDomainArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventTriggerProperty :: EventTriggerProperty
+mkEventTriggerProperty
+  = EventTriggerProperty
+      {haddock_workaround_ = (),
+       customerProfilesDomainArn = Prelude.Nothing}
+instance ToResourceProperties EventTriggerProperty where
+  toResourceProperties EventTriggerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.EventTrigger",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CustomerProfilesDomainArn"
+                              Prelude.<$> customerProfilesDomainArn])}
+instance JSON.ToJSON EventTriggerProperty where
+  toJSON EventTriggerProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CustomerProfilesDomainArn"
+                 Prelude.<$> customerProfilesDomainArn]))
+instance Property "CustomerProfilesDomainArn" EventTriggerProperty where
+  type PropertyType "CustomerProfilesDomainArn" EventTriggerProperty = Value Prelude.Text
+  set newValue EventTriggerProperty {..}
+    = EventTriggerProperty
+        {customerProfilesDomainArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/EventTriggerProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EventTriggerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/EventTriggerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.EventTriggerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EventTriggerProperty :: Prelude.Type
+instance ToResourceProperties EventTriggerProperty
+instance Prelude.Eq EventTriggerProperty
+instance Prelude.Show EventTriggerProperty
+instance JSON.ToJSON EventTriggerProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/LocalTimeZoneConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/LocalTimeZoneConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/LocalTimeZoneConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.LocalTimeZoneConfigProperty (
+        LocalTimeZoneConfigProperty(..), mkLocalTimeZoneConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LocalTimeZoneConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-localtimezoneconfig.html>
+    LocalTimeZoneConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-localtimezoneconfig.html#cfn-connectcampaignsv2-campaign-localtimezoneconfig-defaulttimezone>
+                                 defaultTimeZone :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-localtimezoneconfig.html#cfn-connectcampaignsv2-campaign-localtimezoneconfig-localtimezonedetection>
+                                 localTimeZoneDetection :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalTimeZoneConfigProperty :: LocalTimeZoneConfigProperty
+mkLocalTimeZoneConfigProperty
+  = LocalTimeZoneConfigProperty
+      {haddock_workaround_ = (), defaultTimeZone = Prelude.Nothing,
+       localTimeZoneDetection = Prelude.Nothing}
+instance ToResourceProperties LocalTimeZoneConfigProperty where
+  toResourceProperties LocalTimeZoneConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.LocalTimeZoneConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DefaultTimeZone" Prelude.<$> defaultTimeZone,
+                            (JSON..=) "LocalTimeZoneDetection"
+                              Prelude.<$> localTimeZoneDetection])}
+instance JSON.ToJSON LocalTimeZoneConfigProperty where
+  toJSON LocalTimeZoneConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DefaultTimeZone" Prelude.<$> defaultTimeZone,
+               (JSON..=) "LocalTimeZoneDetection"
+                 Prelude.<$> localTimeZoneDetection]))
+instance Property "DefaultTimeZone" LocalTimeZoneConfigProperty where
+  type PropertyType "DefaultTimeZone" LocalTimeZoneConfigProperty = Value Prelude.Text
+  set newValue LocalTimeZoneConfigProperty {..}
+    = LocalTimeZoneConfigProperty
+        {defaultTimeZone = Prelude.pure newValue, ..}
+instance Property "LocalTimeZoneDetection" LocalTimeZoneConfigProperty where
+  type PropertyType "LocalTimeZoneDetection" LocalTimeZoneConfigProperty = ValueList Prelude.Text
+  set newValue LocalTimeZoneConfigProperty {..}
+    = LocalTimeZoneConfigProperty
+        {localTimeZoneDetection = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/LocalTimeZoneConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/LocalTimeZoneConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/LocalTimeZoneConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.LocalTimeZoneConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LocalTimeZoneConfigProperty :: Prelude.Type
+instance ToResourceProperties LocalTimeZoneConfigProperty
+instance Prelude.Eq LocalTimeZoneConfigProperty
+instance Prelude.Show LocalTimeZoneConfigProperty
+instance JSON.ToJSON LocalTimeZoneConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/OpenHoursProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/OpenHoursProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/OpenHoursProperty.hs
@@ -0,0 +1,31 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.OpenHoursProperty (
+        module Exports, OpenHoursProperty(..), mkOpenHoursProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.DailyHourProperty as Exports
+import Stratosphere.ResourceProperties
+data OpenHoursProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-openhours.html>
+    OpenHoursProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-openhours.html#cfn-connectcampaignsv2-campaign-openhours-dailyhours>
+                       dailyHours :: [DailyHourProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOpenHoursProperty :: [DailyHourProperty] -> OpenHoursProperty
+mkOpenHoursProperty dailyHours
+  = OpenHoursProperty
+      {haddock_workaround_ = (), dailyHours = dailyHours}
+instance ToResourceProperties OpenHoursProperty where
+  toResourceProperties OpenHoursProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.OpenHours",
+         supportsTags = Prelude.False,
+         properties = ["DailyHours" JSON..= dailyHours]}
+instance JSON.ToJSON OpenHoursProperty where
+  toJSON OpenHoursProperty {..}
+    = JSON.object ["DailyHours" JSON..= dailyHours]
+instance Property "DailyHours" OpenHoursProperty where
+  type PropertyType "DailyHours" OpenHoursProperty = [DailyHourProperty]
+  set newValue OpenHoursProperty {..}
+    = OpenHoursProperty {dailyHours = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/OpenHoursProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/OpenHoursProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/OpenHoursProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.OpenHoursProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OpenHoursProperty :: Prelude.Type
+instance ToResourceProperties OpenHoursProperty
+instance Prelude.Eq OpenHoursProperty
+instance Prelude.Show OpenHoursProperty
+instance JSON.ToJSON OpenHoursProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/PredictiveConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PredictiveConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PredictiveConfigProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.PredictiveConfigProperty (
+        PredictiveConfigProperty(..), mkPredictiveConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PredictiveConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-predictiveconfig.html>
+    PredictiveConfigProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-predictiveconfig.html#cfn-connectcampaignsv2-campaign-predictiveconfig-bandwidthallocation>
+                              bandwidthAllocation :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPredictiveConfigProperty ::
+  Value Prelude.Double -> PredictiveConfigProperty
+mkPredictiveConfigProperty bandwidthAllocation
+  = PredictiveConfigProperty
+      {haddock_workaround_ = (),
+       bandwidthAllocation = bandwidthAllocation}
+instance ToResourceProperties PredictiveConfigProperty where
+  toResourceProperties PredictiveConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.PredictiveConfig",
+         supportsTags = Prelude.False,
+         properties = ["BandwidthAllocation" JSON..= bandwidthAllocation]}
+instance JSON.ToJSON PredictiveConfigProperty where
+  toJSON PredictiveConfigProperty {..}
+    = JSON.object ["BandwidthAllocation" JSON..= bandwidthAllocation]
+instance Property "BandwidthAllocation" PredictiveConfigProperty where
+  type PropertyType "BandwidthAllocation" PredictiveConfigProperty = Value Prelude.Double
+  set newValue PredictiveConfigProperty {..}
+    = PredictiveConfigProperty {bandwidthAllocation = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/PredictiveConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PredictiveConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PredictiveConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.PredictiveConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PredictiveConfigProperty :: Prelude.Type
+instance ToResourceProperties PredictiveConfigProperty
+instance Prelude.Eq PredictiveConfigProperty
+instance Prelude.Show PredictiveConfigProperty
+instance JSON.ToJSON PredictiveConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/PreviewConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PreviewConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PreviewConfigProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.PreviewConfigProperty (
+        module Exports, PreviewConfigProperty(..), mkPreviewConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.TimeoutConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PreviewConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-previewconfig.html>
+    PreviewConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-previewconfig.html#cfn-connectcampaignsv2-campaign-previewconfig-agentactions>
+                           agentActions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-previewconfig.html#cfn-connectcampaignsv2-campaign-previewconfig-bandwidthallocation>
+                           bandwidthAllocation :: (Value Prelude.Double),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-previewconfig.html#cfn-connectcampaignsv2-campaign-previewconfig-timeoutconfig>
+                           timeoutConfig :: TimeoutConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPreviewConfigProperty ::
+  Value Prelude.Double
+  -> TimeoutConfigProperty -> PreviewConfigProperty
+mkPreviewConfigProperty bandwidthAllocation timeoutConfig
+  = PreviewConfigProperty
+      {haddock_workaround_ = (),
+       bandwidthAllocation = bandwidthAllocation,
+       timeoutConfig = timeoutConfig, agentActions = Prelude.Nothing}
+instance ToResourceProperties PreviewConfigProperty where
+  toResourceProperties PreviewConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.PreviewConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BandwidthAllocation" JSON..= bandwidthAllocation,
+                            "TimeoutConfig" JSON..= timeoutConfig]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AgentActions" Prelude.<$> agentActions]))}
+instance JSON.ToJSON PreviewConfigProperty where
+  toJSON PreviewConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BandwidthAllocation" JSON..= bandwidthAllocation,
+               "TimeoutConfig" JSON..= timeoutConfig]
+              (Prelude.catMaybes
+                 [(JSON..=) "AgentActions" Prelude.<$> agentActions])))
+instance Property "AgentActions" PreviewConfigProperty where
+  type PropertyType "AgentActions" PreviewConfigProperty = ValueList Prelude.Text
+  set newValue PreviewConfigProperty {..}
+    = PreviewConfigProperty {agentActions = Prelude.pure newValue, ..}
+instance Property "BandwidthAllocation" PreviewConfigProperty where
+  type PropertyType "BandwidthAllocation" PreviewConfigProperty = Value Prelude.Double
+  set newValue PreviewConfigProperty {..}
+    = PreviewConfigProperty {bandwidthAllocation = newValue, ..}
+instance Property "TimeoutConfig" PreviewConfigProperty where
+  type PropertyType "TimeoutConfig" PreviewConfigProperty = TimeoutConfigProperty
+  set newValue PreviewConfigProperty {..}
+    = PreviewConfigProperty {timeoutConfig = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/PreviewConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PreviewConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/PreviewConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.PreviewConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PreviewConfigProperty :: Prelude.Type
+instance ToResourceProperties PreviewConfigProperty
+instance Prelude.Eq PreviewConfigProperty
+instance Prelude.Show PreviewConfigProperty
+instance JSON.ToJSON PreviewConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/ProgressiveConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ProgressiveConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ProgressiveConfigProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.ProgressiveConfigProperty (
+        ProgressiveConfigProperty(..), mkProgressiveConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProgressiveConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-progressiveconfig.html>
+    ProgressiveConfigProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-progressiveconfig.html#cfn-connectcampaignsv2-campaign-progressiveconfig-bandwidthallocation>
+                               bandwidthAllocation :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProgressiveConfigProperty ::
+  Value Prelude.Double -> ProgressiveConfigProperty
+mkProgressiveConfigProperty bandwidthAllocation
+  = ProgressiveConfigProperty
+      {haddock_workaround_ = (),
+       bandwidthAllocation = bandwidthAllocation}
+instance ToResourceProperties ProgressiveConfigProperty where
+  toResourceProperties ProgressiveConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.ProgressiveConfig",
+         supportsTags = Prelude.False,
+         properties = ["BandwidthAllocation" JSON..= bandwidthAllocation]}
+instance JSON.ToJSON ProgressiveConfigProperty where
+  toJSON ProgressiveConfigProperty {..}
+    = JSON.object ["BandwidthAllocation" JSON..= bandwidthAllocation]
+instance Property "BandwidthAllocation" ProgressiveConfigProperty where
+  type PropertyType "BandwidthAllocation" ProgressiveConfigProperty = Value Prelude.Double
+  set newValue ProgressiveConfigProperty {..}
+    = ProgressiveConfigProperty {bandwidthAllocation = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/ProgressiveConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ProgressiveConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ProgressiveConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.ProgressiveConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProgressiveConfigProperty :: Prelude.Type
+instance ToResourceProperties ProgressiveConfigProperty
+instance Prelude.Eq ProgressiveConfigProperty
+instance Prelude.Show ProgressiveConfigProperty
+instance JSON.ToJSON ProgressiveConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodProperty (
+        RestrictedPeriodProperty(..), mkRestrictedPeriodProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RestrictedPeriodProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-restrictedperiod.html>
+    RestrictedPeriodProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-restrictedperiod.html#cfn-connectcampaignsv2-campaign-restrictedperiod-enddate>
+                              endDate :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-restrictedperiod.html#cfn-connectcampaignsv2-campaign-restrictedperiod-name>
+                              name :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-restrictedperiod.html#cfn-connectcampaignsv2-campaign-restrictedperiod-startdate>
+                              startDate :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestrictedPeriodProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> RestrictedPeriodProperty
+mkRestrictedPeriodProperty endDate startDate
+  = RestrictedPeriodProperty
+      {haddock_workaround_ = (), endDate = endDate,
+       startDate = startDate, name = Prelude.Nothing}
+instance ToResourceProperties RestrictedPeriodProperty where
+  toResourceProperties RestrictedPeriodProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.RestrictedPeriod",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EndDate" JSON..= endDate, "StartDate" JSON..= startDate]
+                           (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name]))}
+instance JSON.ToJSON RestrictedPeriodProperty where
+  toJSON RestrictedPeriodProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EndDate" JSON..= endDate, "StartDate" JSON..= startDate]
+              (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name])))
+instance Property "EndDate" RestrictedPeriodProperty where
+  type PropertyType "EndDate" RestrictedPeriodProperty = Value Prelude.Text
+  set newValue RestrictedPeriodProperty {..}
+    = RestrictedPeriodProperty {endDate = newValue, ..}
+instance Property "Name" RestrictedPeriodProperty where
+  type PropertyType "Name" RestrictedPeriodProperty = Value Prelude.Text
+  set newValue RestrictedPeriodProperty {..}
+    = RestrictedPeriodProperty {name = Prelude.pure newValue, ..}
+instance Property "StartDate" RestrictedPeriodProperty where
+  type PropertyType "StartDate" RestrictedPeriodProperty = Value Prelude.Text
+  set newValue RestrictedPeriodProperty {..}
+    = RestrictedPeriodProperty {startDate = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RestrictedPeriodProperty :: Prelude.Type
+instance ToResourceProperties RestrictedPeriodProperty
+instance Prelude.Eq RestrictedPeriodProperty
+instance Prelude.Show RestrictedPeriodProperty
+instance JSON.ToJSON RestrictedPeriodProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodsProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodsProperty (
+        module Exports, RestrictedPeriodsProperty(..),
+        mkRestrictedPeriodsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodProperty as Exports
+import Stratosphere.ResourceProperties
+data RestrictedPeriodsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-restrictedperiods.html>
+    RestrictedPeriodsProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-restrictedperiods.html#cfn-connectcampaignsv2-campaign-restrictedperiods-restrictedperiodlist>
+                               restrictedPeriodList :: [RestrictedPeriodProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestrictedPeriodsProperty ::
+  [RestrictedPeriodProperty] -> RestrictedPeriodsProperty
+mkRestrictedPeriodsProperty restrictedPeriodList
+  = RestrictedPeriodsProperty
+      {haddock_workaround_ = (),
+       restrictedPeriodList = restrictedPeriodList}
+instance ToResourceProperties RestrictedPeriodsProperty where
+  toResourceProperties RestrictedPeriodsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.RestrictedPeriods",
+         supportsTags = Prelude.False,
+         properties = ["RestrictedPeriodList" JSON..= restrictedPeriodList]}
+instance JSON.ToJSON RestrictedPeriodsProperty where
+  toJSON RestrictedPeriodsProperty {..}
+    = JSON.object ["RestrictedPeriodList" JSON..= restrictedPeriodList]
+instance Property "RestrictedPeriodList" RestrictedPeriodsProperty where
+  type PropertyType "RestrictedPeriodList" RestrictedPeriodsProperty = [RestrictedPeriodProperty]
+  set newValue RestrictedPeriodsProperty {..}
+    = RestrictedPeriodsProperty {restrictedPeriodList = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodsProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/RestrictedPeriodsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RestrictedPeriodsProperty :: Prelude.Type
+instance ToResourceProperties RestrictedPeriodsProperty
+instance Prelude.Eq RestrictedPeriodsProperty
+instance Prelude.Show RestrictedPeriodsProperty
+instance JSON.ToJSON RestrictedPeriodsProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/ScheduleProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ScheduleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ScheduleProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.ScheduleProperty (
+        ScheduleProperty(..), mkScheduleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScheduleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-schedule.html>
+    ScheduleProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-schedule.html#cfn-connectcampaignsv2-campaign-schedule-endtime>
+                      endTime :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-schedule.html#cfn-connectcampaignsv2-campaign-schedule-refreshfrequency>
+                      refreshFrequency :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-schedule.html#cfn-connectcampaignsv2-campaign-schedule-starttime>
+                      startTime :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScheduleProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ScheduleProperty
+mkScheduleProperty endTime startTime
+  = ScheduleProperty
+      {haddock_workaround_ = (), endTime = endTime,
+       startTime = startTime, refreshFrequency = Prelude.Nothing}
+instance ToResourceProperties ScheduleProperty where
+  toResourceProperties ScheduleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.Schedule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EndTime" JSON..= endTime, "StartTime" JSON..= startTime]
+                           (Prelude.catMaybes
+                              [(JSON..=) "RefreshFrequency" Prelude.<$> refreshFrequency]))}
+instance JSON.ToJSON ScheduleProperty where
+  toJSON ScheduleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EndTime" JSON..= endTime, "StartTime" JSON..= startTime]
+              (Prelude.catMaybes
+                 [(JSON..=) "RefreshFrequency" Prelude.<$> refreshFrequency])))
+instance Property "EndTime" ScheduleProperty where
+  type PropertyType "EndTime" ScheduleProperty = Value Prelude.Text
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {endTime = newValue, ..}
+instance Property "RefreshFrequency" ScheduleProperty where
+  type PropertyType "RefreshFrequency" ScheduleProperty = Value Prelude.Text
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {refreshFrequency = Prelude.pure newValue, ..}
+instance Property "StartTime" ScheduleProperty where
+  type PropertyType "StartTime" ScheduleProperty = Value Prelude.Text
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {startTime = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/ScheduleProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ScheduleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/ScheduleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.ScheduleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScheduleProperty :: Prelude.Type
+instance ToResourceProperties ScheduleProperty
+instance Prelude.Eq ScheduleProperty
+instance Prelude.Show ScheduleProperty
+instance JSON.ToJSON ScheduleProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsChannelSubtypeConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsChannelSubtypeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsChannelSubtypeConfigProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SmsChannelSubtypeConfigProperty (
+        module Exports, SmsChannelSubtypeConfigProperty(..),
+        mkSmsChannelSubtypeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundModeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SmsChannelSubtypeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smschannelsubtypeconfig.html>
+    SmsChannelSubtypeConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smschannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-smschannelsubtypeconfig-capacity>
+                                     capacity :: (Prelude.Maybe (Value Prelude.Double)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smschannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-smschannelsubtypeconfig-defaultoutboundconfig>
+                                     defaultOutboundConfig :: SmsOutboundConfigProperty,
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smschannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-smschannelsubtypeconfig-outboundmode>
+                                     outboundMode :: SmsOutboundModeProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSmsChannelSubtypeConfigProperty ::
+  SmsOutboundConfigProperty
+  -> SmsOutboundModeProperty -> SmsChannelSubtypeConfigProperty
+mkSmsChannelSubtypeConfigProperty
+  defaultOutboundConfig
+  outboundMode
+  = SmsChannelSubtypeConfigProperty
+      {haddock_workaround_ = (),
+       defaultOutboundConfig = defaultOutboundConfig,
+       outboundMode = outboundMode, capacity = Prelude.Nothing}
+instance ToResourceProperties SmsChannelSubtypeConfigProperty where
+  toResourceProperties SmsChannelSubtypeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.SmsChannelSubtypeConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DefaultOutboundConfig" JSON..= defaultOutboundConfig,
+                            "OutboundMode" JSON..= outboundMode]
+                           (Prelude.catMaybes [(JSON..=) "Capacity" Prelude.<$> capacity]))}
+instance JSON.ToJSON SmsChannelSubtypeConfigProperty where
+  toJSON SmsChannelSubtypeConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DefaultOutboundConfig" JSON..= defaultOutboundConfig,
+               "OutboundMode" JSON..= outboundMode]
+              (Prelude.catMaybes [(JSON..=) "Capacity" Prelude.<$> capacity])))
+instance Property "Capacity" SmsChannelSubtypeConfigProperty where
+  type PropertyType "Capacity" SmsChannelSubtypeConfigProperty = Value Prelude.Double
+  set newValue SmsChannelSubtypeConfigProperty {..}
+    = SmsChannelSubtypeConfigProperty
+        {capacity = Prelude.pure newValue, ..}
+instance Property "DefaultOutboundConfig" SmsChannelSubtypeConfigProperty where
+  type PropertyType "DefaultOutboundConfig" SmsChannelSubtypeConfigProperty = SmsOutboundConfigProperty
+  set newValue SmsChannelSubtypeConfigProperty {..}
+    = SmsChannelSubtypeConfigProperty
+        {defaultOutboundConfig = newValue, ..}
+instance Property "OutboundMode" SmsChannelSubtypeConfigProperty where
+  type PropertyType "OutboundMode" SmsChannelSubtypeConfigProperty = SmsOutboundModeProperty
+  set newValue SmsChannelSubtypeConfigProperty {..}
+    = SmsChannelSubtypeConfigProperty {outboundMode = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsChannelSubtypeConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsChannelSubtypeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsChannelSubtypeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SmsChannelSubtypeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SmsChannelSubtypeConfigProperty :: Prelude.Type
+instance ToResourceProperties SmsChannelSubtypeConfigProperty
+instance Prelude.Eq SmsChannelSubtypeConfigProperty
+instance Prelude.Show SmsChannelSubtypeConfigProperty
+instance JSON.ToJSON SmsChannelSubtypeConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundConfigProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundConfigProperty (
+        SmsOutboundConfigProperty(..), mkSmsOutboundConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SmsOutboundConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smsoutboundconfig.html>
+    SmsOutboundConfigProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smsoutboundconfig.html#cfn-connectcampaignsv2-campaign-smsoutboundconfig-connectsourcephonenumberarn>
+                               connectSourcePhoneNumberArn :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smsoutboundconfig.html#cfn-connectcampaignsv2-campaign-smsoutboundconfig-wisdomtemplatearn>
+                               wisdomTemplateArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSmsOutboundConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SmsOutboundConfigProperty
+mkSmsOutboundConfigProperty
+  connectSourcePhoneNumberArn
+  wisdomTemplateArn
+  = SmsOutboundConfigProperty
+      {haddock_workaround_ = (),
+       connectSourcePhoneNumberArn = connectSourcePhoneNumberArn,
+       wisdomTemplateArn = wisdomTemplateArn}
+instance ToResourceProperties SmsOutboundConfigProperty where
+  toResourceProperties SmsOutboundConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.SmsOutboundConfig",
+         supportsTags = Prelude.False,
+         properties = ["ConnectSourcePhoneNumberArn"
+                         JSON..= connectSourcePhoneNumberArn,
+                       "WisdomTemplateArn" JSON..= wisdomTemplateArn]}
+instance JSON.ToJSON SmsOutboundConfigProperty where
+  toJSON SmsOutboundConfigProperty {..}
+    = JSON.object
+        ["ConnectSourcePhoneNumberArn" JSON..= connectSourcePhoneNumberArn,
+         "WisdomTemplateArn" JSON..= wisdomTemplateArn]
+instance Property "ConnectSourcePhoneNumberArn" SmsOutboundConfigProperty where
+  type PropertyType "ConnectSourcePhoneNumberArn" SmsOutboundConfigProperty = Value Prelude.Text
+  set newValue SmsOutboundConfigProperty {..}
+    = SmsOutboundConfigProperty
+        {connectSourcePhoneNumberArn = newValue, ..}
+instance Property "WisdomTemplateArn" SmsOutboundConfigProperty where
+  type PropertyType "WisdomTemplateArn" SmsOutboundConfigProperty = Value Prelude.Text
+  set newValue SmsOutboundConfigProperty {..}
+    = SmsOutboundConfigProperty {wisdomTemplateArn = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SmsOutboundConfigProperty :: Prelude.Type
+instance ToResourceProperties SmsOutboundConfigProperty
+instance Prelude.Eq SmsOutboundConfigProperty
+instance Prelude.Show SmsOutboundConfigProperty
+instance JSON.ToJSON SmsOutboundConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundModeProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundModeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundModeProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundModeProperty (
+        SmsOutboundModeProperty(..), mkSmsOutboundModeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+data SmsOutboundModeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smsoutboundmode.html>
+    SmsOutboundModeProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-smsoutboundmode.html#cfn-connectcampaignsv2-campaign-smsoutboundmode-agentlessconfig>
+                             agentlessConfig :: (Prelude.Maybe JSON.Object)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSmsOutboundModeProperty :: SmsOutboundModeProperty
+mkSmsOutboundModeProperty
+  = SmsOutboundModeProperty
+      {haddock_workaround_ = (), agentlessConfig = Prelude.Nothing}
+instance ToResourceProperties SmsOutboundModeProperty where
+  toResourceProperties SmsOutboundModeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.SmsOutboundMode",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AgentlessConfig" Prelude.<$> agentlessConfig])}
+instance JSON.ToJSON SmsOutboundModeProperty where
+  toJSON SmsOutboundModeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AgentlessConfig" Prelude.<$> agentlessConfig]))
+instance Property "AgentlessConfig" SmsOutboundModeProperty where
+  type PropertyType "AgentlessConfig" SmsOutboundModeProperty = JSON.Object
+  set newValue SmsOutboundModeProperty {..}
+    = SmsOutboundModeProperty
+        {agentlessConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundModeProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundModeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SmsOutboundModeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundModeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SmsOutboundModeProperty :: Prelude.Type
+instance ToResourceProperties SmsOutboundModeProperty
+instance Prelude.Eq SmsOutboundModeProperty
+instance Prelude.Show SmsOutboundModeProperty
+instance JSON.ToJSON SmsOutboundModeProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SourceProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SourceProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SourceProperty (
+        module Exports, SourceProperty(..), mkSourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.EventTriggerProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-source.html>
+    SourceProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-source.html#cfn-connectcampaignsv2-campaign-source-customerprofilessegmentarn>
+                    customerProfilesSegmentArn :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-source.html#cfn-connectcampaignsv2-campaign-source-eventtrigger>
+                    eventTrigger :: (Prelude.Maybe EventTriggerProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSourceProperty :: SourceProperty
+mkSourceProperty
+  = SourceProperty
+      {haddock_workaround_ = (),
+       customerProfilesSegmentArn = Prelude.Nothing,
+       eventTrigger = Prelude.Nothing}
+instance ToResourceProperties SourceProperty where
+  toResourceProperties SourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.Source",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CustomerProfilesSegmentArn"
+                              Prelude.<$> customerProfilesSegmentArn,
+                            (JSON..=) "EventTrigger" Prelude.<$> eventTrigger])}
+instance JSON.ToJSON SourceProperty where
+  toJSON SourceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CustomerProfilesSegmentArn"
+                 Prelude.<$> customerProfilesSegmentArn,
+               (JSON..=) "EventTrigger" Prelude.<$> eventTrigger]))
+instance Property "CustomerProfilesSegmentArn" SourceProperty where
+  type PropertyType "CustomerProfilesSegmentArn" SourceProperty = Value Prelude.Text
+  set newValue SourceProperty {..}
+    = SourceProperty
+        {customerProfilesSegmentArn = Prelude.pure newValue, ..}
+instance Property "EventTrigger" SourceProperty where
+  type PropertyType "EventTrigger" SourceProperty = EventTriggerProperty
+  set newValue SourceProperty {..}
+    = SourceProperty {eventTrigger = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/SourceProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/SourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.SourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SourceProperty :: Prelude.Type
+instance ToResourceProperties SourceProperty
+instance Prelude.Eq SourceProperty
+instance Prelude.Show SourceProperty
+instance JSON.ToJSON SourceProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyChannelSubtypeConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyChannelSubtypeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyChannelSubtypeConfigProperty.hs
@@ -0,0 +1,77 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TelephonyChannelSubtypeConfigProperty (
+        module Exports, TelephonyChannelSubtypeConfigProperty(..),
+        mkTelephonyChannelSubtypeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundModeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TelephonyChannelSubtypeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonychannelsubtypeconfig.html>
+    TelephonyChannelSubtypeConfigProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonychannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-telephonychannelsubtypeconfig-capacity>
+                                           capacity :: (Prelude.Maybe (Value Prelude.Double)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonychannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-telephonychannelsubtypeconfig-connectqueueid>
+                                           connectQueueId :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonychannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-telephonychannelsubtypeconfig-defaultoutboundconfig>
+                                           defaultOutboundConfig :: TelephonyOutboundConfigProperty,
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonychannelsubtypeconfig.html#cfn-connectcampaignsv2-campaign-telephonychannelsubtypeconfig-outboundmode>
+                                           outboundMode :: TelephonyOutboundModeProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTelephonyChannelSubtypeConfigProperty ::
+  TelephonyOutboundConfigProperty
+  -> TelephonyOutboundModeProperty
+     -> TelephonyChannelSubtypeConfigProperty
+mkTelephonyChannelSubtypeConfigProperty
+  defaultOutboundConfig
+  outboundMode
+  = TelephonyChannelSubtypeConfigProperty
+      {haddock_workaround_ = (),
+       defaultOutboundConfig = defaultOutboundConfig,
+       outboundMode = outboundMode, capacity = Prelude.Nothing,
+       connectQueueId = Prelude.Nothing}
+instance ToResourceProperties TelephonyChannelSubtypeConfigProperty where
+  toResourceProperties TelephonyChannelSubtypeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.TelephonyChannelSubtypeConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DefaultOutboundConfig" JSON..= defaultOutboundConfig,
+                            "OutboundMode" JSON..= outboundMode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Capacity" Prelude.<$> capacity,
+                               (JSON..=) "ConnectQueueId" Prelude.<$> connectQueueId]))}
+instance JSON.ToJSON TelephonyChannelSubtypeConfigProperty where
+  toJSON TelephonyChannelSubtypeConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DefaultOutboundConfig" JSON..= defaultOutboundConfig,
+               "OutboundMode" JSON..= outboundMode]
+              (Prelude.catMaybes
+                 [(JSON..=) "Capacity" Prelude.<$> capacity,
+                  (JSON..=) "ConnectQueueId" Prelude.<$> connectQueueId])))
+instance Property "Capacity" TelephonyChannelSubtypeConfigProperty where
+  type PropertyType "Capacity" TelephonyChannelSubtypeConfigProperty = Value Prelude.Double
+  set newValue TelephonyChannelSubtypeConfigProperty {..}
+    = TelephonyChannelSubtypeConfigProperty
+        {capacity = Prelude.pure newValue, ..}
+instance Property "ConnectQueueId" TelephonyChannelSubtypeConfigProperty where
+  type PropertyType "ConnectQueueId" TelephonyChannelSubtypeConfigProperty = Value Prelude.Text
+  set newValue TelephonyChannelSubtypeConfigProperty {..}
+    = TelephonyChannelSubtypeConfigProperty
+        {connectQueueId = Prelude.pure newValue, ..}
+instance Property "DefaultOutboundConfig" TelephonyChannelSubtypeConfigProperty where
+  type PropertyType "DefaultOutboundConfig" TelephonyChannelSubtypeConfigProperty = TelephonyOutboundConfigProperty
+  set newValue TelephonyChannelSubtypeConfigProperty {..}
+    = TelephonyChannelSubtypeConfigProperty
+        {defaultOutboundConfig = newValue, ..}
+instance Property "OutboundMode" TelephonyChannelSubtypeConfigProperty where
+  type PropertyType "OutboundMode" TelephonyChannelSubtypeConfigProperty = TelephonyOutboundModeProperty
+  set newValue TelephonyChannelSubtypeConfigProperty {..}
+    = TelephonyChannelSubtypeConfigProperty
+        {outboundMode = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyChannelSubtypeConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyChannelSubtypeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyChannelSubtypeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TelephonyChannelSubtypeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TelephonyChannelSubtypeConfigProperty :: Prelude.Type
+instance ToResourceProperties TelephonyChannelSubtypeConfigProperty
+instance Prelude.Eq TelephonyChannelSubtypeConfigProperty
+instance Prelude.Show TelephonyChannelSubtypeConfigProperty
+instance JSON.ToJSON TelephonyChannelSubtypeConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundConfigProperty.hs
@@ -0,0 +1,67 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundConfigProperty (
+        module Exports, TelephonyOutboundConfigProperty(..),
+        mkTelephonyOutboundConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.AnswerMachineDetectionConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TelephonyOutboundConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundconfig.html>
+    TelephonyOutboundConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundconfig.html#cfn-connectcampaignsv2-campaign-telephonyoutboundconfig-answermachinedetectionconfig>
+                                     answerMachineDetectionConfig :: (Prelude.Maybe AnswerMachineDetectionConfigProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundconfig.html#cfn-connectcampaignsv2-campaign-telephonyoutboundconfig-connectcontactflowid>
+                                     connectContactFlowId :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundconfig.html#cfn-connectcampaignsv2-campaign-telephonyoutboundconfig-connectsourcephonenumber>
+                                     connectSourcePhoneNumber :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTelephonyOutboundConfigProperty ::
+  Value Prelude.Text -> TelephonyOutboundConfigProperty
+mkTelephonyOutboundConfigProperty connectContactFlowId
+  = TelephonyOutboundConfigProperty
+      {haddock_workaround_ = (),
+       connectContactFlowId = connectContactFlowId,
+       answerMachineDetectionConfig = Prelude.Nothing,
+       connectSourcePhoneNumber = Prelude.Nothing}
+instance ToResourceProperties TelephonyOutboundConfigProperty where
+  toResourceProperties TelephonyOutboundConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.TelephonyOutboundConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConnectContactFlowId" JSON..= connectContactFlowId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AnswerMachineDetectionConfig"
+                                 Prelude.<$> answerMachineDetectionConfig,
+                               (JSON..=) "ConnectSourcePhoneNumber"
+                                 Prelude.<$> connectSourcePhoneNumber]))}
+instance JSON.ToJSON TelephonyOutboundConfigProperty where
+  toJSON TelephonyOutboundConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConnectContactFlowId" JSON..= connectContactFlowId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AnswerMachineDetectionConfig"
+                    Prelude.<$> answerMachineDetectionConfig,
+                  (JSON..=) "ConnectSourcePhoneNumber"
+                    Prelude.<$> connectSourcePhoneNumber])))
+instance Property "AnswerMachineDetectionConfig" TelephonyOutboundConfigProperty where
+  type PropertyType "AnswerMachineDetectionConfig" TelephonyOutboundConfigProperty = AnswerMachineDetectionConfigProperty
+  set newValue TelephonyOutboundConfigProperty {..}
+    = TelephonyOutboundConfigProperty
+        {answerMachineDetectionConfig = Prelude.pure newValue, ..}
+instance Property "ConnectContactFlowId" TelephonyOutboundConfigProperty where
+  type PropertyType "ConnectContactFlowId" TelephonyOutboundConfigProperty = Value Prelude.Text
+  set newValue TelephonyOutboundConfigProperty {..}
+    = TelephonyOutboundConfigProperty
+        {connectContactFlowId = newValue, ..}
+instance Property "ConnectSourcePhoneNumber" TelephonyOutboundConfigProperty where
+  type PropertyType "ConnectSourcePhoneNumber" TelephonyOutboundConfigProperty = Value Prelude.Text
+  set newValue TelephonyOutboundConfigProperty {..}
+    = TelephonyOutboundConfigProperty
+        {connectSourcePhoneNumber = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TelephonyOutboundConfigProperty :: Prelude.Type
+instance ToResourceProperties TelephonyOutboundConfigProperty
+instance Prelude.Eq TelephonyOutboundConfigProperty
+instance Prelude.Show TelephonyOutboundConfigProperty
+instance JSON.ToJSON TelephonyOutboundConfigProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundModeProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundModeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundModeProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundModeProperty (
+        module Exports, TelephonyOutboundModeProperty(..),
+        mkTelephonyOutboundModeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.PredictiveConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.PreviewConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.ProgressiveConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data TelephonyOutboundModeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundmode.html>
+    TelephonyOutboundModeProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundmode.html#cfn-connectcampaignsv2-campaign-telephonyoutboundmode-agentlessconfig>
+                                   agentlessConfig :: (Prelude.Maybe JSON.Object),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundmode.html#cfn-connectcampaignsv2-campaign-telephonyoutboundmode-predictiveconfig>
+                                   predictiveConfig :: (Prelude.Maybe PredictiveConfigProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundmode.html#cfn-connectcampaignsv2-campaign-telephonyoutboundmode-previewconfig>
+                                   previewConfig :: (Prelude.Maybe PreviewConfigProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-telephonyoutboundmode.html#cfn-connectcampaignsv2-campaign-telephonyoutboundmode-progressiveconfig>
+                                   progressiveConfig :: (Prelude.Maybe ProgressiveConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTelephonyOutboundModeProperty :: TelephonyOutboundModeProperty
+mkTelephonyOutboundModeProperty
+  = TelephonyOutboundModeProperty
+      {haddock_workaround_ = (), agentlessConfig = Prelude.Nothing,
+       predictiveConfig = Prelude.Nothing,
+       previewConfig = Prelude.Nothing,
+       progressiveConfig = Prelude.Nothing}
+instance ToResourceProperties TelephonyOutboundModeProperty where
+  toResourceProperties TelephonyOutboundModeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.TelephonyOutboundMode",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AgentlessConfig" Prelude.<$> agentlessConfig,
+                            (JSON..=) "PredictiveConfig" Prelude.<$> predictiveConfig,
+                            (JSON..=) "PreviewConfig" Prelude.<$> previewConfig,
+                            (JSON..=) "ProgressiveConfig" Prelude.<$> progressiveConfig])}
+instance JSON.ToJSON TelephonyOutboundModeProperty where
+  toJSON TelephonyOutboundModeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AgentlessConfig" Prelude.<$> agentlessConfig,
+               (JSON..=) "PredictiveConfig" Prelude.<$> predictiveConfig,
+               (JSON..=) "PreviewConfig" Prelude.<$> previewConfig,
+               (JSON..=) "ProgressiveConfig" Prelude.<$> progressiveConfig]))
+instance Property "AgentlessConfig" TelephonyOutboundModeProperty where
+  type PropertyType "AgentlessConfig" TelephonyOutboundModeProperty = JSON.Object
+  set newValue TelephonyOutboundModeProperty {..}
+    = TelephonyOutboundModeProperty
+        {agentlessConfig = Prelude.pure newValue, ..}
+instance Property "PredictiveConfig" TelephonyOutboundModeProperty where
+  type PropertyType "PredictiveConfig" TelephonyOutboundModeProperty = PredictiveConfigProperty
+  set newValue TelephonyOutboundModeProperty {..}
+    = TelephonyOutboundModeProperty
+        {predictiveConfig = Prelude.pure newValue, ..}
+instance Property "PreviewConfig" TelephonyOutboundModeProperty where
+  type PropertyType "PreviewConfig" TelephonyOutboundModeProperty = PreviewConfigProperty
+  set newValue TelephonyOutboundModeProperty {..}
+    = TelephonyOutboundModeProperty
+        {previewConfig = Prelude.pure newValue, ..}
+instance Property "ProgressiveConfig" TelephonyOutboundModeProperty where
+  type PropertyType "ProgressiveConfig" TelephonyOutboundModeProperty = ProgressiveConfigProperty
+  set newValue TelephonyOutboundModeProperty {..}
+    = TelephonyOutboundModeProperty
+        {progressiveConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundModeProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundModeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TelephonyOutboundModeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundModeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TelephonyOutboundModeProperty :: Prelude.Type
+instance ToResourceProperties TelephonyOutboundModeProperty
+instance Prelude.Eq TelephonyOutboundModeProperty
+instance Prelude.Show TelephonyOutboundModeProperty
+instance JSON.ToJSON TelephonyOutboundModeProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeRangeProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeRangeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeRangeProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TimeRangeProperty (
+        TimeRangeProperty(..), mkTimeRangeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TimeRangeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timerange.html>
+    TimeRangeProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timerange.html#cfn-connectcampaignsv2-campaign-timerange-endtime>
+                       endTime :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timerange.html#cfn-connectcampaignsv2-campaign-timerange-starttime>
+                       startTime :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTimeRangeProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> TimeRangeProperty
+mkTimeRangeProperty endTime startTime
+  = TimeRangeProperty
+      {haddock_workaround_ = (), endTime = endTime,
+       startTime = startTime}
+instance ToResourceProperties TimeRangeProperty where
+  toResourceProperties TimeRangeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.TimeRange",
+         supportsTags = Prelude.False,
+         properties = ["EndTime" JSON..= endTime,
+                       "StartTime" JSON..= startTime]}
+instance JSON.ToJSON TimeRangeProperty where
+  toJSON TimeRangeProperty {..}
+    = JSON.object
+        ["EndTime" JSON..= endTime, "StartTime" JSON..= startTime]
+instance Property "EndTime" TimeRangeProperty where
+  type PropertyType "EndTime" TimeRangeProperty = Value Prelude.Text
+  set newValue TimeRangeProperty {..}
+    = TimeRangeProperty {endTime = newValue, ..}
+instance Property "StartTime" TimeRangeProperty where
+  type PropertyType "StartTime" TimeRangeProperty = Value Prelude.Text
+  set newValue TimeRangeProperty {..}
+    = TimeRangeProperty {startTime = newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeRangeProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeRangeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeRangeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TimeRangeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TimeRangeProperty :: Prelude.Type
+instance ToResourceProperties TimeRangeProperty
+instance Prelude.Eq TimeRangeProperty
+instance Prelude.Show TimeRangeProperty
+instance JSON.ToJSON TimeRangeProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeWindowProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeWindowProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeWindowProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TimeWindowProperty (
+        module Exports, TimeWindowProperty(..), mkTimeWindowProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.OpenHoursProperty as Exports
+import {-# SOURCE #-} Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodsProperty as Exports
+import Stratosphere.ResourceProperties
+data TimeWindowProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timewindow.html>
+    TimeWindowProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timewindow.html#cfn-connectcampaignsv2-campaign-timewindow-openhours>
+                        openHours :: OpenHoursProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timewindow.html#cfn-connectcampaignsv2-campaign-timewindow-restrictedperiods>
+                        restrictedPeriods :: (Prelude.Maybe RestrictedPeriodsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTimeWindowProperty :: OpenHoursProperty -> TimeWindowProperty
+mkTimeWindowProperty openHours
+  = TimeWindowProperty
+      {haddock_workaround_ = (), openHours = openHours,
+       restrictedPeriods = Prelude.Nothing}
+instance ToResourceProperties TimeWindowProperty where
+  toResourceProperties TimeWindowProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.TimeWindow",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["OpenHours" JSON..= openHours]
+                           (Prelude.catMaybes
+                              [(JSON..=) "RestrictedPeriods" Prelude.<$> restrictedPeriods]))}
+instance JSON.ToJSON TimeWindowProperty where
+  toJSON TimeWindowProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["OpenHours" JSON..= openHours]
+              (Prelude.catMaybes
+                 [(JSON..=) "RestrictedPeriods" Prelude.<$> restrictedPeriods])))
+instance Property "OpenHours" TimeWindowProperty where
+  type PropertyType "OpenHours" TimeWindowProperty = OpenHoursProperty
+  set newValue TimeWindowProperty {..}
+    = TimeWindowProperty {openHours = newValue, ..}
+instance Property "RestrictedPeriods" TimeWindowProperty where
+  type PropertyType "RestrictedPeriods" TimeWindowProperty = RestrictedPeriodsProperty
+  set newValue TimeWindowProperty {..}
+    = TimeWindowProperty
+        {restrictedPeriods = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeWindowProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeWindowProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeWindowProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TimeWindowProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TimeWindowProperty :: Prelude.Type
+instance ToResourceProperties TimeWindowProperty
+instance Prelude.Eq TimeWindowProperty
+instance Prelude.Show TimeWindowProperty
+instance JSON.ToJSON TimeWindowProperty
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeoutConfigProperty.hs b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeoutConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeoutConfigProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TimeoutConfigProperty (
+        TimeoutConfigProperty(..), mkTimeoutConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TimeoutConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timeoutconfig.html>
+    TimeoutConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaignsv2-campaign-timeoutconfig.html#cfn-connectcampaignsv2-campaign-timeoutconfig-durationinseconds>
+                           durationInSeconds :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTimeoutConfigProperty :: TimeoutConfigProperty
+mkTimeoutConfigProperty
+  = TimeoutConfigProperty
+      {haddock_workaround_ = (), durationInSeconds = Prelude.Nothing}
+instance ToResourceProperties TimeoutConfigProperty where
+  toResourceProperties TimeoutConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ConnectCampaignsV2::Campaign.TimeoutConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DurationInSeconds" Prelude.<$> durationInSeconds])}
+instance JSON.ToJSON TimeoutConfigProperty where
+  toJSON TimeoutConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DurationInSeconds" Prelude.<$> durationInSeconds]))
+instance Property "DurationInSeconds" TimeoutConfigProperty where
+  type PropertyType "DurationInSeconds" TimeoutConfigProperty = Value Prelude.Integer
+  set newValue TimeoutConfigProperty {..}
+    = TimeoutConfigProperty
+        {durationInSeconds = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeoutConfigProperty.hs-boot b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeoutConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ConnectCampaignsV2/Campaign/TimeoutConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ConnectCampaignsV2.Campaign.TimeoutConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TimeoutConfigProperty :: Prelude.Type
+instance ToResourceProperties TimeoutConfigProperty
+instance Prelude.Eq TimeoutConfigProperty
+instance Prelude.Show TimeoutConfigProperty
+instance JSON.ToJSON TimeoutConfigProperty
diff --git a/stratosphere-connectcampaignsv2.cabal b/stratosphere-connectcampaignsv2.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-connectcampaignsv2.cabal
@@ -0,0 +1,102 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-connectcampaignsv2
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ConnectCampaignsV2.
+description:    Integration into stratosphere to generate resources and properties for AWS ConnectCampaignsV2
+category:       AWS, Cloud, ConnectCampaignsV2
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.ConnectCampaignsV2.Campaign
+      Stratosphere.ConnectCampaignsV2.Campaign.AnswerMachineDetectionConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.ChannelSubtypeConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.CommunicationLimitsProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.CommunicationTimeConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.DailyHourProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.EmailChannelSubtypeConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.EmailOutboundModeProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.EventTriggerProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.LocalTimeZoneConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.OpenHoursProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.PredictiveConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.PreviewConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.ProgressiveConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.RestrictedPeriodsProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.ScheduleProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.SmsChannelSubtypeConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.SmsOutboundModeProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.SourceProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.TelephonyChannelSubtypeConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.TelephonyOutboundModeProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.TimeoutConfigProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.TimeRangeProperty
+      Stratosphere.ConnectCampaignsV2.Campaign.TimeWindowProperty
+  other-modules:
+      Paths_stratosphere_connectcampaignsv2
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
