DSCResources/Cisco_ImcManagedObject/Cisco_ImcManagedObject.psm1

# DSC uses the Get-TargetResource function to fetch the status of the resource instance specified in the parameters for the target machine
function Get-TargetResource 
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param 
    (       
        [ValidateSet("Present", "Absent")]
        [string]$Ensure = "Present",
        
        [parameter(Mandatory = $true)]
        [System.String]
        $Identifier,

        [parameter(Mandatory = $true)]
        [System.String]
        $ImcConnectionString,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $ImcCredentials,

        [System.Management.Automation.PSCredential]
        $WebProxyCredentials,
        
        [string]$ClassId,

        [string]$PropertyMap,

        [parameter(Mandatory = $true)]
        [System.String] $Dn,
        
        [ValidateSet("Add", "Set")]
        [string]$Action = "Add"
                
    )
       try
       {
            Write-Verbose("Started execution of Get-TargetResource method")
            Write-Verbose("Connecting to Imc...")
            $handle=  Get-ImcConnection -ImcConnectionString $ImcConnectionString -ImcCredentials $ImcCredentials -WebProxyCredentials $WebProxyCredentials
            # $propMap= ConvertFrom-StringData -StringData $PropertyMap
            if(![string]::IsNullOrEmpty($Dn))
            {
                Write-Verbose("Fetching Mo for Dn:$Dn")
                $mo= Get-ImcMo -Dn $Dn -Imc $handle
            }
            else
            {
                Write-Verbose("Dn is null or empty. ")
            }
            Write-Verbose("Disconnecting Imc...")
            Disconnect-Imc -Imc $handle
            Write-Verbose("Imc Disconnected")
             <# #>
            if($mo -ne $null)
            {
                Write-Verbose("Ensure = Present")
                $Ensure = "Present"
            }
            else
            {   Write-Verbose("Ensure =Absent")
                $Ensure = "Absent"
            }  
            $result = @{
                          Identifier = $Identifier;
                          Ensure =$Ensure;
                          ClassId= $ClassId;
                          PropertyMap =$PropertyMap;
                          Dn= $Dn;
                          ImcConnectionString= $ImcConnectionString;
                          ImcCredentials=$null;
                          WebProxyCredentials=$null;
                          Action=$Action;
                        }
        }
        catch
        {
            Write-Verbose("Error occurred in Get-TargetResoucrce. Disconnecting Imc(s)...")
            if($handle -ne $null)
             {$temp = Disconnect-Imc -Imc $handle}

            throw
        }
        Write-Verbose("Completed execution of Get() method")
        $result;
} 

function Set-TargetResource 
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    param 
    (       
        [ValidateSet("Present", "Absent")]
        [string]$Ensure = "Present",
        
        [parameter(Mandatory = $true)]
        [System.String]
        $Identifier,

        [parameter(Mandatory = $true)]
        [System.String]
        $ImcConnectionString,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $ImcCredentials,

        [System.Management.Automation.PSCredential]
        $WebProxyCredentials,

        [string]$ClassId,

        [string]$PropertyMap,

        [parameter(Mandatory = $true)]
        [System.String] $Dn,
        
        [ValidateSet("Add", "Set")]
        [string]$Action = "Add"
       
    )
    
    Write-Verbose("Started execution of Set() method")
    try
    {
        Write-Verbose("Connecting to Imc...")
        $handle=  Get-ImcConnection -ImcConnectionString $ImcConnectionString -ImcCredentials $ImcCredentials -WebProxyCredentials $WebProxyCredentials
       
        if($Ensure -eq "Present" )
        {
            $propMap=  ConvertFrom-StringData -StringData $PropertyMap
         
            if(![string]::IsNullOrEmpty($Dn))
            {
                if($Action -eq "Add")
                {
                    $parentDn =  $Dn.Substring(0, $Dn.LastIndexOf('/'))
                     Get-ImcMo -Dn $parentDn -Imc $handle | Add-ImcMo -ClassId $ClassId -PropertyMap $propMap
                }
                elseif($Action -eq "Set")
                {
                    Get-ImcMo -Dn $Dn -Imc $handle | Set-ImcMo -PropertyMap $propMap -Force
                }
            }
     
         }
        elseif($Ensure -eq "Absent" )
        {
             if(![string]::IsNullOrEmpty($Dn))
             {
                $temp= Get-ImcMo -Dn $Dn -Imc $handle | Remove-ImcMo -Force
             }
       
        }
        Write-Verbose("Disconnecting Imc...")
        Disconnect-Imc -Imc $handle
        Write-Verbose("Imc Disconnected")
    }
    catch
    {
        Write-Verbose("Error occurred in Set-TargetResoucrce. Disconnecting Imc(s)...")
        if($handle -ne $null)
            {$temp = Disconnect-Imc -Imc $handle}

        throw
    }       

    Write-Verbose("Completed execution of Set() method")
    }
   
