public/Get-VPASSQLPlatforms.ps1
<#
.Synopsis GET SQL PLATFORMS CREATED BY: Vadim Melamed, EMAIL: vpasmodule@gmail.com .DESCRIPTION USE THIS FUNCTION TO OUTPUT ALL PLATFORM DETAILS INTO AN SQL TABLE .LINK https://vpasmodule.com/commands/Get-VPASSQLPlatforms .NOTES SelfHosted: TRUE PrivCloudStandard: TRUE SharedServices: TRUE .PARAMETER token HashTable of data containing various pieces of login information (PVWA, LoginToken, HeaderType, etc). If -token is not passed, function will use last known hashtable generated by New-VPASToken .PARAMETER InputParameters HashTable of values containing the parameters required to make the API call .EXAMPLE $SQLPlatforms = Get-VPASSQLPlatforms .EXAMPLE $InputParameters = @{} $SQLPlatforms = Get-VPASSQLPlatforms -InputParameters $InputParameters .OUTPUTS $true if successful --- $false if failed #> function Get-VPASSQLPlatforms{ [OutputType([bool])] [CmdletBinding(DefaultParameterSetName='Set1')] Param( [Parameter(Mandatory=$true,ParameterSetName='InputParameters',ValueFromPipelineByPropertyName=$true,HelpMessage="Hashtable of parameters required to make API call, refer to get-help -examples for valid inputs")] [hashtable]$InputParameters, [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] [hashtable]$token ) Begin{ $tokenval,$sessionval,$PVWA,$Header,$ISPSS,$IdentityURL,$EnableTextRecorder,$AuditTimeStamp,$NoSSL,$VaultVersion,$HideWarnings,$AuthenticatedAs,$SubDomain,$EnableTroubleshooting = Get-VPASSession -token $token $CommandName = $MyInvocation.MyCommand.Name $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType COMMAND } Process{ try{ if($PSCmdlet.ParameterSetName -eq "InputParameters"){ $KeyHash = @{ set1 = @{ AcceptableKeys = @() MandatoryKeys = @() } } $CheckSet = Test-VPASHashtableKeysHelper -InputHash $InputParameters -KeyHash $KeyHash if(!$CheckSet){ $log = Write-VPASTextRecorder -inputval "FAILED TO FIND TARGET PARAMETER SET" -token $token -LogType MISC Write-Verbose "FAILED TO FIND TARGET PARAMETER SET" Write-VPASOutput -str "FAILED TO FIND TARGET PARAMETER SET...VIEW EXAMPLES BELOW:" -type E $examples = Write-VPASExampleHelper -CommandName $CommandName return $false } else{ foreach($key in $InputParameters.Keys){ Set-Variable -Name $key -Value $InputParameters.$key } } } }catch{ $log = Write-VPASTextRecorder -inputval $_ -token $token -LogType ERROR $log = Write-VPASTextRecorder -inputval "REST API COMMAND RETURNED: FALSE" -token $token -LogType MISC Write-Verbose "FAILED TO RETRIEVE SQL DATA" Write-VPASOutput -str $_ -type E return $false } $curUser = $env:UserName $ConfigFile = "C:\Users\$curUser\AppData\Local\VPASModuleOutputs\SQL\SQLConfigFile.txt" try{ if(Test-Path -Path $ConfigFile){ Write-Verbose "FOUND SQL CONFIG FILE...PARSING DATA" } else{ Write-Verbose "FAILED TO FIND SQL CONFIG FILE...RERUN Set-VPASSQLConnectionDetails" Write-VPASOutput -str "FAILED TO FIND SQL CONFIG FILE...RERUN Set-VPASSQLConnectionDetails" -type E return $false } }catch{ Write-Verbose "FAILED TO FIND SQL CONFIG FILE...RERUN Set-VPASSQLConnectionDetails" Write-VPASOutput -str "FAILED TO FIND SQL CONFIG FILE...RERUN Set-VPASSQLConnectionDetails" -type E return $false } Write-Verbose "PARSING FILE CONTENTS" $SQLServerTemp = "" $SQLDatabaseTemp = "" $SQLUsernameTemp = "" $AAMTemp = "" $AppIDTemp = "" $FolderTemp = "" $SafeIDTemp = "" $ObjectNameTemp = "" $AIMServerTemp = "" $PasswordSDKTemp = "" $SQLPasswordTemp = "" $CertificateTPTemp = "" $AllLines = Get-Content -Path $ConfigFile foreach($line in $AllLines){ if($line -match "SQLServer="){ $SQLServerTemp = $line } if($line -match "SQLDatabase="){ $SQLDatabaseTemp = $line } if($line -match "SQLUsername="){ $SQLUsernameTemp = $line } if($line -match "AAM="){ $AAMTemp = $line } if($line -match "AppID="){ $AppIDTemp = $line } if($line -match "Folder="){ $FolderTemp = $line } if($line -match "SafeID="){ $SafeIDTemp = $line } if($line -match "ObjectName="){ $ObjectNameTemp = $line } if($line -match "AIMServer="){ $AIMServerTemp = $line } if($line -match "PasswordSDK="){ $PasswordSDKTemp = $line } if($line -match "SQLPassword="){ $SQLPasswordTemp = $line } if($line -match "CERTIFICATETP="){ $CertificateTPTemp = $line } } $AAMSplit = $AAMTemp -split "=" $AAM = $AAMSplit[1] Write-Verbose "AAM = $AAM" $SQLServerSplit = $SQLServerTemp -split "=" $SQLServer = $SQLServerSplit[1] Write-Verbose "SQLServer = $SQLServer" $SQLDatabaseSplit = $SQLDatabaseTemp -split "=" $SQLDatabase = $SQLDatabaseSplit[1] Write-Verbose "SQLDatabase = $SQLDatabase" $SQLUsernameSplit = $SQLUsernameTemp -split "=" $SQLUsername = $SQLUsernameSplit[1] Write-Verbose "SQLUsername = $SQLUsername" if($AAM -eq "CCP"){ #CCP $AppIDSplit = $AppIDTemp -split "=" $AppID = $AppIDSplit[1] Write-Verbose "AppID = $AppID" $FolderSplit = $FolderTemp -split "=" $Folder = $FolderSplit[1] Write-Verbose "Folder = $Folder" $SafeIDSplit = $SafeIDTemp -split "=" $SafeID = $SafeIDSplit[1] Write-Verbose "SafeID = $SafeID" $ObjectNameSplit = $ObjectNameTemp -split "=" $ObjectName = $ObjectNameSplit[1] Write-Verbose "ObjectName = $ObjectName" $AIMServerSplit = $AIMServerTemp -split "=" $AIMServer = $AIMServerSplit[1] Write-Verbose "AIMServer = $AIMServer" if([String]::IsNullOrEmpty($CertificateTPTemp)){ #DO NOTHING } else{ $CertificateTPSplit = $CertificateTPTemp -split "=" $CertificateTP = $CertificateTPSplit[1] Write-Verbose "CertificateTP = $CertificateTP" } try{ if($NoSSL){ $uri = "http://$AIMServer/AIMWebService/api/accounts?AppID=$AppID&Safe=$SafeID&Folder=$Folder&Object=$ObjectName" Write-Verbose "NO SSL ENABLED, USING HTTP INSTEAD OF HTTPS" } else{ $uri = "https://$AIMServer/AIMWebService/api/accounts?AppID=$AppID&Safe=$SafeID&Folder=$Folder&Object=$ObjectName" Write-Verbose "SSL ENABLED BY DEFAULT, USING HTTPS" } if([String]::IsNullOrEmpty($CertificateTP)){ $CCPResult = Invoke-RestMethod -Uri $uri } else{ $CCPResult = Invoke-RestMethod -Uri $uri -CertificateThumbprint $CertificateTP } $Secret = $CCPResult.Content if($Secret){ write-verbose "SECRET RETRIEVED SUCCESSFULLY" } else{ Write-VPASOutput -str "FAILED TO RETRIEVE SQL SECRET...PLEASE CONFIRM SQLConfigFile ($ConfigFile) CONTENT AND CCP FUNCTIONALITY" -type E return $false } }catch{ Write-VPASOutput -str "FAILED TO RETRIEVE SQL SECRET...PLEASE CONFIRM SQLConfigFile ($ConfigFile) CONTENT AND CCP FUNCTIONALITY" -type E Write-VPASOutput -str $_ -type E return $false } } elseif($AAM -eq "CP"){ #CP $AppIDSplit = $AppIDTemp -split "=" $AppID = $AppIDSplit[1] Write-Verbose "AppID = $AppID" $FolderSplit = $FolderTemp -split "=" $Folder = $FolderSplit[1] Write-Verbose "Folder = $Folder" $SafeIDSplit = $SafeIDTemp -split "=" $SafeID = $SafeIDSplit[1] Write-Verbose "SafeID = $SafeID" $ObjectNameSplit = $ObjectNameTemp -split "=" $ObjectName = $ObjectNameSplit[1] Write-Verbose "ObjectName = $ObjectName" $PasswordSDKSplit = $PasswordSDKTemp -split "=" $PasswordSDK = $PasswordSDKSplit[1] Write-Verbose "PasswordSDK = $PasswordSDK" try{ $Secret = & "$PasswordSDK" GetPassword /p AppDescs.AppID=$AppID /p Query="Safe=$SafeID;Folder=$Folder;Object=$ObjectName" /o Password if($Secret){ write-verbose "RETRIEVED SECRET SUCCESSFULLY" } else{ Write-VPASOutput -str "FAILED TO RETRIEVE SQL SECRET...PLEASE CONFIRM SQLConfigFile ($ConfigFile) CONTENT AND CP FUNCTIONALITY" -type E return $false } }catch{ Write-VPASOutput -str "FAILED TO RETRIEVE SQL SECRET...PLEASE CONFIRM SQLConfigFile ($ConfigFile) CONTENT AND CP FUNCTIONALITY" -type E Write-VPASOutput -str $_ -type E return $false } } else{ #NONE $SQLPasswordSplit = $SQLPasswordTemp -split "=" $SQLPassword = $SQLPasswordSplit[1] $SecureString = ConvertTo-SecureString -String $SQLPassword $Pointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString) $Secret = [Runtime.InteropServices.Marshal]::PtrToStringAuto($Pointer) } try{ import-module sqlserver -ErrorAction Stop }catch{ Write-VPASOutput -str "FAILED TO LOAD SQLServer MODULE..." -type E Write-VPASOutput -str $_ -type E Write-VPASOutput -str "FAILED TO FIND SQLServer MODULE IN THE FOLLOWING DIRECTORIES:" -type E $str = $env:PSModulePath -split ";" foreach($strsplit in $str){ Write-VPASOutput -str $strsplit -type E } Write-VPASOutput -str "DOWNLOAD THE MODULE BY TYPING IN 'Install-Module -Name SqlServer' THEN RERUN Set-VPASSQLConnectionDetails" -type E Write-VPASOutput -str "YOU CAN ALSO VIEW THIS LINK FOR MORE INFORMATION: 'https://www.powershellgallery.com/packages/SqlServer/21.1.18256'" -type E Write-VPASOutput -str "PROCESS TERMINATED" -type E return $false } try{ $output = @() $result = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDatabase -Query "SELECT DB_NAME()" -Username $SQLUsername -Password $Secret if($result.Column1 -eq $SQLDatabase){ write-verbose "SQL CONNECTIVITY SUCCESSFUL" } else{ Write-VPASOutput -str "FAILED TO CONNECT TO SQL DATABASE...PLEASE CONFIRM SQLConfigFile ($ConfigFile) CONTENT" -type E return $false } }catch{ Write-VPASOutput -str "FAILED TO CONNECT TO SQL DATABASE...PLEASE CONFIRM SQLConfigFile ($ConfigFile) CONTENT" -type E Write-VPASOutput -str $_ -type E return $false } #DROP $TableName = "Vpas_Platform_Inventory" try{ $query = "DROP TABLE $TableName" $result = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDatabase -Query $query -Username $SQLUsername -Password $Secret -ErrorAction Stop Write-Verbose "$TableName DELETED SUCCESSFULLY" }catch{ Write-Verbose "$TableName DOES NOT EXIST" } #CREATE try{ $query = "CREATE TABLE $TableName ( ID varchar(255), Name varchar(255), SystemType varchar(255), Active varchar(255), Description varchar(255), PlatformBaseID varchar(255), PlatformType varchar(255), PropertiesRequired varchar(255), PropertiesOptional varchar(255), LinkedAccounts varchar(255), AllowedSafes varchar(255), AllowManualChange varchar(255), PerformPeriodicChange varchar(255), RequirePasswordChangeEveryXDays varchar(255), AllowManualVerification varchar(255), PerformPeriodicVerification varchar(255), RequirePasswordVerificationEveryXDays varchar(255), AllowManualReconciliation varchar(255), AutomaticReconcileWhenUnsynched varchar(255), RequirePrivilegedSessionMonitoringAndIsolation varchar(255), RecordAndSaveSessionActivity varchar(255), PSMServerID varchar(255), RequireDualControlPasswordAccessApproval varchar(255), EnforceCheckinCheckoutExclusiveAccess varchar(255), EnforceOnetimePasswordAccess varchar(255), ConnectionComponents varchar(255), SearchForUsages varchar(255), PolicyType varchar(255), ImmediateInterval varchar(255), Interval varchar(255), MaxConcurrentConnections varchar(255), MinValidityPeriod varchar(255), ResetOveridesMinValidity varchar(255), ResetOveridesTimeFrame varchar(255), Timeout varchar(255), UnlockIfFail varchar(255), UnrecoverableErrors varchar(255), MaximumRetries varchar(255), MinDelayBetweenRetries varchar(255), DllName varchar(255), XMLFile varchar(255), HeadStartInterval varchar(255), FromHour varchar(255), ToHour varchar(255), ChangeNotificationPeriod varchar(255), DaysNotifyPriorExpiration varchar(255), VFFromHour varchar(255), VFToHour varchar(255), RCReconcileReasons varchar(255), RCFromHour varchar(255), RCToHour varchar(255), NFNotifyPriorExpiration varchar(255), NFPriorExpirationRecipients varchar(255), NFNotifyOnPasswordDisable varchar(255), NFOnPasswordDisableRecipients varchar(255), NFNotifyOnVerificationErrors varchar(255), NFOnVerificationErrorsRecipients varchar(255), NFNotifyOnPasswordUsed varchar(255), NFOnPasswordUsedRecipients varchar(255), PasswordLength varchar(255), MinUpperCase varchar(255), MinLowerCase varchar(255), MinDigit varchar(255), MinSpecial varchar(255), PasswordLevelRequestTimeframe varchar(255) ); " $result = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDatabase -Query $query -Username $SQLUsername -Password $Secret Write-Verbose "$TableName CREATED SUCCESSFULLY" }catch{ Write-Verbose "FAILED TO CREATE $TableName" Write-VPASOutput -str "FAILED TO CREATE $TableName" -type E Write-VPASOutput -str $_ -type E } #START QUERYING try{ if($NoSSL){ $uri = "http://$PVWA/PasswordVault/API/Platforms" if($sessionval){ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval } else{ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" } $AllPlatforms = $result.Platforms } else{ $uri = "https://$PVWA/PasswordVault/API/Platforms" if($sessionval){ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval } else{ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" } $AllPlatforms = $result.Platforms } $Data = @{} $counter = 1 foreach($platform in $AllPlatforms){ $temparr = @{} $PFGeneralID = $platform.general.id $PFGeneralName = $platform.general.name $PFGeneralSystemType = $platform.general.systemType $PFGeneralActive = $platform.general.active $PFGeneralDescription = $platform.general.description $PFGeneralPlatformBaseID = $platform.general.platformBaseID $PFGeneralPlatformType = $platform.general.platformType $str = "" $PFPropertiesRequiredTemp = $platform.properties.required foreach($rec in $PFPropertiesRequiredTemp){ $testval = $rec.name if([String]::IsNullOrEmpty($testval)){ $testval = $rec.displayName } $str += $testval + ";" } $PFPropertiesRequired = $str $str = "" $PFPropertiesOptionalTemp = $platform.properties.optional foreach($rec in $PFPropertiesOptionalTemp){ $testval = $rec.name if([String]::IsNullOrEmpty($testval)){ $testval = $rec.displayName } $str += $testval + ";" } $PFPropertiesOptional = $str $str = "" $PFLinkedAccountsTemp = $platform.linkedAccounts foreach($rec in $PFLinkedAccountsTemp){ $testval = $rec.name if([String]::IsNullOrEmpty($testval)){ $testval = $rec.displayName } $str += $testval + ";" } $PFLinkedAccounts = $str $PFCredentialsManagementAllowedSafes = $platform.credentialsManagement.allowedSafes $PFCredentialsManagementAllowManualChange = $platform.credentialsManagement.allowManualChange $PFCredentialsManagementPerformPeriodicChange = $platform.credentialsManagement.performPeriodicChange $PFCredentialsManagementRequirePasswordChangeEveryXDays = $platform.credentialsManagement.requirePasswordChangeEveryXDays $PFCredentialsManagementAllowManualVerification = $platform.credentialsManagement.allowManualVerification $PFCredentialsManagementPerformPeriodicVerification = $platform.credentialsManagement.performPeriodicVerification $PFCredentialsManagementRequirePasswordVerificationEveryXDays = $platform.credentialsManagement.requirePasswordVerificationEveryXDays $PFCredentialsManagementAllowManualReconciliation = $platform.credentialsManagement.allowManualReconciliation $PFCredentialsManagementAutomaticReconcileWhenUnsynched = $platform.credentialsManagement.automaticReconcileWhenUnsynched $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation = $platform.sessionManagement.requirePrivilegedSessionMonitoringAndIsolation $PFSessionManagementRecordAndSaveSessionActivity = $platform.sessionManagement.recordAndSaveSessionActivity $PFSessionManagementPSMServerID = $platform.sessionManagement.PSMServerID $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval = $platform.privilegedAccessWorkflows.requireDualControlPasswordAccessApproval $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess = $platform.privilegedAccessWorkflows.enforceCheckinCheckoutExclusiveAccess $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess = $platform.privilegedAccessWorkflows.enforceOnetimePasswordAccess $PFConnectionComponents = "" if($NoSSL){ $response2 = Get-VPASPSMSettingsByPlatformID -token $token -PlatformID $PFGeneralID } else{ $response2 = Get-VPASPSMSettingsByPlatformID -token $token -PlatformID $PFGeneralID } $AllConnectionComponents = $response2.PSMConnectors foreach($cc in $AllConnectionComponents){ $ccName = $cc.PSMConnectorID $ccStatus = $cc.Enabled if($ccStatus.ToString() -eq "True"){ $PFConnectionComponents += "$ccName(ACTIVE);" } else{ $PFConnectionComponents += "$ccName(DISABLED);" } } #GET OTHER HALF OF PLATFORM PROPERTIES $PFSearchForUsages = "" $PFPolicyType = "" $PFImmediateInterval = "" $PFInterval = "" $PFMaxConcurrentConnections = "" $PFMinValidityPeriod = "" $PFResetOveridesMinValidity = "" $PFResetOveridesTimeFrame = "" $PFTimeout = "" $PFUnlockIfFail = "" $PFUnrecoverableErrors = "" $PFMaximumRetries = "" $PFMinDelayBetweenRetries = "" $PFDllName = "" $PFXMLFile = "" $PFHeadStartInterval = "" $PFFromHour = "" $PFToHour = "" $PFChangeNotificationPeriod = "" $PFDaysNotifyPriorExpiration = "" $PFVFFromHour = "" $PFVFToHour = "" $PFRCReconcileReasons = "" $PFRCFromHour = "" $PFRCToHour = "" $PFNFNotifyPriorExpiration = "" $PFNFPriorExpirationRecipients = "" $PFNFNotifyOnPasswordDisable = "" $PFNFOnPasswordDisableRecipients = "" $PFNFNotifyOnVerificationErrors = "" $PFNFOnVerificationErrorsRecipients = "" $PFNFNotifyOnPasswordUsed = "" $PFNFOnPasswordUsedRecipients = "" $PFPasswordLength = "" $PFMinUpperCase = "" $PFMinLowerCase = "" $PFMinDigit = "" $PFMinSpecial = "" $PFPasswordLevelRequestTimeframe = "" $MoreDetails = Get-VPASPlatformDetails -platformID $PFGeneralID -token $token if($MoreDetails){ $PFSearchForUsages = $MoreDetails.details.SearchForUsages $PFPolicyType = $MoreDetails.details.PolicyType $PFImmediateInterval = $MoreDetails.details.ImmediateInterval $PFInterval = $MoreDetails.details.Interval $PFMaxConcurrentConnections = $MoreDetails.details.MaxConcurrentConnections $PFMinValidityPeriod = $MoreDetails.details.MinValidityPeriod $PFResetOveridesMinValidity = $MoreDetails.details.ResetOveridesMinValidity $PFResetOveridesTimeFrame = $MoreDetails.details.ResetOveridesTimeFrame $PFTimeout = $MoreDetails.details.Timeout $PFUnlockIfFail = $MoreDetails.details.UnlockIfFail $PFUnrecoverableErrors = $MoreDetails.details.UnrecoverableErrors $PFMaximumRetries = $MoreDetails.details.MaximumRetries $PFMinDelayBetweenRetries = $MoreDetails.details.MinDelayBetweenRetries $PFDllName = $MoreDetails.details.DllName $PFXMLFile = $MoreDetails.details.XMLFile $PFHeadStartInterval = $MoreDetails.details.HeadStartInterval $PFFromHour = $MoreDetails.details.FromHour $PFToHour = $MoreDetails.details.ToHour $PFChangeNotificationPeriod = $MoreDetails.details.ChangeNotificationPeriod $PFDaysNotifyPriorExpiration = $MoreDetails.details.DaysNotifyPriorExpiration $PFVFFromHour = $MoreDetails.details.VFFromHour $PFVFToHour = $MoreDetails.details.VFToHour $PFRCReconcileReasons = $MoreDetails.details.RCReconcileReasons $PFRCFromHour = $MoreDetails.details.RCFromHour $PFRCToHour = $MoreDetails.details.RCToHour $PFNFNotifyPriorExpiration = $MoreDetails.details.NFNotifyPriorExpiration $PFNFPriorExpirationRecipients = $MoreDetails.details.NFPriorExpirationRecipients $PFNFNotifyOnPasswordDisable = $MoreDetails.details.NFNotifyOnPasswordDisable $PFNFOnPasswordDisableRecipients = $MoreDetails.details.NFOnPasswordDisableRecipients $PFNFNotifyOnVerificationErrors = $MoreDetails.details.NFNotifyOnVerificationErrors $PFNFOnVerificationErrorsRecipients = $MoreDetails.details.NFOnVerificationErrorsRecipients $PFNFNotifyOnPasswordUsed = $MoreDetails.details.NFNotifyOnPasswordUsed $PFNFOnPasswordUsedRecipients = $MoreDetails.details.NFOnPasswordUsedRecipients $PFPasswordLength = $MoreDetails.details.PasswordLength $PFMinUpperCase = $MoreDetails.details.MinUpperCase $PFMinLowerCase = $MoreDetails.details.MinLowerCase $PFMinDigit = $MoreDetails.details.MinDigit $PFMinSpecial = $MoreDetails.details.MinSpecial $PFPasswordLevelRequestTimeframe = $MoreDetails.details.PasswordLevelRequestTimeframe } if([String]::IsNullOrEmpty($PFGeneralID)){ $PFGeneralID = "NULL" } if([String]::IsNullOrEmpty($PFGeneralName)){ $PFGeneralName = "NULL" } if([String]::IsNullOrEmpty($PFGeneralSystemType)){ $PFGeneralSystemType = "NULL" } if([String]::IsNullOrEmpty($PFGeneralActive)){ $PFGeneralActive = "NULL" } if([String]::IsNullOrEmpty($PFGeneralDescription)){ $PFGeneralDescription = "NULL" } if([String]::IsNullOrEmpty($PFGeneralPlatformBaseID)){ $PFGeneralPlatformBaseID = "NULL" } if([String]::IsNullOrEmpty($PFGeneralPlatformType)){ $PFGeneralPlatformType = "NULL" } if([String]::IsNullOrEmpty($PFPropertiesRequired)){ $PFPropertiesRequired = "NULL" } if([String]::IsNullOrEmpty($PFPropertiesOptional)){ $PFPropertiesOptional = "NULL" } if([String]::IsNullOrEmpty($PFLinkedAccounts)){ $PFLinkedAccounts = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowedSafes)){ $PFCredentialsManagementAllowedSafes = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowManualChange)){ $PFCredentialsManagementAllowManualChange = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementPerformPeriodicChange)){ $PFCredentialsManagementPerformPeriodicChange = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementRequirePasswordChangeEveryXDays)){ $PFCredentialsManagementRequirePasswordChangeEveryXDays = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowManualVerification)){ $PFCredentialsManagementAllowManualVerification = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementPerformPeriodicVerification)){ $PFCredentialsManagementPerformPeriodicVerification = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementRequirePasswordVerificationEveryXDays)){ $PFCredentialsManagementRequirePasswordVerificationEveryXDays = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowManualReconciliation)){ $PFCredentialsManagementAllowManualReconciliation = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAutomaticReconcileWhenUnsynched)){ $PFCredentialsManagementAutomaticReconcileWhenUnsynched = "NULL" } if([String]::IsNullOrEmpty($PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation)){ $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation = "NULL" } if([String]::IsNullOrEmpty($PFSessionManagementRecordAndSaveSessionActivity)){ $PFSessionManagementRecordAndSaveSessionActivity = "NULL" } if([String]::IsNullOrEmpty($PFSessionManagementPSMServerID)){ $PFSessionManagementPSMServerID = "NULL" } if([String]::IsNullOrEmpty($PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval)){ $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval = "NULL" } if([String]::IsNullOrEmpty($PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess)){ $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess = "NULL" } if([String]::IsNullOrEmpty($PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess)){ $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess = "NULL" } if([String]::IsNullOrEmpty($PFConnectionComponents)){ $PFConnectionComponents = "NULL" } if([String]::IsNullOrEmpty($PFSearchForUsages)){ $PFSearchForUsages = "NULL" } if([String]::IsNullOrEmpty($PFPolicyType)){ $PFPolicyType = "NULL" } if([String]::IsNullOrEmpty($PFImmediateInterval)){ $PFImmediateInterval = "NULL" } if([String]::IsNullOrEmpty($PFInterval)){ $PFInterval = "NULL" } if([String]::IsNullOrEmpty($PFMaxConcurrentConnections)){ $PFMaxConcurrentConnections = "NULL" } if([String]::IsNullOrEmpty($PFMinValidityPeriod)){ $PFMinValidityPeriod = "NULL" } if([String]::IsNullOrEmpty($PFResetOveridesMinValidity)){ $PFResetOveridesMinValidity = "NULL" } if([String]::IsNullOrEmpty($PFResetOveridesTimeFrame)){ $PFResetOveridesTimeFrame = "NULL" } if([String]::IsNullOrEmpty($PFTimeout)){ $PFTimeout = "NULL" } if([String]::IsNullOrEmpty($PFUnlockIfFail)){ $PFUnlockIfFail = "NULL" } if([String]::IsNullOrEmpty($PFUnrecoverableErrors)){ $PFUnrecoverableErrors = "NULL" } if([String]::IsNullOrEmpty($PFMaximumRetries)){ $PFMaximumRetries = "NULL" } if([String]::IsNullOrEmpty($PFMinDelayBetweenRetries)){ $PFMinDelayBetweenRetries = "NULL" } if([String]::IsNullOrEmpty($PFDllName)){ $PFDllName = "NULL" } if([String]::IsNullOrEmpty($PFXMLFile)){ $PFXMLFile = "NULL" } if([String]::IsNullOrEmpty($PFHeadStartInterval)){ $PFHeadStartInterval = "NULL" } if([String]::IsNullOrEmpty($PFFromHour)){ $PFFromHour = "NULL" } if([String]::IsNullOrEmpty($PFToHour)){ $PFToHour = "NULL" } if([String]::IsNullOrEmpty($PFChangeNotificationPeriod)){ $PFChangeNotificationPeriod = "NULL" } if([String]::IsNullOrEmpty($PFDaysNotifyPriorExpiration)){ $PFDaysNotifyPriorExpiration = "NULL" } if([String]::IsNullOrEmpty($PFVFFromHour)){ $PFVFFromHour = "NULL" } if([String]::IsNullOrEmpty($PFVFToHour)){ $PFVFToHour = "NULL" } if([String]::IsNullOrEmpty($PFRCReconcileReasons)){ $PFRCReconcileReasons = "NULL" } if([String]::IsNullOrEmpty($PFRCFromHour)){ $PFRCFromHour = "NULL" } if([String]::IsNullOrEmpty($PFRCToHour)){ $PFRCToHour = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyPriorExpiration)){ $PFNFNotifyPriorExpiration = "NULL" } if([String]::IsNullOrEmpty($PFNFPriorExpirationRecipients)){ $PFNFPriorExpirationRecipients = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyOnPasswordDisable)){ $PFNFNotifyOnPasswordDisable = "NULL" } if([String]::IsNullOrEmpty($PFNFOnPasswordDisableRecipients)){ $PFNFOnPasswordDisableRecipients = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyOnVerificationErrors)){ $PFNFNotifyOnVerificationErrors = "NULL" } if([String]::IsNullOrEmpty($PFNFOnVerificationErrorsRecipients)){ $PFNFOnVerificationErrorsRecipients = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyOnPasswordUsed)){ $PFNFNotifyOnPasswordUsed = "NULL" } if([String]::IsNullOrEmpty($PFNFOnPasswordUsedRecipients)){ $PFNFOnPasswordUsedRecipients = "NULL" } if([String]::IsNullOrEmpty($PFPasswordLength)){ $PFPasswordLength = "NULL" } if([String]::IsNullOrEmpty($PFMinUpperCase)){ $PFMinUpperCase = "NULL" } if([String]::IsNullOrEmpty($PFMinLowerCase)){ $PFMinLowerCase = "NULL" } if([String]::IsNullOrEmpty($PFMinDigit)){ $PFMinDigit = "NULL" } if([String]::IsNullOrEmpty($PFMinSpecial)){ $PFMinSpecial = "NULL" } if([String]::IsNullOrEmpty($PFPasswordLevelRequestTimeframe)){ $PFPasswordLevelRequestTimeframe = "NULL" } $PFGeneralID = $PFGeneralID -replace "'","''" $PFGeneralName = $PFGeneralName -replace "'","''" $PFGeneralSystemType = $PFGeneralSystemType -replace "'","''" $PFGeneralActive = $PFGeneralActive -replace "'","''" $PFGeneralDescription = $PFGeneralDescription -replace "'","''" $PFGeneralPlatformBaseID = $PFGeneralPlatformBaseID -replace "'","''" $PFGeneralPlatformType = $PFGeneralPlatformType -replace "'","''" $PFPropertiesRequired = $PFPropertiesRequired -replace "'","''" $PFPropertiesOptional = $PFPropertiesOptional -replace "'","''" $PFLinkedAccounts = $PFLinkedAccounts -replace "'","''" $PFCredentialsManagementAllowedSafes = $PFCredentialsManagementAllowedSafes -replace "'","''" $PFCredentialsManagementAllowManualChange = $PFCredentialsManagementAllowManualChange -replace "'","''" $PFCredentialsManagementPerformPeriodicChange = $PFCredentialsManagementPerformPeriodicChange -replace "'","''" $PFCredentialsManagementRequirePasswordChangeEveryXDays = $PFCredentialsManagementRequirePasswordChangeEveryXDays -replace "'","''" $PFCredentialsManagementAllowManualVerification = $PFCredentialsManagementAllowManualVerification -replace "'","''" $PFCredentialsManagementPerformPeriodicVerification = $PFCredentialsManagementPerformPeriodicVerification -replace "'","''" $PFCredentialsManagementRequirePasswordVerificationEveryXDays = $PFCredentialsManagementRequirePasswordVerificationEveryXDays -replace "'","''" $PFCredentialsManagementAllowManualReconciliation = $PFCredentialsManagementAllowManualReconciliation -replace "'","''" $PFCredentialsManagementAutomaticReconcileWhenUnsynched = $PFCredentialsManagementAutomaticReconcileWhenUnsynched -replace "'","''" $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation = $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation -replace "'","''" $PFSessionManagementRecordAndSaveSessionActivity = $PFSessionManagementRecordAndSaveSessionActivity -replace "'","''" $PFSessionManagementPSMServerID = $PFSessionManagementPSMServerID -replace "'","''" $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval = $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval -replace "'","''" $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess = $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess -replace "'","''" $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess = $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess -replace "'","''" $PFConnectionComponents = $PFConnectionComponents -replace "'","''" $PFSearchForUsages = $PFSearchForUsages -replace "'","''" $PFPolicyType = $PFPolicyType -replace "'","''" $PFImmediateInterval = $PFImmediateInterval -replace "'","''" $PFInterval = $PFInterval -replace "'","''" $PFMaxConcurrentConnections = $PFMaxConcurrentConnections -replace "'","''" $PFMinValidityPeriod = $PFMinValidityPeriod -replace "'","''" $PFResetOveridesMinValidity = $PFResetOveridesMinValidity -replace "'","''" $PFResetOveridesTimeFrame = $PFResetOveridesTimeFrame -replace "'","''" $PFTimeout = $PFTimeout -replace "'","''" $PFUnlockIfFail = $PFUnlockIfFail -replace "'","''" $PFUnrecoverableErrors = $PFUnrecoverableErrors -replace "'","''" $PFMaximumRetries = $PFMaximumRetries -replace "'","''" $PFMinDelayBetweenRetries = $PFMinDelayBetweenRetries -replace "'","''" $PFDllName = $PFDllName -replace "'","''" $PFXMLFile = $PFXMLFile -replace "'","''" $PFHeadStartInterval = $PFHeadStartInterval -replace "'","''" $PFFromHour = $PFFromHour -replace "'","''" $PFToHour = $PFToHour -replace "'","''" $PFChangeNotificationPeriod = $PFChangeNotificationPeriod -replace "'","''" $PFDaysNotifyPriorExpiration = $PFDaysNotifyPriorExpiration -replace "'","''" $PFVFFromHour = $PFVFFromHour -replace "'","''" $PFVFToHour = $PFVFToHour -replace "'","''" $PFRCReconcileReasons = $PFRCReconcileReasons -replace "'","''" $PFRCFromHour = $PFRCFromHour -replace "'","''" $PFRCToHour = $PFRCToHour -replace "'","''" $PFNFNotifyPriorExpiration = $PFNFNotifyPriorExpiration -replace "'","''" $PFNFPriorExpirationRecipients = $PFNFPriorExpirationRecipients -replace "'","''" $PFNFNotifyOnPasswordDisable = $PFNFNotifyOnPasswordDisable -replace "'","''" $PFNFOnPasswordDisableRecipients = $PFNFOnPasswordDisableRecipients -replace "'","''" $PFNFNotifyOnVerificationErrors = $PFNFNotifyOnVerificationErrors -replace "'","''" $PFNFOnVerificationErrorsRecipients = $PFNFOnVerificationErrorsRecipients -replace "'","''" $PFNFNotifyOnPasswordUsed = $PFNFNotifyOnPasswordUsed -replace "'","''" $PFNFOnPasswordUsedRecipients = $PFNFOnPasswordUsedRecipients -replace "'","''" $PFPasswordLength = $PFPasswordLength -replace "'","''" $PFMinUpperCase = $PFMinUpperCase -replace "'","''" $PFMinLowerCase = $PFMinLowerCase -replace "'","''" $PFMinDigit = $PFMinDigit -replace "'","''" $PFMinSpecial = $PFMinSpecial -replace "'","''" $PFPasswordLevelRequestTimeframe = $PFPasswordLevelRequestTimeframe -replace "'","''" try{ $query = "INSERT INTO $TableName ( ID, Name, SystemType, Active, Description, PlatformBaseID, PlatformType, PropertiesRequired, PropertiesOptional, LinkedAccounts, AllowedSafes, AllowManualChange, PerformPeriodicChange, RequirePasswordChangeEveryXDays, AllowManualVerification, PerformPeriodicVerification, RequirePasswordVerificationEveryXDays, AllowManualReconciliation, AutomaticReconcileWhenUnsynched, RequirePrivilegedSessionMonitoringAndIsolation, RecordAndSaveSessionActivity, PSMServerID, RequireDualControlPasswordAccessApproval, EnforceCheckinCheckoutExclusiveAccess, EnforceOnetimePasswordAccess, ConnectionComponents, SearchForUsages, PolicyType, ImmediateInterval, Interval, MaxConcurrentConnections, MinValidityPeriod, ResetOveridesMinValidity, ResetOveridesTimeFrame, Timeout, UnlockIfFail, UnrecoverableErrors, MaximumRetries, MinDelayBetweenRetries, DllName, XMLFile, HeadStartInterval, FromHour, ToHour, ChangeNotificationPeriod, DaysNotifyPriorExpiration, VFFromHour, VFToHour, RCReconcileReasons, RCFromHour, RCToHour, NFNotifyPriorExpiration, NFPriorExpirationRecipients, NFNotifyOnPasswordDisable, NFOnPasswordDisableRecipients, NFNotifyOnVerificationErrors, NFOnVerificationErrorsRecipients, NFNotifyOnPasswordUsed, NFOnPasswordUsedRecipients, PasswordLength, MinUpperCase, MinLowerCase, MinDigit, MinSpecial, PasswordLevelRequestTimeframe ) VALUES ( '$PFGeneralID', '$PFGeneralName', '$PFGeneralSystemType', '$PFGeneralActive', '$PFGeneralDescription', '$PFGeneralPlatformBaseID', '$PFGeneralPlatformType', '$PFPropertiesRequired', '$PFPropertiesOptional', '$PFLinkedAccounts', '$PFCredentialsManagementAllowedSafes', '$PFCredentialsManagementAllowManualChange', '$PFCredentialsManagementPerformPeriodicChange', '$PFCredentialsManagementRequirePasswordChangeEveryXDays', '$PFCredentialsManagementAllowManualVerification', '$PFCredentialsManagementPerformPeriodicVerification', '$PFCredentialsManagementRequirePasswordVerificationEveryXDays', '$PFCredentialsManagementAllowManualReconciliation', '$PFCredentialsManagementAutomaticReconcileWhenUnsynched', '$PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation', '$PFSessionManagementRecordAndSaveSessionActivity', '$PFSessionManagementPSMServerID', '$PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval', '$PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess', '$PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess', '$PFConnectionComponents', '$PFSearchForUsages', '$PFPolicyType', '$PFImmediateInterval', '$PFInterval', '$PFMaxConcurrentConnections', '$PFMinValidityPeriod', '$PFResetOveridesMinValidity', '$PFResetOveridesTimeFrame', '$PFTimeout', '$PFUnlockIfFail', '$PFUnrecoverableErrors', '$PFMaximumRetries', '$PFMinDelayBetweenRetries', '$PFDllName', '$PFXMLFile', '$PFHeadStartInterval', '$PFFromHour', '$PFToHour', '$PFChangeNotificationPeriod', '$PFDaysNotifyPriorExpiration', '$PFVFFromHour', '$PFVFToHour', '$PFRCReconcileReasons', '$PFRCFromHour', '$PFRCToHour', '$PFNFNotifyPriorExpiration', '$PFNFPriorExpirationRecipients', '$PFNFNotifyOnPasswordDisable', '$PFNFOnPasswordDisableRecipients', '$PFNFNotifyOnVerificationErrors', '$PFNFOnVerificationErrorsRecipients', '$PFNFNotifyOnPasswordUsed', '$PFNFOnPasswordUsedRecipients', '$PFPasswordLength', '$PFMinUpperCase', '$PFMinLowerCase', '$PFMinDigit', '$PFMinSpecial', '$PFPasswordLevelRequestTimeframe' );" $UpdateRec = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDatabase -Query $query -Username $SQLUsername -Password $Secret Write-Verbose "ADDED RECORD INTO $TableName FOR PLATFORMID: $PFPlatformID" }catch{ Write-Verbose "FAILED TO ADD RECORD INTO $TableName FOR PLATFORMID: $PFPlatformID" Write-VPASOutput -str "FAILED TO ADD RECORD INTO $TableName FOR PLATFORMID: $PFPlatformID" -type E Write-VPASOutput -str $_ -type E } } }catch{ Write-Verbose "GET ALL PLATFORMS API FAILED: $_" Write-Verbose "RUNNING Get-VPASAllTargetPlatforms INSTEAD" Write-VPASOutput -str "FAILED TO GET ALL PLATFORMS, RUNNING Get-VPASAllTargetPlatforms INSTEAD" -type M Write-VPASOutput -str "KEEP IN MIND THE RETURN JSON SYNTAX DIFFERS FOR Get-VPASAllTargetPlatforms" -type M if($NoSSL){ $uri = "http://$PVWA/PasswordVault/API/Platforms/targets" if($sessionval){ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval } else{ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" } $AllPlatforms = $result.Platforms } else{ $uri = "https://$PVWA/PasswordVault/API/Platforms/targets" if($sessionval){ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" -WebSession $sessionval } else{ $result = Invoke-RestMethod -Headers @{"Authorization"=$Header} -Uri $uri -Method GET -ContentType "application/json" } $AllPlatforms = $result.Platforms } $Data = @{} $counter = 1 foreach($platform in $AllPlatforms){ $temparr = @{} $PFGeneralID = $platform.PlatformID $PFGeneralName = $platform.Name $PFGeneralSystemType = $platform.SystemType $PFGeneralActive = $platform.Active $PFGeneralDescription = "" $PFGeneralPlatformBaseID = $platform.PlatformBaseID $PFGeneralPlatformType = $platform.PlatformBaseType $str = "" $PFPropertiesRequiredTemp = $platform.properties.required foreach($rec in $PFPropertiesRequiredTemp){ $testval = $rec.name if([String]::IsNullOrEmpty($testval)){ $testval = $rec.displayName } $str += $testval + ";" } $PFPropertiesRequired = $str $str = "" $PFPropertiesOptionalTemp = $platform.properties.optional foreach($rec in $PFPropertiesOptionalTemp){ $testval = $rec.name if([String]::IsNullOrEmpty($testval)){ $testval = $rec.displayName } $str += $testval + ";" } $PFPropertiesOptional = $str $str = "" $PFLinkedAccountsTemp = $platform.linkedAccounts foreach($rec in $PFLinkedAccountsTemp){ $testval = $rec.name if([String]::IsNullOrEmpty($testval)){ $testval = $rec.displayName } $str += $testval + ";" } $PFLinkedAccounts = $str $PFCredentialsManagementAllowedSafes = $platform.AllowedSafes $PFCredentialsManagementAllowManualChange = $platform.CredentialsManagementPolicy.Change.AllowManual $PFCredentialsManagementPerformPeriodicChange = $platform.CredentialsManagementPolicy.Change.PerformAutomatic $PFCredentialsManagementRequirePasswordChangeEveryXDays = $platform.CredentialsManagementPolicy.Change.RequirePasswordEveryXDays $PFCredentialsManagementAllowManualVerification = $platform.CredentialsManagementPolicy.Verification.AllowManual $PFCredentialsManagementPerformPeriodicVerification = $platform.CredentialsManagementPolicy.Verification.PerformAutomatic $PFCredentialsManagementRequirePasswordVerificationEveryXDays = $platform.CredentialsManagementPolicy.Verification.RequirePasswordEveryXDays $PFCredentialsManagementAllowManualReconciliation = $platform.CredentialsManagementPolicy.Reconcile.AllowManual $PFCredentialsManagementAutomaticReconcileWhenUnsynched = $platform.CredentialsManagementPolicy.Reconcile.AutomaticReconcileWhenUnsynced $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation = "" $PFSessionManagementRecordAndSaveSessionActivity = "" $PFSessionManagementPSMServerID = "" $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval = $platform.privilegedAccessWorkflows.RequireDualControlPasswordAccessApproval.IsActive $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess = $platform.privilegedAccessWorkflows.EnforceCheckinCheckoutExclusiveAccess.IsActive $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess = $platform.privilegedAccessWorkflows.EnforceOnetimePasswordAccess.IsActive $PFConnectionComponents = "" if($NoSSL){ $response2 = Get-VPASPSMSettingsByPlatformID -token $token -PlatformID $PFGeneralID } else{ $response2 = Get-VPASPSMSettingsByPlatformID -token $token -PlatformID $PFGeneralID } $AllConnectionComponents = $response2.PSMConnectors foreach($cc in $AllConnectionComponents){ $ccName = $cc.PSMConnectorID $ccStatus = $cc.Enabled if($ccStatus.ToString() -eq "True"){ $PFConnectionComponents += "$ccName(ACTIVE);" } else{ $PFConnectionComponents += "$ccName(DISABLED);" } } #GET OTHER HALF OF PLATFORM PROPERTIES $PFSearchForUsages = "" $PFPolicyType = "" $PFImmediateInterval = "" $PFInterval = "" $PFMaxConcurrentConnections = "" $PFMinValidityPeriod = "" $PFResetOveridesMinValidity = "" $PFResetOveridesTimeFrame = "" $PFTimeout = "" $PFUnlockIfFail = "" $PFUnrecoverableErrors = "" $PFMaximumRetries = "" $PFMinDelayBetweenRetries = "" $PFDllName = "" $PFXMLFile = "" $PFHeadStartInterval = "" $PFFromHour = "" $PFToHour = "" $PFChangeNotificationPeriod = "" $PFDaysNotifyPriorExpiration = "" $PFVFFromHour = "" $PFVFToHour = "" $PFRCReconcileReasons = "" $PFRCFromHour = "" $PFRCToHour = "" $PFNFNotifyPriorExpiration = "" $PFNFPriorExpirationRecipients = "" $PFNFNotifyOnPasswordDisable = "" $PFNFOnPasswordDisableRecipients = "" $PFNFNotifyOnVerificationErrors = "" $PFNFOnVerificationErrorsRecipients = "" $PFNFNotifyOnPasswordUsed = "" $PFNFOnPasswordUsedRecipients = "" $PFPasswordLength = "" $PFMinUpperCase = "" $PFMinLowerCase = "" $PFMinDigit = "" $PFMinSpecial = "" $PFPasswordLevelRequestTimeframe = "" $MoreDetails = Get-VPASPlatformDetails -platformID $PFGeneralID -token $token if($MoreDetails){ $PFSearchForUsages = $MoreDetails.details.SearchForUsages $PFPolicyType = $MoreDetails.details.PolicyType $PFImmediateInterval = $MoreDetails.details.ImmediateInterval $PFInterval = $MoreDetails.details.Interval $PFMaxConcurrentConnections = $MoreDetails.details.MaxConcurrentConnections $PFMinValidityPeriod = $MoreDetails.details.MinValidityPeriod $PFResetOveridesMinValidity = $MoreDetails.details.ResetOveridesMinValidity $PFResetOveridesTimeFrame = $MoreDetails.details.ResetOveridesTimeFrame $PFTimeout = $MoreDetails.details.Timeout $PFUnlockIfFail = $MoreDetails.details.UnlockIfFail $PFUnrecoverableErrors = $MoreDetails.details.UnrecoverableErrors $PFMaximumRetries = $MoreDetails.details.MaximumRetries $PFMinDelayBetweenRetries = $MoreDetails.details.MinDelayBetweenRetries $PFDllName = $MoreDetails.details.DllName $PFXMLFile = $MoreDetails.details.XMLFile $PFHeadStartInterval = $MoreDetails.details.HeadStartInterval $PFFromHour = $MoreDetails.details.FromHour $PFToHour = $MoreDetails.details.ToHour $PFChangeNotificationPeriod = $MoreDetails.details.ChangeNotificationPeriod $PFDaysNotifyPriorExpiration = $MoreDetails.details.DaysNotifyPriorExpiration $PFVFFromHour = $MoreDetails.details.VFFromHour $PFVFToHour = $MoreDetails.details.VFToHour $PFRCReconcileReasons = $MoreDetails.details.RCReconcileReasons $PFRCFromHour = $MoreDetails.details.RCFromHour $PFRCToHour = $MoreDetails.details.RCToHour $PFNFNotifyPriorExpiration = $MoreDetails.details.NFNotifyPriorExpiration $PFNFPriorExpirationRecipients = $MoreDetails.details.NFPriorExpirationRecipients $PFNFNotifyOnPasswordDisable = $MoreDetails.details.NFNotifyOnPasswordDisable $PFNFOnPasswordDisableRecipients = $MoreDetails.details.NFOnPasswordDisableRecipients $PFNFNotifyOnVerificationErrors = $MoreDetails.details.NFNotifyOnVerificationErrors $PFNFOnVerificationErrorsRecipients = $MoreDetails.details.NFOnVerificationErrorsRecipients $PFNFNotifyOnPasswordUsed = $MoreDetails.details.NFNotifyOnPasswordUsed $PFNFOnPasswordUsedRecipients = $MoreDetails.details.NFOnPasswordUsedRecipients $PFPasswordLength = $MoreDetails.details.PasswordLength $PFMinUpperCase = $MoreDetails.details.MinUpperCase $PFMinLowerCase = $MoreDetails.details.MinLowerCase $PFMinDigit = $MoreDetails.details.MinDigit $PFMinSpecial = $MoreDetails.details.MinSpecial $PFPasswordLevelRequestTimeframe = $MoreDetails.details.PasswordLevelRequestTimeframe } if([String]::IsNullOrEmpty($PFGeneralID)){ $PFGeneralID = "NULL" } if([String]::IsNullOrEmpty($PFGeneralName)){ $PFGeneralName = "NULL" } if([String]::IsNullOrEmpty($PFGeneralSystemType)){ $PFGeneralSystemType = "NULL" } if([String]::IsNullOrEmpty($PFGeneralActive)){ $PFGeneralActive = "NULL" } if([String]::IsNullOrEmpty($PFGeneralDescription)){ $PFGeneralDescription = "NULL" } if([String]::IsNullOrEmpty($PFGeneralPlatformBaseID)){ $PFGeneralPlatformBaseID = "NULL" } if([String]::IsNullOrEmpty($PFGeneralPlatformType)){ $PFGeneralPlatformType = "NULL" } if([String]::IsNullOrEmpty($PFPropertiesRequired)){ $PFPropertiesRequired = "NULL" } if([String]::IsNullOrEmpty($PFPropertiesOptional)){ $PFPropertiesOptional = "NULL" } if([String]::IsNullOrEmpty($PFLinkedAccounts)){ $PFLinkedAccounts = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowedSafes)){ $PFCredentialsManagementAllowedSafes = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowManualChange)){ $PFCredentialsManagementAllowManualChange = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementPerformPeriodicChange)){ $PFCredentialsManagementPerformPeriodicChange = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementRequirePasswordChangeEveryXDays)){ $PFCredentialsManagementRequirePasswordChangeEveryXDays = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowManualVerification)){ $PFCredentialsManagementAllowManualVerification = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementPerformPeriodicVerification)){ $PFCredentialsManagementPerformPeriodicVerification = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementRequirePasswordVerificationEveryXDays)){ $PFCredentialsManagementRequirePasswordVerificationEveryXDays = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAllowManualReconciliation)){ $PFCredentialsManagementAllowManualReconciliation = "NULL" } if([String]::IsNullOrEmpty($PFCredentialsManagementAutomaticReconcileWhenUnsynched)){ $PFCredentialsManagementAutomaticReconcileWhenUnsynched = "NULL" } if([String]::IsNullOrEmpty($PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation)){ $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation = "NULL" } if([String]::IsNullOrEmpty($PFSessionManagementRecordAndSaveSessionActivity)){ $PFSessionManagementRecordAndSaveSessionActivity = "NULL" } if([String]::IsNullOrEmpty($PFSessionManagementPSMServerID)){ $PFSessionManagementPSMServerID = "NULL" } if([String]::IsNullOrEmpty($PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval)){ $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval = "NULL" } if([String]::IsNullOrEmpty($PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess)){ $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess = "NULL" } if([String]::IsNullOrEmpty($PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess)){ $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess = "NULL" } if([String]::IsNullOrEmpty($PFConnectionComponents)){ $PFConnectionComponents = "NULL" } if([String]::IsNullOrEmpty($PFSearchForUsages)){ $PFSearchForUsages = "NULL" } if([String]::IsNullOrEmpty($PFPolicyType)){ $PFPolicyType = "NULL" } if([String]::IsNullOrEmpty($PFImmediateInterval)){ $PFImmediateInterval = "NULL" } if([String]::IsNullOrEmpty($PFInterval)){ $PFInterval = "NULL" } if([String]::IsNullOrEmpty($PFMaxConcurrentConnections)){ $PFMaxConcurrentConnections = "NULL" } if([String]::IsNullOrEmpty($PFMinValidityPeriod)){ $PFMinValidityPeriod = "NULL" } if([String]::IsNullOrEmpty($PFResetOveridesMinValidity)){ $PFResetOveridesMinValidity = "NULL" } if([String]::IsNullOrEmpty($PFResetOveridesTimeFrame)){ $PFResetOveridesTimeFrame = "NULL" } if([String]::IsNullOrEmpty($PFTimeout)){ $PFTimeout = "NULL" } if([String]::IsNullOrEmpty($PFUnlockIfFail)){ $PFUnlockIfFail = "NULL" } if([String]::IsNullOrEmpty($PFUnrecoverableErrors)){ $PFUnrecoverableErrors = "NULL" } if([String]::IsNullOrEmpty($PFMaximumRetries)){ $PFMaximumRetries = "NULL" } if([String]::IsNullOrEmpty($PFMinDelayBetweenRetries)){ $PFMinDelayBetweenRetries = "NULL" } if([String]::IsNullOrEmpty($PFDllName)){ $PFDllName = "NULL" } if([String]::IsNullOrEmpty($PFXMLFile)){ $PFXMLFile = "NULL" } if([String]::IsNullOrEmpty($PFHeadStartInterval)){ $PFHeadStartInterval = "NULL" } if([String]::IsNullOrEmpty($PFFromHour)){ $PFFromHour = "NULL" } if([String]::IsNullOrEmpty($PFToHour)){ $PFToHour = "NULL" } if([String]::IsNullOrEmpty($PFChangeNotificationPeriod)){ $PFChangeNotificationPeriod = "NULL" } if([String]::IsNullOrEmpty($PFDaysNotifyPriorExpiration)){ $PFDaysNotifyPriorExpiration = "NULL" } if([String]::IsNullOrEmpty($PFVFFromHour)){ $PFVFFromHour = "NULL" } if([String]::IsNullOrEmpty($PFVFToHour)){ $PFVFToHour = "NULL" } if([String]::IsNullOrEmpty($PFRCReconcileReasons)){ $PFRCReconcileReasons = "NULL" } if([String]::IsNullOrEmpty($PFRCFromHour)){ $PFRCFromHour = "NULL" } if([String]::IsNullOrEmpty($PFRCToHour)){ $PFRCToHour = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyPriorExpiration)){ $PFNFNotifyPriorExpiration = "NULL" } if([String]::IsNullOrEmpty($PFNFPriorExpirationRecipients)){ $PFNFPriorExpirationRecipients = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyOnPasswordDisable)){ $PFNFNotifyOnPasswordDisable = "NULL" } if([String]::IsNullOrEmpty($PFNFOnPasswordDisableRecipients)){ $PFNFOnPasswordDisableRecipients = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyOnVerificationErrors)){ $PFNFNotifyOnVerificationErrors = "NULL" } if([String]::IsNullOrEmpty($PFNFOnVerificationErrorsRecipients)){ $PFNFOnVerificationErrorsRecipients = "NULL" } if([String]::IsNullOrEmpty($PFNFNotifyOnPasswordUsed)){ $PFNFNotifyOnPasswordUsed = "NULL" } if([String]::IsNullOrEmpty($PFNFOnPasswordUsedRecipients)){ $PFNFOnPasswordUsedRecipients = "NULL" } if([String]::IsNullOrEmpty($PFPasswordLength)){ $PFPasswordLength = "NULL" } if([String]::IsNullOrEmpty($PFMinUpperCase)){ $PFMinUpperCase = "NULL" } if([String]::IsNullOrEmpty($PFMinLowerCase)){ $PFMinLowerCase = "NULL" } if([String]::IsNullOrEmpty($PFMinDigit)){ $PFMinDigit = "NULL" } if([String]::IsNullOrEmpty($PFMinSpecial)){ $PFMinSpecial = "NULL" } if([String]::IsNullOrEmpty($PFPasswordLevelRequestTimeframe)){ $PFPasswordLevelRequestTimeframe = "NULL" } $PFGeneralID = $PFGeneralID -replace "'","''" $PFGeneralName = $PFGeneralName -replace "'","''" $PFGeneralSystemType = $PFGeneralSystemType -replace "'","''" $PFGeneralActive = $PFGeneralActive -replace "'","''" $PFGeneralDescription = $PFGeneralDescription -replace "'","''" $PFGeneralPlatformBaseID = $PFGeneralPlatformBaseID -replace "'","''" $PFGeneralPlatformType = $PFGeneralPlatformType -replace "'","''" $PFPropertiesRequired = $PFPropertiesRequired -replace "'","''" $PFPropertiesOptional = $PFPropertiesOptional -replace "'","''" $PFLinkedAccounts = $PFLinkedAccounts -replace "'","''" $PFCredentialsManagementAllowedSafes = $PFCredentialsManagementAllowedSafes -replace "'","''" $PFCredentialsManagementAllowManualChange = $PFCredentialsManagementAllowManualChange -replace "'","''" $PFCredentialsManagementPerformPeriodicChange = $PFCredentialsManagementPerformPeriodicChange -replace "'","''" $PFCredentialsManagementRequirePasswordChangeEveryXDays = $PFCredentialsManagementRequirePasswordChangeEveryXDays -replace "'","''" $PFCredentialsManagementAllowManualVerification = $PFCredentialsManagementAllowManualVerification -replace "'","''" $PFCredentialsManagementPerformPeriodicVerification = $PFCredentialsManagementPerformPeriodicVerification -replace "'","''" $PFCredentialsManagementRequirePasswordVerificationEveryXDays = $PFCredentialsManagementRequirePasswordVerificationEveryXDays -replace "'","''" $PFCredentialsManagementAllowManualReconciliation = $PFCredentialsManagementAllowManualReconciliation -replace "'","''" $PFCredentialsManagementAutomaticReconcileWhenUnsynched = $PFCredentialsManagementAutomaticReconcileWhenUnsynched -replace "'","''" $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation = $PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation -replace "'","''" $PFSessionManagementRecordAndSaveSessionActivity = $PFSessionManagementRecordAndSaveSessionActivity -replace "'","''" $PFSessionManagementPSMServerID = $PFSessionManagementPSMServerID -replace "'","''" $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval = $PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval -replace "'","''" $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess = $PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess -replace "'","''" $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess = $PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess -replace "'","''" $PFConnectionComponents = $PFConnectionComponents -replace "'","''" $PFSearchForUsages = $PFSearchForUsages -replace "'","''" $PFPolicyType = $PFPolicyType -replace "'","''" $PFImmediateInterval = $PFImmediateInterval -replace "'","''" $PFInterval = $PFInterval -replace "'","''" $PFMaxConcurrentConnections = $PFMaxConcurrentConnections -replace "'","''" $PFMinValidityPeriod = $PFMinValidityPeriod -replace "'","''" $PFResetOveridesMinValidity = $PFResetOveridesMinValidity -replace "'","''" $PFResetOveridesTimeFrame = $PFResetOveridesTimeFrame -replace "'","''" $PFTimeout = $PFTimeout -replace "'","''" $PFUnlockIfFail = $PFUnlockIfFail -replace "'","''" $PFUnrecoverableErrors = $PFUnrecoverableErrors -replace "'","''" $PFMaximumRetries = $PFMaximumRetries -replace "'","''" $PFMinDelayBetweenRetries = $PFMinDelayBetweenRetries -replace "'","''" $PFDllName = $PFDllName -replace "'","''" $PFXMLFile = $PFXMLFile -replace "'","''" $PFHeadStartInterval = $PFHeadStartInterval -replace "'","''" $PFFromHour = $PFFromHour -replace "'","''" $PFToHour = $PFToHour -replace "'","''" $PFChangeNotificationPeriod = $PFChangeNotificationPeriod -replace "'","''" $PFDaysNotifyPriorExpiration = $PFDaysNotifyPriorExpiration -replace "'","''" $PFVFFromHour = $PFVFFromHour -replace "'","''" $PFVFToHour = $PFVFToHour -replace "'","''" $PFRCReconcileReasons = $PFRCReconcileReasons -replace "'","''" $PFRCFromHour = $PFRCFromHour -replace "'","''" $PFRCToHour = $PFRCToHour -replace "'","''" $PFNFNotifyPriorExpiration = $PFNFNotifyPriorExpiration -replace "'","''" $PFNFPriorExpirationRecipients = $PFNFPriorExpirationRecipients -replace "'","''" $PFNFNotifyOnPasswordDisable = $PFNFNotifyOnPasswordDisable -replace "'","''" $PFNFOnPasswordDisableRecipients = $PFNFOnPasswordDisableRecipients -replace "'","''" $PFNFNotifyOnVerificationErrors = $PFNFNotifyOnVerificationErrors -replace "'","''" $PFNFOnVerificationErrorsRecipients = $PFNFOnVerificationErrorsRecipients -replace "'","''" $PFNFNotifyOnPasswordUsed = $PFNFNotifyOnPasswordUsed -replace "'","''" $PFNFOnPasswordUsedRecipients = $PFNFOnPasswordUsedRecipients -replace "'","''" $PFPasswordLength = $PFPasswordLength -replace "'","''" $PFMinUpperCase = $PFMinUpperCase -replace "'","''" $PFMinLowerCase = $PFMinLowerCase -replace "'","''" $PFMinDigit = $PFMinDigit -replace "'","''" $PFMinSpecial = $PFMinSpecial -replace "'","''" $PFPasswordLevelRequestTimeframe = $PFPasswordLevelRequestTimeframe -replace "'","''" try{ $query = "INSERT INTO $TableName ( ID, Name, SystemType, Active, Description, PlatformBaseID, PlatformType, PropertiesRequired, PropertiesOptional, LinkedAccounts, AllowedSafes, AllowManualChange, PerformPeriodicChange, RequirePasswordChangeEveryXDays, AllowManualVerification, PerformPeriodicVerification, RequirePasswordVerificationEveryXDays, AllowManualReconciliation, AutomaticReconcileWhenUnsynched, RequirePrivilegedSessionMonitoringAndIsolation, RecordAndSaveSessionActivity, PSMServerID, RequireDualControlPasswordAccessApproval, EnforceCheckinCheckoutExclusiveAccess, EnforceOnetimePasswordAccess, ConnectionComponents, SearchForUsages, PolicyType, ImmediateInterval, Interval, MaxConcurrentConnections, MinValidityPeriod, ResetOveridesMinValidity, ResetOveridesTimeFrame, Timeout, UnlockIfFail, UnrecoverableErrors, MaximumRetries, MinDelayBetweenRetries, DllName, XMLFile, HeadStartInterval, FromHour, ToHour, ChangeNotificationPeriod, DaysNotifyPriorExpiration, VFFromHour, VFToHour, RCReconcileReasons, RCFromHour, RCToHour, NFNotifyPriorExpiration, NFPriorExpirationRecipients, NFNotifyOnPasswordDisable, NFOnPasswordDisableRecipients, NFNotifyOnVerificationErrors, NFOnVerificationErrorsRecipients, NFNotifyOnPasswordUsed, NFOnPasswordUsedRecipients, PasswordLength, MinUpperCase, MinLowerCase, MinDigit, MinSpecial, PasswordLevelRequestTimeframe ) VALUES ( '$PFGeneralID', '$PFGeneralName', '$PFGeneralSystemType', '$PFGeneralActive', '$PFGeneralDescription', '$PFGeneralPlatformBaseID', '$PFGeneralPlatformType', '$PFPropertiesRequired', '$PFPropertiesOptional', '$PFLinkedAccounts', '$PFCredentialsManagementAllowedSafes', '$PFCredentialsManagementAllowManualChange', '$PFCredentialsManagementPerformPeriodicChange', '$PFCredentialsManagementRequirePasswordChangeEveryXDays', '$PFCredentialsManagementAllowManualVerification', '$PFCredentialsManagementPerformPeriodicVerification', '$PFCredentialsManagementRequirePasswordVerificationEveryXDays', '$PFCredentialsManagementAllowManualReconciliation', '$PFCredentialsManagementAutomaticReconcileWhenUnsynched', '$PFSessionManagementRequirePrivilegedSessionMonitoringAndIsolation', '$PFSessionManagementRecordAndSaveSessionActivity', '$PFSessionManagementPSMServerID', '$PFPrivilegedAccessWorkflowsRequireDualControlPasswordAccessApproval', '$PFPrivilegedAccessWorkflowsEnforceCheckinCheckoutExclusiveAccess', '$PFPrivilegedAccessWorkflowsEnforceOnetimePasswordAccess', '$PFConnectionComponents', '$PFSearchForUsages', '$PFPolicyType', '$PFImmediateInterval', '$PFInterval', '$PFMaxConcurrentConnections', '$PFMinValidityPeriod', '$PFResetOveridesMinValidity', '$PFResetOveridesTimeFrame', '$PFTimeout', '$PFUnlockIfFail', '$PFUnrecoverableErrors', '$PFMaximumRetries', '$PFMinDelayBetweenRetries', '$PFDllName', '$PFXMLFile', '$PFHeadStartInterval', '$PFFromHour', '$PFToHour', '$PFChangeNotificationPeriod', '$PFDaysNotifyPriorExpiration', '$PFVFFromHour', '$PFVFToHour', '$PFRCReconcileReasons', '$PFRCFromHour', '$PFRCToHour', '$PFNFNotifyPriorExpiration', '$PFNFPriorExpirationRecipients', '$PFNFNotifyOnPasswordDisable', '$PFNFOnPasswordDisableRecipients', '$PFNFNotifyOnVerificationErrors', '$PFNFOnVerificationErrorsRecipients', '$PFNFNotifyOnPasswordUsed', '$PFNFOnPasswordUsedRecipients', '$PFPasswordLength', '$PFMinUpperCase', '$PFMinLowerCase', '$PFMinDigit', '$PFMinSpecial', '$PFPasswordLevelRequestTimeframe' );" $UpdateRec = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDatabase -Query $query -Username $SQLUsername -Password $Secret Write-Verbose "ADDED RECORD INTO $TableName FOR PLATFORMID: $PFPlatformID" }catch{ Write-Verbose "FAILED TO ADD RECORD INTO $TableName FOR PLATFORMID: $PFPlatformID" Write-VPASOutput -str "FAILED TO ADD RECORD INTO $TableName FOR PLATFORMID: $PFPlatformID" -type E Write-VPASOutput -str $_ -type E } } } ####################### return $true } End{ $log = Write-VPASTextRecorder -inputval $CommandName -token $token -LogType DIVIDER } } # SIG # Begin signature block # MIIrpgYJKoZIhvcNAQcCoIIrlzCCK5MCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU/Y0+IRoM4GuTestOMGVZHsQj # jmWggiTgMIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B # AQwFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVy # MRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEh # MB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAw # MFoXDTI4MTIzMTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp # Z28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n # IFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeUEiIE # JHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR41KKteKW3tCHYySJiv/vEpM7 # fbu2ir29BX8nm2tl06UMabG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr # YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQxafptszSswXp43JJQ8mTH # qi0Eq8Nq6uAvp6fcbtfo/9ohq0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv # 64IplXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9lpwRrGNhx+swI8m2J # mRCxrds+LOSqGLDGBwF1Z95t6WNjHjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0P # OM1nqFOI+rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaCZEao9XOwBpXy # bGWfv1VbHJxXGsd4RnxwqpQbghesh+m2yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyhe # Be6QTHrnxvTQ/PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg80EY2NXyc # uu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrFfwGcELEW/MxuGNxvYv6mUKe4e7id # FT/+IAx1yCJaE5UZkADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1UdIwQY # MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQy65Ka/zWWSC8oQEJw # IDaRXBeF5jAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE # DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEMGA1Ud # HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmlj # YXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0 # cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3Sa # mES4aUa1qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiueTtTzbT72ES+ # BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0RQGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8 # ZsBRNraJAlTH/Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4CnvYFIUoQx # 2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2JXfBjRkWxYhMZn0vY86Y6GnfrDyo # XZ3JHFuu2PMvdM+4fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzsJA8p # 1FiAhORFe1rYMIIGFDCCA/ygAwIBAgIQeiOu2lNplg+RyD5c9MfjPzANBgkqhkiG # 9w0BAQwFADBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk # MS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIFJvb3QgUjQ2 # MB4XDTIxMDMyMjAwMDAwMFoXDTM2MDMyMTIzNTk1OVowVTELMAkGA1UEBhMCR0Ix # GDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEsMCoGA1UEAxMjU2VjdGlnbyBQdWJs # aWMgVGltZSBTdGFtcGluZyBDQSBSMzYwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAw # ggGKAoIBgQDNmNhDQatugivs9jN+JjTkiYzT7yISgFQ+7yavjA6Bg+OiIjPm/N/t # 3nC7wYUrUlY3mFyI32t2o6Ft3EtxJXCc5MmZQZ8AxCbh5c6WzeJDB9qkQVa46xiY # Epc81KnBkAWgsaXnLURoYZzksHIzzCNxtIXnb9njZholGw9djnjkTdAA83abEOHQ # 4ujOGIaBhPXG2NdV8TNgFWZ9BojlAvflxNMCOwkCnzlH4oCw5+4v1nssWeN1y4+R # laOywwRMUi54fr2vFsU5QPrgb6tSjvEUh1EC4M29YGy/SIYM8ZpHadmVjbi3Pl8h # JiTWw9jiCKv31pcAaeijS9fc6R7DgyyLIGflmdQMwrNRxCulVq8ZpysiSYNi79tw # 5RHWZUEhnRfs/hsp/fwkXsynu1jcsUX+HuG8FLa2BNheUPtOcgw+vHJcJ8HnJCrc # UWhdFczf8O+pDiyGhVYX+bDDP3GhGS7TmKmGnbZ9N+MpEhWmbiAVPbgkqykSkzyY # Vr15OApZYK8CAwEAAaOCAVwwggFYMB8GA1UdIwQYMBaAFPZ3at0//QET/xahbIIC # L9AKPRQlMB0GA1UdDgQWBBRfWO1MMXqiYUKNUoC6s2GXGaIymzAOBgNVHQ8BAf8E # BAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNVHSUEDDAKBggrBgEFBQcDCDAR # BgNVHSAECjAIMAYGBFUdIAAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL2NybC5z # ZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljVGltZVN0YW1waW5nUm9vdFI0Ni5jcmww # fAYIKwYBBQUHAQEEcDBuMEcGCCsGAQUFBzAChjtodHRwOi8vY3J0LnNlY3RpZ28u # Y29tL1NlY3RpZ29QdWJsaWNUaW1lU3RhbXBpbmdSb290UjQ2LnA3YzAjBggrBgEF # BQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEMBQADggIB # ABLXeyCtDjVYDJ6BHSVY/UwtZ3Svx2ImIfZVVGnGoUaGdltoX4hDskBMZx5NY5L6 # SCcwDMZhHOmbyMhyOVJDwm1yrKYqGDHWzpwVkFJ+996jKKAXyIIaUf5JVKjccev3 # w16mNIUlNTkpJEor7edVJZiRJVCAmWAaHcw9zP0hY3gj+fWp8MbOocI9Zn78xvm9 # XKGBp6rEs9sEiq/pwzvg2/KjXE2yWUQIkms6+yslCRqNXPjEnBnxuUB1fm6bPAV+ # Tsr/Qrd+mOCJemo06ldon4pJFbQd0TQVIMLv5koklInHvyaf6vATJP4DfPtKzSBP # kKlOtyaFTAjD2Nu+di5hErEVVaMqSVbfPzd6kNXOhYm23EWm6N2s2ZHCHVhlUgHa # C4ACMRCgXjYfQEDtYEK54dUwPJXV7icz0rgCzs9VI29DwsjVZFpO4ZIVR33LwXyP # DbYFkLqYmgHjR3tKVkhh9qKV2WCmBuC27pIOx6TYvyqiYbntinmpOqh/QPAnhDge # xKG9GX/n1PggkGi9HCapZp8fRwg8RftwS21Ln61euBG0yONM6noD2XQPrFwpm3Gc # uqJMf0o8LLrFkSLRQNwxPDDkWXhW+gZswbaiie5fd/W2ygcto78XCSPfFWveUOSZ # 5SqK95tBO8aTHmEa4lpJVD7HrTEn9jb1EGvxOb1cnn0CMIIGGjCCBAKgAwIBAgIQ # Yh1tDFIBnjuQeRUgiSEcCjANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJHQjEY # MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS0wKwYDVQQDEyRTZWN0aWdvIFB1Ymxp # YyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIx # MjM1OTU5WjBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk # MSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2MIIB # ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAmyudU/o1P45gBkNqwM/1f/bI # U1MYyM7TbH78WAeVF3llMwsRHgBGRmxDeEDIArCS2VCoVk4Y/8j6stIkmYV5Gej4 # NgNjVQ4BYoDjGMwdjioXan1hlaGFt4Wk9vT0k2oWJMJjL9G//N523hAm4jF4UjrW # 2pvv9+hdPX8tbbAfI3v0VdJiJPFy/7XwiunD7mBxNtecM6ytIdUlh08T2z7mJEXZ # D9OWcJkZk5wDuf2q52PN43jc4T9OkoXZ0arWZVeffvMr/iiIROSCzKoDmWABDRzV # /UiQ5vqsaeFaqQdzFf4ed8peNWh1OaZXnYvZQgWx/SXiJDRSAolRzZEZquE6cbcH # 747FHncs/Kzcn0Ccv2jrOW+LPmnOyB+tAfiWu01TPhCr9VrkxsHC5qFNxaThTG5j # 4/Kc+ODD2dX/fmBECELcvzUHf9shoFvrn35XGf2RPaNTO2uSZ6n9otv7jElspkfK # 9qEATHZcodp+R4q2OIypxR//YEb3fkDn3UayWW9bAgMBAAGjggFkMIIBYDAfBgNV # HSMEGDAWgBQy65Ka/zWWSC8oQEJwIDaRXBeF5jAdBgNVHQ4EFgQUDyrLIIcouOxv # SK4rVKYpqhekzQwwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw # EwYDVR0lBAwwCgYIKwYBBQUHAwMwGwYDVR0gBBQwEjAGBgRVHSAAMAgGBmeBDAEE # ATBLBgNVHR8ERDBCMECgPqA8hjpodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3Rp # Z29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RSNDYuY3JsMHsGCCsGAQUFBwEBBG8wbTBG # BggrBgEFBQcwAoY6aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGlj # Q29kZVNpZ25pbmdSb290UjQ2LnA3YzAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Au # c2VjdGlnby5jb20wDQYJKoZIhvcNAQEMBQADggIBAAb/guF3YzZue6EVIJsT/wT+ # mHVEYcNWlXHRkT+FoetAQLHI1uBy/YXKZDk8+Y1LoNqHrp22AKMGxQtgCivnDHFy # AQ9GXTmlk7MjcgQbDCx6mn7yIawsppWkvfPkKaAQsiqaT9DnMWBHVNIabGqgQSGT # rQWo43MOfsPynhbz2Hyxf5XWKZpRvr3dMapandPfYgoZ8iDL2OR3sYztgJrbG6VZ # 9DoTXFm1g0Rf97Aaen1l4c+w3DC+IkwFkvjFV3jS49ZSc4lShKK6BrPTJYs4NG1D # GzmpToTnwoqZ8fAmi2XlZnuchC4NPSZaPATHvNIzt+z1PHo35D/f7j2pO1S8BCys # QDHCbM5Mnomnq5aYcKCsdbh0czchOm8bkinLrYrKpii+Tk7pwL7TjRKLXkomm5D1 # Umds++pip8wH2cQpf93at3VDcOK4N7EwoIJB0kak6pSzEu4I64U6gZs7tS/dGNSl # jf2OSSnRr7KWzq03zl8l75jy+hOds9TWSenLbjBQUGR96cFr6lEUfAIEHVC1L68Y # 1GGxx4/eRI82ut83axHMViw1+sVpbPxg51Tbnio1lB93079WPFnYaOvfGAA0e0zc # fF/M9gXr+korwQTh2Prqooq2bYNMvUoUKD85gnJ+t0smrWrb8dee2CvYZXD5laGt # aAxOfy/VKNmwuWuAh9kcMIIGRzCCBK+gAwIBAgIQacs5SDkvNuif0aEmZmr03jAN # BgkqhkiG9w0BAQwFADBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBM # aW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0Eg # UjM2MB4XDTI1MDEyOTAwMDAwMFoXDTI4MDEyOTIzNTk1OVowXjELMAkGA1UEBhMC # VVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxHDAaBgNVBAoME0N5YmVyTWVsIENvbnN1 # bHRpbmcxHDAaBgNVBAMME0N5YmVyTWVsIENvbnN1bHRpbmcwggIiMA0GCSqGSIb3 # DQEBAQUAA4ICDwAwggIKAoICAQDBQmSvdfamF8o0CJr4vbHCcJ4rwx6T1HR3d32u # 4aIf9v9p/GV4nFdG4PP9SMjWw7Nx9CLFqGPpkw7aDU2IxwpfPYExDzkCj2pgiyeV # KlL0itTlPocb6i1cZLe/WHV7aUkGkVlfvyYIqdJ9uw711dhNWmMhlqo+/qyp+gpK # qaiFHm6mWNVg2KLTH5Pu38cBoGhS1tn7mlQbtALNjehkpFw2AAntEIBzM3ZEg9WB # xQlgYY0yAPkydYbJfTEOEFJqHUPTSV46jx22Jb9dl0cEIPsGrCp+Jo5Ugusp9oZE # CZ8bGt7Vc9jYoIWGpqcRDq1JZFNCSVvNE4N3ECGjq6W3kYW7ot0CP1DkpJ93a5wr # ksQ6bvYGUy3lghkMvzjkkq/NVUDEVcdNR7PsUFf654vSw+iLINZ+9kYg+Znplfnd # T/JSMJDAaWkM5oLu6+ao0774QWrsHOttz7M8EDU+3PntYHglwWoej6qXIFRurgXd # wAXXyXYcSmkOTbPqrjSwsbs8CuSwGqebbRSDKfjRzDqQ9D1AZ/JHHaaUkBbAYBsV # MrvypDSrP/1o37mt4Zky28BnEp5ztEGp0HJ44X4rFVWWz+BfeuZWcVUcGKW2YFHo # bNwGmJ/OanLvlnmtpZIRLF9ZkbzCHHomi+RId4g3fc3FsGxKqEW9Vj8PCumwKc6L # UwZU4wIDAQABo4IBiTCCAYUwHwYDVR0jBBgwFoAUDyrLIIcouOxvSK4rVKYpqhek # zQwwHQYDVR0OBBYEFCiCHmEfvPkU1uIc2sPugFDBq88SMA4GA1UdDwEB/wQEAwIH # gDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMEoGA1UdIARDMEEw # NQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2VjdGlnby5j # b20vQ1BTMAgGBmeBDAEEATBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLnNl # Y3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2LmNybDB5Bggr # BgEFBQcBAQRtMGswRAYIKwYBBQUHMAKGOGh0dHA6Ly9jcnQuc2VjdGlnby5jb20v # U2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FSMzYuY3J0MCMGCCsGAQUFBzABhhdo # dHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAYEAmLUUP/C5 # nHN/qX27dIrfNezHdUul/uhOA5CwNkD7P4pvLJButR/S1OmvozuzJJTce6824Iyl # nXkRwUFj04XLbodkBL7+YwQ5ml7CjdDSVo+sI/38jcEQ6FgosV/TTJSiFAgqMNwk # x/kSzvQ1/Ufp5YVKggCXGJ4VitIzl5nMbzzu35G/uy4vmCQfh0KPYUTJYiRsF6Z3 # XJiIVtYrEwN/ikif/WFGrzsFj1OOWHNn5qDOP80xExmRS09z/wdZE9RdjPv5fYLn # KWy1+GQ/w1vzg/l2vUXIgBV0MxalUfTP4V9Spsodrb+noPXiCy5n+6hy9yCf3EQb # 3G1n8rT/a454fLSijMm6bhrgBRqhPUUtn6ZIBdEJzJUI6ftuXrQnB/U7zf32xcTT # AW7WPem7DFK/4JrSaxiXcSkxQ4kXJDVoDPUJdpb0c5XdWVJO0DCkB35ONEIoqT6V # jEIjLPSw9UXE420r1OIpV8FRJqrW4Fr5RUveEUlyF+FyygVOYZECNsjRMIIGYjCC # BMqgAwIBAgIRAKQpO24e3denNAiHrXpOtyQwDQYJKoZIhvcNAQEMBQAwVTELMAkG # A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEsMCoGA1UEAxMjU2Vj # dGlnbyBQdWJsaWMgVGltZSBTdGFtcGluZyBDQSBSMzYwHhcNMjUwMzI3MDAwMDAw # WhcNMzYwMzIxMjM1OTU5WjByMQswCQYDVQQGEwJHQjEXMBUGA1UECBMOV2VzdCBZ # b3Jrc2hpcmUxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEwMC4GA1UEAxMnU2Vj # dGlnbyBQdWJsaWMgVGltZSBTdGFtcGluZyBTaWduZXIgUjM2MIICIjANBgkqhkiG # 9w0BAQEFAAOCAg8AMIICCgKCAgEA04SV9G6kU3jyPRBLeBIHPNyUgVNnYayfsGOy # YEXrn3+SkDYTLs1crcw/ol2swE1TzB2aR/5JIjKNf75QBha2Ddj+4NEPKDxHEd4d # En7RTWMcTIfm492TW22I8LfH+A7Ehz0/safc6BbsNBzjHTt7FngNfhfJoYOrkugS # aT8F0IzUh6VUwoHdYDpiln9dh0n0m545d5A5tJD92iFAIbKHQWGbCQNYplqpAFas # HBn77OqW37P9BhOASdmjp3IijYiFdcA0WQIe60vzvrk0HG+iVcwVZjz+t5OcXGTc # xqOAzk1frDNZ1aw8nFhGEvG0ktJQknnJZE3D40GofV7O8WzgaAnZmoUn4PCpvH36 # vD4XaAF2CjiPsJWiY/j2xLsJuqx3JtuI4akH0MmGzlBUylhXvdNVXcjAuIEcEQKt # OBR9lU4wXQpISrbOT8ux+96GzBq8TdbhoFcmYaOBZKlwPP7pOp5Mzx/UMhyBA93P # QhiCdPfIVOCINsUY4U23p4KJ3F1HqP3H6Slw3lHACnLilGETXRg5X/Fp8G8qlG5Y # +M49ZEGUp2bneRLZoyHTyynHvFISpefhBCV0KdRZHPcuSL5OAGWnBjAlRtHvsMBr # I3AAA0Tu1oGvPa/4yeeiAyu+9y3SLC98gDVbySnXnkujjhIh+oaatsk/oyf5R2vc # xHahajMCAwEAAaOCAY4wggGKMB8GA1UdIwQYMBaAFF9Y7UwxeqJhQo1SgLqzYZcZ # ojKbMB0GA1UdDgQWBBSIYYyhKjdkgShgoZsx0Iz9LALOTzAOBgNVHQ8BAf8EBAMC # BsAwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBKBgNVHSAE # QzBBMDUGDCsGAQQBsjEBAgEDCDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3Rp # Z28uY29tL0NQUzAIBgZngQwBBAIwSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2Ny # bC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljVGltZVN0YW1waW5nQ0FSMzYuY3Js # MHoGCCsGAQUFBwEBBG4wbDBFBggrBgEFBQcwAoY5aHR0cDovL2NydC5zZWN0aWdv # LmNvbS9TZWN0aWdvUHVibGljVGltZVN0YW1waW5nQ0FSMzYuY3J0MCMGCCsGAQUF # BzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAYEA # AoE+pIZyUSH5ZakuPVKK4eWbzEsTRJOEjbIu6r7vmzXXLpJx4FyGmcqnFZoa1dzx # 3JrUCrdG5b//LfAxOGy9Ph9JtrYChJaVHrusDh9NgYwiGDOhyyJ2zRy3+kdqhwtU # lLCdNjFjakTSE+hkC9F5ty1uxOoQ2ZkfI5WM4WXA3ZHcNHB4V42zi7Jk3ktEnkSd # ViVxM6rduXW0jmmiu71ZpBFZDh7Kdens+PQXPgMqvzodgQJEkxaION5XRCoBxAwW # wiMm2thPDuZTzWp/gUFzi7izCmEt4pE3Kf0MOt3ccgwn4Kl2FIcQaV55nkjv1gOD # cHcD9+ZVjYZoyKTVWb4VqMQy/j8Q3aaYd/jOQ66Fhk3NWbg2tYl5jhQCuIsE55Vg # 4N0DUbEWvXJxtxQQaVR5xzhEI+BjJKzh3TQ026JxHhr2fuJ0mV68AluFr9qshgwS # 5SpN5FFtaSEnAwqZv3IS+mlG50rK7W3qXbWwi4hmpylUfygtYLEdLQukNEX1jiOK # MIIGgjCCBGqgAwIBAgIQNsKwvXwbOuejs902y8l1aDANBgkqhkiG9w0BAQwFADCB # iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl # cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV # BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjEw # MzIyMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjBXMQswCQYDVQQGEwJHQjEYMBYGA1UE # ChMPU2VjdGlnbyBMaW1pdGVkMS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBUaW1l # IFN0YW1waW5nIFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC # AgEAiJ3YuUVnnR3d6LkmgZpUVMB8SQWbzFoVD9mUEES0QUCBdxSZqdTkdizICFNe # INCSJS+lV1ipnW5ihkQyC0cRLWXUJzodqpnMRs46npiJPHrfLBOifjfhpdXJ2aHH # sPHggGsCi7uE0awqKggE/LkYw3sqaBia67h/3awoqNvGqiFRJ+OTWYmUCO2GAXse # PHi+/JUNAax3kpqstbl3vcTdOGhtKShvZIvjwulRH87rbukNyHGWX5tNK/WABKf+ # Gnoi4cmisS7oSimgHUI0Wn/4elNd40BFdSZ1EwpuddZ+Wr7+Dfo0lcHflm/FDDrO # J3rWqauUP8hsokDoI7D/yUVI9DAE/WK3Jl3C4LKwIpn1mNzMyptRwsXKrop06m7N # UNHdlTDEMovXAIDGAvYynPt5lutv8lZeI5w3MOlCybAZDpK3Dy1MKo+6aEtE9vti # TMzz/o2dYfdP0KWZwZIXbYsTIlg1YIetCpi5s14qiXOpRsKqFKqav9R1R5vj3Nge # vsAsvxsAnI8Oa5s2oy25qhsoBIGo/zi6GpxFj+mOdh35Xn91y72J4RGOJEoqzEIb # W3q0b2iPuWLA911cRxgY5SJYubvjay3nSMbBPPFsyl6mY4/WYucmyS9lo3l7jk27 # MAe145GWxK4O3m3gEFEIkv7kRmefDR7Oe2T1HxAnICQvr9sCAwEAAaOCARYwggES # MB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBT2d2rd # P/0BE/8WoWyCAi/QCj0UJTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB # /zATBgNVHSUEDDAKBggrBgEFBQcDCDARBgNVHSAECjAIMAYGBFUdIAAwUAYDVR0f # BEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJT # QUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMDUGCCsGAQUFBwEBBCkwJzAlBggr # BgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwF # AAOCAgEADr5lQe1oRLjlocXUEYfktzsljOt+2sgXke3Y8UPEooU5y39rAARaAdAx # UeiX1ktLJ3+lgxtoLQhn5cFb3GF2SSZRX8ptQ6IvuD3wz/LNHKpQ5nX8hjsDLRhs # yeIiJsms9yAWnvdYOdEMq1W61KE9JlBkB20XBee6JaXx4UBErc+YuoSb1SxVf7nk # NtUjPfcxuFtrQdRMRi/fInV/AobE8Gw/8yBMQKKaHt5eia8ybT8Y/Ffa6HAJyz9g # vEOcF1VWXG8OMeM7Vy7Bs6mSIkYeYtddU1ux1dQLbEGur18ut97wgGwDiGinCwKP # yFO7ApcmVJOtlw9FVJxw/mL1TbyBns4zOgkaXFnnfzg4qbSvnrwyj1NiurMp4pmA # WjR+Pb/SIduPnmFzbSN/G8reZCL4fvGlvPFk4Uab/JVCSmj59+/mB2Gn6G/UYOy8 # k60mKcmaAZsEVkhOFuoj4we8CYyaR9vd9PGZKSinaZIkvVjbH/3nlLb0a7SBIkiR # zfPfS9T+JesylbHa1LtRV9U/7m0q7Ma2CQ/t392ioOssXW7oKLdOmMBl14suVFBm # bzrt5V5cQPnwtd3UOTpS9oCG+ZZheiIvPgkDmA8FzPsnfXW5qHELB43ET7HHFHeR # PRYrMBKjkb8/IN7Po0d0hQoF4TeMM+zYAJzoKQnVKOLg8pZVPT8xggYwMIIGLAIB # ATBoMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzAp # BgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYCEGnLOUg5 # Lzbon9GhJmZq9N4wCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKAAKEC # gAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG # CisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFA3Xy08ODEkgpBznhHKKx9cA+Ahc # MA0GCSqGSIb3DQEBAQUABIICAFRDHlab8uJDbd5ATpb7t2QPxROOZT+HG/I6l/Ne # Z6uRkyVp14DnE1qgI1o4aESCtlfEqTcNB5B7V/4VWpxBpl9RhzHcxSyKHP21My2y # tfrfBzieDT2xjbb8DmqJk60lKzC1zNu5mCko7nuPmiTInPJwn6hzbaedeAfBJbqe # IvPypvKNdv3QbYTIxN+deUoY7YZMNMGeD29rYVKmyN8KJNOsdlR2S+54gLkq19XS # NPtcpOZ5dy/yGtQdVfWgV6T2qAVMOgrec+mXHJWMqqCpu4H6oErt8iHUu2aoRmJ8 # L6I/S0ef6lv/EZIDhHswtsuwjpCB6HkzufWaqp8/ZpKOhM2007AEClpNFUj5p1kX # k2QF59ZIfi/XE3bBPvX+dOs2T+b7P66wAFJr6yxEnfRwujxPkRWE46Cc2k2GuiSD # Dp4EYXG3emBUKZm1kkQsX1ZLE1xzgVC/jllcNbQ9KP9I5KR1OYqz9ACY9TWG8AK+ # zuKEFQYALKOKcakDcHG07SKY0M42Wg+BsnUYTkzbRYfsUlJv530VFSL0vRYp2erI # kClgGcYubnwP9tyW0ZDxfqrgtVB7zRtLSLEOMVVawloO8rBvYnAjUxQFZOEwPFgW # LEbIWOfGUhFuyAmBq9wau1KH6/PjdyR1FQkhV+mwTY5GKfoDq80rwR7eIiPKdFmv # Iu2OoYIDIzCCAx8GCSqGSIb3DQEJBjGCAxAwggMMAgEBMGowVTELMAkGA1UEBhMC # R0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEsMCoGA1UEAxMjU2VjdGlnbyBQ # dWJsaWMgVGltZSBTdGFtcGluZyBDQSBSMzYCEQCkKTtuHt3XpzQIh616TrckMA0G # CWCGSAFlAwQCAgUAoHkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG # 9w0BCQUxDxcNMjUwNzE3MDQ1NzQzWjA/BgkqhkiG9w0BCQQxMgQw0dunVc1OcHKK # hMRNVazc7GqFoiLuhIMu14jogMWByxzVl4iWaaO+XcplMY3xM0K4MA0GCSqGSIb3 # DQEBAQUABIICABaI91dlVzcvBH9p4a2Ns21jvOgdkJycO57WeeFTYxfJzm5H9fuK # vl66JRntjbYBzIDm8Ey9lJd62Om4Xdy4GG+8VKbDIM07DrpcUb6REG6VtreqnIBO # 5PbujdTul55vXIup+boTygNHgI11fqQ6bcMWwJtZL1ylLO7WwXPhhfsBSKVPH4dT # IAhjSuKlrLWdBcxFEWW80BWGMt5ZsplpKYxXsSjA3Tjg1g5Gw0f4MyNsLG2gsvIt # jnNDPHoxB8Y4dm+9iy57p8ZpAe5ZgUH+lRJtBto4sX3A/TN4adGgZa20UHA46l3s # +Ud6+L9OUFPP1MIiPu1sgWu2vzE+SSzuQfLCgVQo6n/sjVcJMVBszNdaB88FxXYi # WkxPyFiTyOfaPakCV+zamMMo8y7TKPV1unuPHgaCbaWyeqXagb06+cztzyZs5+nZ # 6Uxgt/L7Chui/cxmQWGd03cAcvqZjD6SUn+h/SmXrX5D6uYKm5drVTCBz9sq3Txw # jDNE5KdskEeA3hm65ixb8oueRSIf1sWbEn6QbDVMAevhEDgcVuaXi5CaWOiI64yQ # G+0Td+DVSjH31Phki5p7dZ9CP4K/vuwNljlPmyX5rxGQJ6NKVtx9eCVZ+rB2vZo7 # wMLV3yqGE2iCSvE3jW0AU+g9avqZ+FQ8gLpy8yZXMxdB7kcueKroNopx # SIG # End signature block |