VaporShell.WAFv2.Classes.ps1

using namespace System
using namespace System.Collections
using namespace System.Collections.Generic
using namespace System.IO
using namespace System.Management.Automation
[CmdletBinding()]
Param()

Write-Verbose "Importing class 'WAFv2RuleGroupXssMatchStatement'"

class WAFv2RuleGroupXssMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupXssMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-xssmatchstatement.html'

    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations

    [WAFv2RuleGroupFieldToMatch] $FieldToMatch
    [WAFv2RuleGroupTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2RuleGroupXssMatchStatement() : base() {}
    WAFv2RuleGroupXssMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupXssMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLManagedRuleGroupStatement'"

class WAFv2WebACLManagedRuleGroupStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLManagedRuleGroupStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-managedrulegroupstatement.html'

    hidden [object] $_name
    hidden [object] $_vendorName
    hidden [object] $_excludedRules

    [string] $Name
    [string] $VendorName
    [WAFv2WebACLExcludedRule[]] $ExcludedRules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this._name
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._name = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VendorName -Value {
            $this._vendorName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._vendorName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ExcludedRules -Value {
            $this._excludedRules
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLExcludedRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._excludedRules = $value
        }
    }

    WAFv2WebACLManagedRuleGroupStatement() : base() {}
    WAFv2WebACLManagedRuleGroupStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLManagedRuleGroupStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLTextTransformation'"

class WAFv2WebACLTextTransformation : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLTextTransformation'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-texttransformation.html'

    hidden [object] $_priority
    hidden [object] $_type

    [int] $Priority
    [string] $Type

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Priority -Value {
            $this._priority
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._priority = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Type -Value {
            $this._type
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._type = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2WebACLTextTransformation() : base() {}
    WAFv2WebACLTextTransformation([IDictionary] $props) : base($props) {}
    WAFv2WebACLTextTransformation([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLDefaultAction'"

class WAFv2WebACLDefaultAction : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLDefaultAction'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-defaultaction.html'


    [VSJson] $Allow
    [VSJson] $Block

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Allow -Value {
            $this.Properties['Allow']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Allow'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Block -Value {
            $this.Properties['Block']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Block'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
    }

    WAFv2WebACLDefaultAction() : base() {}
    WAFv2WebACLDefaultAction([IDictionary] $props) : base($props) {}
    WAFv2WebACLDefaultAction([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLOrStatementTwo'"

class WAFv2WebACLOrStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLOrStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-orstatementtwo.html'

    hidden [object] $_statements

    [WAFv2WebACLStatementThree[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementThree], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2WebACLOrStatementTwo() : base() {}
    WAFv2WebACLOrStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2WebACLOrStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLXssMatchStatement'"

class WAFv2WebACLXssMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLXssMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-xssmatchstatement.html'

    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations

    [WAFv2WebACLFieldToMatch] $FieldToMatch
    [WAFv2WebACLTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2WebACLXssMatchStatement() : base() {}
    WAFv2WebACLXssMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLXssMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLByteMatchStatement'"

class WAFv2WebACLByteMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLByteMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-bytematchstatement.html'

    hidden [object] $_searchString
    hidden [object] $_searchStringBase64
    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations
    hidden [object] $_positionalConstraint

    [string] $SearchString
    [string] $SearchStringBase64
    [WAFv2WebACLFieldToMatch] $FieldToMatch
    [WAFv2WebACLTextTransformation[]] $TextTransformations
    [string] $PositionalConstraint

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name SearchString -Value {
            $this._searchString
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._searchString = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SearchStringBase64 -Value {
            $this._searchStringBase64
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._searchStringBase64 = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PositionalConstraint -Value {
            $this._positionalConstraint
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._positionalConstraint = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2WebACLByteMatchStatement() : base() {}
    WAFv2WebACLByteMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLByteMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupAndStatementTwo'"

class WAFv2RuleGroupAndStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupAndStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-andstatementtwo.html'

    hidden [object] $_statements

    [WAFv2RuleGroupStatementThree[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementThree], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2RuleGroupAndStatementTwo() : base() {}
    WAFv2RuleGroupAndStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupAndStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLForwardedIPConfiguration'"

class WAFv2WebACLForwardedIPConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLForwardedIPConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-forwardedipconfiguration.html'

    hidden [object] $_headerName
    hidden [object] $_fallbackBehavior

    [string] $HeaderName
    [string] $FallbackBehavior

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name HeaderName -Value {
            $this._headerName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._headerName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FallbackBehavior -Value {
            $this._fallbackBehavior
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fallbackBehavior = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2WebACLForwardedIPConfiguration() : base() {}
    WAFv2WebACLForwardedIPConfiguration([IDictionary] $props) : base($props) {}
    WAFv2WebACLForwardedIPConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLAndStatementTwo'"

class WAFv2WebACLAndStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLAndStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-andstatementtwo.html'

    hidden [object] $_statements

    [WAFv2WebACLStatementThree[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementThree], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2WebACLAndStatementTwo() : base() {}
    WAFv2WebACLAndStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2WebACLAndStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupRuleAction'"

class WAFv2RuleGroupRuleAction : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupRuleAction'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ruleaction.html'


    [VSJson] $Allow
    [VSJson] $Block
    [VSJson] $Count

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Allow -Value {
            $this.Properties['Allow']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Allow'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Block -Value {
            $this.Properties['Block']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Block'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Count -Value {
            $this.Properties['Count']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Count'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
    }

    WAFv2RuleGroupRuleAction() : base() {}
    WAFv2RuleGroupRuleAction([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupRuleAction([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLRegexPatternSetReferenceStatement'"

class WAFv2WebACLRegexPatternSetReferenceStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLRegexPatternSetReferenceStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-regexpatternsetreferencestatement.html'

    hidden [object] $_arn
    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations

    [string] $Arn
    [WAFv2WebACLFieldToMatch] $FieldToMatch
    [WAFv2WebACLTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Arn -Value {
            $this._arn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._arn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2WebACLRegexPatternSetReferenceStatement() : base() {}
    WAFv2WebACLRegexPatternSetReferenceStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLRegexPatternSetReferenceStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLIPSetForwardedIPConfiguration'"

class WAFv2WebACLIPSetForwardedIPConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLIPSetForwardedIPConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-ipsetforwardedipconfiguration.html'

    hidden [object] $_headerName
    hidden [object] $_fallbackBehavior
    hidden [object] $_position

    [string] $HeaderName
    [string] $FallbackBehavior
    [string] $Position

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name HeaderName -Value {
            $this._headerName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._headerName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FallbackBehavior -Value {
            $this._fallbackBehavior
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fallbackBehavior = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Position -Value {
            $this._position
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._position = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2WebACLIPSetForwardedIPConfiguration() : base() {}
    WAFv2WebACLIPSetForwardedIPConfiguration([IDictionary] $props) : base($props) {}
    WAFv2WebACLIPSetForwardedIPConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupStatementOne'"

class WAFv2RuleGroupStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-statementone.html'

    hidden [object] $_byteMatchStatement
    hidden [object] $_sqliMatchStatement
    hidden [object] $_xssMatchStatement
    hidden [object] $_sizeConstraintStatement
    hidden [object] $_geoMatchStatement
    hidden [object] $_iPSetReferenceStatement
    hidden [object] $_regexPatternSetReferenceStatement
    hidden [object] $_rateBasedStatement
    hidden [object] $_andStatement
    hidden [object] $_orStatement
    hidden [object] $_notStatement

    [WAFv2RuleGroupByteMatchStatement] $ByteMatchStatement
    [WAFv2RuleGroupSqliMatchStatement] $SqliMatchStatement
    [WAFv2RuleGroupXssMatchStatement] $XssMatchStatement
    [WAFv2RuleGroupSizeConstraintStatement] $SizeConstraintStatement
    [WAFv2RuleGroupGeoMatchStatement] $GeoMatchStatement
    [WAFv2RuleGroupIPSetReferenceStatement] $IPSetReferenceStatement
    [WAFv2RuleGroupRegexPatternSetReferenceStatement] $RegexPatternSetReferenceStatement
    [WAFv2RuleGroupRateBasedStatementOne] $RateBasedStatement
    [WAFv2RuleGroupAndStatementOne] $AndStatement
    [WAFv2RuleGroupOrStatementOne] $OrStatement
    [WAFv2RuleGroupNotStatementOne] $NotStatement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ByteMatchStatement -Value {
            $this._byteMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupByteMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._byteMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SqliMatchStatement -Value {
            $this._sqliMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupSqliMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sqliMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name XssMatchStatement -Value {
            $this._xssMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupXssMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._xssMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SizeConstraintStatement -Value {
            $this._sizeConstraintStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupSizeConstraintStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sizeConstraintStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GeoMatchStatement -Value {
            $this._geoMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupGeoMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._geoMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetReferenceStatement -Value {
            $this._iPSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupIPSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegexPatternSetReferenceStatement -Value {
            $this._regexPatternSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupRegexPatternSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._regexPatternSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RateBasedStatement -Value {
            $this._rateBasedStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupRateBasedStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._rateBasedStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AndStatement -Value {
            $this._andStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupAndStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._andStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OrStatement -Value {
            $this._orStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupOrStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._orStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NotStatement -Value {
            $this._notStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupNotStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._notStatement = $value
        }
    }

    WAFv2RuleGroupStatementOne() : base() {}
    WAFv2RuleGroupStatementOne([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupRateBasedStatementOne'"

class WAFv2RuleGroupRateBasedStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupRateBasedStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ratebasedstatementone.html'

    hidden [object] $_limit
    hidden [object] $_aggregateKeyType
    hidden [object] $_scopeDownStatement
    hidden [object] $_forwardedIPConfig

    [int] $Limit
    [string] $AggregateKeyType
    [WAFv2RuleGroupStatementTwo] $ScopeDownStatement
    [WAFv2RuleGroupForwardedIPConfiguration] $ForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Limit -Value {
            $this._limit
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._limit = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AggregateKeyType -Value {
            $this._aggregateKeyType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._aggregateKeyType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ScopeDownStatement -Value {
            $this._scopeDownStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._scopeDownStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ForwardedIPConfig -Value {
            $this._forwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._forwardedIPConfig = $value
        }
    }

    WAFv2RuleGroupRateBasedStatementOne() : base() {}
    WAFv2RuleGroupRateBasedStatementOne([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupRateBasedStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupFieldToMatch'"

class WAFv2RuleGroupFieldToMatch : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupFieldToMatch'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-fieldtomatch.html'


    [VSJson] $SingleHeader
    [VSJson] $SingleQueryArgument
    [VSJson] $AllQueryArguments
    [VSJson] $UriPath
    [VSJson] $QueryString
    [VSJson] $Body
    [VSJson] $Method

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name SingleHeader -Value {
            $this.Properties['SingleHeader']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['SingleHeader'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SingleQueryArgument -Value {
            $this.Properties['SingleQueryArgument']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['SingleQueryArgument'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AllQueryArguments -Value {
            $this.Properties['AllQueryArguments']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['AllQueryArguments'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UriPath -Value {
            $this.Properties['UriPath']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['UriPath'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name QueryString -Value {
            $this.Properties['QueryString']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['QueryString'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Body -Value {
            $this.Properties['Body']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Body'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Method -Value {
            $this.Properties['Method']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Method'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
    }

    WAFv2RuleGroupFieldToMatch() : base() {}
    WAFv2RuleGroupFieldToMatch([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupFieldToMatch([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupIPSetReferenceStatement'"

class WAFv2RuleGroupIPSetReferenceStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupIPSetReferenceStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ipsetreferencestatement.html'

    hidden [object] $_arn
    hidden [object] $_iPSetForwardedIPConfig

    [string] $Arn
    [WAFv2RuleGroupIPSetForwardedIPConfiguration] $IPSetForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Arn -Value {
            $this._arn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._arn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetForwardedIPConfig -Value {
            $this._iPSetForwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupIPSetForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetForwardedIPConfig = $value
        }
    }

    WAFv2RuleGroupIPSetReferenceStatement() : base() {}
    WAFv2RuleGroupIPSetReferenceStatement([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupIPSetReferenceStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLRuleGroupReferenceStatement'"

class WAFv2WebACLRuleGroupReferenceStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLRuleGroupReferenceStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-rulegroupreferencestatement.html'

    hidden [object] $_arn
    hidden [object] $_excludedRules

    [string] $Arn
    [WAFv2WebACLExcludedRule[]] $ExcludedRules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Arn -Value {
            $this._arn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._arn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ExcludedRules -Value {
            $this._excludedRules
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLExcludedRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._excludedRules = $value
        }
    }

    WAFv2WebACLRuleGroupReferenceStatement() : base() {}
    WAFv2WebACLRuleGroupReferenceStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLRuleGroupReferenceStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLNotStatementOne'"

class WAFv2WebACLNotStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLNotStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-notstatementone.html'

    hidden [object] $_statement

    [WAFv2WebACLStatementTwo] $Statement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statement -Value {
            $this._statement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._statement = $value
        }
    }

    WAFv2WebACLNotStatementOne() : base() {}
    WAFv2WebACLNotStatementOne([IDictionary] $props) : base($props) {}
    WAFv2WebACLNotStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLSizeConstraintStatement'"

class WAFv2WebACLSizeConstraintStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLSizeConstraintStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-sizeconstraintstatement.html'

    hidden [object] $_fieldToMatch
    hidden [object] $_comparisonOperator
    hidden [object] $_size
    hidden [object] $_textTransformations

    [WAFv2WebACLFieldToMatch] $FieldToMatch
    [string] $ComparisonOperator
    [int] $Size
    [WAFv2WebACLTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ComparisonOperator -Value {
            $this._comparisonOperator
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._comparisonOperator = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Size -Value {
            $this._size
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._size = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2WebACLSizeConstraintStatement() : base() {}
    WAFv2WebACLSizeConstraintStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLSizeConstraintStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLFieldToMatch'"

class WAFv2WebACLFieldToMatch : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLFieldToMatch'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-fieldtomatch.html'


    [VSJson] $SingleHeader
    [VSJson] $SingleQueryArgument
    [VSJson] $AllQueryArguments
    [VSJson] $UriPath
    [VSJson] $QueryString
    [VSJson] $Body
    [VSJson] $Method

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name SingleHeader -Value {
            $this.Properties['SingleHeader']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['SingleHeader'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SingleQueryArgument -Value {
            $this.Properties['SingleQueryArgument']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['SingleQueryArgument'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AllQueryArguments -Value {
            $this.Properties['AllQueryArguments']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['AllQueryArguments'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UriPath -Value {
            $this.Properties['UriPath']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['UriPath'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name QueryString -Value {
            $this.Properties['QueryString']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['QueryString'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Body -Value {
            $this.Properties['Body']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Body'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Method -Value {
            $this.Properties['Method']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Method'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
    }

    WAFv2WebACLFieldToMatch() : base() {}
    WAFv2WebACLFieldToMatch([IDictionary] $props) : base($props) {}
    WAFv2WebACLFieldToMatch([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLSqliMatchStatement'"

class WAFv2WebACLSqliMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLSqliMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-sqlimatchstatement.html'

    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations

    [WAFv2WebACLFieldToMatch] $FieldToMatch
    [WAFv2WebACLTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2WebACLSqliMatchStatement() : base() {}
    WAFv2WebACLSqliMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLSqliMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLGeoMatchStatement'"

class WAFv2WebACLGeoMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLGeoMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-geomatchstatement.html'

    hidden [object] $_countryCodes
    hidden [object] $_forwardedIPConfig

    [string[]] $CountryCodes
    [WAFv2WebACLForwardedIPConfiguration] $ForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name CountryCodes -Value {
            $this._countryCodes
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._countryCodes = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ForwardedIPConfig -Value {
            $this._forwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._forwardedIPConfig = $value
        }
    }

    WAFv2WebACLGeoMatchStatement() : base() {}
    WAFv2WebACLGeoMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLGeoMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupVisibilityConfig'"

class WAFv2RuleGroupVisibilityConfig : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupVisibilityConfig'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-visibilityconfig.html'

    hidden [object] $_sampledRequestsEnabled
    hidden [object] $_cloudWatchMetricsEnabled
    hidden [object] $_metricName

    [bool] $SampledRequestsEnabled
    [bool] $CloudWatchMetricsEnabled
    [string] $MetricName

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name SampledRequestsEnabled -Value {
            $this._sampledRequestsEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sampledRequestsEnabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CloudWatchMetricsEnabled -Value {
            $this._cloudWatchMetricsEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._cloudWatchMetricsEnabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name MetricName -Value {
            $this._metricName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._metricName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2RuleGroupVisibilityConfig() : base() {}
    WAFv2RuleGroupVisibilityConfig([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupVisibilityConfig([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupGeoMatchStatement'"

class WAFv2RuleGroupGeoMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupGeoMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-geomatchstatement.html'

    hidden [object] $_countryCodes
    hidden [object] $_forwardedIPConfig

    [string[]] $CountryCodes
    [WAFv2RuleGroupForwardedIPConfiguration] $ForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name CountryCodes -Value {
            $this._countryCodes
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._countryCodes = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ForwardedIPConfig -Value {
            $this._forwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._forwardedIPConfig = $value
        }
    }

    WAFv2RuleGroupGeoMatchStatement() : base() {}
    WAFv2RuleGroupGeoMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupGeoMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLAndStatementOne'"

class WAFv2WebACLAndStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLAndStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-andstatementone.html'

    hidden [object] $_statements

    [WAFv2WebACLStatementTwo[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementTwo], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2WebACLAndStatementOne() : base() {}
    WAFv2WebACLAndStatementOne([IDictionary] $props) : base($props) {}
    WAFv2WebACLAndStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupAndStatementOne'"

class WAFv2RuleGroupAndStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupAndStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-andstatementone.html'

    hidden [object] $_statements

    [WAFv2RuleGroupStatementTwo[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementTwo], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2RuleGroupAndStatementOne() : base() {}
    WAFv2RuleGroupAndStatementOne([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupAndStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLRuleAction'"

class WAFv2WebACLRuleAction : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLRuleAction'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-ruleaction.html'


    [VSJson] $Allow
    [VSJson] $Block
    [VSJson] $Count

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Allow -Value {
            $this.Properties['Allow']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Allow'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Block -Value {
            $this.Properties['Block']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Block'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Count -Value {
            $this.Properties['Count']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Count'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
    }

    WAFv2WebACLRuleAction() : base() {}
    WAFv2WebACLRuleAction([IDictionary] $props) : base($props) {}
    WAFv2WebACLRuleAction([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupIPSetForwardedIPConfiguration'"

class WAFv2RuleGroupIPSetForwardedIPConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupIPSetForwardedIPConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ipsetforwardedipconfiguration.html'

    hidden [object] $_headerName
    hidden [object] $_fallbackBehavior
    hidden [object] $_position

    [string] $HeaderName
    [string] $FallbackBehavior
    [string] $Position

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name HeaderName -Value {
            $this._headerName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._headerName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FallbackBehavior -Value {
            $this._fallbackBehavior
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fallbackBehavior = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Position -Value {
            $this._position
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._position = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2RuleGroupIPSetForwardedIPConfiguration() : base() {}
    WAFv2RuleGroupIPSetForwardedIPConfiguration([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupIPSetForwardedIPConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupRateBasedStatementTwo'"

class WAFv2RuleGroupRateBasedStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupRateBasedStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ratebasedstatementtwo.html'

    hidden [object] $_limit
    hidden [object] $_aggregateKeyType
    hidden [object] $_scopeDownStatement
    hidden [object] $_forwardedIPConfig

    [int] $Limit
    [string] $AggregateKeyType
    [WAFv2RuleGroupStatementThree] $ScopeDownStatement
    [WAFv2RuleGroupForwardedIPConfiguration] $ForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Limit -Value {
            $this._limit
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._limit = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AggregateKeyType -Value {
            $this._aggregateKeyType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._aggregateKeyType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ScopeDownStatement -Value {
            $this._scopeDownStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementThree], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._scopeDownStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ForwardedIPConfig -Value {
            $this._forwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._forwardedIPConfig = $value
        }
    }

    WAFv2RuleGroupRateBasedStatementTwo() : base() {}
    WAFv2RuleGroupRateBasedStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupRateBasedStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupOrStatementOne'"

class WAFv2RuleGroupOrStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupOrStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-orstatementone.html'

    hidden [object] $_statements

    [WAFv2RuleGroupStatementTwo[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementTwo], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2RuleGroupOrStatementOne() : base() {}
    WAFv2RuleGroupOrStatementOne([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupOrStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupNotStatementOne'"

class WAFv2RuleGroupNotStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupNotStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-notstatementone.html'

    hidden [object] $_statement

    [WAFv2RuleGroupStatementTwo] $Statement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statement -Value {
            $this._statement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._statement = $value
        }
    }

    WAFv2RuleGroupNotStatementOne() : base() {}
    WAFv2RuleGroupNotStatementOne([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupNotStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupTextTransformation'"

class WAFv2RuleGroupTextTransformation : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupTextTransformation'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-texttransformation.html'

    hidden [object] $_priority
    hidden [object] $_type

    [int] $Priority
    [string] $Type

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Priority -Value {
            $this._priority
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._priority = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Type -Value {
            $this._type
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._type = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2RuleGroupTextTransformation() : base() {}
    WAFv2RuleGroupTextTransformation([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupTextTransformation([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLStatementOne'"

class WAFv2WebACLStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-statementone.html'

    hidden [object] $_byteMatchStatement
    hidden [object] $_sqliMatchStatement
    hidden [object] $_xssMatchStatement
    hidden [object] $_sizeConstraintStatement
    hidden [object] $_geoMatchStatement
    hidden [object] $_ruleGroupReferenceStatement
    hidden [object] $_iPSetReferenceStatement
    hidden [object] $_regexPatternSetReferenceStatement
    hidden [object] $_managedRuleGroupStatement
    hidden [object] $_rateBasedStatement
    hidden [object] $_andStatement
    hidden [object] $_orStatement
    hidden [object] $_notStatement

    [WAFv2WebACLByteMatchStatement] $ByteMatchStatement
    [WAFv2WebACLSqliMatchStatement] $SqliMatchStatement
    [WAFv2WebACLXssMatchStatement] $XssMatchStatement
    [WAFv2WebACLSizeConstraintStatement] $SizeConstraintStatement
    [WAFv2WebACLGeoMatchStatement] $GeoMatchStatement
    [WAFv2WebACLRuleGroupReferenceStatement] $RuleGroupReferenceStatement
    [WAFv2WebACLIPSetReferenceStatement] $IPSetReferenceStatement
    [WAFv2WebACLRegexPatternSetReferenceStatement] $RegexPatternSetReferenceStatement
    [WAFv2WebACLManagedRuleGroupStatement] $ManagedRuleGroupStatement
    [WAFv2WebACLRateBasedStatementOne] $RateBasedStatement
    [WAFv2WebACLAndStatementOne] $AndStatement
    [WAFv2WebACLOrStatementOne] $OrStatement
    [WAFv2WebACLNotStatementOne] $NotStatement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ByteMatchStatement -Value {
            $this._byteMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLByteMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._byteMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SqliMatchStatement -Value {
            $this._sqliMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLSqliMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sqliMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name XssMatchStatement -Value {
            $this._xssMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLXssMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._xssMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SizeConstraintStatement -Value {
            $this._sizeConstraintStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLSizeConstraintStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sizeConstraintStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GeoMatchStatement -Value {
            $this._geoMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLGeoMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._geoMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RuleGroupReferenceStatement -Value {
            $this._ruleGroupReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRuleGroupReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._ruleGroupReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetReferenceStatement -Value {
            $this._iPSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLIPSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegexPatternSetReferenceStatement -Value {
            $this._regexPatternSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRegexPatternSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._regexPatternSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ManagedRuleGroupStatement -Value {
            $this._managedRuleGroupStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLManagedRuleGroupStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._managedRuleGroupStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RateBasedStatement -Value {
            $this._rateBasedStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRateBasedStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._rateBasedStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AndStatement -Value {
            $this._andStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLAndStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._andStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OrStatement -Value {
            $this._orStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLOrStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._orStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NotStatement -Value {
            $this._notStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLNotStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._notStatement = $value
        }
    }

    WAFv2WebACLStatementOne() : base() {}
    WAFv2WebACLStatementOne([IDictionary] $props) : base($props) {}
    WAFv2WebACLStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupByteMatchStatement'"

class WAFv2RuleGroupByteMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupByteMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-bytematchstatement.html'

    hidden [object] $_searchString
    hidden [object] $_searchStringBase64
    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations
    hidden [object] $_positionalConstraint

    [string] $SearchString
    [string] $SearchStringBase64
    [WAFv2RuleGroupFieldToMatch] $FieldToMatch
    [WAFv2RuleGroupTextTransformation[]] $TextTransformations
    [string] $PositionalConstraint

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name SearchString -Value {
            $this._searchString
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._searchString = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SearchStringBase64 -Value {
            $this._searchStringBase64
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._searchStringBase64 = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PositionalConstraint -Value {
            $this._positionalConstraint
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._positionalConstraint = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2RuleGroupByteMatchStatement() : base() {}
    WAFv2RuleGroupByteMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupByteMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupRegexPatternSetReferenceStatement'"

class WAFv2RuleGroupRegexPatternSetReferenceStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupRegexPatternSetReferenceStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-regexpatternsetreferencestatement.html'

    hidden [object] $_arn
    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations

    [string] $Arn
    [WAFv2RuleGroupFieldToMatch] $FieldToMatch
    [WAFv2RuleGroupTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Arn -Value {
            $this._arn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._arn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2RuleGroupRegexPatternSetReferenceStatement() : base() {}
    WAFv2RuleGroupRegexPatternSetReferenceStatement([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupRegexPatternSetReferenceStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLNotStatementTwo'"

class WAFv2WebACLNotStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLNotStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-notstatementtwo.html'

    hidden [object] $_statement

    [WAFv2WebACLStatementThree] $Statement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statement -Value {
            $this._statement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementThree], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._statement = $value
        }
    }

    WAFv2WebACLNotStatementTwo() : base() {}
    WAFv2WebACLNotStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2WebACLNotStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLOverrideAction'"

class WAFv2WebACLOverrideAction : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLOverrideAction'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-overrideaction.html'


    [VSJson] $Count
    [VSJson] $None

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Count -Value {
            $this.Properties['Count']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Count'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name None -Value {
            $this.Properties['None']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['None'] = if ($value -is [VSJson]) {
                $value
            }
            else {
                [VSJson]::new($value)
            }
        }
    }

    WAFv2WebACLOverrideAction() : base() {}
    WAFv2WebACLOverrideAction([IDictionary] $props) : base($props) {}
    WAFv2WebACLOverrideAction([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLRateBasedStatementTwo'"

class WAFv2WebACLRateBasedStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLRateBasedStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-ratebasedstatementtwo.html'

    hidden [object] $_limit
    hidden [object] $_aggregateKeyType
    hidden [object] $_scopeDownStatement
    hidden [object] $_forwardedIPConfig

    [int] $Limit
    [string] $AggregateKeyType
    [WAFv2WebACLStatementThree] $ScopeDownStatement
    [WAFv2WebACLForwardedIPConfiguration] $ForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Limit -Value {
            $this._limit
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._limit = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AggregateKeyType -Value {
            $this._aggregateKeyType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._aggregateKeyType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ScopeDownStatement -Value {
            $this._scopeDownStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementThree], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._scopeDownStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ForwardedIPConfig -Value {
            $this._forwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._forwardedIPConfig = $value
        }
    }

    WAFv2WebACLRateBasedStatementTwo() : base() {}
    WAFv2WebACLRateBasedStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2WebACLRateBasedStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupStatementThree'"

class WAFv2RuleGroupStatementThree : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupStatementThree'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-statementthree.html'

    hidden [object] $_byteMatchStatement
    hidden [object] $_sqliMatchStatement
    hidden [object] $_xssMatchStatement
    hidden [object] $_sizeConstraintStatement
    hidden [object] $_geoMatchStatement
    hidden [object] $_iPSetReferenceStatement
    hidden [object] $_regexPatternSetReferenceStatement

    [WAFv2RuleGroupByteMatchStatement] $ByteMatchStatement
    [WAFv2RuleGroupSqliMatchStatement] $SqliMatchStatement
    [WAFv2RuleGroupXssMatchStatement] $XssMatchStatement
    [WAFv2RuleGroupSizeConstraintStatement] $SizeConstraintStatement
    [WAFv2RuleGroupGeoMatchStatement] $GeoMatchStatement
    [WAFv2RuleGroupIPSetReferenceStatement] $IPSetReferenceStatement
    [WAFv2RuleGroupRegexPatternSetReferenceStatement] $RegexPatternSetReferenceStatement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ByteMatchStatement -Value {
            $this._byteMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupByteMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._byteMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SqliMatchStatement -Value {
            $this._sqliMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupSqliMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sqliMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name XssMatchStatement -Value {
            $this._xssMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupXssMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._xssMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SizeConstraintStatement -Value {
            $this._sizeConstraintStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupSizeConstraintStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sizeConstraintStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GeoMatchStatement -Value {
            $this._geoMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupGeoMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._geoMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetReferenceStatement -Value {
            $this._iPSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupIPSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegexPatternSetReferenceStatement -Value {
            $this._regexPatternSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupRegexPatternSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._regexPatternSetReferenceStatement = $value
        }
    }

    WAFv2RuleGroupStatementThree() : base() {}
    WAFv2RuleGroupStatementThree([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupStatementThree([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupNotStatementTwo'"

class WAFv2RuleGroupNotStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupNotStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-notstatementtwo.html'

    hidden [object] $_statement

    [WAFv2RuleGroupStatementThree] $Statement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statement -Value {
            $this._statement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementThree], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._statement = $value
        }
    }

    WAFv2RuleGroupNotStatementTwo() : base() {}
    WAFv2RuleGroupNotStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupNotStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupRule'"

class WAFv2RuleGroupRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-rule.html'

    hidden [object] $_name
    hidden [object] $_priority
    hidden [object] $_statement
    hidden [object] $_action
    hidden [object] $_visibilityConfig

    [string] $Name
    [int] $Priority
    [WAFv2RuleGroupStatementOne] $Statement
    [WAFv2RuleGroupRuleAction] $Action
    [WAFv2RuleGroupVisibilityConfig] $VisibilityConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this._name
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._name = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Priority -Value {
            $this._priority
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._priority = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statement -Value {
            $this._statement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._statement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Action -Value {
            $this._action
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupRuleAction], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._action = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VisibilityConfig -Value {
            $this._visibilityConfig
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupVisibilityConfig], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._visibilityConfig = $value
        }
    }

    WAFv2RuleGroupRule() : base() {}
    WAFv2RuleGroupRule([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLRule'"

class WAFv2WebACLRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-rule.html'

    hidden [object] $_name
    hidden [object] $_priority
    hidden [object] $_statement
    hidden [object] $_action
    hidden [object] $_overrideAction
    hidden [object] $_visibilityConfig

    [string] $Name
    [int] $Priority
    [WAFv2WebACLStatementOne] $Statement
    [WAFv2WebACLRuleAction] $Action
    [WAFv2WebACLOverrideAction] $OverrideAction
    [WAFv2WebACLVisibilityConfig] $VisibilityConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this._name
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._name = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Priority -Value {
            $this._priority
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._priority = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statement -Value {
            $this._statement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementOne], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._statement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Action -Value {
            $this._action
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRuleAction], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._action = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OverrideAction -Value {
            $this._overrideAction
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLOverrideAction], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._overrideAction = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VisibilityConfig -Value {
            $this._visibilityConfig
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLVisibilityConfig], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._visibilityConfig = $value
        }
    }

    WAFv2WebACLRule() : base() {}
    WAFv2WebACLRule([IDictionary] $props) : base($props) {}
    WAFv2WebACLRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupOrStatementTwo'"

class WAFv2RuleGroupOrStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupOrStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-orstatementtwo.html'

    hidden [object] $_statements

    [WAFv2RuleGroupStatementThree[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupStatementThree], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2RuleGroupOrStatementTwo() : base() {}
    WAFv2RuleGroupOrStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupOrStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLOrStatementOne'"

class WAFv2WebACLOrStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLOrStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-orstatementone.html'

    hidden [object] $_statements

    [WAFv2WebACLStatementTwo[]] $Statements

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Statements -Value {
            $this._statements
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementTwo], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._statements = $value
        }
    }

    WAFv2WebACLOrStatementOne() : base() {}
    WAFv2WebACLOrStatementOne([IDictionary] $props) : base($props) {}
    WAFv2WebACLOrStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLStatementTwo'"

class WAFv2WebACLStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-statementtwo.html'

    hidden [object] $_byteMatchStatement
    hidden [object] $_sqliMatchStatement
    hidden [object] $_xssMatchStatement
    hidden [object] $_sizeConstraintStatement
    hidden [object] $_geoMatchStatement
    hidden [object] $_ruleGroupReferenceStatement
    hidden [object] $_iPSetReferenceStatement
    hidden [object] $_regexPatternSetReferenceStatement
    hidden [object] $_managedRuleGroupStatement
    hidden [object] $_rateBasedStatement
    hidden [object] $_andStatement
    hidden [object] $_orStatement
    hidden [object] $_notStatement

    [WAFv2WebACLByteMatchStatement] $ByteMatchStatement
    [WAFv2WebACLSqliMatchStatement] $SqliMatchStatement
    [WAFv2WebACLXssMatchStatement] $XssMatchStatement
    [WAFv2WebACLSizeConstraintStatement] $SizeConstraintStatement
    [WAFv2WebACLGeoMatchStatement] $GeoMatchStatement
    [WAFv2WebACLRuleGroupReferenceStatement] $RuleGroupReferenceStatement
    [WAFv2WebACLIPSetReferenceStatement] $IPSetReferenceStatement
    [WAFv2WebACLRegexPatternSetReferenceStatement] $RegexPatternSetReferenceStatement
    [WAFv2WebACLManagedRuleGroupStatement] $ManagedRuleGroupStatement
    [WAFv2WebACLRateBasedStatementTwo] $RateBasedStatement
    [WAFv2WebACLAndStatementTwo] $AndStatement
    [WAFv2WebACLOrStatementTwo] $OrStatement
    [WAFv2WebACLNotStatementTwo] $NotStatement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ByteMatchStatement -Value {
            $this._byteMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLByteMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._byteMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SqliMatchStatement -Value {
            $this._sqliMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLSqliMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sqliMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name XssMatchStatement -Value {
            $this._xssMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLXssMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._xssMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SizeConstraintStatement -Value {
            $this._sizeConstraintStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLSizeConstraintStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sizeConstraintStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GeoMatchStatement -Value {
            $this._geoMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLGeoMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._geoMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RuleGroupReferenceStatement -Value {
            $this._ruleGroupReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRuleGroupReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._ruleGroupReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetReferenceStatement -Value {
            $this._iPSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLIPSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegexPatternSetReferenceStatement -Value {
            $this._regexPatternSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRegexPatternSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._regexPatternSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ManagedRuleGroupStatement -Value {
            $this._managedRuleGroupStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLManagedRuleGroupStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._managedRuleGroupStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RateBasedStatement -Value {
            $this._rateBasedStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRateBasedStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._rateBasedStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AndStatement -Value {
            $this._andStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLAndStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._andStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OrStatement -Value {
            $this._orStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLOrStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._orStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NotStatement -Value {
            $this._notStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLNotStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._notStatement = $value
        }
    }

    WAFv2WebACLStatementTwo() : base() {}
    WAFv2WebACLStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2WebACLStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLRateBasedStatementOne'"

class WAFv2WebACLRateBasedStatementOne : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLRateBasedStatementOne'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-ratebasedstatementone.html'

    hidden [object] $_limit
    hidden [object] $_aggregateKeyType
    hidden [object] $_scopeDownStatement
    hidden [object] $_forwardedIPConfig

    [int] $Limit
    [string] $AggregateKeyType
    [WAFv2WebACLStatementTwo] $ScopeDownStatement
    [WAFv2WebACLForwardedIPConfiguration] $ForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Limit -Value {
            $this._limit
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._limit = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AggregateKeyType -Value {
            $this._aggregateKeyType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._aggregateKeyType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ScopeDownStatement -Value {
            $this._scopeDownStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._scopeDownStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ForwardedIPConfig -Value {
            $this._forwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._forwardedIPConfig = $value
        }
    }

    WAFv2WebACLRateBasedStatementOne() : base() {}
    WAFv2WebACLRateBasedStatementOne([IDictionary] $props) : base($props) {}
    WAFv2WebACLRateBasedStatementOne([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLExcludedRule'"

class WAFv2WebACLExcludedRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLExcludedRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-excludedrule.html'

    hidden [object] $_name

    [string] $Name

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this._name
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._name = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2WebACLExcludedRule() : base() {}
    WAFv2WebACLExcludedRule([IDictionary] $props) : base($props) {}
    WAFv2WebACLExcludedRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLVisibilityConfig'"

class WAFv2WebACLVisibilityConfig : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLVisibilityConfig'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-visibilityconfig.html'

    hidden [object] $_sampledRequestsEnabled
    hidden [object] $_cloudWatchMetricsEnabled
    hidden [object] $_metricName

    [bool] $SampledRequestsEnabled
    [bool] $CloudWatchMetricsEnabled
    [string] $MetricName

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name SampledRequestsEnabled -Value {
            $this._sampledRequestsEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sampledRequestsEnabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CloudWatchMetricsEnabled -Value {
            $this._cloudWatchMetricsEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._cloudWatchMetricsEnabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name MetricName -Value {
            $this._metricName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._metricName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2WebACLVisibilityConfig() : base() {}
    WAFv2WebACLVisibilityConfig([IDictionary] $props) : base($props) {}
    WAFv2WebACLVisibilityConfig([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLIPSetReferenceStatement'"

class WAFv2WebACLIPSetReferenceStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLIPSetReferenceStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-ipsetreferencestatement.html'

    hidden [object] $_arn
    hidden [object] $_iPSetForwardedIPConfig

    [string] $Arn
    [WAFv2WebACLIPSetForwardedIPConfiguration] $IPSetForwardedIPConfig

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Arn -Value {
            $this._arn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._arn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetForwardedIPConfig -Value {
            $this._iPSetForwardedIPConfig
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLIPSetForwardedIPConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetForwardedIPConfig = $value
        }
    }

    WAFv2WebACLIPSetReferenceStatement() : base() {}
    WAFv2WebACLIPSetReferenceStatement([IDictionary] $props) : base($props) {}
    WAFv2WebACLIPSetReferenceStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupSqliMatchStatement'"

class WAFv2RuleGroupSqliMatchStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupSqliMatchStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-sqlimatchstatement.html'

    hidden [object] $_fieldToMatch
    hidden [object] $_textTransformations

    [WAFv2RuleGroupFieldToMatch] $FieldToMatch
    [WAFv2RuleGroupTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2RuleGroupSqliMatchStatement() : base() {}
    WAFv2RuleGroupSqliMatchStatement([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupSqliMatchStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLStatementThree'"

class WAFv2WebACLStatementThree : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2WebACLStatementThree'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-statementthree.html'

    hidden [object] $_byteMatchStatement
    hidden [object] $_sqliMatchStatement
    hidden [object] $_xssMatchStatement
    hidden [object] $_sizeConstraintStatement
    hidden [object] $_geoMatchStatement
    hidden [object] $_ruleGroupReferenceStatement
    hidden [object] $_iPSetReferenceStatement
    hidden [object] $_regexPatternSetReferenceStatement
    hidden [object] $_managedRuleGroupStatement

    [WAFv2WebACLByteMatchStatement] $ByteMatchStatement
    [WAFv2WebACLSqliMatchStatement] $SqliMatchStatement
    [WAFv2WebACLXssMatchStatement] $XssMatchStatement
    [WAFv2WebACLSizeConstraintStatement] $SizeConstraintStatement
    [WAFv2WebACLGeoMatchStatement] $GeoMatchStatement
    [WAFv2WebACLRuleGroupReferenceStatement] $RuleGroupReferenceStatement
    [WAFv2WebACLIPSetReferenceStatement] $IPSetReferenceStatement
    [WAFv2WebACLRegexPatternSetReferenceStatement] $RegexPatternSetReferenceStatement
    [WAFv2WebACLManagedRuleGroupStatement] $ManagedRuleGroupStatement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ByteMatchStatement -Value {
            $this._byteMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLByteMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._byteMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SqliMatchStatement -Value {
            $this._sqliMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLSqliMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sqliMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name XssMatchStatement -Value {
            $this._xssMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLXssMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._xssMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SizeConstraintStatement -Value {
            $this._sizeConstraintStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLSizeConstraintStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sizeConstraintStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GeoMatchStatement -Value {
            $this._geoMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLGeoMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._geoMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RuleGroupReferenceStatement -Value {
            $this._ruleGroupReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRuleGroupReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._ruleGroupReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetReferenceStatement -Value {
            $this._iPSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLIPSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegexPatternSetReferenceStatement -Value {
            $this._regexPatternSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRegexPatternSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._regexPatternSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ManagedRuleGroupStatement -Value {
            $this._managedRuleGroupStatement
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLManagedRuleGroupStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._managedRuleGroupStatement = $value
        }
    }

    WAFv2WebACLStatementThree() : base() {}
    WAFv2WebACLStatementThree([IDictionary] $props) : base($props) {}
    WAFv2WebACLStatementThree([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupForwardedIPConfiguration'"

class WAFv2RuleGroupForwardedIPConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupForwardedIPConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-forwardedipconfiguration.html'

    hidden [object] $_headerName
    hidden [object] $_fallbackBehavior

    [string] $HeaderName
    [string] $FallbackBehavior

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name HeaderName -Value {
            $this._headerName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._headerName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name FallbackBehavior -Value {
            $this._fallbackBehavior
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fallbackBehavior = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    WAFv2RuleGroupForwardedIPConfiguration() : base() {}
    WAFv2RuleGroupForwardedIPConfiguration([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupForwardedIPConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupSizeConstraintStatement'"

class WAFv2RuleGroupSizeConstraintStatement : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupSizeConstraintStatement'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-sizeconstraintstatement.html'

    hidden [object] $_fieldToMatch
    hidden [object] $_comparisonOperator
    hidden [object] $_size
    hidden [object] $_textTransformations

    [WAFv2RuleGroupFieldToMatch] $FieldToMatch
    [string] $ComparisonOperator
    [int] $Size
    [WAFv2RuleGroupTextTransformation[]] $TextTransformations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name FieldToMatch -Value {
            $this._fieldToMatch
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupFieldToMatch], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._fieldToMatch = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ComparisonOperator -Value {
            $this._comparisonOperator
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._comparisonOperator = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Size -Value {
            $this._size
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._size = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TextTransformations -Value {
            $this._textTransformations
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupTextTransformation], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._textTransformations = $value
        }
    }

    WAFv2RuleGroupSizeConstraintStatement() : base() {}
    WAFv2RuleGroupSizeConstraintStatement([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupSizeConstraintStatement([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroupStatementTwo'"

class WAFv2RuleGroupStatementTwo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSWAFv2RuleGroupStatementTwo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-statementtwo.html'

    hidden [object] $_byteMatchStatement
    hidden [object] $_sqliMatchStatement
    hidden [object] $_xssMatchStatement
    hidden [object] $_sizeConstraintStatement
    hidden [object] $_geoMatchStatement
    hidden [object] $_iPSetReferenceStatement
    hidden [object] $_regexPatternSetReferenceStatement
    hidden [object] $_rateBasedStatement
    hidden [object] $_andStatement
    hidden [object] $_orStatement
    hidden [object] $_notStatement

    [WAFv2RuleGroupByteMatchStatement] $ByteMatchStatement
    [WAFv2RuleGroupSqliMatchStatement] $SqliMatchStatement
    [WAFv2RuleGroupXssMatchStatement] $XssMatchStatement
    [WAFv2RuleGroupSizeConstraintStatement] $SizeConstraintStatement
    [WAFv2RuleGroupGeoMatchStatement] $GeoMatchStatement
    [WAFv2RuleGroupIPSetReferenceStatement] $IPSetReferenceStatement
    [WAFv2RuleGroupRegexPatternSetReferenceStatement] $RegexPatternSetReferenceStatement
    [WAFv2RuleGroupRateBasedStatementTwo] $RateBasedStatement
    [WAFv2RuleGroupAndStatementTwo] $AndStatement
    [WAFv2RuleGroupOrStatementTwo] $OrStatement
    [WAFv2RuleGroupNotStatementTwo] $NotStatement

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ByteMatchStatement -Value {
            $this._byteMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupByteMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._byteMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SqliMatchStatement -Value {
            $this._sqliMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupSqliMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sqliMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name XssMatchStatement -Value {
            $this._xssMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupXssMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._xssMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SizeConstraintStatement -Value {
            $this._sizeConstraintStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupSizeConstraintStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sizeConstraintStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GeoMatchStatement -Value {
            $this._geoMatchStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupGeoMatchStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._geoMatchStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPSetReferenceStatement -Value {
            $this._iPSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupIPSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._iPSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegexPatternSetReferenceStatement -Value {
            $this._regexPatternSetReferenceStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupRegexPatternSetReferenceStatement], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._regexPatternSetReferenceStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RateBasedStatement -Value {
            $this._rateBasedStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupRateBasedStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._rateBasedStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AndStatement -Value {
            $this._andStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupAndStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._andStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OrStatement -Value {
            $this._orStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupOrStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._orStatement = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NotStatement -Value {
            $this._notStatement
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupNotStatementTwo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._notStatement = $value
        }
    }

    WAFv2RuleGroupStatementTwo() : base() {}
    WAFv2RuleGroupStatementTwo([IDictionary] $props) : base($props) {}
    WAFv2RuleGroupStatementTwo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RegexPatternSet'"

class WAFv2RegexPatternSet : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSWAFv2RegexPatternSet'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-regexpatternset.html'

    hidden [string[]] $_attributes = @('Arn','Id')
    hidden [object] $_condition

    [string] $Type = 'AWS::WAFv2::RegexPatternSet'
    [string] $Description
    [string] $Name
    [string[]] $RegularExpressionList
    [string] $Scope
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this.Properties['Name']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Name'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegularExpressionList -Value {
            $this.Properties['RegularExpressionList']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['RegularExpressionList'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Scope -Value {
            $this.Properties['Scope']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Scope'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    WAFv2RegexPatternSet() : base() {}
    WAFv2RegexPatternSet([IDictionary] $props) : base($props) {}
    WAFv2RegexPatternSet([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2IPSet'"

class WAFv2IPSet : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSWAFv2IPSet'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-ipset.html'

    hidden [string[]] $_attributes = @('Arn','Id')
    hidden [object] $_condition

    [string] $Type = 'AWS::WAFv2::IPSet'
    [string] $Description
    [string] $Name
    [string] $Scope
    [string] $IPAddressVersion
    [string[]] $Addresses
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this.Properties['Name']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Name'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Scope -Value {
            $this.Properties['Scope']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Scope'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IPAddressVersion -Value {
            $this.Properties['IPAddressVersion']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['IPAddressVersion'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Addresses -Value {
            $this.Properties['Addresses']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Addresses'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    WAFv2IPSet() : base() {}
    WAFv2IPSet([IDictionary] $props) : base($props) {}
    WAFv2IPSet([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACLAssociation'"

class WAFv2WebACLAssociation : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSWAFv2WebACLAssociation'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-webaclassociation.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::WAFv2::WebACLAssociation'
    [string] $ResourceArn
    [string] $WebACLArn
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name ResourceArn -Value {
            $this.Properties['ResourceArn']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ResourceArn'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name WebACLArn -Value {
            $this.Properties['WebACLArn']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['WebACLArn'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    WAFv2WebACLAssociation() : base() {}
    WAFv2WebACLAssociation([IDictionary] $props) : base($props) {}
    WAFv2WebACLAssociation([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2RuleGroup'"

class WAFv2RuleGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSWAFv2RuleGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-rulegroup.html'

    hidden [string[]] $_attributes = @('Arn','Id')
    hidden [object] $_condition

    [string] $Type = 'AWS::WAFv2::RuleGroup'
    [int] $Capacity
    [string] $Description
    [string] $Name
    [string] $Scope
    [WAFv2RuleGroupRule[]] $Rules
    [WAFv2RuleGroupVisibilityConfig] $VisibilityConfig
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Capacity -Value {
            $this.Properties['Capacity']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Capacity'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this.Properties['Name']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Name'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Scope -Value {
            $this.Properties['Scope']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Scope'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Rules -Value {
            $this.Properties['Rules']
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Rules'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VisibilityConfig -Value {
            $this.Properties['VisibilityConfig']
        } -SecondValue {
            param([ValidateType(([WAFv2RuleGroupVisibilityConfig], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['VisibilityConfig'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    WAFv2RuleGroup() : base() {}
    WAFv2RuleGroup([IDictionary] $props) : base($props) {}
    WAFv2RuleGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'WAFv2WebACL'"

class WAFv2WebACL : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSWAFv2WebACL'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-webacl.html'

    hidden [string[]] $_attributes = @('Arn','Capacity','Id')
    hidden [object] $_condition

    [string] $Type = 'AWS::WAFv2::WebACL'
    [WAFv2WebACLDefaultAction] $DefaultAction
    [string] $Description
    [string] $Name
    [string] $Scope
    [WAFv2WebACLRule[]] $Rules
    [WAFv2WebACLVisibilityConfig] $VisibilityConfig
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name DefaultAction -Value {
            $this.Properties['DefaultAction']
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLDefaultAction], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['DefaultAction'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this.Properties['Name']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Name'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Scope -Value {
            $this.Properties['Scope']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Scope'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Rules -Value {
            $this.Properties['Rules']
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Rules'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VisibilityConfig -Value {
            $this.Properties['VisibilityConfig']
        } -SecondValue {
            param([ValidateType(([WAFv2WebACLVisibilityConfig], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['VisibilityConfig'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    WAFv2WebACL() : base() {}
    WAFv2WebACL([IDictionary] $props) : base($props) {}
    WAFv2WebACL([psobject] $props) : base($props) {}
}