AzureLocalSANValidator/EN-US/AzureLocal.SANValidator.Strings.psd1

ConvertFrom-StringData @'
###PSLOC
InvalidConnectionType = ConnectionType '{0}' is not valid. Expected 'FibreChannel' or 'iSCSI'.
NoFCHBAFound = No Fibre Channel HBA adapters were detected on this node. Ensure FC HBAs are installed and connected.
FCPortOffline = Fibre Channel port '{0}' is not online. Current status: '{1}'. Verify cable connections and switch configuration.
FCValidationSuccess = Fibre Channel connectivity validated. {0} HBA port(s) detected and online.
FCRemediation = Troubleshoot Fibre Channel connectivity:\n1. Verify FC HBA adapters are installed: Get-InitiatorPort | Where-Object { $_.ConnectionType -eq 'Fibre Channel' }\n2. Check port operational status: Get-InitiatorPort | Where-Object { $_.ConnectionType -eq 'Fibre Channel' } | Select-Object NodeAddress, PortAddress, OperationalStatus\n3. Confirm cables are connected and SAN switch zoning includes this host.\n4. Ensure HBA drivers are up to date.\nFor more information see https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/windows-server-mpio-troubleshooting
iSCSIServiceNotRunning = The MSiSCSI service is not running. Current status: '{0}'. Start the service with 'Start-Service msiscsi'.
NoiSCSITargets = No iSCSI sessions are established. Ensure iSCSI targets are configured and connections are active.
iSCSIValidationSuccess = iSCSI connectivity validated. {0} active session(s) detected.
iSCSIRemediation = Troubleshoot iSCSI connectivity:\n1. Start the iSCSI initiator service: Start-Service msiscsi\n2. Set the service to start automatically: Set-Service msiscsi -StartupType Automatic\n3. Verify target connections: Get-IscsiTarget | Select-Object NodeAddress, IsConnected\n4. List active sessions: Get-IscsiSession | Select-Object SessionIdentifier, TargetNodeAddress, IsConnected\n5. If no sessions, connect to a target: Connect-IscsiTarget -NodeAddress <TargetIQN>\nFor more information see https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/iscsi-storage-connectivity-troubleshooting
LUNCapacityInsufficient = SAN disk (Number: {0}, FriendlyName: '{1}', BusType: '{2}') has capacity {3} GB which is below the minimum required {4} GB.
LUNCapacityInsufficientPerLun = SAN disk (Number: {0}, FriendlyName: '{1}', BusType: '{2}') identified as {3} has capacity {4} GB which is below the minimum required {5} GB for {3} volumes.
LUNCapacityUnrecognizedDisk = SAN disk (Number: {0}, FriendlyName: '{1}', BusType: '{2}') with capacity {3} GB is not mapped in SANVolumeMapping. Skipping capacity validation.
LUNCapacitySuccess = All {0} SAN LUN(s) meet the minimum capacity requirements.
LUNCapacityRemediation = Troubleshoot SAN LUN capacity:\n1. List all SAN disks: Get-Disk | Where-Object { $_.BusType -eq '<BusType>' } | Select-Object Number, FriendlyName, BusType, @{N='SizeGB';E={[math]::Round($_.Size/1GB,2)}}\n2. Verify disk operational status: Get-Disk | Select-Object Number, FriendlyName, OperationalStatus, HealthStatus\n3. Ensure SAN LUNs meet their per-LUN minimum sizes: Infrastructure_1 >= 250 GB, ClusterPerformanceHistory >= 20 GB.\n4. If LUNs are missing, verify SAN connectivity and LUN masking/mapping on the storage array.\nFor more information see https://learn.microsoft.com/en-us/azure/azure-local/concepts/system-requirements-23h2
NoSANDisksFound = No SAN disks with BusType '{0}' were found on this node. Verify SAN connectivity and disk presentation.
LUNPartitionStyleNotRaw = SAN disk (Number: {0}, FriendlyName: '{1}') has PartitionStyle '{2}' on node '{3}'. Expected 'RAW'. The disk must be wiped before deployment.
LUNPartitionStyleSuccess = SAN disk (Number: {0}, FriendlyName: '{1}') on node '{2}' has PartitionStyle 'RAW'.
LUNPartitionStyleRemediation = Troubleshoot SAN LUN partition style:\n1. Check disk partition style: Get-Disk | Where-Object { $_.BusType -eq '<BusType>' } | Select-Object Number, FriendlyName, PartitionStyle\n2. If a disk shows GPT or MBR, wipe it to RAW: Clear-Disk -Number <DiskNumber> -RemoveData -RemoveOEM -Confirm:$false\n3. Verify the disk is now RAW: Get-Disk -Number <DiskNumber> | Select-Object Number, PartitionStyle\n4. Repeat for each non-RAW SAN LUN on every node.\nWARNING: Clear-Disk permanently destroys all data on the disk.\nFor more information see https://learn.microsoft.com/azure/azure-local/deploy/deploy-via-portal
SCSIReservationFound = SAN disk (Number: {0}, FriendlyName: '{1}') has an active SCSI-3 Persistent Reservation on node '{2}'. Stale reservations from a previous cluster must be cleared before deployment.
SCSIReservationSuccess = No SCSI-3 Persistent Reservations found on {0} SAN disk(s) on node '{1}'.
SCSIReservationRemediation = Clear stale SCSI persistent reservations:\n1. List SAN disks: Get-Disk | Where-Object { $_.BusType -in @('Fibre Channel','iSCSI') } | Select-Object Number, FriendlyName, BusType\n2. Clear reservation on each disk: Clear-ClusterDiskReservation -Disk <DiskNumber> -Force\n3. Verify reservation is cleared by re-running this validation.\nNote: Reservations are cluster-level locks. If the previous cluster has been destroyed, these reservations are stale and safe to clear.\nFor more information see https://learn.microsoft.com/en-us/powershell/module/failoverclusters/clear-clusterdiskreservation
MPIONotInstalled = The Multipath I/O (MPIO) feature is not installed on node '{0}'. MPIO is required for SAN storage redundancy and failover.
MPIOInstalled = MPIO feature is installed on node '{0}'.
MPIORemediation = Install and configure MPIO:\n1. Install the MPIO feature: Install-WindowsFeature -Name Multipath-IO\n2. Reboot the node if prompted.\n3. Verify installation: Get-WindowsFeature -Name Multipath-IO\n4. Check MPIO settings: Get-MPIOSetting\nFor more information see https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/windows-server-mpio-troubleshooting
MPIOHWNotClaimed = MPIO hardware is not claimed by MSDSM on node '{1}': {0}. The corresponding SAN LUN(s) are visible but multipath failover/load-balance may be suboptimal until the device class is registered.
MPIOHWAllClaimed = All {0} configured SAN LUN(s) have a (VendorId, ProductId) pair claimed by MSDSM on node '{1}'.
MPIOHWRemediation = Register the SAN device class with MSDSM:\n1. List currently-claimed device classes: Get-MSDSMSupportedHW\n2. For each unclaimed (VendorId, ProductId) pair reported above, register it: New-MSDSMSupportedHW -VendorId '<VendorId>' -ProductId '<ProductId>'\n3. Verify the device class is now claimed: Get-MSDSMSupportedHW\nFor more information see https://learn.microsoft.com/en-us/powershell/module/mpio/new-msdsmsupportedhw
MPIODiskNotFoundSkip = SAN LUN '{0}' (UniqueId '{1}') is not visible on node '{2}'; skipping MSDSM claim check for this LUN. See Test-SANALUNVisibility for the deployment-blocking visibility result.
MPIOPathsAllOk = All {0} configured SAN LUN(s) are claimed by MPIO with at least {1} active path(s) on node '{2}'.
MPIOPathsLunFailure = SAN LUN '{0}' (UniqueId '{1}') on node '{2}' failed MPIO path check: {3}
MPIOPathsLunSkipped = SAN LUN '{0}' (UniqueId '{1}') is not visible on node '{2}'; skipping MPIO path check for this LUN. See Test-SANALUNVisibility for the deployment-blocking visibility result.
MPIOPathsRemediation = Investigate MPIO paths on the reported node:\n1. List the MPIO map and find the MPIO disk number for each failing LUN's backing system disk: mpclaim -s -d\n2. For each failing LUN, inspect its active path count: mpclaim -s -d <MPIODiskNumber> (expect at least 2 'Active/Optimized' paths)\n3. If a LUN is not in the MPIO map, verify the (VendorId, ProductId) is registered with MSDSM and rescan storage; if the path count is below 2, verify SAN switch zoning, LUN masking, and HBA driver/firmware.\nFor more information see https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/windows-server-mpio-troubleshooting
LUNVisibilityMissing = SAN LUN '{0}' (UniqueId '{1}') is not visible to node '{2}'.
LUNVisibilitySuccess = All configured SAN LUN(s) are visible on node '{0}'.
LUNVisibilityRemediation = No SAN LUNs are visible to this host. Verify SAN connectivity (zoning between host and storage), ensure the LUN is created and mapped to this host (WWPN/IQN), confirm host drivers and MPIO configuration are correct, and rescan storage on the host.\n1. List all disks visible to this host: Get-Disk | Select-Object Number, FriendlyName, BusType, UniqueId, OperationalStatus\n2. Search for the expected LUN by UniqueId: Get-Disk | Where-Object { $_.UniqueId -ieq '<lunid>' }\n3. Rescan storage: Update-HostStorageCache; Update-StorageProviderCache -DiscoveryLevel Full\n4. Verify SAN array LUN masking and switch zoning include this host's WWPN/IQN.\n5. Confirm MPIO is installed and the storage hardware is claimed: Get-MPIOAvailableHW; Get-MSDSMSupportedHW\nFor more information see https://learn.microsoft.com/en-us/azure/azure-local/concepts/system-requirements-23h2
'@