function Test-TargetResource
{
[CmdletBinding()]
[OutputType([System.Boolean])]
param
(
        [ValidateSet("Present", "Absent")]
        [string]$Ensure = "Present",
        
        [parameter(Mandatory = $true)]
        [System.String]
        $Identifier,

        [parameter(Mandatory = $true)]
        [System.String]
        $ImcConnectionString,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $ImcCredentials,

        [System.Management.Automation.PSCredential]
        $WebProxyCredentials,

        [string]$ClassId,

        [string]$PropertyMap,

        [parameter(Mandatory = $true)]
        [System.String] $Dn,
        
        [ValidateSet("Add", "Set")]
        [string]$Action = "Add"
)

        
        Write-Verbose("Started execution of Test-TargetResource method")

        $result = [System.Boolean]
      
        $getTargetResult= Get-TargetResource  -Identifier $Identifier -ImcConnectionString $ImcConnectionString -ImcCredentials $ImcCredentials -WebProxyCredentials $WebProxyCredentials -ClassId $ClassId -PropertyMap $PropertyMap -Dn $Dn -Action $Action
      
    <# #>
        if($Ensure -eq "Present" )
        {
            if(($Action -eq "Add" -and $getTargetResult.Ensure -eq "Absent" ) -or ($Action -eq "Set" -and $getTargetResult.Ensure -eq "Present" ))
            {
                $result =$false
            }
            else
            {
                $result= $true
            }
        }
        elseif($Ensure -eq "Absent" )
        {
            if( $getTargetResult.Ensure -eq "Present")
            {
                $result =$false
            }
            else
            {
                $result= $true
            }        
        }
        Write-Verbose("Completed execution of Test-TargetResource method")

        Write-Verbose("Output: "+$result)
        return $result 

}


