public/cbb/Get-MBSPlanHistory.ps1
function Get-MBSPlanHistory { <# .SYNOPSIS Retrive backup/restore plan history from local repository. .DESCRIPTION Get information on the plan runs. Using -Detailed parameter may slow down output in case of a large number of processed items. .PARAMETER PlanID Backup plan ID. .PARAMETER Detailed Item history for backup session includes if the switch parameter is specified. .EXAMPLE PS C:\> Get-MBSPlanHistory Get plan history for all backup plan. .EXAMPLE PS C:\> Get-MBSPlanHistory -PlanID 6d014515-27f6-477c-a13f-c274a4675d44 Get plan history for the specific backup plan. .EXAMPLE PS C:\> Get-MBSPlanHistory -PlanID 6d014515-27f6-477c-a13f-c274a4675d44 -Detailed Get plan and item history for the specific backup plan. .INPUTS System.String[] .OUTPUTS System.Management.Automation.PSCustomObject .NOTES Author: MSP360 Onboarding Team .LINK https://mspbackups.com/AP/Help/powershell/cmdlets/backup-agent/get-mbsplanhistory #> [CmdletBinding()] param ( # Backup plan ID [Parameter(ValueFromPipelineByPropertyName)] [Alias("ID")] [string] $PlanID, # Switch to include items history [Parameter()] [switch] $Detailed ) begin { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Try{$PSSQLiteModule = Get-Package -Name "PSSQLite" -ErrorAction SilentlyContinue}catch{$PSSQLiteModule = $false} if (-not($PSSQLiteModule)){ Try{Install-Package -Name PSSQLite -Force}catch{Write-Host $_.Exception.Message} Try{Install-Module -Name PSSQLite -Force}catch{Write-Host $_.Exception.Message} Try{Import-Module -Name PSSQLite -Force}catch{Write-Host $_.Exception.Message} }else{ Try{Import-Module -Name PSSQLite -Force}catch{Write-Host $_.Exception.Message} } $ItemStatus = @{ [long]0 = "Success"; [long]1 = "Failure"; [long]2 = "Warning"; [long]3 = "Information" } $planStatus = @{ [long]0 = "Starting"; [long]1 = "UpdatedFileSearch"; [long]2 = "Running"; [long]3 = "PurgingFiles"; [long]4 = "Pausing"; [long]5 = "Paused"; [long]6 = "Success"; [long]7 = "Warning"; [long]8 = "Failed"; [long]9 = "InterruptedByUser"; [long]10 = "InterruptedBySchedule"; [long]11 = "UpdatingRepository"; [long]12 = "Stopping"; [long]13 = "CreatingVSSSnapshot"; [long]14 = "CalculatingMD5"; [long]15 = "InstantBackup"; [long]16 = "InterruptedForUpdate"; [long]17 = "RunningPreBackupAction"; [long]18 = "RunningPostBackupAction"; [long]19 = "Preparing"; [long]20 = "Downloading"; [long]21 = "RunningWindowsBackup"; [long]22 = "Resuming"; [long]23 = "RunningForPause"; [long]24 = "RunningRestoreDatabase"; [long]25 = "Skipped"; [long]26 = "Information"; [long]27 = "CreatingWmiSnapshot"; [long]28 = "RestoreVirtualMachine"; [long]29 = "TerminatedAbnormally"; [long]30 = "TerminatedByUser" } if((Get-MBSAgentSetting).DatabaseFilePath){ $DatabaseFilePath = (Get-MBSAgentSetting).DatabaseFilePath + "\cbbackup.db" }else{ $DatabaseFilePath = (Get-MBSAgent).CBBProgramData + "\data\cbbackup.db" } } process { $QuerySessionHistory = "SELECT id, destination_id, plan_id, date_start_utc, duration, result, uploaded_count, uploaded_size, scanned_count, scanned_size, purged_count, total_count, total_size, failed_count, error_message, processor_time, peak_memory_usage, plan_name FROM session_history" if ($PlanID) { $QuerySessionHistory += " WHERE plan_id = ""$PlanID"";" }else{ $QuerySessionHistory += ";" } Write-Verbose "$($PSCmdlet.MyInvocation.MyCommand.Name): $QuerySessionHistory" $PlanSessionHistory = Invoke-SqliteQuery -Query $QuerySessionHistory -DataSource $DatabaseFilePath | select id, destination_id, plan_id, plan_name, @{Name = 'start_date_time'; Expression = {[datetime]::ParseExact(($_.date_start_utc).ToString(), "yyyyMMddHHmmss", $null)}}, duration, @{Name = 'result'; Expression = {$planStatus[$_.result]}}, @{Name = 'error_message'; Expression = {(Convert-XMLtoPSObject -XML ([xml]$_.error_message).BaseError).Message}}, uploaded_count, uploaded_size, scanned_count, scanned_size, purged_count, total_count, total_size, failed_count, processor_time, peak_memory_usage if ($Detailed) { $PlanSessionHistory | ForEach-Object -Process { $QueryHistory = "SELECT id, destination_id, plan_id, local_path, operation, duration, date_finished_utc, date_modified_utc, size, message, session_id, attempts, result, thumbnail_archive FROM history WHERE session_id=$($_.id);" $PlanHistory = Invoke-SqliteQuery -Query $QueryHistory -DataSource $DatabaseFilePath | select id, destination_id, plan_id, local_path, operation, duration, @{Name = 'date_finished_utc'; Expression = {[datetime]::ParseExact(($_.date_finished_utc).ToString(), "yyyyMMddHHmmss", $null)}}, @{Name = 'date_modified_utc'; Expression = {[datetime]::ParseExact(($_.date_modified_utc).ToString(), "yyyyMMddHHmmss", $null)}}, size, message, session_id, attempts, @{Name = 'result'; Expression = {$ItemStatus[$_.result]}}, thumbnail_archive Add-Member -InputObject $_ -MemberType NoteProperty -Name "Items" -Value $PlanHistory } } return $PlanSessionHistory } end { } } # SIG # Begin signature block # MIInWwYJKoZIhvcNAQcCoIInTDCCJ0gCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBdhp89lMK9iP2W # g1thCmgxG7hczBm+dRr+336jIx/WkqCCEekwggVvMIIEV6ADAgECAhBI/JO0YFWU # jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI # DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM # EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy # dmljZXMwHhcNMjEwNTI1MDAwMDAwWhcNMjgxMjMxMjM1OTU5WjBWMQswCQYDVQQG # EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS0wKwYDVQQDEyRTZWN0aWdv # IFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEBAQUA # A4ICDwAwggIKAoICAQCN55QSIgQkdC7/FiMCkoq2rjaFrEfUI5ErPtx94jGgUW+s # hJHjUoq14pbe0IdjJImK/+8Skzt9u7aKvb0Ffyeba2XTpQxpsbxJOZrxbW6q5KCD # J9qaDStQ6Utbs7hkNqR+Sj2pcaths3OzPAsM79szV+W+NDfjlxtd/R8SPYIDdub7 # P2bSlDFp+m2zNKzBenjcklDyZMeqLQSrw2rq4C+np9xu1+j/2iGrQL+57g2extme # me/G3h+pDHazJyCh1rr9gOcB0u/rgimVcI3/uxXP/tEPNqIuTzKQdEZrRzUTdwUz # T2MuuC3hv2WnBGsY2HH6zAjybYmZELGt2z4s5KoYsMYHAXVn3m3pY2MeNn9pib6q # RT5uWl+PoVvLnTCGMOgDs0DGDQ84zWeoU4j6uDBl+m/H5x2xg3RpPqzEaDux5mcz # mrYI4IAFSEDu9oJkRqj1c7AGlfJsZZ+/VVscnFcax3hGfHCqlBuCF6yH6bbJDoEc # QNYWFyn8XJwYK+pF9e+91WdPKF4F7pBMeufG9ND8+s0+MkYTIDaKBOq3qgdGnA2T # OglmmVhcKaO5DKYwODzQRjY1fJy67sPV+Qp2+n4FG0DKkjXp1XrRtX8ArqmQqsV/ # AZwQsRb8zG4Y3G9i/qZQp7h7uJ0VP/4gDHXIIloTlRmQAOka1cKG8eOO7F/05QID # AQABo4IBEjCCAQ4wHwYDVR0jBBgwFoAUoBEKIz6W8Qfs4q8p74Klf9AwpLQwHQYD # VR0OBBYEFDLrkpr/NZZILyhAQnAgNpFcF4XmMA4GA1UdDwEB/wQEAwIBhjAPBgNV # HRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMDMBsGA1UdIAQUMBIwBgYE # VR0gADAIBgZngQwBBAEwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21v # ZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEE # KDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZI # hvcNAQEMBQADggEBABK/oe+LdJqYRLhpRrWrJAoMpIpnuDqBv0WKfVIHqI0fTiGF # OaNrXi0ghr8QuK55O1PNtPvYRL4G2VxjZ9RAFodEhnIq1jIV9RKDwvnhXRFAZ/ZC # J3LFI+ICOBpMIOLbAffNRk8monxmwFE2tokCVMf8WPtsAO7+mKYulaEMUykfb9gZ # pk+e96wJ6l2CxouvgKe9gUhShDHaMuwV5KZMPWw5c9QLhTkg4IUaaOGnSDip0TYl # d8GNGRbFiExmfS9jzpjoad+sPKhdnckcW67Y8y90z7h+9teDnRGWYpquRRPaf9xH # +9/DUp/mBlXpnYzyOmJRvOwkDynUWICE5EV7WtgwggYaMIIEAqADAgECAhBiHW0M # UgGeO5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNVBAYTAkdCMRgwFgYD # VQQKEw9TZWN0aWdvIExpbWl0ZWQxLTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENv # ZGUgU2lnbmluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBaFw0zNjAzMjEyMzU5 # NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzAp # BgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYwggGiMA0G # CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCbK51T+jU/jmAGQ2rAz/V/9shTUxjI # ztNsfvxYB5UXeWUzCxEeAEZGbEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2A2NV # DgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYkwmMv0b/83nbeECbiMXhSOtbam+/3 # 6F09fy1tsB8je/RV0mIk8XL/tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05Zw # mRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+8yv+KIhE5ILMqgOZYAENHNX9SJDm # +qxp4VqpB3MV/h53yl41aHU5pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUe # dyz8rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+EKv1WuTGwcLmoU3FpOFMbmPj8pz4 # 4MPZ1f9+YEQIQty/NQd/2yGgW+ufflcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBM # dlyh2n5HirY4jKnFH/9gRvd+QOfdRrJZb1sCAwEAAaOCAWQwggFgMB8GA1UdIwQY # MBaAFDLrkpr/NZZILyhAQnAgNpFcF4XmMB0GA1UdDgQWBBQPKssghyi47G9IritU # pimqF6TNDDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNV # HSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEsG # A1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1B1 # YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYIKwYBBQUHAQEEbzBtMEYGCCsG # AQUFBzAChjpodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl # U2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0 # aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURh # w1aVcdGRP4Wh60BAscjW4HL9hcpkOTz5jUug2oeunbYAowbFC2AKK+cMcXIBD0Zd # OaWTsyNyBBsMLHqafvIhrCymlaS98+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajj # cw5+w/KeFvPYfLF/ldYpmlG+vd0xqlqd099iChnyIMvY5HexjO2AmtsbpVn0OhNc # WbWDRF/3sBp6fWXhz7DcML4iTAWS+MVXeNLj1lJziVKEoroGs9Mlizg0bUMbOalO # hOfCipnx8CaLZeVme5yELg09Jlo8BMe80jO37PU8ejfkP9/uPak7VLwELKxAMcJs # zkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqmKL5OTunAvtONEoteSiabkPVSZ2z7 # 6mKnzAfZxCl/3dq3dUNw4rg3sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN/Y5J # KdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQZH3pwWvqURR8AgQdULUvrxjUYbHH # j95Ejza63zdrEcxWLDX6xWls/GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2 # Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63Syatatvx157YK9hlcPmVoa1oDE5/ # L9Uo2bC5a4CH2RwwggZUMIIEvKADAgECAhBQGj1MeADxcRs/FOU26uyrMA0GCSqG # SIb3DQEBDAUAMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0 # ZWQxKzApBgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYw # HhcNMjExMjAzMDAwMDAwWhcNMjQxMjAyMjM1OTU5WjBYMQswCQYDVQQGEwJVUzEV # MBMGA1UECAwMUGVubnN5bHZhbmlhMRgwFgYDVQQKDA9NU1BCeXRlcywgQ29ycC4x # GDAWBgNVBAMMD01TUEJ5dGVzLCBDb3JwLjCCAiIwDQYJKoZIhvcNAQEBBQADggIP # ADCCAgoCggIBAKNUOYUGihQGjTJdJ6k5Fm3+6QJGhj2wUbubiiqxJeqmW6616o5e # ExwiGSxPOqafJzOJNq0XOigb3OQhtdIR4bG38+JghFt8rZe/DxBmPBZDR9bD1hrk # 9vY714QhqvhIlUDXHnDUc9pnVGFfI945hRgaFHL77GQAEFyMvjNupOvT674/E8rI # gYKMQBwY0cqiuRQwr3FnRMmNhd8/5mqrZGglDT1JizOnpfFVgNJ0x4ev7mPYIF6T # rFGPwHsOOujzydmGgqvtGASEuz74A6arzYrhbjXv8XsEdT2tz6hHIpMwsgWMk6BD # KDCsSIl5oEmVbQNXKrC0k62/XpbWRd+i350k07kl1bdV+nbi1K62TyS+7eVxehC1 # gFp+Knob1aqAJD9sPBLdbN3E4FOB/rvOLP1i2IxAcTGirAyRkkUriD4LUSWO6pju # Qv2V4ZU/+K/3ZLXYCbIflzpDq6z9FmazK5csv99Coslv9s6lm9s1RRxgRBj5sn1q # Xe/5l0VbF7tG/cgBvt8aJBD0u8knujI17lDy1TGA77r/KKj65xSsxC6nm0RA9pTw # 0tz5OQ4ABYrH6TpdUBJz8m8cFgPipvyohN0RdE7InB3Nao11L1UHlnnL0SG1z5qQ # YU7BhvfiSu44pSY9/uTPmAPlNIj3MO5utjfMD+MX9u86d8h/DWwrvQZzAgMBAAGj # ggGcMIIBmDAfBgNVHSMEGDAWgBQPKssghyi47G9IritUpimqF6TNDDAdBgNVHQ4E # FgQU7XGG9N0fpUpnonmgh6+IzR3lGj0wDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB # /wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJYIZIAYb4QgEBBAQDAgQQMEoG # A1UdIARDMEEwNQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8v # c2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEATBJBgNVHR8EQjBAMD6gPKA6hjhodHRw # Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2 # LmNybDB5BggrBgEFBQcBAQRtMGswRAYIKwYBBQUHMAKGOGh0dHA6Ly9jcnQuc2Vj # dGlnby5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FSMzYuY3J0MCMGCCsG # AQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOC # AYEAhLlUlrWxmB3MSCX9LcaY3p6jCnaeFR4chgRmhjdH+Gy5UyFpEq1/3X/Pv2Ih # GGnX0uVbXsQ90D/CwFk7bXCFUUblu4ldzNqjmnf+lcTtv/WJR9FTS9t79WdiWbuN # /YIEXVDERUGPC7v55aaJvXJbDS+4vYeJPAHl2xsvbARWui1nwBLOSVGTGk6T2Q6s # BnlHFToFc4UFtMhYUMf8L03jypocNGM9z6yamsOANd/dXt582U5DD0g7SVS2pyHD # Ot7UvVq6769TGZNwq9s1tFwQjm3IGz4DIO1ADMwoGLzqqalYQ1xq2JAqUq41hSlN # YHecLTjAOTwA81wv71XbZdARR0DfmpqdzdKkTbVucWhJFWL7clDQ0WzfAx1/ZsjR # t6X9p+XuLnJPMD3V5swX52ZCcB6LY3FyK7kgwNseH+Xqo+Ln7OtAs3Bwa/Cm9lbL # xYs8wkDitxFnpKFstyE7EE+wtEJkyszfLqjkmUCw/hjzX6I40hahbPCxaxdlv8+3 # drczMYIUyDCCFMQCAQEwaDBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGln # byBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcg # Q0EgUjM2AhBQGj1MeADxcRs/FOU26uyrMA0GCWCGSAFlAwQCAQUAoHwwEAYKKwYB # BAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGC # NwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIEsD02GTW3sv0hAC # xzI6hwPsEEdFpaHA8yIxEwKcWEh7MA0GCSqGSIb3DQEBAQUABIICAAETMxHWkTZl # qRImKMrcqxfD1Vdik+RCwVf6fD/gncziFZejdDfwTV2wsgafGCjyseRCRZJj45Ap # E+eafJQ/s6WPthvRRt/tJS0Ie1oZrC2266kAglcREhW2KtEq40Okk1bqOvq7pn5G # sHLMD6xoiSttFRdhwsyT+5BAmsg0EjLVYez/6zAGErIhso5RVK4WadlYTbV+3cii # FLjVJjwvxRoNZ9atO6jcw1FNmqe+NoPsgo84UOljI7SyJ9oYTjM8Ep457nPj59NR # ioIqDscrJFxlaNgDulwY/iWH5WvGhn5DaaESYSQ2NkYnDyzHaQy4GKlgmQvprTv0 # A8/3mpBkFKChqU262ifGxBNclIqeUkTFxiDCiM9DOcya7/K4ejgV/Fw9Il070weg # Dv1ownxsLknAz0i2P+P7EfPPPorAOLRgTS5grujlqFl3nYc5fXYXZrOO8TgeRX6D # 84gubgc0LvQiMUleEoB0flLqGWR85ufIhlB/yKyFAMlqhexU6FnTtcwK2taFRm41 # c3f7wOwJA4MKfd/o1BbMh10Xu4dzos7v5Qi0hvu9e5GRYAnVC47hjWyT7IEyr2z4 # wgAH1+fnTDXuEGzuxm595OFfD2VD16P5on+jWnA4cVB1yCg78t5UtR/46yH6TXnn # MPZ5KD6Ms3VwZ2VoFDDNcNWKZq/uhflCoYIRszCCEa8GCisGAQQBgjcDAwExghGf # MIIRmwYJKoZIhvcNAQcCoIIRjDCCEYgCAQMxDzANBglghkgBZQMEAgEFADB4Bgsq # hkiG9w0BCRABBKBpBGcwZQIBAQYJYIZIAYb9bAcBMDEwDQYJYIZIAWUDBAIBBQAE # IDvOAmkMz4XRHUmO4vqF1w/7lOA4AuubQ0lMNkk0U2E/AhEA8RTeHKokIXkvmepL # +lmqJRgPMjAyMjA1MjMxOTM0MDBaoIINfDCCBsYwggSuoAMCAQICEAp6SoieyZlC # kAZjOE2Gl50wDQYJKoZIhvcNAQELBQAwYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoT # DkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJT # QTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAeFw0yMjAzMjkwMDAwMDBaFw0z # MzAzMTQyMzU5NTlaMEwxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg # SW5jLjEkMCIGA1UEAxMbRGlnaUNlcnQgVGltZXN0YW1wIDIwMjIgLSAyMIICIjAN # BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuSqWI6ZcvF/WSfAVghj0M+7MXGzj # 4CUu0jHkPECu+6vE43hdflw26vUljUOjges4Y/k8iGnePNIwUQ0xB7pGbumjS0jo # iUF/DbLW+YTxmD4LvwqEEnFsoWImAdPOw2z9rDt+3Cocqb0wxhbY2rzrsvGD0Z/N # CcW5QWpFQiNBWvhg02UsPn5evZan8Pyx9PQoz0J5HzvHkwdoaOVENFJfD1De1Fks # RHTAMkcZW+KYLo/Qyj//xmfPPJOVToTpdhiYmREUxSsMoDPbTSSF6IKU4S8D7n+F # AsmG4dUYFLcERfPgOL2ivXpxmOwV5/0u7NKbAIqsHY07gGj+0FmYJs7g7a5/KC7C # nuALS8gI0TK7g/ojPNn/0oy790Mj3+fDWgVifnAs5SuyPWPqyK6BIGtDich+X7Aa # 3Rm9n3RBCq+5jgnTdKEvsFR2wZBPlOyGYf/bES+SAzDOMLeLD11Es0MdI1DNkdcv # nfv8zbHBp8QOxO9APhk6AtQxqWmgSfl14ZvoaORqDI/r5LEhe4ZnWH5/H+gr5BSy # FtaBocraMJBr7m91wLA2JrIIO/+9vn9sExjfxm2keUmti39hhwVo99Rw40KV6J67 # m0uy4rZBPeevpxooya1hsKBBGBlO7UebYZXtPgthWuo+epiSUc0/yUTngIspQnL3 # ebLdhOon7v59emsCAwEAAaOCAYswggGHMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMB # Af8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMCAGA1UdIAQZMBcwCAYGZ4EM # AQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6FtltTYUvcyl2mi91jGogj57I # bzAdBgNVHQ4EFgQUjWS3iSH+VlhEhGGn6m8cNo/drw0wWgYDVR0fBFMwUTBPoE2g # S4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0UlNB # NDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCBkAYIKwYBBQUHAQEEgYMwgYAw # JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBYBggrBgEFBQcw # AoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0 # UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNydDANBgkqhkiG9w0BAQsFAAOC # AgEADS0jdKbR9fjqS5k/AeT2DOSvFp3Zs4yXgimcQ28BLas4tXARv4QZiz9d5YZP # vpM63io5WjlO2IRZpbwbmKrobO/RSGkZOFvPiTkdcHDZTt8jImzV3/ZZy6HC6kx2 # yqHcoSuWuJtVqRprfdH1AglPgtalc4jEmIDf7kmVt7PMxafuDuHvHjiKn+8RyTFK # WLbfOHzL+lz35FO/bgp8ftfemNUpZYkPopzAZfQBImXH6l50pls1klB89Bemh2RP # PkaJFmMga8vye9A140pwSKm25x1gvQQiFSVwBnKpRDtpRxHT7unHoD5PELkwNuTz # qmkJqIt+ZKJllBH7bjLx9bs4rc3AkxHVMnhKSzcqTPNc3LaFwLtwMFV41pj+VG1/ # calIGnjdRncuG3rAM4r4SiiMEqhzzy350yPynhngDZQooOvbGlGglYKOKGukzp12 # 3qlzqkhqWUOuX+r4DwZCnd8GaJb+KqB0W2Nm3mssuHiqTXBt8CzxBxV+NbTmtQyi # maXXFWs1DoXW4CzM4AwkuHxSCx6ZfO/IyMWMWGmvqz3hz8x9Fa4Uv4px38qXsdhH # 6hyF4EVOEhwUKVjMb9N/y77BDkpvIJyu2XMyWQjnLZKhGhH+MpimXSuX4IvTnMxt # tQ2uR2M4RxdbbxPaahBuH0m3RFu0CAqHWlkEdhGhp3cCExwwggauMIIElqADAgEC # AhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVT # MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j # b20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMw # MDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5E # aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0 # MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC # DwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDMg/la # 9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4r # gISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09nsad/Z # kIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtArF+y # 3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149zk6ws # OeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6OBGz # 9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qhHGs4 # xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB # 7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhK # WD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0sj8e # CXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQIDAQAB # o4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2FL3Mp # dpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYD # VR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGsw # aTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUF # BzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVk # Um9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2Vy # dC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeB # DAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+YqUQi # AX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjYC+Vc # W9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0FNf/ # q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6Wvep # ELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGjVoar # CkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJS # pzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrk # nq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o08f5 # 6PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n+2Bn # FqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ # 8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW # +6kvRBVK5xMOHds3OBqhK/bt1nz8MYIDdjCCA3ICAQEwdzBjMQswCQYDVQQGEwJV # UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRy # dXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAKekqInsmZ # QpAGYzhNhpedMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsqhkiG # 9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjIwNTIzMTkzNDAwWjArBgsqhkiG9w0B # CRACDDEcMBowGDAWBBSFCPOGUVyz0wd9trS3wH8bSl5B3jAvBgkqhkiG9w0BCQQx # IgQgxeakGzAIW5U7ebe6fRgliPeO5la5hTghShmTN0vsJoYwNwYLKoZIhvcNAQkQ # Ai8xKDAmMCQwIgQgnaaQFcNJxsGJeEW6NYKtcMiPpCk722q+nCvSU5J55jswDQYJ # KoZIhvcNAQEBBQAEggIABEvtvyy6NT2xht9TA1+znLSrYekNMNw5nWQNd+9XW4NR # +eBga2mH5AtM+vm9fKfOdAzSHlxUl3HVeA9DffNf5tLqdmyWfpnPx0Slr60TBz9h # mMqZfXWIZYunJuGWsbMVT5wKxQIMStjqAzbCP/85q9i6Y5qMwSMewVFj0K8wk7an # 5jg9PhEooaZWF0nfmFBULJlHe3mBzXxH9v4fjmEXa3Q25Gwam14L0r7aguh8DE9A # wvWyksi1nH34i7Tm3ElqvxNaVkQtLavPpY+iCHeZDGmrXEmL+l+j3fg8Yym9xB9b # ABNl+MHwxQo8j64SsA0Kw7JJ5xoPImO+WuApdgCDMwFUfvteRwJAQWBTOxxZqah+ # JS8DfDjrZN3QBhOCIKNhZae1gvDbUVKMpFMI7mNpn9NBSJy5nX82nj7MvGztPmUK # bYVuX/51QYNOw8OcYPM/FZhgkBdzj4FCdBXVjPHVW5NrSrKqTHnF2JShGbKty+jo # qx2gjxPGq98ErHMI3XlZnlbdKYWQ5duSAbdDDdq8PyEWnmp0V7pnnvRMHAwSHh2Z # pWCn7wRKglG39nOAIy3Wjtu45/FDnaovzxKxz5FYYE6ipbdEe8yage6T/X2lXIKc # P/afJKMUUpbgMJuWZ9NBwAj8JTQkX326ofRFquMgwazS38O3cpOTvHtne68XxPQ= # SIG # End signature block |