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/ECR/PublicRepository.hs b/gen/Stratosphere/ECR/PublicRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/PublicRepository.hs
@@ -0,0 +1,68 @@
+module Stratosphere.ECR.PublicRepository (
+        module Exports, PublicRepository(..), mkPublicRepository
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.PublicRepository.RepositoryCatalogDataProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data PublicRepository
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html>
+    PublicRepository {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html#cfn-ecr-publicrepository-repositorycatalogdata>
+                      repositoryCatalogData :: (Prelude.Maybe RepositoryCatalogDataProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html#cfn-ecr-publicrepository-repositoryname>
+                      repositoryName :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html#cfn-ecr-publicrepository-repositorypolicytext>
+                      repositoryPolicyText :: (Prelude.Maybe JSON.Object),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html#cfn-ecr-publicrepository-tags>
+                      tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPublicRepository :: PublicRepository
+mkPublicRepository
+  = PublicRepository
+      {haddock_workaround_ = (), repositoryCatalogData = Prelude.Nothing,
+       repositoryName = Prelude.Nothing,
+       repositoryPolicyText = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties PublicRepository where
+  toResourceProperties PublicRepository {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::PublicRepository",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RepositoryCatalogData"
+                              Prelude.<$> repositoryCatalogData,
+                            (JSON..=) "RepositoryName" Prelude.<$> repositoryName,
+                            (JSON..=) "RepositoryPolicyText" Prelude.<$> repositoryPolicyText,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON PublicRepository where
+  toJSON PublicRepository {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RepositoryCatalogData"
+                 Prelude.<$> repositoryCatalogData,
+               (JSON..=) "RepositoryName" Prelude.<$> repositoryName,
+               (JSON..=) "RepositoryPolicyText" Prelude.<$> repositoryPolicyText,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "RepositoryCatalogData" PublicRepository where
+  type PropertyType "RepositoryCatalogData" PublicRepository = RepositoryCatalogDataProperty
+  set newValue PublicRepository {..}
+    = PublicRepository
+        {repositoryCatalogData = Prelude.pure newValue, ..}
+instance Property "RepositoryName" PublicRepository where
+  type PropertyType "RepositoryName" PublicRepository = Value Prelude.Text
+  set newValue PublicRepository {..}
+    = PublicRepository {repositoryName = Prelude.pure newValue, ..}
+instance Property "RepositoryPolicyText" PublicRepository where
+  type PropertyType "RepositoryPolicyText" PublicRepository = JSON.Object
+  set newValue PublicRepository {..}
+    = PublicRepository
+        {repositoryPolicyText = Prelude.pure newValue, ..}
+instance Property "Tags" PublicRepository where
+  type PropertyType "Tags" PublicRepository = [Tag]
+  set newValue PublicRepository {..}
+    = PublicRepository {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/PublicRepository/RepositoryCatalogDataProperty.hs b/gen/Stratosphere/ECR/PublicRepository/RepositoryCatalogDataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/PublicRepository/RepositoryCatalogDataProperty.hs
@@ -0,0 +1,79 @@
+module Stratosphere.ECR.PublicRepository.RepositoryCatalogDataProperty (
+        RepositoryCatalogDataProperty(..), mkRepositoryCatalogDataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RepositoryCatalogDataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html>
+    RepositoryCatalogDataProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-abouttext>
+                                   aboutText :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-architectures>
+                                   architectures :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-operatingsystems>
+                                   operatingSystems :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-repositorydescription>
+                                   repositoryDescription :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-usagetext>
+                                   usageText :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRepositoryCatalogDataProperty :: RepositoryCatalogDataProperty
+mkRepositoryCatalogDataProperty
+  = RepositoryCatalogDataProperty
+      {haddock_workaround_ = (), aboutText = Prelude.Nothing,
+       architectures = Prelude.Nothing,
+       operatingSystems = Prelude.Nothing,
+       repositoryDescription = Prelude.Nothing,
+       usageText = Prelude.Nothing}
+instance ToResourceProperties RepositoryCatalogDataProperty where
+  toResourceProperties RepositoryCatalogDataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::PublicRepository.RepositoryCatalogData",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AboutText" Prelude.<$> aboutText,
+                            (JSON..=) "Architectures" Prelude.<$> architectures,
+                            (JSON..=) "OperatingSystems" Prelude.<$> operatingSystems,
+                            (JSON..=) "RepositoryDescription"
+                              Prelude.<$> repositoryDescription,
+                            (JSON..=) "UsageText" Prelude.<$> usageText])}
+instance JSON.ToJSON RepositoryCatalogDataProperty where
+  toJSON RepositoryCatalogDataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AboutText" Prelude.<$> aboutText,
+               (JSON..=) "Architectures" Prelude.<$> architectures,
+               (JSON..=) "OperatingSystems" Prelude.<$> operatingSystems,
+               (JSON..=) "RepositoryDescription"
+                 Prelude.<$> repositoryDescription,
+               (JSON..=) "UsageText" Prelude.<$> usageText]))
+instance Property "AboutText" RepositoryCatalogDataProperty where
+  type PropertyType "AboutText" RepositoryCatalogDataProperty = Value Prelude.Text
+  set newValue RepositoryCatalogDataProperty {..}
+    = RepositoryCatalogDataProperty
+        {aboutText = Prelude.pure newValue, ..}
+instance Property "Architectures" RepositoryCatalogDataProperty where
+  type PropertyType "Architectures" RepositoryCatalogDataProperty = ValueList Prelude.Text
+  set newValue RepositoryCatalogDataProperty {..}
+    = RepositoryCatalogDataProperty
+        {architectures = Prelude.pure newValue, ..}
+instance Property "OperatingSystems" RepositoryCatalogDataProperty where
+  type PropertyType "OperatingSystems" RepositoryCatalogDataProperty = ValueList Prelude.Text
+  set newValue RepositoryCatalogDataProperty {..}
+    = RepositoryCatalogDataProperty
+        {operatingSystems = Prelude.pure newValue, ..}
+instance Property "RepositoryDescription" RepositoryCatalogDataProperty where
+  type PropertyType "RepositoryDescription" RepositoryCatalogDataProperty = Value Prelude.Text
+  set newValue RepositoryCatalogDataProperty {..}
+    = RepositoryCatalogDataProperty
+        {repositoryDescription = Prelude.pure newValue, ..}
+instance Property "UsageText" RepositoryCatalogDataProperty where
+  type PropertyType "UsageText" RepositoryCatalogDataProperty = Value Prelude.Text
+  set newValue RepositoryCatalogDataProperty {..}
+    = RepositoryCatalogDataProperty
+        {usageText = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/PublicRepository/RepositoryCatalogDataProperty.hs-boot b/gen/Stratosphere/ECR/PublicRepository/RepositoryCatalogDataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/PublicRepository/RepositoryCatalogDataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.PublicRepository.RepositoryCatalogDataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RepositoryCatalogDataProperty :: Prelude.Type
+instance ToResourceProperties RepositoryCatalogDataProperty
+instance Prelude.Eq RepositoryCatalogDataProperty
+instance Prelude.Show RepositoryCatalogDataProperty
+instance JSON.ToJSON RepositoryCatalogDataProperty
diff --git a/gen/Stratosphere/ECR/PullThroughCacheRule.hs b/gen/Stratosphere/ECR/PullThroughCacheRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/PullThroughCacheRule.hs
@@ -0,0 +1,87 @@
+module Stratosphere.ECR.PullThroughCacheRule (
+        PullThroughCacheRule(..), mkPullThroughCacheRule
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PullThroughCacheRule
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-pullthroughcacherule.html>
+    PullThroughCacheRule {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-pullthroughcacherule.html#cfn-ecr-pullthroughcacherule-credentialarn>
+                          credentialArn :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-pullthroughcacherule.html#cfn-ecr-pullthroughcacherule-customrolearn>
+                          customRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-pullthroughcacherule.html#cfn-ecr-pullthroughcacherule-ecrrepositoryprefix>
+                          ecrRepositoryPrefix :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-pullthroughcacherule.html#cfn-ecr-pullthroughcacherule-upstreamregistry>
+                          upstreamRegistry :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-pullthroughcacherule.html#cfn-ecr-pullthroughcacherule-upstreamregistryurl>
+                          upstreamRegistryUrl :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-pullthroughcacherule.html#cfn-ecr-pullthroughcacherule-upstreamrepositoryprefix>
+                          upstreamRepositoryPrefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPullThroughCacheRule :: PullThroughCacheRule
+mkPullThroughCacheRule
+  = PullThroughCacheRule
+      {haddock_workaround_ = (), credentialArn = Prelude.Nothing,
+       customRoleArn = Prelude.Nothing,
+       ecrRepositoryPrefix = Prelude.Nothing,
+       upstreamRegistry = Prelude.Nothing,
+       upstreamRegistryUrl = Prelude.Nothing,
+       upstreamRepositoryPrefix = Prelude.Nothing}
+instance ToResourceProperties PullThroughCacheRule where
+  toResourceProperties PullThroughCacheRule {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::PullThroughCacheRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CredentialArn" Prelude.<$> credentialArn,
+                            (JSON..=) "CustomRoleArn" Prelude.<$> customRoleArn,
+                            (JSON..=) "EcrRepositoryPrefix" Prelude.<$> ecrRepositoryPrefix,
+                            (JSON..=) "UpstreamRegistry" Prelude.<$> upstreamRegistry,
+                            (JSON..=) "UpstreamRegistryUrl" Prelude.<$> upstreamRegistryUrl,
+                            (JSON..=) "UpstreamRepositoryPrefix"
+                              Prelude.<$> upstreamRepositoryPrefix])}
+instance JSON.ToJSON PullThroughCacheRule where
+  toJSON PullThroughCacheRule {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CredentialArn" Prelude.<$> credentialArn,
+               (JSON..=) "CustomRoleArn" Prelude.<$> customRoleArn,
+               (JSON..=) "EcrRepositoryPrefix" Prelude.<$> ecrRepositoryPrefix,
+               (JSON..=) "UpstreamRegistry" Prelude.<$> upstreamRegistry,
+               (JSON..=) "UpstreamRegistryUrl" Prelude.<$> upstreamRegistryUrl,
+               (JSON..=) "UpstreamRepositoryPrefix"
+                 Prelude.<$> upstreamRepositoryPrefix]))
+instance Property "CredentialArn" PullThroughCacheRule where
+  type PropertyType "CredentialArn" PullThroughCacheRule = Value Prelude.Text
+  set newValue PullThroughCacheRule {..}
+    = PullThroughCacheRule {credentialArn = Prelude.pure newValue, ..}
+instance Property "CustomRoleArn" PullThroughCacheRule where
+  type PropertyType "CustomRoleArn" PullThroughCacheRule = Value Prelude.Text
+  set newValue PullThroughCacheRule {..}
+    = PullThroughCacheRule {customRoleArn = Prelude.pure newValue, ..}
+instance Property "EcrRepositoryPrefix" PullThroughCacheRule where
+  type PropertyType "EcrRepositoryPrefix" PullThroughCacheRule = Value Prelude.Text
+  set newValue PullThroughCacheRule {..}
+    = PullThroughCacheRule
+        {ecrRepositoryPrefix = Prelude.pure newValue, ..}
+instance Property "UpstreamRegistry" PullThroughCacheRule where
+  type PropertyType "UpstreamRegistry" PullThroughCacheRule = Value Prelude.Text
+  set newValue PullThroughCacheRule {..}
+    = PullThroughCacheRule
+        {upstreamRegistry = Prelude.pure newValue, ..}
+instance Property "UpstreamRegistryUrl" PullThroughCacheRule where
+  type PropertyType "UpstreamRegistryUrl" PullThroughCacheRule = Value Prelude.Text
+  set newValue PullThroughCacheRule {..}
+    = PullThroughCacheRule
+        {upstreamRegistryUrl = Prelude.pure newValue, ..}
+instance Property "UpstreamRepositoryPrefix" PullThroughCacheRule where
+  type PropertyType "UpstreamRepositoryPrefix" PullThroughCacheRule = Value Prelude.Text
+  set newValue PullThroughCacheRule {..}
+    = PullThroughCacheRule
+        {upstreamRepositoryPrefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/RegistryPolicy.hs b/gen/Stratosphere/ECR/RegistryPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RegistryPolicy.hs
@@ -0,0 +1,30 @@
+module Stratosphere.ECR.RegistryPolicy (
+        RegistryPolicy(..), mkRegistryPolicy
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+data RegistryPolicy
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-registrypolicy.html>
+    RegistryPolicy {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-registrypolicy.html#cfn-ecr-registrypolicy-policytext>
+                    policyText :: JSON.Object}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRegistryPolicy :: JSON.Object -> RegistryPolicy
+mkRegistryPolicy policyText
+  = RegistryPolicy
+      {haddock_workaround_ = (), policyText = policyText}
+instance ToResourceProperties RegistryPolicy where
+  toResourceProperties RegistryPolicy {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::RegistryPolicy",
+         supportsTags = Prelude.False,
+         properties = ["PolicyText" JSON..= policyText]}
+instance JSON.ToJSON RegistryPolicy where
+  toJSON RegistryPolicy {..}
+    = JSON.object ["PolicyText" JSON..= policyText]
+instance Property "PolicyText" RegistryPolicy where
+  type PropertyType "PolicyText" RegistryPolicy = JSON.Object
+  set newValue RegistryPolicy {..}
+    = RegistryPolicy {policyText = newValue, ..}
diff --git a/gen/Stratosphere/ECR/RegistryScanningConfiguration.hs b/gen/Stratosphere/ECR/RegistryScanningConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RegistryScanningConfiguration.hs
@@ -0,0 +1,41 @@
+module Stratosphere.ECR.RegistryScanningConfiguration (
+        module Exports, RegistryScanningConfiguration(..),
+        mkRegistryScanningConfiguration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.RegistryScanningConfiguration.ScanningRuleProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RegistryScanningConfiguration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-registryscanningconfiguration.html>
+    RegistryScanningConfiguration {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-registryscanningconfiguration.html#cfn-ecr-registryscanningconfiguration-rules>
+                                   rules :: [ScanningRuleProperty],
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-registryscanningconfiguration.html#cfn-ecr-registryscanningconfiguration-scantype>
+                                   scanType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRegistryScanningConfiguration ::
+  [ScanningRuleProperty]
+  -> Value Prelude.Text -> RegistryScanningConfiguration
+mkRegistryScanningConfiguration rules scanType
+  = RegistryScanningConfiguration
+      {haddock_workaround_ = (), rules = rules, scanType = scanType}
+instance ToResourceProperties RegistryScanningConfiguration where
+  toResourceProperties RegistryScanningConfiguration {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::RegistryScanningConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["Rules" JSON..= rules, "ScanType" JSON..= scanType]}
+instance JSON.ToJSON RegistryScanningConfiguration where
+  toJSON RegistryScanningConfiguration {..}
+    = JSON.object ["Rules" JSON..= rules, "ScanType" JSON..= scanType]
+instance Property "Rules" RegistryScanningConfiguration where
+  type PropertyType "Rules" RegistryScanningConfiguration = [ScanningRuleProperty]
+  set newValue RegistryScanningConfiguration {..}
+    = RegistryScanningConfiguration {rules = newValue, ..}
+instance Property "ScanType" RegistryScanningConfiguration where
+  type PropertyType "ScanType" RegistryScanningConfiguration = Value Prelude.Text
+  set newValue RegistryScanningConfiguration {..}
+    = RegistryScanningConfiguration {scanType = newValue, ..}
diff --git a/gen/Stratosphere/ECR/RegistryScanningConfiguration/RepositoryFilterProperty.hs b/gen/Stratosphere/ECR/RegistryScanningConfiguration/RepositoryFilterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RegistryScanningConfiguration/RepositoryFilterProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.ECR.RegistryScanningConfiguration.RepositoryFilterProperty (
+        RepositoryFilterProperty(..), mkRepositoryFilterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RepositoryFilterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-registryscanningconfiguration-repositoryfilter.html>
+    RepositoryFilterProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-registryscanningconfiguration-repositoryfilter.html#cfn-ecr-registryscanningconfiguration-repositoryfilter-filter>
+                              filter :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-registryscanningconfiguration-repositoryfilter.html#cfn-ecr-registryscanningconfiguration-repositoryfilter-filtertype>
+                              filterType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRepositoryFilterProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> RepositoryFilterProperty
+mkRepositoryFilterProperty filter filterType
+  = RepositoryFilterProperty
+      {haddock_workaround_ = (), filter = filter,
+       filterType = filterType}
+instance ToResourceProperties RepositoryFilterProperty where
+  toResourceProperties RepositoryFilterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::RegistryScanningConfiguration.RepositoryFilter",
+         supportsTags = Prelude.False,
+         properties = ["Filter" JSON..= filter,
+                       "FilterType" JSON..= filterType]}
+instance JSON.ToJSON RepositoryFilterProperty where
+  toJSON RepositoryFilterProperty {..}
+    = JSON.object
+        ["Filter" JSON..= filter, "FilterType" JSON..= filterType]
+instance Property "Filter" RepositoryFilterProperty where
+  type PropertyType "Filter" RepositoryFilterProperty = Value Prelude.Text
+  set newValue RepositoryFilterProperty {..}
+    = RepositoryFilterProperty {filter = newValue, ..}
+instance Property "FilterType" RepositoryFilterProperty where
+  type PropertyType "FilterType" RepositoryFilterProperty = Value Prelude.Text
+  set newValue RepositoryFilterProperty {..}
+    = RepositoryFilterProperty {filterType = newValue, ..}
diff --git a/gen/Stratosphere/ECR/RegistryScanningConfiguration/RepositoryFilterProperty.hs-boot b/gen/Stratosphere/ECR/RegistryScanningConfiguration/RepositoryFilterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RegistryScanningConfiguration/RepositoryFilterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.RegistryScanningConfiguration.RepositoryFilterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RepositoryFilterProperty :: Prelude.Type
+instance ToResourceProperties RepositoryFilterProperty
+instance Prelude.Eq RepositoryFilterProperty
+instance Prelude.Show RepositoryFilterProperty
+instance JSON.ToJSON RepositoryFilterProperty
diff --git a/gen/Stratosphere/ECR/RegistryScanningConfiguration/ScanningRuleProperty.hs b/gen/Stratosphere/ECR/RegistryScanningConfiguration/ScanningRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RegistryScanningConfiguration/ScanningRuleProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.ECR.RegistryScanningConfiguration.ScanningRuleProperty (
+        module Exports, ScanningRuleProperty(..), mkScanningRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.RegistryScanningConfiguration.RepositoryFilterProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScanningRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-registryscanningconfiguration-scanningrule.html>
+    ScanningRuleProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-registryscanningconfiguration-scanningrule.html#cfn-ecr-registryscanningconfiguration-scanningrule-repositoryfilters>
+                          repositoryFilters :: [RepositoryFilterProperty],
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-registryscanningconfiguration-scanningrule.html#cfn-ecr-registryscanningconfiguration-scanningrule-scanfrequency>
+                          scanFrequency :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScanningRuleProperty ::
+  [RepositoryFilterProperty]
+  -> Value Prelude.Text -> ScanningRuleProperty
+mkScanningRuleProperty repositoryFilters scanFrequency
+  = ScanningRuleProperty
+      {haddock_workaround_ = (), repositoryFilters = repositoryFilters,
+       scanFrequency = scanFrequency}
+instance ToResourceProperties ScanningRuleProperty where
+  toResourceProperties ScanningRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::RegistryScanningConfiguration.ScanningRule",
+         supportsTags = Prelude.False,
+         properties = ["RepositoryFilters" JSON..= repositoryFilters,
+                       "ScanFrequency" JSON..= scanFrequency]}
+instance JSON.ToJSON ScanningRuleProperty where
+  toJSON ScanningRuleProperty {..}
+    = JSON.object
+        ["RepositoryFilters" JSON..= repositoryFilters,
+         "ScanFrequency" JSON..= scanFrequency]
+instance Property "RepositoryFilters" ScanningRuleProperty where
+  type PropertyType "RepositoryFilters" ScanningRuleProperty = [RepositoryFilterProperty]
+  set newValue ScanningRuleProperty {..}
+    = ScanningRuleProperty {repositoryFilters = newValue, ..}
+instance Property "ScanFrequency" ScanningRuleProperty where
+  type PropertyType "ScanFrequency" ScanningRuleProperty = Value Prelude.Text
+  set newValue ScanningRuleProperty {..}
+    = ScanningRuleProperty {scanFrequency = newValue, ..}
diff --git a/gen/Stratosphere/ECR/RegistryScanningConfiguration/ScanningRuleProperty.hs-boot b/gen/Stratosphere/ECR/RegistryScanningConfiguration/ScanningRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RegistryScanningConfiguration/ScanningRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.RegistryScanningConfiguration.ScanningRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScanningRuleProperty :: Prelude.Type
+instance ToResourceProperties ScanningRuleProperty
+instance Prelude.Eq ScanningRuleProperty
+instance Prelude.Show ScanningRuleProperty
+instance JSON.ToJSON ScanningRuleProperty
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration.hs b/gen/Stratosphere/ECR/ReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration.hs
@@ -0,0 +1,37 @@
+module Stratosphere.ECR.ReplicationConfiguration (
+        module Exports, ReplicationConfiguration(..),
+        mkReplicationConfiguration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.ReplicationConfiguration.ReplicationConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+data ReplicationConfiguration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-replicationconfiguration.html>
+    ReplicationConfiguration {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-replicationconfiguration.html#cfn-ecr-replicationconfiguration-replicationconfiguration>
+                              replicationConfiguration :: ReplicationConfigurationProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicationConfiguration ::
+  ReplicationConfigurationProperty -> ReplicationConfiguration
+mkReplicationConfiguration replicationConfiguration
+  = ReplicationConfiguration
+      {haddock_workaround_ = (),
+       replicationConfiguration = replicationConfiguration}
+instance ToResourceProperties ReplicationConfiguration where
+  toResourceProperties ReplicationConfiguration {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::ReplicationConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["ReplicationConfiguration"
+                         JSON..= replicationConfiguration]}
+instance JSON.ToJSON ReplicationConfiguration where
+  toJSON ReplicationConfiguration {..}
+    = JSON.object
+        ["ReplicationConfiguration" JSON..= replicationConfiguration]
+instance Property "ReplicationConfiguration" ReplicationConfiguration where
+  type PropertyType "ReplicationConfiguration" ReplicationConfiguration = ReplicationConfigurationProperty
+  set newValue ReplicationConfiguration {..}
+    = ReplicationConfiguration
+        {replicationConfiguration = newValue, ..}
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationConfigurationProperty.hs b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationConfigurationProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.ECR.ReplicationConfiguration.ReplicationConfigurationProperty (
+        module Exports, ReplicationConfigurationProperty(..),
+        mkReplicationConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.ReplicationConfiguration.ReplicationRuleProperty as Exports
+import Stratosphere.ResourceProperties
+data ReplicationConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationconfiguration.html>
+    ReplicationConfigurationProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationconfiguration.html#cfn-ecr-replicationconfiguration-replicationconfiguration-rules>
+                                      rules :: [ReplicationRuleProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicationConfigurationProperty ::
+  [ReplicationRuleProperty] -> ReplicationConfigurationProperty
+mkReplicationConfigurationProperty rules
+  = ReplicationConfigurationProperty
+      {haddock_workaround_ = (), rules = rules}
+instance ToResourceProperties ReplicationConfigurationProperty where
+  toResourceProperties ReplicationConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::ReplicationConfiguration.ReplicationConfiguration",
+         supportsTags = Prelude.False, properties = ["Rules" JSON..= rules]}
+instance JSON.ToJSON ReplicationConfigurationProperty where
+  toJSON ReplicationConfigurationProperty {..}
+    = JSON.object ["Rules" JSON..= rules]
+instance Property "Rules" ReplicationConfigurationProperty where
+  type PropertyType "Rules" ReplicationConfigurationProperty = [ReplicationRuleProperty]
+  set newValue ReplicationConfigurationProperty {..}
+    = ReplicationConfigurationProperty {rules = newValue, ..}
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationConfigurationProperty.hs-boot b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.ReplicationConfiguration.ReplicationConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicationConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ReplicationConfigurationProperty
+instance Prelude.Eq ReplicationConfigurationProperty
+instance Prelude.Show ReplicationConfigurationProperty
+instance JSON.ToJSON ReplicationConfigurationProperty
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationDestinationProperty.hs b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationDestinationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationDestinationProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.ECR.ReplicationConfiguration.ReplicationDestinationProperty (
+        ReplicationDestinationProperty(..),
+        mkReplicationDestinationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReplicationDestinationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationdestination.html>
+    ReplicationDestinationProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationdestination.html#cfn-ecr-replicationconfiguration-replicationdestination-region>
+                                    region :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationdestination.html#cfn-ecr-replicationconfiguration-replicationdestination-registryid>
+                                    registryId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicationDestinationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ReplicationDestinationProperty
+mkReplicationDestinationProperty region registryId
+  = ReplicationDestinationProperty
+      {haddock_workaround_ = (), region = region,
+       registryId = registryId}
+instance ToResourceProperties ReplicationDestinationProperty where
+  toResourceProperties ReplicationDestinationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::ReplicationConfiguration.ReplicationDestination",
+         supportsTags = Prelude.False,
+         properties = ["Region" JSON..= region,
+                       "RegistryId" JSON..= registryId]}
+instance JSON.ToJSON ReplicationDestinationProperty where
+  toJSON ReplicationDestinationProperty {..}
+    = JSON.object
+        ["Region" JSON..= region, "RegistryId" JSON..= registryId]
+instance Property "Region" ReplicationDestinationProperty where
+  type PropertyType "Region" ReplicationDestinationProperty = Value Prelude.Text
+  set newValue ReplicationDestinationProperty {..}
+    = ReplicationDestinationProperty {region = newValue, ..}
+instance Property "RegistryId" ReplicationDestinationProperty where
+  type PropertyType "RegistryId" ReplicationDestinationProperty = Value Prelude.Text
+  set newValue ReplicationDestinationProperty {..}
+    = ReplicationDestinationProperty {registryId = newValue, ..}
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationDestinationProperty.hs-boot b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationDestinationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationDestinationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.ReplicationConfiguration.ReplicationDestinationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicationDestinationProperty :: Prelude.Type
+instance ToResourceProperties ReplicationDestinationProperty
+instance Prelude.Eq ReplicationDestinationProperty
+instance Prelude.Show ReplicationDestinationProperty
+instance JSON.ToJSON ReplicationDestinationProperty
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationRuleProperty.hs b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationRuleProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.ECR.ReplicationConfiguration.ReplicationRuleProperty (
+        module Exports, ReplicationRuleProperty(..),
+        mkReplicationRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.ReplicationConfiguration.ReplicationDestinationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECR.ReplicationConfiguration.RepositoryFilterProperty as Exports
+import Stratosphere.ResourceProperties
+data ReplicationRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationrule.html>
+    ReplicationRuleProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationrule.html#cfn-ecr-replicationconfiguration-replicationrule-destinations>
+                             destinations :: [ReplicationDestinationProperty],
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationrule.html#cfn-ecr-replicationconfiguration-replicationrule-repositoryfilters>
+                             repositoryFilters :: (Prelude.Maybe [RepositoryFilterProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicationRuleProperty ::
+  [ReplicationDestinationProperty] -> ReplicationRuleProperty
+mkReplicationRuleProperty destinations
+  = ReplicationRuleProperty
+      {haddock_workaround_ = (), destinations = destinations,
+       repositoryFilters = Prelude.Nothing}
+instance ToResourceProperties ReplicationRuleProperty where
+  toResourceProperties ReplicationRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::ReplicationConfiguration.ReplicationRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Destinations" JSON..= destinations]
+                           (Prelude.catMaybes
+                              [(JSON..=) "RepositoryFilters" Prelude.<$> repositoryFilters]))}
+instance JSON.ToJSON ReplicationRuleProperty where
+  toJSON ReplicationRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Destinations" JSON..= destinations]
+              (Prelude.catMaybes
+                 [(JSON..=) "RepositoryFilters" Prelude.<$> repositoryFilters])))
+instance Property "Destinations" ReplicationRuleProperty where
+  type PropertyType "Destinations" ReplicationRuleProperty = [ReplicationDestinationProperty]
+  set newValue ReplicationRuleProperty {..}
+    = ReplicationRuleProperty {destinations = newValue, ..}
+instance Property "RepositoryFilters" ReplicationRuleProperty where
+  type PropertyType "RepositoryFilters" ReplicationRuleProperty = [RepositoryFilterProperty]
+  set newValue ReplicationRuleProperty {..}
+    = ReplicationRuleProperty
+        {repositoryFilters = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationRuleProperty.hs-boot b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/ReplicationRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.ReplicationConfiguration.ReplicationRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicationRuleProperty :: Prelude.Type
+instance ToResourceProperties ReplicationRuleProperty
+instance Prelude.Eq ReplicationRuleProperty
+instance Prelude.Show ReplicationRuleProperty
+instance JSON.ToJSON ReplicationRuleProperty
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/RepositoryFilterProperty.hs b/gen/Stratosphere/ECR/ReplicationConfiguration/RepositoryFilterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/RepositoryFilterProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.ECR.ReplicationConfiguration.RepositoryFilterProperty (
+        RepositoryFilterProperty(..), mkRepositoryFilterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RepositoryFilterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-repositoryfilter.html>
+    RepositoryFilterProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-repositoryfilter.html#cfn-ecr-replicationconfiguration-repositoryfilter-filter>
+                              filter :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-repositoryfilter.html#cfn-ecr-replicationconfiguration-repositoryfilter-filtertype>
+                              filterType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRepositoryFilterProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> RepositoryFilterProperty
+mkRepositoryFilterProperty filter filterType
+  = RepositoryFilterProperty
+      {haddock_workaround_ = (), filter = filter,
+       filterType = filterType}
+instance ToResourceProperties RepositoryFilterProperty where
+  toResourceProperties RepositoryFilterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::ReplicationConfiguration.RepositoryFilter",
+         supportsTags = Prelude.False,
+         properties = ["Filter" JSON..= filter,
+                       "FilterType" JSON..= filterType]}
+instance JSON.ToJSON RepositoryFilterProperty where
+  toJSON RepositoryFilterProperty {..}
+    = JSON.object
+        ["Filter" JSON..= filter, "FilterType" JSON..= filterType]
+instance Property "Filter" RepositoryFilterProperty where
+  type PropertyType "Filter" RepositoryFilterProperty = Value Prelude.Text
+  set newValue RepositoryFilterProperty {..}
+    = RepositoryFilterProperty {filter = newValue, ..}
+instance Property "FilterType" RepositoryFilterProperty where
+  type PropertyType "FilterType" RepositoryFilterProperty = Value Prelude.Text
+  set newValue RepositoryFilterProperty {..}
+    = RepositoryFilterProperty {filterType = newValue, ..}
diff --git a/gen/Stratosphere/ECR/ReplicationConfiguration/RepositoryFilterProperty.hs-boot b/gen/Stratosphere/ECR/ReplicationConfiguration/RepositoryFilterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/ReplicationConfiguration/RepositoryFilterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.ReplicationConfiguration.RepositoryFilterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RepositoryFilterProperty :: Prelude.Type
+instance ToResourceProperties RepositoryFilterProperty
+instance Prelude.Eq RepositoryFilterProperty
+instance Prelude.Show RepositoryFilterProperty
+instance JSON.ToJSON RepositoryFilterProperty
diff --git a/gen/Stratosphere/ECR/Repository.hs b/gen/Stratosphere/ECR/Repository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository.hs
@@ -0,0 +1,119 @@
+module Stratosphere.ECR.Repository (
+        module Exports, Repository(..), mkRepository
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.Repository.EncryptionConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECR.Repository.ImageScanningConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECR.Repository.ImageTagMutabilityExclusionFilterProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECR.Repository.LifecyclePolicyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Repository
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html>
+    Repository {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-emptyondelete>
+                emptyOnDelete :: (Prelude.Maybe (Value Prelude.Bool)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-encryptionconfiguration>
+                encryptionConfiguration :: (Prelude.Maybe EncryptionConfigurationProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-imagescanningconfiguration>
+                imageScanningConfiguration :: (Prelude.Maybe ImageScanningConfigurationProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-imagetagmutability>
+                imageTagMutability :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-imagetagmutabilityexclusionfilters>
+                imageTagMutabilityExclusionFilters :: (Prelude.Maybe [ImageTagMutabilityExclusionFilterProperty]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-lifecyclepolicy>
+                lifecyclePolicy :: (Prelude.Maybe LifecyclePolicyProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-repositoryname>
+                repositoryName :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-repositorypolicytext>
+                repositoryPolicyText :: (Prelude.Maybe JSON.Object),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-tags>
+                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRepository :: Repository
+mkRepository
+  = Repository
+      {haddock_workaround_ = (), emptyOnDelete = Prelude.Nothing,
+       encryptionConfiguration = Prelude.Nothing,
+       imageScanningConfiguration = Prelude.Nothing,
+       imageTagMutability = Prelude.Nothing,
+       imageTagMutabilityExclusionFilters = Prelude.Nothing,
+       lifecyclePolicy = Prelude.Nothing,
+       repositoryName = Prelude.Nothing,
+       repositoryPolicyText = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties Repository where
+  toResourceProperties Repository {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::Repository", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EmptyOnDelete" Prelude.<$> emptyOnDelete,
+                            (JSON..=) "EncryptionConfiguration"
+                              Prelude.<$> encryptionConfiguration,
+                            (JSON..=) "ImageScanningConfiguration"
+                              Prelude.<$> imageScanningConfiguration,
+                            (JSON..=) "ImageTagMutability" Prelude.<$> imageTagMutability,
+                            (JSON..=) "ImageTagMutabilityExclusionFilters"
+                              Prelude.<$> imageTagMutabilityExclusionFilters,
+                            (JSON..=) "LifecyclePolicy" Prelude.<$> lifecyclePolicy,
+                            (JSON..=) "RepositoryName" Prelude.<$> repositoryName,
+                            (JSON..=) "RepositoryPolicyText" Prelude.<$> repositoryPolicyText,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON Repository where
+  toJSON Repository {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EmptyOnDelete" Prelude.<$> emptyOnDelete,
+               (JSON..=) "EncryptionConfiguration"
+                 Prelude.<$> encryptionConfiguration,
+               (JSON..=) "ImageScanningConfiguration"
+                 Prelude.<$> imageScanningConfiguration,
+               (JSON..=) "ImageTagMutability" Prelude.<$> imageTagMutability,
+               (JSON..=) "ImageTagMutabilityExclusionFilters"
+                 Prelude.<$> imageTagMutabilityExclusionFilters,
+               (JSON..=) "LifecyclePolicy" Prelude.<$> lifecyclePolicy,
+               (JSON..=) "RepositoryName" Prelude.<$> repositoryName,
+               (JSON..=) "RepositoryPolicyText" Prelude.<$> repositoryPolicyText,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "EmptyOnDelete" Repository where
+  type PropertyType "EmptyOnDelete" Repository = Value Prelude.Bool
+  set newValue Repository {..}
+    = Repository {emptyOnDelete = Prelude.pure newValue, ..}
+instance Property "EncryptionConfiguration" Repository where
+  type PropertyType "EncryptionConfiguration" Repository = EncryptionConfigurationProperty
+  set newValue Repository {..}
+    = Repository {encryptionConfiguration = Prelude.pure newValue, ..}
+instance Property "ImageScanningConfiguration" Repository where
+  type PropertyType "ImageScanningConfiguration" Repository = ImageScanningConfigurationProperty
+  set newValue Repository {..}
+    = Repository
+        {imageScanningConfiguration = Prelude.pure newValue, ..}
+instance Property "ImageTagMutability" Repository where
+  type PropertyType "ImageTagMutability" Repository = Value Prelude.Text
+  set newValue Repository {..}
+    = Repository {imageTagMutability = Prelude.pure newValue, ..}
+instance Property "ImageTagMutabilityExclusionFilters" Repository where
+  type PropertyType "ImageTagMutabilityExclusionFilters" Repository = [ImageTagMutabilityExclusionFilterProperty]
+  set newValue Repository {..}
+    = Repository
+        {imageTagMutabilityExclusionFilters = Prelude.pure newValue, ..}
+instance Property "LifecyclePolicy" Repository where
+  type PropertyType "LifecyclePolicy" Repository = LifecyclePolicyProperty
+  set newValue Repository {..}
+    = Repository {lifecyclePolicy = Prelude.pure newValue, ..}
+instance Property "RepositoryName" Repository where
+  type PropertyType "RepositoryName" Repository = Value Prelude.Text
+  set newValue Repository {..}
+    = Repository {repositoryName = Prelude.pure newValue, ..}
+instance Property "RepositoryPolicyText" Repository where
+  type PropertyType "RepositoryPolicyText" Repository = JSON.Object
+  set newValue Repository {..}
+    = Repository {repositoryPolicyText = Prelude.pure newValue, ..}
+instance Property "Tags" Repository where
+  type PropertyType "Tags" Repository = [Tag]
+  set newValue Repository {..}
+    = Repository {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/Repository/EncryptionConfigurationProperty.hs b/gen/Stratosphere/ECR/Repository/EncryptionConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/EncryptionConfigurationProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.ECR.Repository.EncryptionConfigurationProperty (
+        EncryptionConfigurationProperty(..),
+        mkEncryptionConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EncryptionConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-encryptionconfiguration.html>
+    EncryptionConfigurationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-encryptionconfiguration.html#cfn-ecr-repository-encryptionconfiguration-encryptiontype>
+                                     encryptionType :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-encryptionconfiguration.html#cfn-ecr-repository-encryptionconfiguration-kmskey>
+                                     kmsKey :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEncryptionConfigurationProperty ::
+  Value Prelude.Text -> EncryptionConfigurationProperty
+mkEncryptionConfigurationProperty encryptionType
+  = EncryptionConfigurationProperty
+      {haddock_workaround_ = (), encryptionType = encryptionType,
+       kmsKey = Prelude.Nothing}
+instance ToResourceProperties EncryptionConfigurationProperty where
+  toResourceProperties EncryptionConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::Repository.EncryptionConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EncryptionType" JSON..= encryptionType]
+                           (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey]))}
+instance JSON.ToJSON EncryptionConfigurationProperty where
+  toJSON EncryptionConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EncryptionType" JSON..= encryptionType]
+              (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey])))
+instance Property "EncryptionType" EncryptionConfigurationProperty where
+  type PropertyType "EncryptionType" EncryptionConfigurationProperty = Value Prelude.Text
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty {encryptionType = newValue, ..}
+instance Property "KmsKey" EncryptionConfigurationProperty where
+  type PropertyType "KmsKey" EncryptionConfigurationProperty = Value Prelude.Text
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty
+        {kmsKey = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/Repository/EncryptionConfigurationProperty.hs-boot b/gen/Stratosphere/ECR/Repository/EncryptionConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/EncryptionConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.Repository.EncryptionConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EncryptionConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EncryptionConfigurationProperty
+instance Prelude.Eq EncryptionConfigurationProperty
+instance Prelude.Show EncryptionConfigurationProperty
+instance JSON.ToJSON EncryptionConfigurationProperty
diff --git a/gen/Stratosphere/ECR/Repository/ImageScanningConfigurationProperty.hs b/gen/Stratosphere/ECR/Repository/ImageScanningConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/ImageScanningConfigurationProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.ECR.Repository.ImageScanningConfigurationProperty (
+        ImageScanningConfigurationProperty(..),
+        mkImageScanningConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ImageScanningConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-imagescanningconfiguration.html>
+    ImageScanningConfigurationProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-imagescanningconfiguration.html#cfn-ecr-repository-imagescanningconfiguration-scanonpush>
+                                        scanOnPush :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkImageScanningConfigurationProperty ::
+  ImageScanningConfigurationProperty
+mkImageScanningConfigurationProperty
+  = ImageScanningConfigurationProperty
+      {haddock_workaround_ = (), scanOnPush = Prelude.Nothing}
+instance ToResourceProperties ImageScanningConfigurationProperty where
+  toResourceProperties ImageScanningConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::Repository.ImageScanningConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ScanOnPush" Prelude.<$> scanOnPush])}
+instance JSON.ToJSON ImageScanningConfigurationProperty where
+  toJSON ImageScanningConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ScanOnPush" Prelude.<$> scanOnPush]))
+instance Property "ScanOnPush" ImageScanningConfigurationProperty where
+  type PropertyType "ScanOnPush" ImageScanningConfigurationProperty = Value Prelude.Bool
+  set newValue ImageScanningConfigurationProperty {..}
+    = ImageScanningConfigurationProperty
+        {scanOnPush = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/Repository/ImageScanningConfigurationProperty.hs-boot b/gen/Stratosphere/ECR/Repository/ImageScanningConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/ImageScanningConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.Repository.ImageScanningConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ImageScanningConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ImageScanningConfigurationProperty
+instance Prelude.Eq ImageScanningConfigurationProperty
+instance Prelude.Show ImageScanningConfigurationProperty
+instance JSON.ToJSON ImageScanningConfigurationProperty
diff --git a/gen/Stratosphere/ECR/Repository/ImageTagMutabilityExclusionFilterProperty.hs b/gen/Stratosphere/ECR/Repository/ImageTagMutabilityExclusionFilterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/ImageTagMutabilityExclusionFilterProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ECR.Repository.ImageTagMutabilityExclusionFilterProperty (
+        ImageTagMutabilityExclusionFilterProperty(..),
+        mkImageTagMutabilityExclusionFilterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ImageTagMutabilityExclusionFilterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-imagetagmutabilityexclusionfilter.html>
+    ImageTagMutabilityExclusionFilterProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-imagetagmutabilityexclusionfilter.html#cfn-ecr-repository-imagetagmutabilityexclusionfilter-imagetagmutabilityexclusionfiltertype>
+                                               imageTagMutabilityExclusionFilterType :: (Value Prelude.Text),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-imagetagmutabilityexclusionfilter.html#cfn-ecr-repository-imagetagmutabilityexclusionfilter-imagetagmutabilityexclusionfiltervalue>
+                                               imageTagMutabilityExclusionFilterValue :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkImageTagMutabilityExclusionFilterProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ImageTagMutabilityExclusionFilterProperty
+mkImageTagMutabilityExclusionFilterProperty
+  imageTagMutabilityExclusionFilterType
+  imageTagMutabilityExclusionFilterValue
+  = ImageTagMutabilityExclusionFilterProperty
+      {haddock_workaround_ = (),
+       imageTagMutabilityExclusionFilterType = imageTagMutabilityExclusionFilterType,
+       imageTagMutabilityExclusionFilterValue = imageTagMutabilityExclusionFilterValue}
+instance ToResourceProperties ImageTagMutabilityExclusionFilterProperty where
+  toResourceProperties ImageTagMutabilityExclusionFilterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::Repository.ImageTagMutabilityExclusionFilter",
+         supportsTags = Prelude.False,
+         properties = ["ImageTagMutabilityExclusionFilterType"
+                         JSON..= imageTagMutabilityExclusionFilterType,
+                       "ImageTagMutabilityExclusionFilterValue"
+                         JSON..= imageTagMutabilityExclusionFilterValue]}
+instance JSON.ToJSON ImageTagMutabilityExclusionFilterProperty where
+  toJSON ImageTagMutabilityExclusionFilterProperty {..}
+    = JSON.object
+        ["ImageTagMutabilityExclusionFilterType"
+           JSON..= imageTagMutabilityExclusionFilterType,
+         "ImageTagMutabilityExclusionFilterValue"
+           JSON..= imageTagMutabilityExclusionFilterValue]
+instance Property "ImageTagMutabilityExclusionFilterType" ImageTagMutabilityExclusionFilterProperty where
+  type PropertyType "ImageTagMutabilityExclusionFilterType" ImageTagMutabilityExclusionFilterProperty = Value Prelude.Text
+  set newValue ImageTagMutabilityExclusionFilterProperty {..}
+    = ImageTagMutabilityExclusionFilterProperty
+        {imageTagMutabilityExclusionFilterType = newValue, ..}
+instance Property "ImageTagMutabilityExclusionFilterValue" ImageTagMutabilityExclusionFilterProperty where
+  type PropertyType "ImageTagMutabilityExclusionFilterValue" ImageTagMutabilityExclusionFilterProperty = Value Prelude.Text
+  set newValue ImageTagMutabilityExclusionFilterProperty {..}
+    = ImageTagMutabilityExclusionFilterProperty
+        {imageTagMutabilityExclusionFilterValue = newValue, ..}
diff --git a/gen/Stratosphere/ECR/Repository/ImageTagMutabilityExclusionFilterProperty.hs-boot b/gen/Stratosphere/ECR/Repository/ImageTagMutabilityExclusionFilterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/ImageTagMutabilityExclusionFilterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.Repository.ImageTagMutabilityExclusionFilterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ImageTagMutabilityExclusionFilterProperty :: Prelude.Type
+instance ToResourceProperties ImageTagMutabilityExclusionFilterProperty
+instance Prelude.Eq ImageTagMutabilityExclusionFilterProperty
+instance Prelude.Show ImageTagMutabilityExclusionFilterProperty
+instance JSON.ToJSON ImageTagMutabilityExclusionFilterProperty
diff --git a/gen/Stratosphere/ECR/Repository/LifecyclePolicyProperty.hs b/gen/Stratosphere/ECR/Repository/LifecyclePolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/LifecyclePolicyProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ECR.Repository.LifecyclePolicyProperty (
+        LifecyclePolicyProperty(..), mkLifecyclePolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LifecyclePolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-lifecyclepolicy.html>
+    LifecyclePolicyProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-lifecyclepolicy.html#cfn-ecr-repository-lifecyclepolicy-lifecyclepolicytext>
+                             lifecyclePolicyText :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repository-lifecyclepolicy.html#cfn-ecr-repository-lifecyclepolicy-registryid>
+                             registryId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLifecyclePolicyProperty :: LifecyclePolicyProperty
+mkLifecyclePolicyProperty
+  = LifecyclePolicyProperty
+      {haddock_workaround_ = (), lifecyclePolicyText = Prelude.Nothing,
+       registryId = Prelude.Nothing}
+instance ToResourceProperties LifecyclePolicyProperty where
+  toResourceProperties LifecyclePolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::Repository.LifecyclePolicy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LifecyclePolicyText" Prelude.<$> lifecyclePolicyText,
+                            (JSON..=) "RegistryId" Prelude.<$> registryId])}
+instance JSON.ToJSON LifecyclePolicyProperty where
+  toJSON LifecyclePolicyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LifecyclePolicyText" Prelude.<$> lifecyclePolicyText,
+               (JSON..=) "RegistryId" Prelude.<$> registryId]))
+instance Property "LifecyclePolicyText" LifecyclePolicyProperty where
+  type PropertyType "LifecyclePolicyText" LifecyclePolicyProperty = Value Prelude.Text
+  set newValue LifecyclePolicyProperty {..}
+    = LifecyclePolicyProperty
+        {lifecyclePolicyText = Prelude.pure newValue, ..}
+instance Property "RegistryId" LifecyclePolicyProperty where
+  type PropertyType "RegistryId" LifecyclePolicyProperty = Value Prelude.Text
+  set newValue LifecyclePolicyProperty {..}
+    = LifecyclePolicyProperty {registryId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/Repository/LifecyclePolicyProperty.hs-boot b/gen/Stratosphere/ECR/Repository/LifecyclePolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/Repository/LifecyclePolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.Repository.LifecyclePolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LifecyclePolicyProperty :: Prelude.Type
+instance ToResourceProperties LifecyclePolicyProperty
+instance Prelude.Eq LifecyclePolicyProperty
+instance Prelude.Show LifecyclePolicyProperty
+instance JSON.ToJSON LifecyclePolicyProperty
diff --git a/gen/Stratosphere/ECR/RepositoryCreationTemplate.hs b/gen/Stratosphere/ECR/RepositoryCreationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RepositoryCreationTemplate.hs
@@ -0,0 +1,133 @@
+module Stratosphere.ECR.RepositoryCreationTemplate (
+        module Exports, RepositoryCreationTemplate(..),
+        mkRepositoryCreationTemplate
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECR.RepositoryCreationTemplate.EncryptionConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECR.RepositoryCreationTemplate.ImageTagMutabilityExclusionFilterProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data RepositoryCreationTemplate
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html>
+    RepositoryCreationTemplate {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-appliedfor>
+                                appliedFor :: (ValueList Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-customrolearn>
+                                customRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-description>
+                                description :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-encryptionconfiguration>
+                                encryptionConfiguration :: (Prelude.Maybe EncryptionConfigurationProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-imagetagmutability>
+                                imageTagMutability :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-imagetagmutabilityexclusionfilters>
+                                imageTagMutabilityExclusionFilters :: (Prelude.Maybe [ImageTagMutabilityExclusionFilterProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-lifecyclepolicy>
+                                lifecyclePolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-prefix>
+                                prefix :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-repositorypolicy>
+                                repositoryPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repositorycreationtemplate.html#cfn-ecr-repositorycreationtemplate-resourcetags>
+                                resourceTags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRepositoryCreationTemplate ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> RepositoryCreationTemplate
+mkRepositoryCreationTemplate appliedFor prefix
+  = RepositoryCreationTemplate
+      {haddock_workaround_ = (), appliedFor = appliedFor,
+       prefix = prefix, customRoleArn = Prelude.Nothing,
+       description = Prelude.Nothing,
+       encryptionConfiguration = Prelude.Nothing,
+       imageTagMutability = Prelude.Nothing,
+       imageTagMutabilityExclusionFilters = Prelude.Nothing,
+       lifecyclePolicy = Prelude.Nothing,
+       repositoryPolicy = Prelude.Nothing, resourceTags = Prelude.Nothing}
+instance ToResourceProperties RepositoryCreationTemplate where
+  toResourceProperties RepositoryCreationTemplate {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::RepositoryCreationTemplate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AppliedFor" JSON..= appliedFor, "Prefix" JSON..= prefix]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CustomRoleArn" Prelude.<$> customRoleArn,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "EncryptionConfiguration"
+                                 Prelude.<$> encryptionConfiguration,
+                               (JSON..=) "ImageTagMutability" Prelude.<$> imageTagMutability,
+                               (JSON..=) "ImageTagMutabilityExclusionFilters"
+                                 Prelude.<$> imageTagMutabilityExclusionFilters,
+                               (JSON..=) "LifecyclePolicy" Prelude.<$> lifecyclePolicy,
+                               (JSON..=) "RepositoryPolicy" Prelude.<$> repositoryPolicy,
+                               (JSON..=) "ResourceTags" Prelude.<$> resourceTags]))}
+instance JSON.ToJSON RepositoryCreationTemplate where
+  toJSON RepositoryCreationTemplate {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AppliedFor" JSON..= appliedFor, "Prefix" JSON..= prefix]
+              (Prelude.catMaybes
+                 [(JSON..=) "CustomRoleArn" Prelude.<$> customRoleArn,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "EncryptionConfiguration"
+                    Prelude.<$> encryptionConfiguration,
+                  (JSON..=) "ImageTagMutability" Prelude.<$> imageTagMutability,
+                  (JSON..=) "ImageTagMutabilityExclusionFilters"
+                    Prelude.<$> imageTagMutabilityExclusionFilters,
+                  (JSON..=) "LifecyclePolicy" Prelude.<$> lifecyclePolicy,
+                  (JSON..=) "RepositoryPolicy" Prelude.<$> repositoryPolicy,
+                  (JSON..=) "ResourceTags" Prelude.<$> resourceTags])))
+instance Property "AppliedFor" RepositoryCreationTemplate where
+  type PropertyType "AppliedFor" RepositoryCreationTemplate = ValueList Prelude.Text
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate {appliedFor = newValue, ..}
+instance Property "CustomRoleArn" RepositoryCreationTemplate where
+  type PropertyType "CustomRoleArn" RepositoryCreationTemplate = Value Prelude.Text
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {customRoleArn = Prelude.pure newValue, ..}
+instance Property "Description" RepositoryCreationTemplate where
+  type PropertyType "Description" RepositoryCreationTemplate = Value Prelude.Text
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {description = Prelude.pure newValue, ..}
+instance Property "EncryptionConfiguration" RepositoryCreationTemplate where
+  type PropertyType "EncryptionConfiguration" RepositoryCreationTemplate = EncryptionConfigurationProperty
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {encryptionConfiguration = Prelude.pure newValue, ..}
+instance Property "ImageTagMutability" RepositoryCreationTemplate where
+  type PropertyType "ImageTagMutability" RepositoryCreationTemplate = Value Prelude.Text
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {imageTagMutability = Prelude.pure newValue, ..}
+instance Property "ImageTagMutabilityExclusionFilters" RepositoryCreationTemplate where
+  type PropertyType "ImageTagMutabilityExclusionFilters" RepositoryCreationTemplate = [ImageTagMutabilityExclusionFilterProperty]
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {imageTagMutabilityExclusionFilters = Prelude.pure newValue, ..}
+instance Property "LifecyclePolicy" RepositoryCreationTemplate where
+  type PropertyType "LifecyclePolicy" RepositoryCreationTemplate = Value Prelude.Text
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {lifecyclePolicy = Prelude.pure newValue, ..}
+instance Property "Prefix" RepositoryCreationTemplate where
+  type PropertyType "Prefix" RepositoryCreationTemplate = Value Prelude.Text
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate {prefix = newValue, ..}
+instance Property "RepositoryPolicy" RepositoryCreationTemplate where
+  type PropertyType "RepositoryPolicy" RepositoryCreationTemplate = Value Prelude.Text
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {repositoryPolicy = Prelude.pure newValue, ..}
+instance Property "ResourceTags" RepositoryCreationTemplate where
+  type PropertyType "ResourceTags" RepositoryCreationTemplate = [Tag]
+  set newValue RepositoryCreationTemplate {..}
+    = RepositoryCreationTemplate
+        {resourceTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/RepositoryCreationTemplate/EncryptionConfigurationProperty.hs b/gen/Stratosphere/ECR/RepositoryCreationTemplate/EncryptionConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RepositoryCreationTemplate/EncryptionConfigurationProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.ECR.RepositoryCreationTemplate.EncryptionConfigurationProperty (
+        EncryptionConfigurationProperty(..),
+        mkEncryptionConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EncryptionConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repositorycreationtemplate-encryptionconfiguration.html>
+    EncryptionConfigurationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repositorycreationtemplate-encryptionconfiguration.html#cfn-ecr-repositorycreationtemplate-encryptionconfiguration-encryptiontype>
+                                     encryptionType :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repositorycreationtemplate-encryptionconfiguration.html#cfn-ecr-repositorycreationtemplate-encryptionconfiguration-kmskey>
+                                     kmsKey :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEncryptionConfigurationProperty ::
+  Value Prelude.Text -> EncryptionConfigurationProperty
+mkEncryptionConfigurationProperty encryptionType
+  = EncryptionConfigurationProperty
+      {haddock_workaround_ = (), encryptionType = encryptionType,
+       kmsKey = Prelude.Nothing}
+instance ToResourceProperties EncryptionConfigurationProperty where
+  toResourceProperties EncryptionConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::RepositoryCreationTemplate.EncryptionConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EncryptionType" JSON..= encryptionType]
+                           (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey]))}
+instance JSON.ToJSON EncryptionConfigurationProperty where
+  toJSON EncryptionConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EncryptionType" JSON..= encryptionType]
+              (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey])))
+instance Property "EncryptionType" EncryptionConfigurationProperty where
+  type PropertyType "EncryptionType" EncryptionConfigurationProperty = Value Prelude.Text
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty {encryptionType = newValue, ..}
+instance Property "KmsKey" EncryptionConfigurationProperty where
+  type PropertyType "KmsKey" EncryptionConfigurationProperty = Value Prelude.Text
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty
+        {kmsKey = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECR/RepositoryCreationTemplate/EncryptionConfigurationProperty.hs-boot b/gen/Stratosphere/ECR/RepositoryCreationTemplate/EncryptionConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RepositoryCreationTemplate/EncryptionConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.RepositoryCreationTemplate.EncryptionConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EncryptionConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EncryptionConfigurationProperty
+instance Prelude.Eq EncryptionConfigurationProperty
+instance Prelude.Show EncryptionConfigurationProperty
+instance JSON.ToJSON EncryptionConfigurationProperty
diff --git a/gen/Stratosphere/ECR/RepositoryCreationTemplate/ImageTagMutabilityExclusionFilterProperty.hs b/gen/Stratosphere/ECR/RepositoryCreationTemplate/ImageTagMutabilityExclusionFilterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RepositoryCreationTemplate/ImageTagMutabilityExclusionFilterProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ECR.RepositoryCreationTemplate.ImageTagMutabilityExclusionFilterProperty (
+        ImageTagMutabilityExclusionFilterProperty(..),
+        mkImageTagMutabilityExclusionFilterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ImageTagMutabilityExclusionFilterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repositorycreationtemplate-imagetagmutabilityexclusionfilter.html>
+    ImageTagMutabilityExclusionFilterProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repositorycreationtemplate-imagetagmutabilityexclusionfilter.html#cfn-ecr-repositorycreationtemplate-imagetagmutabilityexclusionfilter-imagetagmutabilityexclusionfiltertype>
+                                               imageTagMutabilityExclusionFilterType :: (Value Prelude.Text),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-repositorycreationtemplate-imagetagmutabilityexclusionfilter.html#cfn-ecr-repositorycreationtemplate-imagetagmutabilityexclusionfilter-imagetagmutabilityexclusionfiltervalue>
+                                               imageTagMutabilityExclusionFilterValue :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkImageTagMutabilityExclusionFilterProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ImageTagMutabilityExclusionFilterProperty
+mkImageTagMutabilityExclusionFilterProperty
+  imageTagMutabilityExclusionFilterType
+  imageTagMutabilityExclusionFilterValue
+  = ImageTagMutabilityExclusionFilterProperty
+      {haddock_workaround_ = (),
+       imageTagMutabilityExclusionFilterType = imageTagMutabilityExclusionFilterType,
+       imageTagMutabilityExclusionFilterValue = imageTagMutabilityExclusionFilterValue}
+instance ToResourceProperties ImageTagMutabilityExclusionFilterProperty where
+  toResourceProperties ImageTagMutabilityExclusionFilterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECR::RepositoryCreationTemplate.ImageTagMutabilityExclusionFilter",
+         supportsTags = Prelude.False,
+         properties = ["ImageTagMutabilityExclusionFilterType"
+                         JSON..= imageTagMutabilityExclusionFilterType,
+                       "ImageTagMutabilityExclusionFilterValue"
+                         JSON..= imageTagMutabilityExclusionFilterValue]}
+instance JSON.ToJSON ImageTagMutabilityExclusionFilterProperty where
+  toJSON ImageTagMutabilityExclusionFilterProperty {..}
+    = JSON.object
+        ["ImageTagMutabilityExclusionFilterType"
+           JSON..= imageTagMutabilityExclusionFilterType,
+         "ImageTagMutabilityExclusionFilterValue"
+           JSON..= imageTagMutabilityExclusionFilterValue]
+instance Property "ImageTagMutabilityExclusionFilterType" ImageTagMutabilityExclusionFilterProperty where
+  type PropertyType "ImageTagMutabilityExclusionFilterType" ImageTagMutabilityExclusionFilterProperty = Value Prelude.Text
+  set newValue ImageTagMutabilityExclusionFilterProperty {..}
+    = ImageTagMutabilityExclusionFilterProperty
+        {imageTagMutabilityExclusionFilterType = newValue, ..}
+instance Property "ImageTagMutabilityExclusionFilterValue" ImageTagMutabilityExclusionFilterProperty where
+  type PropertyType "ImageTagMutabilityExclusionFilterValue" ImageTagMutabilityExclusionFilterProperty = Value Prelude.Text
+  set newValue ImageTagMutabilityExclusionFilterProperty {..}
+    = ImageTagMutabilityExclusionFilterProperty
+        {imageTagMutabilityExclusionFilterValue = newValue, ..}
diff --git a/gen/Stratosphere/ECR/RepositoryCreationTemplate/ImageTagMutabilityExclusionFilterProperty.hs-boot b/gen/Stratosphere/ECR/RepositoryCreationTemplate/ImageTagMutabilityExclusionFilterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECR/RepositoryCreationTemplate/ImageTagMutabilityExclusionFilterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECR.RepositoryCreationTemplate.ImageTagMutabilityExclusionFilterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ImageTagMutabilityExclusionFilterProperty :: Prelude.Type
+instance ToResourceProperties ImageTagMutabilityExclusionFilterProperty
+instance Prelude.Eq ImageTagMutabilityExclusionFilterProperty
+instance Prelude.Show ImageTagMutabilityExclusionFilterProperty
+instance JSON.ToJSON ImageTagMutabilityExclusionFilterProperty
diff --git a/stratosphere-ecr.cabal b/stratosphere-ecr.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-ecr.cabal
@@ -0,0 +1,92 @@
+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-ecr
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ECR.
+description:    Integration into stratosphere to generate resources and properties for AWS ECR
+category:       AWS, Cloud, ECR
+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.ECR.PublicRepository
+      Stratosphere.ECR.PublicRepository.RepositoryCatalogDataProperty
+      Stratosphere.ECR.PullThroughCacheRule
+      Stratosphere.ECR.RegistryPolicy
+      Stratosphere.ECR.RegistryScanningConfiguration
+      Stratosphere.ECR.RegistryScanningConfiguration.RepositoryFilterProperty
+      Stratosphere.ECR.RegistryScanningConfiguration.ScanningRuleProperty
+      Stratosphere.ECR.ReplicationConfiguration
+      Stratosphere.ECR.ReplicationConfiguration.ReplicationConfigurationProperty
+      Stratosphere.ECR.ReplicationConfiguration.ReplicationDestinationProperty
+      Stratosphere.ECR.ReplicationConfiguration.ReplicationRuleProperty
+      Stratosphere.ECR.ReplicationConfiguration.RepositoryFilterProperty
+      Stratosphere.ECR.Repository
+      Stratosphere.ECR.Repository.EncryptionConfigurationProperty
+      Stratosphere.ECR.Repository.ImageScanningConfigurationProperty
+      Stratosphere.ECR.Repository.ImageTagMutabilityExclusionFilterProperty
+      Stratosphere.ECR.Repository.LifecyclePolicyProperty
+      Stratosphere.ECR.RepositoryCreationTemplate
+      Stratosphere.ECR.RepositoryCreationTemplate.EncryptionConfigurationProperty
+      Stratosphere.ECR.RepositoryCreationTemplate.ImageTagMutabilityExclusionFilterProperty
+  other-modules:
+      Paths_stratosphere_ecr
+  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
