'-------------------------------------------------------------------- ' Portswitch.vbs ' Usage: Portswitch (HTTP port number) ' Example:Portswitch 1337 ' (c) Microsoft Corporation. All rights reserved. ' ' This script will set the HTTP port on which the ' ConfigMgr Advanced Client will use to communicate with the Management Point. ' This script is intended to be used with software distribution. ' Because file associations can change it is recommended that you execute portswitch.vbs in the ' following way: ' ' The command line provided in the package's program should be "wscript.exe portswitch.vbs ' (HTTP port number) (optional: HTTPS port number)" ' ' Example: "Wscript.exe portswitch.vbs 1337 31337" ' ' ' To properly generate pass/fail status for software distribution you must do the following: ' 1) In the ConfigMgr package, set the MIF matching properties to the following: ' MIF Filename: "Portswitch.mif" ' 2) In the ConfigMgr Program, you must specify that the "Program will reboot" ' (this is because CCMExec restarts) ' '-------------------------------------------------------------------- Dim objShell 'This establishes the variable Shell that will become the WScript.Shell object. Dim nPortValue, nSslPortValue, nReadValue 'Holds the value passed as a command argument Dim CCMService Const EVENT_SUCESS = 0 Const EVENT_FAILED = 2 Const Reg_PortKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\HttpPort" 'Set constant as the registry path to the desired key. Const Reg_PortKeySSL = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\HttpsPort" 'SSL port for ConfigMgr client ' Create a WScript.Shell oject Set objShell = Wscript.CreateObject("Wscript.Shell") ' check the argument count iNumberOfArguments = Wscript.Arguments.Count If iNumberOfArguments > 2 or iNumberOfArguments < 1 Then objShell.LogEvent EVENT_FAILED, _ "Portswitch.vbs was executed with no specified port. " & _ "Usage: Portswitch (HTTP port number) " & _ "(optional HTTPS port number). Examples: ""Portswitch 8080"" or ""PortSwitch 8080 8443""" FailAndQuit End if On Error Resume Next ' Validate the port arguments, and set the ports in the registry nPortValue = CLng(Wscript.Arguments.Item(0)) ValidatePort nPortValue ' If we have an SSL port, validate it, too. If iNumberOfArguments = 2 Then nSslPortValue = CLng(Wscript.Arguments.Item(1)) If nSslPortValue = nPortValue Then objShell.LogEvent EVENT_FAILED, _ "Portswitch.vbs had an invalid port specification: HTTP and HTTPS ports cannot be identical." FailAndQuit End If ValidatePort nSslPortValue WriteRegKey Reg_PortKeySSL, nSslPortValue End If WriteRegKey Reg_PortKey, nPortValue Set objWmiservice = GetObject("winmgmts:root\cimv2:Win32_Service.Name=""CCMExec""") ' Stop the CCMExec so the port change may be picked up by the client. errReturnCode = objWMIService.StopService() If errReturnCode <> 0 Then objShell.LogEvent EVENT_FAILED, _ "Portswitch.vbs was unable to stop the CCMExec service: (Err=" & errReturnCode & ")" FailAndQuit End If ' Wait for the ccmexec service to stop (to a maximum of 10 minutes) Dim dWaitUntil dWaitUntil = DateAdd("n", 10, Now) Do While (objWMIService.InterrogateService() <> 6) And (Now < dWaitUntil) ' The service is still running WScript.Sleep 1000 Loop ' Did the service stop? If objWMIService.InterrogateService() <> 6 then objShell.LogEvent EVENT_FAILED, _ "Portswitch.vbs timed out trying to stop the CCMExec service after 3 minutes." FailAndQuit End If If Err.number <> 0 Then objShell.LogEvent EVENT_FAILED, _ "Portswitch.vbs - An error occured: " & Err.Description FailAndQuit End If ' Generate a success status mif WriteStatusMIF(true) ' Starting CCMExec so the port change may be picked up by the client. errReturnCode = objWMIService.StartService () If iNumberOfArguments = 2 Then objShell.LogEvent EVENT_SUCCESS, _ "The ConfigMgr Advanced Client has been successfully set to communicate with the MP on ports " & nPortValue & " (HTTP) and " & nSslPortValue & " (HTTPS)" Else objShell.LogEvent EVENT_SUCCESS, _ "The ConfigMgr Advanced Client has been successfully set to communicate with the MP on port " & nPortValue End If WScript.Quit(0) ' ----------------------------- ErrorHandler: objShell.LogEvent EVENT_FAILED, _ "Portswitch failed with an internal error: " & Err.Description FailAndQuit ' ----------------------------- Sub ValidatePort(nPort) If Err.number <> 0 Then objShell.LogEvent EVENT_FAILED, _ "Portswitch.vbs - An invalid port number was specified (Valid ports are 1-65535). " & _ "Usage: Portswitch (HTTP port number) Example: Portswitch 8080" FailAndQuit End If ' Check the port value If nPort < 1 or nPort > 65535 then objShell.LogEvent EVENT_FAILED, _ "Portswitch.vbs was executed with an invalid port number (" & nPort & "). Port numbers must fall " & _ "between 1-65535 Usage: Portswitch (HTTP port number) Example: Portswitch 8080" FailAndQuit End if End Sub ' ----------------------------- Sub WriteRegKey(sRegKey, nPort) nReadValue = objShell.RegRead(sRegKey) If nReadValue then ' Write current path to registry key and read it to become constant for script. objShell.RegWrite (sRegKey), nPort, "REG_DWORD" nReadValue = objShell.RegRead(sRegKey) else objShell.LogEvent EVENT_FAILED, _ "Portswitch is unable to modify the Registry. The Registry Key is not present. This must be an RTM Advanced Client or a Legacy Client." FailAndQuit End If End Sub ' ----------------------------- Sub FailAndQuit() WriteStatusMIF(false) WScript.Quit(1) End Sub ' ----------------------------- Sub WriteStatusMIF(bSuccess) ' Writing a status MIF for SWDist to return a success or a failure to execute Const ForWriting = 2 Const TemporaryFolder = 2 Set objFSO = CreateObject("Scripting.FileSystemObject") Dim strTempDir strTempDir = objFSO.GetSpecialFolder(TemporaryFolder) Set objFile = objFSO.CreateTextFile(strTempDir & "\portswitch.mif", ForWriting) objFile.Writeline ("START COMPONENT") objFile.Writeline ("NAME = ""WORKSTATION""") objFile.Writeline (" START GROUP") objFile.Writeline (" NAME = ""ComponentID""") objFile.Writeline (" ID = 1") objFile.Writeline (" CLASS = ""DMTF|ComponentID|1.0""") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Manufacturer""") objFile.Writeline (" ID = 1") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(64)") objFile.Writeline (" VALUE = ""Microsoft""") objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Product""") objFile.Writeline (" ID = 2") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(64)") objFile.Writeline (" VALUE = ""Portswitch""") objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Version""") objFile.Writeline (" ID = 3") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(64)") objFile.Writeline (" VALUE = ""1.0""") objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Locale""") objFile.Writeline (" ID = 4") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(16)") objFile.Writeline (" VALUE = ""ENU""") objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Serial Number""") objFile.Writeline (" ID = 5") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(64)") objFile.Writeline (" VALUE = """"") objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Installation""") objFile.Writeline (" ID = 6") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(64)") objFile.Writeline (" VALUE = ""DateTime""") objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" END GROUP") objFile.Writeline (" START GROUP") objFile.Writeline (" NAME = ""InstallStatus""") objFile.Writeline (" ID = 2") objFile.Writeline (" CLASS = ""MICROSOFT|JOBSTATUS|1.0""") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Status""") objFile.Writeline (" ID = 1") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(32)") ' Pass or fail this status mif? If bSuccess = true then objFile.Writeline (" VALUE = ""Success""") else objFile.Writeline (" VALUE = ""Failed""") End if objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" START ATTRIBUTE") objFile.Writeline (" NAME = ""Description""") objFile.Writeline (" ID = 2") objFile.Writeline (" ACCESS = READ-ONLY") objFile.Writeline (" STORAGE = SPECIFIC") objFile.Writeline (" TYPE = STRING(128)") If bSuccess = true and iNumberOfArguments = 2 then objFile.Writeline (" VALUE = ""The ConfigMgr Advanced Client has been successfully set to communicate with the MP on ports " & nPortValue & " (HTTP) and " & nSslPortValue & " (HTTPS)""") ElseIf bSuccess = true then objFile.Writeline (" VALUE = ""The ConfigMgr Advanced Client has been successfully set to communicate with the MP on ports " & nPortValue & """") Else objFile.Writeline (" VALUE = ""The ConfigMgr Advanced Client has not been set to communicate with the MP on the specified port. See the client's Application Event Log for more details""") End If objFile.Writeline (" END ATTRIBUTE") objFile.Writeline (" END GROUP") objFile.Writeline ("END COMPONENT") End Sub '' SIG '' Begin signature block '' SIG '' MIIn+wYJKoZIhvcNAQcCoIIn7DCCJ+gCAQExDzANBglg '' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor '' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC '' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg '' SIG '' kNoyQ+kEDMJy5X6lruwNc6Pgdomi/DC06UKEA/dNZYmg '' SIG '' gg2FMIIGAzCCA+ugAwIBAgITMwAAA64tNVHIU49VHQAA '' SIG '' AAADrjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV '' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH '' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv '' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT '' SIG '' aWduaW5nIFBDQSAyMDExMB4XDTIzMTExNjE5MDg1OVoX '' SIG '' DTI0MTExNDE5MDg1OVowdDELMAkGA1UEBhMCVVMxEzAR '' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v '' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv '' SIG '' bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u '' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA '' SIG '' 9CD8pjY3wxCoPmMhOkow7ycCltfqYnqk4wGNApzh2dTY '' SIG '' +YqxozWTzJUOB38VxsgFQmXBFhOMdrGYGpvO9kdbNPkw '' SIG '' HpTrW6hZqFuLLiRwGKEx4ZM5zVSqbHJuX2fPfUJ0Xmb+ '' SIG '' VrVsGw/BwBV2zz0rVtiSgqj3GeeGOsG7llfWyrSjyJqm '' SIG '' 5DHE3o04BAI/NuhkHOv04euiqJGvHFCL8+fXvyD9OAxq '' SIG '' 4fcJKtoyBb0PBA3oMNQeCsiUyLO+voZqVTOUsAWY0bN5 '' SIG '' YjkK4nq5DVaNdVrrowd5AX9gmz6D/TJTssns6pDCG00Y '' SIG '' +Dh3ipWpnVmkhYcByyUSEKX3PLC8DkiAQQIDAQABo4IB '' SIG '' gjCCAX4wHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYB '' SIG '' BQUHAwMwHQYDVR0OBBYEFIcf73Spl4cHOFoll27H9COd '' SIG '' 4fE/MFQGA1UdEQRNMEukSTBHMS0wKwYDVQQLEyRNaWNy '' SIG '' b3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQx '' SIG '' FjAUBgNVBAUTDTIzMDAxMis1MDE4MzYwHwYDVR0jBBgw '' SIG '' FoAUSG5k5VAF04KqFzc3IrVtqMp1ApUwVAYDVR0fBE0w '' SIG '' SzBJoEegRYZDaHR0cDovL3d3dy5taWNyb3NvZnQuY29t '' SIG '' L3BraW9wcy9jcmwvTWljQ29kU2lnUENBMjAxMV8yMDEx '' SIG '' LTA3LTA4LmNybDBhBggrBgEFBQcBAQRVMFMwUQYIKwYB '' SIG '' BQUHMAKGRWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w '' SIG '' a2lvcHMvY2VydHMvTWljQ29kU2lnUENBMjAxMV8yMDEx '' SIG '' LTA3LTA4LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3 '' SIG '' DQEBCwUAA4ICAQBqyWA1Eu7PKNMjaaxl0V7gJ0XBysUo '' SIG '' xZluMHJXFE2LEGZIZ2zMLYVjOnAGG/4dluRjSrZZo/8v '' SIG '' wk4Xt8v6NBB9ofo8H1P/XidHytWTv9lg9MYu++6lPmu5 '' SIG '' fCozD3cI2NLZPW2BBhGX2D0R8tQBj0FbmZRuIucpiQ7D '' SIG '' K3CHKlfKcc7MP8pPzuMv55Tox8+KFQD1NG6+bfbYA/BN '' SIG '' PBkg4tyOh+exbaHfcNuodDJUIjq9dF6oa+Yjy0u0pUMI '' SIG '' /B1t+8m6rJo0KSoZlrpesYl0jRhpt+hmqx8uENXoGJcY '' SIG '' ZVJ5N2Skq90LViKNRhi9N4U+e8c4y9uXyomUF/6viCPJ '' SIG '' 7huTNEJo75ehIJba+IWd3txUEc0R3y6DT6txC6cW1nR/ '' SIG '' LTbo9I/8fQq538G5IvJ+e5iSiOSVVkVk0i5m03Awy5E2 '' SIG '' ZSS4PVdQSCcFxmN4tpEfYuR7AAy/GJVtIDFlUpSgdXok '' SIG '' pSui5hYtK1R9enXXvo+U/xGkLRc+qp4De3dZbzu7pOq7 '' SIG '' V/jCyhuCw0bEIAU4urCGIip7TI6GBRzD7yPzjFIqeZY7 '' SIG '' S4rVW5BRn2oEqpm8Su6yTIQvMIk8x2pwYNUa2339Z4gW '' SIG '' 5xW21eFA5mLpo7NRSKRQms5OgAA18aCgqOU7Ds0h6q/Y '' SIG '' B4BmEAtoTMl/TBiyKaMGAlEcdy+5FIhmzojMGjCCB3ow '' SIG '' ggVioAMCAQICCmEOkNIAAAAAAAMwDQYJKoZIhvcNAQEL '' SIG '' BQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo '' SIG '' aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK '' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMT '' SIG '' KU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhv '' SIG '' cml0eSAyMDExMB4XDTExMDcwODIwNTkwOVoXDTI2MDcw '' SIG '' ODIxMDkwOVowfjELMAkGA1UEBhMCVVMxEzARBgNVBAgT '' SIG '' Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc '' SIG '' BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYG '' SIG '' A1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0Eg '' SIG '' MjAxMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC '' SIG '' ggIBAKvw+nIQHC6t2G6qghBNNLrytlghn0IbKmvpWlCq '' SIG '' uAY4GgRJun/DDB7dN2vGEtgL8DjCmQawyDnVARQxQtOJ '' SIG '' DXlkh36UYCRsr55JnOloXtLfm1OyCizDr9mpK656Ca/X '' SIG '' llnKYBoF6WZ26DJSJhIv56sIUM+zRLdd2MQuA3WraPPL '' SIG '' bfM6XKEW9Ea64DhkrG5kNXimoGMPLdNAk/jj3gcN1Vx5 '' SIG '' pUkp5w2+oBN3vpQ97/vjK1oQH01WKKJ6cuASOrdJXtjt '' SIG '' 7UORg9l7snuGG9k+sYxd6IlPhBryoS9Z5JA7La4zWMW3 '' SIG '' Pv4y07MDPbGyr5I4ftKdgCz1TlaRITUlwzluZH9TupwP '' SIG '' rRkjhMv0ugOGjfdf8NBSv4yUh7zAIXQlXxgotswnKDgl '' SIG '' mDlKNs98sZKuHCOnqWbsYR9q4ShJnV+I4iVd0yFLPlLE '' SIG '' tVc/JAPw0XpbL9Uj43BdD1FGd7P4AOG8rAKCX9vAFbO9 '' SIG '' G9RVS+c5oQ/pI0m8GLhEfEXkwcNyeuBy5yTfv0aZxe/C '' SIG '' HFfbg43sTUkwp6uO3+xbn6/83bBm4sGXgXvt1u1L50kp '' SIG '' pxMopqd9Z4DmimJ4X7IvhNdXnFy/dygo8e1twyiPLI9A '' SIG '' N0/B4YVEicQJTMXUpUMvdJX3bvh4IFgsE11glZo+TzOE '' SIG '' 2rCIF96eTvSWsLxGoGyY0uDWiIwLAgMBAAGjggHtMIIB '' SIG '' 6TAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUSG5k '' SIG '' 5VAF04KqFzc3IrVtqMp1ApUwGQYJKwYBBAGCNxQCBAwe '' SIG '' CgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB '' SIG '' /wQFMAMBAf8wHwYDVR0jBBgwFoAUci06AjGQQ7kUBU7h '' SIG '' 6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDov '' SIG '' L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj '' SIG '' dHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNy '' SIG '' bDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0 '' SIG '' dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMv '' SIG '' TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNydDCB '' SIG '' nwYDVR0gBIGXMIGUMIGRBgkrBgEEAYI3LgMwgYMwPwYI '' SIG '' KwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv '' SIG '' bS9wa2lvcHMvZG9jcy9wcmltYXJ5Y3BzLmh0bTBABggr '' SIG '' BgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBwAG8AbABp '' SIG '' AGMAeQBfAHMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkq '' SIG '' hkiG9w0BAQsFAAOCAgEAZ/KGpZjgVHkaLtPYdGcimwuW '' SIG '' EeFjkplCln3SeQyQwWVfLiw++MNy0W2D/r4/6ArKO79H '' SIG '' qaPzadtjvyI1pZddZYSQfYtGUFXYDJJ80hpLHPM8QotS '' SIG '' 0LD9a+M+By4pm+Y9G6XUtR13lDni6WTJRD14eiPzE32m '' SIG '' kHSDjfTLJgJGKsKKELukqQUMm+1o+mgulaAqPyprWElj '' SIG '' HwlpblqYluSD9MCP80Yr3vw70L01724lruWvJ+3Q3fMO '' SIG '' r5kol5hNDj0L8giJ1h/DMhji8MUtzluetEk5CsYKwsat '' SIG '' ruWy2dsViFFFWDgycScaf7H0J/jeLDogaZiyWYlobm+n '' SIG '' t3TDQAUGpgEqKD6CPxNNZgvAs0314Y9/HG8VfUWnduVA '' SIG '' KmWjw11SYobDHWM2l4bf2vP48hahmifhzaWX0O5dY0Hj '' SIG '' Wwechz4GdwbRBrF1HxS+YWG18NzGGwS+30HHDiju3mUv '' SIG '' 7Jf2oVyW2ADWoUa9WfOXpQlLSBCZgB/QACnFsZulP0V3 '' SIG '' HjXG0qKin3p6IvpIlR+r+0cjgPWe+L9rt0uX4ut1eBrs '' SIG '' 6jeZeRhL/9azI2h15q/6/IvrC4DqaTuv/DDtBEyO3991 '' SIG '' bWORPdGdVk5Pv4BXIqF4ETIheu9BCrE/+6jMpF3BoYib '' SIG '' V3FWTkhFwELJm3ZbCoBIa/15n8G9bW1qyVJzEw16UM0x '' SIG '' ghnOMIIZygIBATCBlTB+MQswCQYDVQQGEwJVUzETMBEG '' SIG '' A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u '' SIG '' ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u '' SIG '' MSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5n '' SIG '' IFBDQSAyMDExAhMzAAADri01UchTj1UdAAAAAAOuMA0G '' SIG '' CWCGSAFlAwQCAQUAoIHeMBkGCSqGSIb3DQEJAzEMBgor '' SIG '' BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEE '' SIG '' AYI3AgEVMC8GCSqGSIb3DQEJBDEiBCA0WmhIyaCB433Q '' SIG '' btKGvSlstI+NGeScr9S1mJTSgSORSDByBgorBgEEAYI3 '' SIG '' AgEMMWQwYqBEgEIARABlAHMAawB0AG8AcABBAG4AYQBs '' SIG '' AHkAdABpAGMAcwBMAG8AZwBzAEMAbwBsAGwAZQBjAHQA '' SIG '' bwByAC4AcABzADGhGoAYaHR0cDovL3d3dy5taWNyb3Nv '' SIG '' ZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBAJ9zK+4HpCF+ '' SIG '' MUnwpdesD9BH6r7upuQnz2Islc44ygwusOykI7QwsqTM '' SIG '' 0zimy+ptdC3/LT2tobs3Qg/fbLvTqpQpvjtO4Lb/4j5o '' SIG '' beSb75ATIe/PiTxCtU/2ItsxBNZq/vciBHBPcQrjOxw0 '' SIG '' c+bdqsqoKkViOngFhOnezGpmj3LsiSn697jifm7top4m '' SIG '' hEhMML0ekqqfOQ4KP3TUF9ltBWrDCjiDaEyP//w6o56c '' SIG '' KEHJQ2JFFIuedJ9ACLgW85h/RY1cuJAXN6+79JuLHQgT '' SIG '' 7PurvxR+idMyjCWNXCXYy13ZVKYryNA9gmtH6OQxi3ht '' SIG '' oIFv78IMoqfwXgEAIK1/9PuhghcoMIIXJAYKKwYBBAGC '' SIG '' NwMDATGCFxQwghcQBgkqhkiG9w0BBwKgghcBMIIW/QIB '' SIG '' AzEPMA0GCWCGSAFlAwQCAQUAMIIBWQYLKoZIhvcNAQkQ '' SIG '' AQSgggFIBIIBRDCCAUACAQEGCisGAQQBhFkKAwEwMTAN '' SIG '' BglghkgBZQMEAgEFAAQgSr696137b/L1iZdh+gDumG0i '' SIG '' y7UFdJv/wZFbrf7GFXYCBmYzqJqqQxgTMjAyNDA1MDIy '' SIG '' MDU1NDYuMzg1WjAEgAIB9KCB2KSB1TCB0jELMAkGA1UE '' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV '' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD '' SIG '' b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IEly '' SIG '' ZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQL '' SIG '' Ex1UaGFsZXMgVFNTIEVTTjozQkQ0LTRCODAtNjlDMzEl '' SIG '' MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy '' SIG '' dmljZaCCEXcwggcnMIIFD6ADAgECAhMzAAAB5Y9qwPM9 '' SIG '' tAujAAEAAAHlMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV '' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD '' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg '' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU '' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIzMTAxMjE5MDcz '' SIG '' NVoXDTI1MDExMDE5MDczNVowgdIxCzAJBgNVBAYTAlVT '' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS '' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y '' SIG '' YXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5k '' SIG '' IE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhh '' SIG '' bGVzIFRTUyBFU046M0JENC00QjgwLTY5QzMxJTAjBgNV '' SIG '' BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw '' SIG '' ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCp '' SIG '' e+A62rtjuiy6yTtx8k7zvWl2ov/3jcj+TC1ma5lBjTiT '' SIG '' D8DCNPFfcwX0TzXLnK3iGEsiR45DCFBprodKz1ef9vlA '' SIG '' ixqzdT++5/X6v5nc1zDdRc6mjx3ShJSp3iUPEenD+Ha7 '' SIG '' thspprda6xnDXvNNAnA+nfzXaKJppHdfelajrY2RQNV1 '' SIG '' rvhrBQXlh4ns/z5ZanDP3lp7ZEDLNJStM5gnx/gbu4tY '' SIG '' fhQ0UfBe1s1K/+zN44VXT6QH6ts2AgPGVSzYBIs2PrxZ '' SIG '' oMfsw7rlPxgoQyu5JQ3AsPv4FaBLkjpeXJULMnVkIySV '' SIG '' +2dslftSguhtSVaqT93aSjwD/+LnTaqUeRyHm/E2tSX4 '' SIG '' 0VM0r96ko3ucvUWE/wI1jWEO4LHs7g1jP/HGddZHKNSb '' SIG '' 1MjkPMfyQ5DBakkcI9b/pnOiyipY//3Vghvx8PaaXZVi '' SIG '' V+qbA3rELkEexVe3gqlf5X2o6C6Tzcf/cxdXb/MlwXc5 '' SIG '' liT3gontl2kJ6wCg6pRt817sfbTUJs9i/ek3cZyDtjhp '' SIG '' mMQQAGQFqCm5rWCPgos+AmMjtBZuWd0+NGuXeyibn7Re '' SIG '' gk6HHHP1Kf46RX0IrS343e9XEvnCwnqEPqtJ9CAC71fm '' SIG '' nGxDaLkjq47/0LWOBSIx5SOc3ScyZxrJFSeaM4Y4tGEb '' SIG '' HL9VsCRQLssgjELy3Zj3XQIDAQABo4IBSTCCAUUwHQYD '' SIG '' VR0OBBYEFN//n4e7TXMxInxF5QkIBTl4DIeqMB8GA1Ud '' SIG '' IwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1Ud '' SIG '' HwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0 '' SIG '' LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUt '' SIG '' U3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF '' SIG '' BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cu '' SIG '' bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9z '' SIG '' b2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSku '' SIG '' Y3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYI '' SIG '' KwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3 '' SIG '' DQEBCwUAA4ICAQAz+sIThYw9WnfBpBCfaCwbr3453TMh '' SIG '' kPUeB4ASkpT7d6WtF1S3IpqyZQ5yhoBQYlsCOlzoMPNo '' SIG '' XaJQ4jAwSy1kTEyR1lXlGNYFOFwfDjiMQXPf0PN829XN '' SIG '' EVhLqYAuPCPm/tsdlTYBiVLECMj0dj4l0IU+T8nqzIGo '' SIG '' PTkqHUIxcKTXRoq52tq6VdtxFMBXjuft6El+CXgjWb4M '' SIG '' lDsyqcjL6lWrm6PhpX/6bH1ubSHDI2VbdHpbMH6tKiTU '' SIG '' IKGIqW2k77+8ZosVCRk24sWIn08AIrz3CjXXorGZrbbO '' SIG '' zh2wDO/eWbyi0hKl4kVIw2Gcnh8gMrDBAC2yIXV4BxIe '' SIG '' tCqGcs5QV891cRIqxO54bnDcDNrVYjpcCOxJHlOYbnXL '' SIG '' Z1whueSbjMP8G+3O9USopmQPyl5VqZgb5CZAdAWREvDg '' SIG '' hg3fs2P0/QZ06fLIt+k6pfOFX6WHvYh5suz6qsajBdgp '' SIG '' +KtmtJhDJ6Qa7gxhP4EfXPElSdp7ZAEcuUn5brifzAet '' SIG '' ckb09ZlMd5cqaTttnj4wY58KBL1cWw409Y4XTDXXrzrg '' SIG '' 3iRs0SyvRzZkwwvk3WUJY/lTICJvGXhCETRdKGr4hfkG '' SIG '' XFGS1s1m2Kusg6JPBGShYkUeaLQaBi72mBacQWVBPJpy '' SIG '' yrg5WKG468Ye5Z8K8Vf3zMtBfX0qNicRZrS4LTCCB3Ew '' SIG '' ggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJ '' SIG '' KoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD '' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k '' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x '' SIG '' MjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj '' SIG '' YXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIy '' SIG '' NVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMx '' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl '' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh '' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh '' SIG '' bXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUAA4IC '' SIG '' DwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3u '' SIG '' nAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VT '' SIG '' cVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aO '' SIG '' RmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlh '' SIG '' AnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S '' SIG '' /rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc '' SIG '' 6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1o '' SIG '' O5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbni '' SIG '' jYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3E '' SIG '' XzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYr '' SIG '' bqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M '' SIG '' 269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFph '' SIG '' AXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6Cm '' SIG '' gyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr '' SIG '' 9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfH '' SIG '' CBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQIDAQAB '' SIG '' o4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkr '' SIG '' BgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4w '' SIG '' HQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwG '' SIG '' A1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYB '' SIG '' BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w '' SIG '' a2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUE '' SIG '' DDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMA '' SIG '' dQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw '' SIG '' AwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX '' SIG '' zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js '' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N '' SIG '' aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYB '' SIG '' BQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3 '' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0Nl '' SIG '' ckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsF '' SIG '' AAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwUtj5O '' SIG '' R2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts '' SIG '' 0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp '' SIG '' 4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRX '' SIG '' ud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFd '' SIG '' PSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZ '' SIG '' QhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzs '' SIG '' kYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCr '' SIG '' dTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5 '' SIG '' JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxn '' SIG '' GSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdU '' SIG '' CbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3 '' SIG '' Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzba '' SIG '' ukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRb '' SIG '' atGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNT '' SIG '' TY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggLTMIICPAIB '' SIG '' ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD '' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k '' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x '' SIG '' LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh '' SIG '' dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT '' SIG '' UyBFU046M0JENC00QjgwLTY5QzMxJTAjBgNVBAMTHE1p '' SIG '' Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH '' SIG '' BgUrDgMCGgMVAPeNohrmBa7BOMM1g3fORKTOkYsKoIGD '' SIG '' MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh '' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV '' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE '' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw '' SIG '' DQYJKoZIhvcNAQEFBQACBQDp3icNMCIYDzIwMjQwNTAy '' SIG '' MjI1MTU3WhgPMjAyNDA1MDMyMjUxNTdaMHMwOQYKKwYB '' SIG '' BAGEWQoEATErMCkwCgIFAOneJw0CAQAwBgIBAAIBCDAH '' SIG '' AgEAAgIRVzAKAgUA6d94jQIBADA2BgorBgEEAYRZCgQC '' SIG '' MSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQow '' SIG '' CAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADaQqHja '' SIG '' OqoHQOVEUxJ0LoKdCagtOxJfD3099ShJlCv3vUni6+3H '' SIG '' GPKMH46NjPwqRE+gazyrJAR1sEnnrM+jlmA6Ybde0GlC '' SIG '' 7NQUjSVI/LU9ie9XkodPq28cc5KXmny1roGN3UByBene '' SIG '' hsSHrJ63JCzv//vI4XGwGemjCYKmz3oYMYIEDTCCBAkC '' SIG '' AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh '' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV '' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE '' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC '' SIG '' EzMAAAHlj2rA8z20C6MAAQAAAeUwDQYJYIZIAWUDBAIB '' SIG '' BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB '' SIG '' BDAvBgkqhkiG9w0BCQQxIgQgO/d+xJXyipEnhQB5YCKb '' SIG '' /510ev/Bpllc+uySGfDQNiIwgfoGCyqGSIb3DQEJEAIv '' SIG '' MYHqMIHnMIHkMIG9BCAVqdP//qjxGFhe2YboEXeb8I/p '' SIG '' Aof01CwhbxUH9U697TCBmDCBgKR+MHwxCzAJBgNVBAYT '' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH '' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y '' SIG '' cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l '' SIG '' LVN0YW1wIFBDQSAyMDEwAhMzAAAB5Y9qwPM9tAujAAEA '' SIG '' AAHlMCIEIIxI1X5ALp6rnWH5V1diADKb7ruIm50/mvcH '' SIG '' f/g5juuhMA0GCSqGSIb3DQEBCwUABIICAGNonK74S7hT '' SIG '' zX8qp/LdUDLYemNFd6lC/VyG/wGUm1KRz7xb+chJDA9z '' SIG '' rEumYQR8ZvS6B6bhbhRMi34xoAKA/saTgtGDr/zT3hGp '' SIG '' n79JJt4F9d/bBUwt2am+PIX+PbnQl90VUYqGVml21fbE '' SIG '' bmym5kuOWPa3ro59yMZ7QcKs1ZFYSNzUNacQ52XuGsZP '' SIG '' 07l77Nm5ECWPzXfuBCmbDsxeK7LDBCeptTO3DAIrtkDf '' SIG '' p+dx2eO4d0E3bqQ0buISKCh/ERqVP+D5kvFx4xE/z8ag '' SIG '' RazCysLFvzElldhnWf0+6+AOgT++2r0LKJf52NpytAA+ '' SIG '' TBw4tgFQKhai5+jn5k0Y7r0kyFtQ76r7szNbobPKkxEB '' SIG '' v69Gwq9prlezA7knth/NjnZdFgkmiMTJkX4BS23Kouvn '' SIG '' 2Hz5qMZk3bcS4UM+wyOr85xq8DeN8hVj9eiUWTOlXEJQ '' SIG '' lGD+o196BgWD+Yi1Rap3K84gXyXOpbXK83aYDlWGCJxo '' SIG '' fAga1ZUIhqol7Q++SMllOjmKcGb+1kSRUFo30BaEaT81 '' SIG '' 8cViNmglvbi4fCWG38dhhWKxDil+4LLMjPsKyS6tnEvS '' SIG '' VWB2iv/l1hDfTeCarsJVxnPbQY8vo4mE2vVBhA8Bwc/E '' SIG '' oZpQMEDaKUHHCJ+qlAKwmnbqbWH1+Kj3FRJeU5MvKR22 '' SIG '' aeejB/WQJnsi '' SIG '' End signature block