# SIG # Begin signature block
# MIInRAYJKoZIhvcNAQcCoIInNTCCJzECAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA7Bk/Bp+oy4bkW
# YfZqskL65Udit4IRo51JRpGMHcZ3w6CCDLowggX1MIID3aADAgECAhMzAAACHU0Z
# yE7XD1dIAAAAAAIdMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBD
# b2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwNDE2MTg1OTQzWhcNMjcwNDE1MTg1
# OTQzWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYD
# VQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IB
# DwAwggEKAoIBAQDQvewXxx9gZZFC6Ys1WBay8BJ8kGA4JQnH5CMafqOASlTpK9H8
# o5ZXTXt0caVQTNMUPt445wXYD+dFtaKWTwDn1I52oUSrC9vJin1Gsqt+zyKJL5Dg
# 3eQXbQNR61DmMy20GLTIO3SFed9Rfi/ophgCLGFLDR3r0KvHjwMb/jYWS0celV/4
# Lz27LfAekm8v9E5IXaeiXbAUYZKK090n4CVl3JBtbN+9DtI9SNu/yjvozW52/u7R
# X/Ttpa/KDlpuokZ+Zcbvmtd9ur9gFLvZzh41o9MsE/clQtdaFWGvuo6Jua/ntpgk
# ey3E5/vBFe+MJPG6phdnuo6r57ZudCudiI1bAgMBAAGjggGbMIIBlzAOBgNVHQ8B
# Af8EBAMCB4AwHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0O
# BBYEFH6QuMwqcPG0hQlQ6c5jCtTTLrVeMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQL
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDAxMis1MDc1NTkw
# HwYDVR0jBBgwFoAUf1k/VCHarU/vBeXmo9ctBpQSCDEwYAYDVR0fBFkwVzBVoFOg
# UYZPaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0
# JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNybDBtBggrBgEFBQcBAQRh
# MF8wXQYIKwYBBQUHMAKGUWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
# Y2VydHMvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNy
# dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQBKTbYOjzwTG/DXGaz9
# s6+fQeaTtDcFmMY+5UyVFCyj7Pv+5i37qfX8lSL/tBIfYQfWsMuBQlfZurJD6r4H
# VJ2CeH+1fgiq8dcHdVKoZ3Sa2qXoX3cq9iS8cVb06B7+5/XJ7I0OxHH9fDsvJ3T3
# w5V/ZtAIFmLrl+P0CtG+92uzRsn0nTbdFjOkLMLWPLAU3THohKRlSEMgFJpPkm5n
# 5UAZ35xX6FWCrDLsSKb555bTifwa8mJBwdlof0bmfYidH+dxZ1FdDxvLnNl9zeKs
# A4kejaaIqqIPguhwAti5Ql7BlTNoJNwxCvBmqW2MQLnCkYN/VVUsR3V2x/rcTNzo
# Bf/Z/SpROvdaA2ZOOd1uioXJt3tdLQ7vHpqpib0KfWr/FWXW10q38VxfCnRQBqzb
# SuztR7nEMuzX7Ck+B/XaPDXd1qh72+QYyB0Z2VzWmO9zsnb9Uq/dwu8LGeQqnyu6
# 7SDGACvnXii2fb9+US492VTnXSnFKyqwgzUyFMtZK1/sHYTv6bG4TtQUygQxTN+Z
# V+aJIlKO2MqZ7bKrAnOzS9m6NgoTdWOq11bTOZwKlIEV/EhV9SWkDmdpR/hPPT2v
# 6TEj4F8PT/zHjRezIU5c/DGlt/VhY/pK0XkJtEyMmmS1BMtjU/rqBZVMIm3dnxQs
# /TBByr+Cf8Z1r7aifQVQ+WSqzjCCBr0wggSloAMCAQICEzMAAAA5O7Y3Gb8GHWcA
# AAAAADkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
# YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRl
# IEF1dGhvcml0eSAyMDExMB4XDTI0MDgwODIwNTQxOFoXDTM2MDMyMjIyMTMwNFow
# VzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEo
# MCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAyNDCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBANgBnB7jOMeqlRYHNa265v4IY9fH8TKh
# emHfPINe1gpLaV3dhg324WwH06LcHbpnsBukCDNitryo0dtS/EW6I/yEL/bLSY8h
# KpbfQuWusBPr9qazYcDxCW/qnjb5JsI1s8bNOg3bVATvQVL4tcf03aTycsz8QeCd
# M0l/yHRObJ9QqazM1r6VPEOJ7LL+uEEb73w6QCuhs89a1uv1zerOYMnsneRRwCbp
# yW11IcggU0cRKDDq1pjVJzIbIF6+oiXXbReOsgeI8zu1FyQfK0fVkaya8SmVHQ/t
# Of23mZ4W9k0Ri22QW9p3UgSC5OUDktKxxcCmGL6tXLfOGSWHIIV4YrTJTT6PNty5
# REojHJuZHArkF9VnHTERWoTjAzfI3kP+5b4alUdhgAZ7ttOu1bVnXfHaqPYl2rPs
# 20ji03LOVWsh/radgE17es5hL+t6lV0eVHrVhsssROWJuz2MXMCt7iw7lFPG9LXK
# Gjsmonn2gotGdHIuEg5JnJMJVmixd5LRlkmgYRZKzhxSCwyoGIq0PhaA7Y+VPct5
# pCHkijcIIDm0nlkK+0KyepolcqGm0T/GYQRMhHJlGOOmVQop36wUVUYklUy++vDW
# eEgEo4s7hxN6mIbf2MSIQ/iIfMZgJxC69oukMUXCrOC3SkE/xIkgpfl22MM1itkZ
# 35nNXkMolU1lAgMBAAGjggFOMIIBSjAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGC
# NxUBBAMCAQAwHQYDVR0OBBYEFH9ZP1Qh2q1P7wXl5qPXLQaUEggxMBkGCSsGAQQB
# gjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU
# ci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2Ny
# bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0MjAx
# MV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAx
# MV8yMDExXzAzXzIyLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAFJQfOChP7onn6fLI
# MKrSlN1WYKwDFgAddymOUO3FrM8d7B/W/iQ6DxXsDn7D5W4wMwYeLystcEqfkjz4
# NURRgazyMu5yRzQh4LqjA4tStTcJh1opExo7nn5PuPBYnbu0+THSuVHTe0VTTPVh
# ily/piFrDo3axQ9P4C+Ol5yet+2gTfekICS5xS+cYfSIvgn0JksVBVMYVI5QFu/q
# hnLhsEFEUzG8fvv0hjgkO+lkpV9ty6GkN4vdnd7ya6Q6aR9y34aiM1qmxaxBi6OU
# nyNl6fkuun/diTFnYDLTppOkr/mg5WSfCiDVMNCxtj4wPKC5OmHm1DQIt/MNokbb
# H3UGsFP1QbzsLocuSqLCvH09Io3fDPTmscR9Y75G4qX7RTX8AdBPo0I6OEojf39z
# uFZt0qOHm65YWQE69cZM2ueE1MB05dNNgHK9gTE7zKvK/fg8B2qjW88MT/WF5V5u
# vZGtqa9FSL2RazArA+rDPuf6JGYz4HpgMZHB4S6szWSKYBv0VisCzfxgeU+dquXW
# 9bd0auYlOB58DPcOYKdc3Se94g+xL4pcEhbB54JOgAkwYTu/9dLeH2pDqeJZAABV
# DWRQCaXfO5LgyKwKCLYXpigrZYCjUSBcr+Ve8PFWMhVTQl0v4q8J/AUmQN5W4n10
# 1cY2L4A7GTQG1h32HHAvfQESWP0xghngMIIZ3AIBATBuMFcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv
# c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIdTRnITtcPV0gAAAAAAh0w
# DQYJYIZIAWUDBAIBBQCggZAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJ
# KoZIhvcNAQkEMSIEICuJtM92xVOZa2ggIQkgQiXo9hB5c40bUgLI8XyCL93sMEIG
# CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAfBv7mywGTw3rnvtC
# An0P/F0NIds9w5jqmA89WF7AA4x1NcHs7wy9aLa+M4KkFTIZeQM4ZlCEA6DB9PHk
# GAx0vxNO5CxJzHypunsu3Rocb5x7EtqgkBeHnIvlffBUapuZ3MeGc4ZrxCwwRt7n
# u8Xc2x4ygH8ssKKjYuI5gyMFQAiLc/s1794NmdeW/A54xAonWcamxLqjk7m1hJkd
# yeET7jPaEsp5xQ6exkQ3IwjQTHWCHWIxdh9MDGJWD9RmapcJoB3XvPbrVRbohMEg
# 5ua88LkEpv5XLZw02N4EPxKzevbV1zCMtwhpfEvYm4YNAAjvlEc4SQuoGuaTb8Xw
# yAABTKGCF7AwghesBgorBgEEAYI3AwMBMYIXnDCCF5gGCSqGSIb3DQEHAqCCF4kw
# gheFAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0BCRABBKCCAUkEggFF
# MIIBQQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCA1XsRv+tAqMgnH
# 0qXgG3ordRFBHuGsZaV2Sj99eBMZ1AIGaolQWABLGBMyMDI2MDgyNzE2MzgzNy4z
# NTlaMASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
# bWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo1MjFBLTA1RTAtRDk0NzEl
# MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEf4wggcoMIIF
# EKADAgECAhMzAAACF3H7LqWvAR3qAAEAAAIXMA0GCSqGSIb3DQEBCwUAMHwxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
# c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4NDgyM1oXDTI2MTEx
# MzE4NDgyM1owgdMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEn
# MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjUyMUEtMDVFMC1EOTQ3MSUwIwYDVQQD
# ExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEF
# AAOCAg8AMIICCgKCAgEAwM82sEw+39vYR7iGCIFDnYNhRM+BzF2AYiq5dUpZpJFP
# RjCcipQ6RUbI+RAYNRApExx5ygrXbaWtuwvqsqAVSWbU/W6fecujjILkPqn9pngt
# WRkfQgbYgvaXALl6PY2yOH9f72MD+6AyxQenSpAMdUzY/Qk/jtjsHdFXVBe+tshl
# IkSJ3GZw8VVKqTg3GZElztwbJWNtrhBEvhf6anxMegQMJP7tO8/BJ7ITs4/AV3D2
# bv8eHk81Y+fOmQ8mQ61WLq2wItvlzIT5bzelK9LvEycf5x1lXxAwEw5a7dpS+CKT
# anhtv+Q2mwebAybjf9io4k48stTaq1rtcrOiDwddqVm1S9e8h1TszXFzjLLvE9Em
# jnNfIewsY+RChUaHnY4FFwwJEnEv/JS76oHT0oGdy7+J60fGOl7A1UoUyAkhpb2B
# ja+SwSIiHbQ4FDyJiLlZ6drZZ84MoJ852JSxM0hBjGO6FZlPO8iuNyk680Di8Vnb
# SNpIdJN+DhlepeTUMBDHqCmd0mVWRWZPm1pvgty93asNt/Ng6o4m2dnooWOdM3yK
# sJaWjyHqic9gfTrZBM+PCXqeTaO1oEiaQ+h4w0nHVdV+XSvI2m1yN4iibqjm5HPa
# AO3OJ+OmNLftNVmr4Z6U2T6pIcLBysoKcDUvCqycXj4C/+n1KFBpDGdDMw9gmu8C
# AwEAAaOCAUkwggFFMB0GA1UdDgQWBBRQrN9jlwNOoeE5ZQqnF5x8S1bJQzAfBgNV
# HSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5o
# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBU
# aW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwG
# CCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
# L01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNV
# HRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIH
# gDANBgkqhkiG9w0BAQsFAAOCAgEARmgFdhB7xIAIHEEg5I/5S+gx67aR6RiW8ZAw
# tE3mz8o0dyn+pIP+lidNR1IKQQ0r+RjYgI9cZ6mbvAyvh3e2q/BV8rjHE3ud9PyY
# yq32euFgdZ3vX4b5QXePWlpBAYrdziR27rHz6WwpH5dZsSypbXDBbQkWkNl6g82y
# Ty3AbBbKDXBdzxZsEauaOplatK7Er4dhglKBex8JQ2dMSkSZweCNDXqd9r/9W2Vd
# RZsDJKP/Xc4UyQlVsboBotKtYESXFkjwR1HVsH+Q0C69/N5CP/Tq3YgI1ub4b9+3
# MJFKWhJXCcJGFZkcLwUmYwoFg1XLo7DLJdGjrIH1jsI2NFXJFQHef6AdRe1ERvYQ
# eqtyrBvxIvR+P/83FNYyzx04inUT9TF2AwTOuqCC6Z67oNwR4pEEJyAIEREvkdhj
# jfWcgsk/nGTlfahvNY/SOHrNRKo49KDlccNzRCJQyQ+D59r7/qebNSyQPTfwI9++
# jEY0Q/UWKVNLhio55GYBseJ99s7NzkdxOr9Uftp597HEovbA69qGlZ3OpUE3H1RB
# GDVp/FvM2uXTum8LrMkPXx5Ap/kbPASsC9ju9oMCe2IEXO2SeD1aD3IqvAOdHFKH
# g1vpbPUQSWb6g2xfBV30wFcqaPYgzcbxPWPyZqK+S8l7zw64aO5hmJ7eQwoMfTu0
# Vay6r48wggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3
# DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIw
# MAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx
# MDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVT
# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
# LVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
# 5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/
# XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1
# hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7
# M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3K
# Ni1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy
# 1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF80
# 3RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQc
# NIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahha
# YQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkL
# iWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV
# 2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIG
# CSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUp
# zxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBT
# MFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYI
# KwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGG
# MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186a
# GMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br
# aS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsG
# AQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcN
# AQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1
# OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYA
# A7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbz
# aN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6L
# GYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3m
# Sj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0
# SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxko
# JLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFm
# PWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC482
# 2rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7
# vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDWTCC
# AkECAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
# bWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo1MjFBLTA1RTAtRDk0NzEl
# MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsO
# AwIaAxUAabKAFaKt2haUdqkHfFYzAzfgSMuggYMwgYCkfjB8MQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
# ZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO46ZcswIhgPMjAyNjA4
# MjcwNzI5MTVaGA8yMDI2MDgyODA3MjkxNVowdzA9BgorBgEEAYRZCgQBMS8wLTAK
# AgUA7jplywIBADAKAgEAAgIIdwIB/zAHAgEAAgIf1jAKAgUA7ju3SwIBADA2Bgor
# BgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAID
# AYagMA0GCSqGSIb3DQEBCwUAA4IBAQCQPbE5ogemQTGEXJqfNYsz4mAFiwT7eTGR
# BSBGERHqzM2SFUQWnZ4CpLCfwWh0QJzVjmc3a6K/MxGnnWFZHT0Gq+FLd8RwHps6
# zn20vvvGXwxw4NDfu0dbtqjvC0D8IXpv5yYrTHiGupJzM9RXxVuAYgcBPMIc90UI
# ZgqQp8gannDOK9Ms6VPvUVn+ltDELcw/Z3qV41ZIE+OSODs/cOoeaCwRs9n0mjYD
# h8+2c8o793nLcDohhOyev/kRW+mDxPZ5KJYL8V038spCVjxl8dLmKvRjXvI/7s9s
# 4Ysk7Hs2A94j86xQBwTXfxBlr4T4Lu4LDOi5Gq4IQWN90AGrJn8eMYIEDTCCBAkC
# AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIXcfsupa8B
# HeoAAQAAAhcwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG
# 9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgqjeTVBARzSXoxnSF2qmD4Xg69IXFl5FJ
# QPmPzHVtupgwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCDQ8lBgPl23yZ0S
# zUSt5phOIegHPywrkNwevxe2k+RaWzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0
# YW1wIFBDQSAyMDEwAhMzAAACF3H7LqWvAR3qAAEAAAIXMCIEIPUZSVnt5gRvD/19
# Xj6PYTEf7bQyo34ImVo/0H5pvZcMMA0GCSqGSIb3DQEBCwUABIICADIZOdEwYai4
# XxC7gV3sJ9Ooq0Ie1+A81HkNB2Dl+wBeiXwHKKu8ampq5JAsCrmntzk8U5fj4ewB
# eceE2rlHMDTEhrjX3UDNJOjBfRMlJMRGMG50kXXkOPzbiV367YkCBdvAp035VPuS
# 6CYzR0SeOvy/fZxDNIePUe7h/852ZI1JSxVo0d1eGpsNd8+oIYMawynsMiuL62mt
# ZySf26iTDTVut8+6/snbkaqtv+IPoC8+zzw6FDthltkBQOlB3Ttq2XnAAV6vfWCr
# 4U7rZi7f/0PDp9cO7QzEPJ9yk9h9mLSdWANwf7vYPrCSI5inASat155lb3YW49qs
# 1VqdgdHlQVT+xaGBmP+UlZJs2WNdpF6+1Fza6ruQbXoz3lnmdvKAz34+dCVj3Xwl
# vcFmUQQ3HKB27U1bMqU6lu+VOvFb86W0aPdtBhubmBSSX3yBdv6bN4qqbS/aUTAA
# EpXIUE/BiKJVVsu0CFwOmTHpog/kjNjnVP9Eu42o7hhunVilY5W9wueDogvja9+b
# hCYHV1WeWLUt1IsJy1WrSJIz/TxVB++c6u3Fipp8+PnpDPuExCDu5bTy5gkTrjh8
# rrP/a5J4OUzD03h2viLoR1lCtofLo6wGbfMkTHVdRKod1znd4ioVvlbE9uI2sWXq
# ttwNZYKOZ7Y/v7v7Ht9ePfPgow6cJZbk
# SIG # End signature block