# SIG # Begin signature block
# MIIeQQYJKoZIhvcNAQcCoIIeMjCCHi4CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB2wOooloDwOBgQ
# QzsfzkbxaMRkg1uSuMBc6Sleh4vYm6CCDIYwggXCMIIEqqADAgECAhAFsKypxaqA
# 4gfxbvm70Ew5MA0GCSqGSIb3DQEBCwUAMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNV
# BAMTIkRpZ2lDZXJ0IEVWIENvZGUgU2lnbmluZyBDQSAoU0hBMikwHhcNMTkwMzA1
# MDAwMDAwWhcNMjEwMzE5MTIwMDAwWjCB1TETMBEGCysGAQQBgjc8AgEDEwJVUzEb
# MBkGCysGAQQBgjc8AgECEwpDYWxpZm9ybmlhMR0wGwYDVQQPDBRQcml2YXRlIE9y
# Z2FuaXphdGlvbjERMA8GA1UEBRMIQzExODM0NzcxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpDYWxpZm9ybmlhMREwDwYDVQQHEwhTYW4gSm9zZTEcMBoGA1UEChMTQ0lT
# Q08gU1lTVEVNUywgSU5DLjEcMBoGA1UEAxMTQ0lTQ08gU1lTVEVNUywgSU5DLjCC
# ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALVsxgp7cSBymDSAFTz4uPcU
# dcp8ef7lqubpfbCvmiK5BaQOcF6pL2Ekl1o2BiiMOXQfKLO706Ji1lfdZVh/1eDz
# zThFUTJ5LgQv5YrFnYu27TuAoXJ2Qs6pj/DJX+R7Mw+5fweicf0DSK9XiV6C9FCK
# gT7Z7g0WSYH22qZpBzJf766j2sXo84qEzgR683xfCbTQMbg7I2MzuIvMGT4Qs447
# Uzb5lR1DVwMcAdXZD0lXS+0h1C4xl3B+MseIH2mtQTo1+pLhlqSK8xCwixEf1ERL
# 3zmUTLw3G/gM4ccyvlWUaorNAiZw7JSAk3eqojmiAp9fuqRuuDhOHl13MzCxh1UC
# AwEAAaOCAfQwggHwMB8GA1UdIwQYMBaAFI/ofvBtMmoABSPHcJdqOpD/a+rUMB0G
# A1UdDgQWBBSqPgNg7Q9VW7yFRq0K9ceayo35uzAxBgNVHREEKjAooCYGCCsGAQUF
# BwgDoBowGAwWVVMtQ0FMSUZPUk5JQS1DMTE4MzQ3NzAOBgNVHQ8BAf8EBAMCB4Aw
# EwYDVR0lBAwwCgYIKwYBBQUHAwMwewYDVR0fBHQwcjA3oDWgM4YxaHR0cDovL2Ny
# bDMuZGlnaWNlcnQuY29tL0VWQ29kZVNpZ25pbmdTSEEyLWcxLmNybDA3oDWgM4Yx
# aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0VWQ29kZVNpZ25pbmdTSEEyLWcxLmNy
# bDBLBgNVHSAERDBCMDcGCWCGSAGG/WwDAjAqMCgGCCsGAQUFBwIBFhxodHRwczov
# L3d3dy5kaWdpY2VydC5jb20vQ1BTMAcGBWeBDAEDMH4GCCsGAQUFBwEBBHIwcDAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEgGCCsGAQUFBzAC
# hjxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRFVkNvZGVTaWdu
# aW5nQ0EtU0hBMi5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAQEA
# MLeT7V16i8TpC3++bRSUEajW355sfKiuWEPnc1RIEGMSekaTJKSVDDgaGdPt22qE
# wRrJztKYca2N6ZpOOE477yTiuYMCCVUIcwhaWezA/4Wgs9TpW0QBe53qIJj6t0uH
# M+gZg7Bp0KM65Z+Kh5teHZ6kzs8evRGsH3cgKtfrwwRRdJCgqBz3KmkNhqRQ6/Hl
# SS7GV+wRoGAeqnCGL6IOY7bLl2NC+ItUh1D6bP/9UR0MtVFU6nqY7Lj3Z5xmje8t
# N6sZ1p+FTGaHDwSZX7DDtff766Bl5om/IixIfOPQtZoe12lxZqlAn33JMflIZgNt
# 8ckoE13Gh8lJeoFIFBzgsjCCBrwwggWkoAMCAQICEAPxtOFfOoLxFJZ4s9fYR1ww
# DQYJKoZIhvcNAQELBQAwbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0
# IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNl
# cnQgSGlnaCBBc3N1cmFuY2UgRVYgUm9vdCBDQTAeFw0xMjA0MTgxMjAwMDBaFw0y
# NzA0MTgxMjAwMDBaMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ
# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNVBAMTIkRpZ2lDZXJ0
# IEVWIENvZGUgU2lnbmluZyBDQSAoU0hBMikwggEiMA0GCSqGSIb3DQEBAQUAA4IB
# DwAwggEKAoIBAQCnU/oPsrUT8WTPhID8roA10bbXx6MsrBosrPGErDo1EjqSkbpX
# 5MTJ8y+oSDy31m7clyK6UXlhr0MvDbebtEkxrkRYPqShlqeHTyN+w2xlJJBVPqHK
# I3zFQunEemJFm33eY3TLnmMl+ISamq1FT659H8gTy3WbyeHhivgLDJj0yj7QRap6
# HqVYkzY0visuKzFYZrQyEJ+d8FKh7+g+03byQFrc+mo9G0utdrCMXO42uoPqMKhM
# 3vELKlhBiK4AiasD0RaCICJ2615UOBJi4dJwJNvtH3DSZAmALeK2nc4f8rsh82zb
# 2LMZe4pQn+/sNgpcmrdK0wigOXn93b89OgklAgMBAAGjggNYMIIDVDASBgNVHRMB
# Af8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcD
# AzB/BggrBgEFBQcBAQRzMHEwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
# ZXJ0LmNvbTBJBggrBgEFBQcwAoY9aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
# L0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNydDCBjwYDVR0fBIGHMIGE
# MECgPqA8hjpodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRIaWdoQXNz
# dXJhbmNlRVZSb290Q0EuY3JsMECgPqA8hjpodHRwOi8vY3JsNC5kaWdpY2VydC5j
# b20vRGlnaUNlcnRIaWdoQXNzdXJhbmNlRVZSb290Q0EuY3JsMIIBxAYDVR0gBIIB
# uzCCAbcwggGzBglghkgBhv1sAwIwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3
# LmRpZ2ljZXJ0LmNvbS9zc2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUH
# AgIwggFWHoIBUgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQBy
# AHQAaQBmAGkAYwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBj
# AGUAcAB0AGEAbgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAg
# AEMAUAAvAEMAUABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQ
# AGEAcgB0AHkAIABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBt
# AGkAdAAgAGwAaQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBj
# AG8AcgBwAG8AcgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBl
# AHIAZQBuAGMAZQAuMB0GA1UdDgQWBBSP6H7wbTJqAAUjx3CXajqQ/2vq1DAfBgNV
# HSMEGDAWgBSxPsNpA/i/RwHUmCYaCALvY2QrwzANBgkqhkiG9w0BAQsFAAOCAQEA
# GTNKDIEzN9utNsnkyTq7tRsueqLi9ENCF56/TqFN4bHb6YHdnwHy5IjV6f4J/SHB
# 7F2A0vDWwUPC/ncr2/nXkTPObNWyGTvmLtbJk0+IQI7N4fV+8Q/GWVZy6OtqQb0c
# 1UbVfEnKZjgVwb/gkXB3h9zJjTHJDCmiM+2N4ofNiY0/G//V4BqXi3zabfuoxrI6
# Zmt7AbPN2KY07BIBq5VYpcRTV6hg5ucCEqC5I2SiTbt8gSVkIb7P7kIYQ5e7pTcG
# r03/JqVNYUvsRkG4Zc64eZ4IlguBjIo7j8eZjKMqbphtXmHGlreKuWEtk7jrDgRD
# 1/X+pvBi1JlqpcHB8GSUgDGCEREwghENAgEBMIGAMGwxCzAJBgNVBAYTAlVTMRUw
# EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x
# KzApBgNVBAMTIkRpZ2lDZXJ0IEVWIENvZGUgU2lnbmluZyBDQSAoU0hBMikCEAWw
# rKnFqoDiB/Fu+bvQTDkwDQYJYIZIAWUDBAIBBQCggZowGQYJKoZIhvcNAQkDMQwG
# CisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLgYKKwYB
# BAGCNwIBDDEgMB6gHIAaAFMAQQBTAEQALQBQAGgAMwAtADEAMAAyADIwLwYJKoZI
# hvcNAQkEMSIEINDjyf/CJm3tSZ/m/W4dmRUPgWElro9CXaboKnUHQQbzMA0GCSqG
# SIb3DQEBAQUABIIBAJCKEjt6VunIDOCByj7B0EgJDakMn6wjGadAM7nwJ3oPD6o+
# /7vk7WqTG7nKBHNBveeYfc62GWvtxAYo9vimwrbaA5SZi8wDgoCH8DxJ1kioL+wH
# DKtFrYKGWx6Ll7fEQnv4FplaVkDa0sLhTdiGmnH60NpF4N2FNSCX0SribI9DEkym
# OMBB87Rxy6eHJcoNU/DiMwmqUtnSTFWjoF2ijAnLx/yL31u4t6jZwCwoGOWKunFE
# pRfp6Xaurwg//6oj5FJAfiILGMz3Giainw4GnrXhnkzLQBb5mp8f89nDbvXH5aQN
# KGyXnGzJXwgKGRHJX3CATpnlgKiSkN0YI1gxifChgg7EMIIOwAYKKwYBBAGCNwMD
# ATGCDrAwgg6sBgkqhkiG9w0BBwKggg6dMIIOmQIBAzEPMA0GCWCGSAFlAwQCAQUA
# MIHyBgsqhkiG9w0BCRABBKCB4gSB3zCB3AIBAQYJYIZIhvpsCgMFMDEwDQYJYIZI
# AWUDBAIBBQAEICyn2tCSUR1++E/v2M9mcLtrLft5sZQUvtRNHuGEreFwAgZdrm9A
# EbwYEzIwMTkxMTA2MTkwMzA2LjU2NVowBIACAfSgdqR0MHIxCzAJBgNVBAYTAkNB
# MRAwDgYDVQQIEwdPbnRhcmlvMQ8wDQYDVQQHEwZPdHRhd2ExFjAUBgNVBAoTDUVu
# dHJ1c3QsIEluYy4xKDAmBgNVBAMTH0VudHJ1c3QgVGltZSBTdGFtcGluZyBBdXRo
# b3JpdHmgggokMIIFCTCCA/GgAwIBAgIRAKvdZ2XyWu9QAAAAAFWR6QwwDQYJKoZI
# hvcNAQELBQAwgbIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
# MSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYD
# VQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNl
# IG9ubHkxJjAkBgNVBAMTHUVudHJ1c3QgVGltZXN0YW1waW5nIENBIC0gVFMxMB4X
# DTE4MTAwNTIwMzAyN1oXDTMwMDEwNTIxMDAyN1owcjELMAkGA1UEBhMCQ0ExEDAO
# BgNVBAgTB09udGFyaW8xDzANBgNVBAcTBk90dGF3YTEWMBQGA1UEChMNRW50cnVz
# dCwgSW5jLjEoMCYGA1UEAxMfRW50cnVzdCBUaW1lIFN0YW1waW5nIEF1dGhvcml0
# eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu9royPQsuVWVxiJ/lA
# uP9VokBKZf/b7aehiG5AGi7Za9VK7QFZYlTEcxaj1oRu7oBC6lUImHAZPyaexNam
# qOurqSQ9C1dYZPzw2hgy2bHXunMBSw6RMe+9SJqJw4LiCXjzohsujc0O74mzerry
# HJgzpXD4e07sEgjss59PjEu+13yAZ1b+XD4H2oaiKUAbMMqPzRdJotTrzV5QchkZ
# cEcrnQrggMMpBwElJFzN9gbUHRGGyjX2FKS/r25Bgylrkn9Eh4zbhFCgkbwJU3/0
# rL7DN4ejxEoLEDNttwGD8cVHaZ8Uw8/N/H0BKeNFzo+ZjmSpDTyLIOIDhstUREE3
# tekCAwEAAaOCAVcwggFTMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggr
# BgEFBQcDCDBBBgNVHSAEOjA4MDYGCmCGSAGG+mwKAwUwKDAmBggrBgEFBQcCARYa
# aHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwCQYDVR0TBAIwADBoBggrBgEFBQcB
# AQRcMFowIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDMGCCsG
# AQUFBzAChidodHRwOi8vYWlhLmVudHJ1c3QubmV0L3RzMS1jaGFpbjI1Ni5jZXIw
# MQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC5lbnRydXN0Lm5ldC90czFjYS5j
# cmwwHwYDVR0jBBgwFoAUw8Jx0nvXaAWuOzmbNCUMYgPHV2gwHQYDVR0OBBYEFCCQ
# ed4myxXaB0L7ihUNcZ4ZaIgsMA0GCSqGSIb3DQEBCwUAA4IBAQDEsmLZssupqGDb
# QabTQD1hvfrv95S1SM1uctWG5RipsUGJmK8EFat9q/UVAsRrwKlJKC1Y11MMWQc2
# zqoLeOllwMQjETTUwGqY+4HzrJhgtPc+AHRwhXIwtsJpMVs8Bm4E/0HkRZRecIpS
# Ow7Kh2FsQEhWDx3BJ+ryXmAg/Ib6NFfEP+KlSou7BvNrHQkCUN34F0vSdCGs+Z9J
# 9+xK2DpV+VXpxY9tIgRZSlM9HVOiqjN7bQEVvn6lup+yUd13cdixgupZfY2tPk1G
# jP44Jaf8pN4Tvv4Q0vCWN+WPHKms09hqbqVW3CZa6V+B3ZBPmGmITc+ClKpi9Z8E
# 5v2/ZprCMIIFEzCCA/ugAwIBAgIMWNoT/wAAAABRzg33MA0GCSqGSIb3DQEBCwUA
# MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3Qu
# bmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMG
# A1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
# cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMB4XDTE1MDcy
# MjE5MDI1NFoXDTI5MDYyMjE5MzI1NFowgbIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
# Ew1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xl
# Z2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9y
# IGF1dGhvcml6ZWQgdXNlIG9ubHkxJjAkBgNVBAMTHUVudHJ1c3QgVGltZXN0YW1w
# aW5nIENBIC0gVFMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2SPm
# FKTofEuFcVj7+IHmcotdRsOIAB840Irh1m5WMOWv2mRQfcITOfu9ZrTahPuD0Cgf
# y3boYFBpm/POTxPiwT7B3xLLMqP4XkQiDsw66Y1JuWB0yN5UPUFeQ18oRqmmt8oQ
# KyK8W01bjBdlEob9LHfVxaCMysKD4EdXfOdwrmJFJzEYCtTApBhVUvdgxgRLs91o
# Mm4QHzQRuBJ4ZPHuqeD347EijzRaZcuK9OFFUHTfk5emNObQTDufN0lSp1NOny5n
# XO2W/KW/dFGI46qOvdmxL19QMBb0UWAia5nL/+FUO7n7RDilCDkjm2lH+jzE0Oeq
# 30ay7PKKGawpsjiVdQIDAQABo4IBIzCCAR8wEgYDVR0TAQH/BAgwBgEB/wIBADAO
# BgNVHQ8BAf8EBAMCAQYwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEW
# Gmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvcnBhMDMGCCsGAQUFBwEBBCcwJTAjBggr
# BgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYDVR0fBCswKTAnoCWg
# I4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBMGA1UdJQQMMAoG
# CCsGAQUFBwMIMB0GA1UdDgQWBBTDwnHSe9doBa47OZs0JQxiA8dXaDAfBgNVHSME
# GDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDANBgkqhkiG9w0BAQsFAAOCAQEAHSTn
# mnRbqnD8sQ4xRdcsAH9mOiugmjSqrGNtifmf3w13/SQj/E+ct2+P8/QftsH91hzE
# jIhmwWONuld307gaHshRrcxgNhqHaijqEWXezDwsjHS36FBD08wo6BVsESqfFJUp
# yQVXtWc26Dypg+9BwSEW0373LRFHZnZgghJpjHZVcw/fL0td6Wwj+Af2tX3WaUWc
# WH1hLvx4S0NOiZFGRCygU6hFofYWWLuRE/JLxd8LwOeuKXq9RbPncDDnNI7revbT
# tdHeaxOZRrOL0k2TdbXxb7/cACjCJb+856NlNOw/DR2XjPqqiCKkGDXbBY524xDI
# KY9j0K6sGNnaxJ9REjGCA2QwggNgAgEBMIHIMIGyMQswCQYDVQQGEwJVUzEWMBQG
# A1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5l
# dC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMTUgRW50cnVzdCwgSW5jLiAt
# IGZvciBhdXRob3JpemVkIHVzZSBvbmx5MSYwJAYDVQQDEx1FbnRydXN0IFRpbWVz
# dGFtcGluZyBDQSAtIFRTMQIRAKvdZ2XyWu9QAAAAAFWR6QwwDQYJYIZIAWUDBAIB
# BQCgggFsMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQx
# IgQgE6KOYV0LnWAi597woOoH83PTjkdoFWAgzyNaFMH/ghYwggEbBgsqhkiG9w0B
# CRACDDGCAQowggEGMIIBAjCB5wQUwPWUF2Vp14CrDs/f2+Kpwa9kTt4wgc4wgbik
# gbUwgbIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYD
# VQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAo
# YykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkx
# JjAkBgNVBAMTHUVudHJ1c3QgVGltZXN0YW1waW5nIENBIC0gVFMxAhEAq91nZfJa
# 71AAAAAAVZHpDDAWBBSXnp2n95YjPyEMju0Wbe82BAxGjjANBgkqhkiG9w0BAQsF
# AASCAQB2jcfoEihlhs5seSfYzBALjVyKsXF3+hWZj72sSSwAQZD5ueB4pwTbR+f1
# ZTjKgOpXsYu5uAO1qBIQNL20psVQoK7XxClD6kDV9l5yl+Cm/PDBYXqWG3KMJAyy
# Pgsmdu2YV52I7ZMLDacftbATsNjPVgm1wcSJElp5SwBsBspv0nscsp30ELMRAzMX
# A72unJMIjR3QtReINGNaOz65NcD7KcqT0khJPw4YLx0B6/tstajMIz0r6FFZtNyz
# +md3YKNMQmmJQbicff9BnbquHiGfmDk6jJ3YwYiy6OGgUq1jHgT5gyMsxBULgTX+
# Vq10q/rHtJ/NK6lKC3+/Z1kJq0lu
# SIG # End signature block