' Windows Installer utility to generate a transform from two databases
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates use of Database.GenerateTransform and MsiDatabaseGenerateTransform
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3

If Wscript.Arguments.Count < 2 Then
	Wscript.Echo "Windows Installer database tranform generation utility" &_
		vbNewLine & " 1st argument is the path to the original installer database" &_
		vbNewLine & " 2nd argument is the path to the updated installer database" &_
		vbNewLine & " 3rd argument is the path to the transform file to generate" &_
		vbNewLine & " If the 3rd argument is omitted, the databases are only compared" &_
		vbNewLine &_
		vbNewLine & "Copyright (C) Microsoft Corporation.  All rights reserved."
	Wscript.Quit 1
End If

' Connect to Windows Installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError

' Open databases and generate transform
Dim database1 : Set database1 = installer.OpenDatabase(Wscript.Arguments(0), msiOpenDatabaseModeReadOnly) : CheckError
Dim database2 : Set database2 = installer.OpenDatabase(Wscript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
Dim transform:transform = ""  'Simply compare if no output transform file supplied
If Wscript.Arguments.Count >= 3 Then transform = Wscript.Arguments(2)
Dim different:different = Database2.GenerateTransform(Database1, transform) : CheckError
If Not different Then Wscript.Echo "Databases are identical" Else If transform = Empty Then Wscript.Echo "Databases are different"

Sub CheckError
	Dim message, errRec
	If Err = 0 Then Exit Sub
	message = Err.Source & " " & Hex(Err) & ": " & Err.Description
	If Not installer Is Nothing Then
		Set errRec = installer.LastErrorRecord
		If Not errRec Is Nothing Then message = message & vbNewLine & errRec.FormatText
	End If
	Wscript.Echo message
	Wscript.Quit 2
End Sub

'' SIG '' Begin signature block
'' SIG '' MIImPwYJKoZIhvcNAQcCoIImMDCCJiwCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' LEOvI1OL4Ms+i8VD+9Lv0JnljZ8+Z42whrFijf9Ua/Cg
'' SIG '' ggt2MIIE/jCCA+agAwIBAgITMwAABaZYEGdLPWx89gAA
'' SIG '' AAAFpjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTI0MDgyMjE5MjU1N1oX
'' SIG '' DTI1MDcwNTE5MjU1N1owdDELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
'' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
'' SIG '' umNGOR6LgZFk1THk2vW3NrXGKPwTj9NWpe4hKbCXtraY
'' SIG '' afofK2h67UZgcaUTBp5DnWodrzw5nhwZPG9glhUmMj/e
'' SIG '' sHENG8/ya59HX9Nv6jQY2MLVPB+Mr/DwlcBtSyXzUbeV
'' SIG '' nmdmIPF+pxkGFEQLl8KY0bnMmJT5S+s6uuJ12SiACfdu
'' SIG '' OwvE0JOP44cvTsNjy8PCHNnWo3ejNQVmGUz5Nzn31Li3
'' SIG '' W8OWY5J7BKMU2c/lf34/VMjJdrPq7qYeDo2IJsYMkSPN
'' SIG '' ysvnyvokbaWA4oy8ANC7j4m+Ou1WL9JlpDFWr5gN7jfF
'' SIG '' pbUyqsrSK9rfiwNsdmEAA8yXpII+qEzHEwIDAQABo4IB
'' SIG '' fTCCAXkwHwYDVR0lBBgwFgYKKwYBBAGCNz0GAQYIKwYB
'' SIG '' BQUHAwMwHQYDVR0OBBYEFE6cI++DFsHzFTkxX8wNFC39
'' SIG '' UpYtMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQLEyRNaWNy
'' SIG '' b3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQx
'' SIG '' FjAUBgNVBAUTDTIzMDg2NSs1MDI3MTIwHwYDVR0jBBgw
'' SIG '' FoAU5vxfe7siAFjkck619CF0IzLm76wwVgYDVR0fBE8w
'' SIG '' TTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29t
'' SIG '' L3BraS9jcmwvcHJvZHVjdHMvTWljQ29kU2lnUENBXzIw
'' SIG '' MTAtMDctMDYuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggr
'' SIG '' BgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29t
'' SIG '' L3BraS9jZXJ0cy9NaWNDb2RTaWdQQ0FfMjAxMC0wNy0w
'' SIG '' Ni5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsF
'' SIG '' AAOCAQEAtf5mqFjLeh0YfVmslPmBu6sVN3x8lLTdH2eY
'' SIG '' 1PWbITjY6IEh5YtAf6y2pmPjRij7ebZeJB1lLjdzDh7/
'' SIG '' 0Y/XG9vQUNyuczRPjMwAk1FNW+w1n8NG2XHMLy+YDqlF
'' SIG '' UjcuvxVSQXDqLO374g51sl75wnuPb+uoQyMC6s7BdfNm
'' SIG '' 376xWV+7cVq0PfJltFIciJPp8bxp6zjZ6od39acS/QWe
'' SIG '' 8710FpYi9ENiV845KUKBFTq4MX6f84Rtz8CDCa5/Yonk
'' SIG '' NVUerDLKo1b0s6m8b8zMaiu/2s3tj97VP5SvAGz6uhwF
'' SIG '' nnLZXUJR47uy7tNI6dzWNz9XBgm0DSVjkf1nvdX0QDCC
'' SIG '' BnAwggRYoAMCAQICCmEMUkwAAAAAAAMwDQYJKoZIhvcN
'' SIG '' AQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
'' SIG '' YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
'' SIG '' VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNV
'' SIG '' BAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1
'' SIG '' dGhvcml0eSAyMDEwMB4XDTEwMDcwNjIwNDAxN1oXDTI1
'' SIG '' MDcwNjIwNTAxN1owfjELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEo
'' SIG '' MCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ
'' SIG '' Q0EgMjAxMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
'' SIG '' AQoCggEBAOkOZFB5Z7XE4/0JAEyelKz3VmjqRNjPxVhP
'' SIG '' qaV2fG1FutM5krSkHvn5ZYLkF9KP/UScCOhlk84sVYS/
'' SIG '' fQjjLiuoQSsYt6JLbklMaxUH3tHSwokecZTNtX9LtK8I
'' SIG '' 2MyI1msXlDqTziY/7Ob+NJhX1R1dSfayKi7VhbtZP/iQ
'' SIG '' tCuDdMorsztG4/BGScEXZlTJHL0dxFViV3L4Z7klIDTe
'' SIG '' XaallV6rKIDN1bKe5QO1Y9OyFMjByIomCll/B+z/Du2A
'' SIG '' EjVMEqa+Ulv1ptrgiwtId9aFR9UQucboqu6Lai0FXGDG
'' SIG '' tCpbnCMcX0XjGhQebzfLGTOAaolNo2pmY3iT1TDPlR8C
'' SIG '' AwEAAaOCAeMwggHfMBAGCSsGAQQBgjcVAQQDAgEAMB0G
'' SIG '' A1UdDgQWBBTm/F97uyIAWORyTrX0IXQjMubvrDAZBgkr
'' SIG '' BgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMC
'' SIG '' AYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV
'' SIG '' 9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEug
'' SIG '' SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0w
'' SIG '' Ni0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUF
'' SIG '' BzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNy
'' SIG '' dDCBnQYDVR0gBIGVMIGSMIGPBgkrBgEEAYI3LgMwgYEw
'' SIG '' PQYIKwYBBQUHAgEWMWh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9QS0kvZG9jcy9DUFMvZGVmYXVsdC5odG0wQAYI
'' SIG '' KwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AUABvAGwA
'' SIG '' aQBjAHkAXwBTAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJ
'' SIG '' KoZIhvcNAQELBQADggIBABp071dPKXvEFoV4uFDTIvwJ
'' SIG '' nayCl/g0/yosl5US5eS/z7+TyOM0qduBuNweAL7SNW+v
'' SIG '' 5X95lXflAtTx69jNTh4bYaLCWiMa8IyoYlFFZwjjPzwe
'' SIG '' k/gwhRfIOUCm1w6zISnlpaFpjCKTzHSY56FHQ/JTrMAP
'' SIG '' MGl//tIlIG1vYdPfB9XZcgAsaYZ2PVHbpjlIyTdhbQfd
'' SIG '' UxnLp9Zhwr/ig6sP4GubldZ9KFGwiUpRpJpsyLcfShoO
'' SIG '' aanX3MF+0Ulwqratu3JHYxf6ptaipobsqBBEm2O2smmJ
'' SIG '' BsdGhnoYP+jFHSHVe/kCIy3FQcu/HUzIFu+xnH/8IktJ
'' SIG '' im4V46Z/dlvRU3mRhZ3V0ts9czXzPK5UslJHasCqE5XS
'' SIG '' jhHamWdeMoz7N4XR3HWFnIfGWleFwr/dDY+Mmy3rtO7P
'' SIG '' J9O1Xmn6pBYEAackZ3PPTU+23gVWl3r36VJN9HcFT4XG
'' SIG '' 2Avxju1CCdENduMjVngiJja+yrGMbqod5IXaRzNij6TJ
'' SIG '' kTNfcR5Ar5hlySLoQiElihwtYNk3iUGJKhYP12E8lGhg
'' SIG '' Uu/WR5mggEDuFYF3PpzgUxgaUB04lZseZjMTJzkXeIc2
'' SIG '' zk7DX7L1PUdTtuDl2wthPSrXkizON1o+QEIxpB8QCMJW
'' SIG '' nL8kXVECnWp50hfT2sGUjgd7JXFEqwZq5tTG3yOalnXF
'' SIG '' MYIaITCCGh0CAQEwgZUwfjELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEoMCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmlu
'' SIG '' ZyBQQ0EgMjAxMAITMwAABaZYEGdLPWx89gAAAAAFpjAN
'' SIG '' BglghkgBZQMEAgEFAKCBxjAZBgkqhkiG9w0BCQMxDAYK
'' SIG '' KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYB
'' SIG '' BAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQggN866NpS7Hix
'' SIG '' jtjP92kpjmQFYaHpBAujo7+KZVwNlocwWgYKKwYBBAGC
'' SIG '' NwIBDDFMMEqgJIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAA
'' SIG '' VwBpAG4AZABvAHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vd2luZG93czANBgkqhkiG9w0BAQEFAASC
'' SIG '' AQBTKuV5OedUGfO9qF6VpnAFieFjL69tF00P2hsKZp9n
'' SIG '' DEOpD0oajhKIyos6yegtWcuJnNilfoveXqxP3E7KzcCc
'' SIG '' hA1EgtmoUtBYuxqboy53aYJOKxHXt5Wjzz/Gf8MpgKmr
'' SIG '' HE5WCj3aCfYR7bV+QDVoHCIevesd3mUMXBthW1IQvGQy
'' SIG '' srTIHIEcQp3i5gzNvj1iC09id7UtoqFPgKIH3Su6t1KP
'' SIG '' hXgR33pXDQf4unwDOZWRPQWtcTUNe7MxV4HdFwHf/aCV
'' SIG '' 3Uh+qgwqRqDTeD7QD5qcXPXtyU1LsFKieQg7EFSPJVdH
'' SIG '' ckEG/rTI6+7031aKXSCkecssjgxwYIQ12YwzoYIXkzCC
'' SIG '' F48GCisGAQQBgjcDAwExghd/MIIXewYJKoZIhvcNAQcC
'' SIG '' oIIXbDCCF2gCAQMxDzANBglghkgBZQMEAgEFADCCAVEG
'' SIG '' CyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEE
'' SIG '' AYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIN5ITdseDGAW
'' SIG '' U4RSAAzV6Wb4PLSJuBC1OjDJ4Regq/S1AgZnt65wQAAY
'' SIG '' EjIwMjUwMzEyMDkzNDQ4Ljk5WjAEgAIB9KCB0aSBzjCB
'' SIG '' yzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
'' SIG '' cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UE
'' SIG '' CxMeblNoaWVsZCBUU1MgRVNOOjk2MDAtMDVFMC1EOTQ3
'' SIG '' MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
'' SIG '' ZXJ2aWNloIIR6jCCByAwggUIoAMCAQICEzMAAAIE2OAO
'' SIG '' B5cyWJgAAQAAAgQwDQYJKoZIhvcNAQELBQAwfDELMAkG
'' SIG '' A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
'' SIG '' BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
'' SIG '' IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjUwMTMwMTk0
'' SIG '' MjQ3WhcNMjYwNDIyMTk0MjQ3WjCByzELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJp
'' SIG '' Y2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBU
'' SIG '' U1MgRVNOOjk2MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxN
'' SIG '' aWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjAN
'' SIG '' BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8N0m3Hnt
'' SIG '' neur5FhkyF4XxqqoEBsUF056uOF5VLzcxUrexC7TuAfd
'' SIG '' /Y8GRV+w60bf+H6cxjZBXRqXOxC+UvOqimL9+tHl41vn
'' SIG '' yL9ZQKgw99Xf6fAIvfwGc/DPec6NKw6StnLM/VgMkfRb
'' SIG '' VA8edlTrPaj9/6YKR74FLw/LOv9yjSE85rPEAtbSd0zM
'' SIG '' NXEZ/QmYFSGM8Nog/2bzltLGxfw0XYDPFHbcYxSCk102
'' SIG '' iP2yYbEIHt08GsikNo/OUWnxRVQkefwoWqZKwUFhsDRW
'' SIG '' j86ZmDeOpj4jr1Ma4iEgvZ0Pxqw11CVsyw5nIa5q9m2g
'' SIG '' ASXr78N9VGJU5S2WOs1Jo5IGkX6aM3fhpavU2NhNw4Ja
'' SIG '' +j7UxCoD7toTOr/DYlOZ078YQ58XZnH/FDe4KHlZRC12
'' SIG '' zpu4/MsNcTPSMskLlDFpKKwWjf+a/YOJb2JDKIUVxGAd
'' SIG '' LTGjj7dBZmZkDCwRaTUVZ1wU2uIWl759WnSq708/FZX5
'' SIG '' x8ZB+q4gP4dgJamFob9GFC7BHB52g1oKgNva8vox9Pez
'' SIG '' KSfxRxh8ZPnfZB9i+WiT6QGLjZjDTwexQ0z1gMewKY6/
'' SIG '' yeTIVMdItO4Fdm6wGfSfUR4vnzD20vkJuAKJwuYjk4/n
'' SIG '' SgrbVUbPoyirjutwi8KpZY751Aprkmrzl+eCFzrSnBWZ
'' SIG '' Hw3Tme3BOA4qD9UCAwEAAaOCAUkwggFFMB0GA1UdDgQW
'' SIG '' BBQadXZLQHBqVvypuqpvr7uDNRmiXzAfBgNVHSMEGDAW
'' SIG '' gBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBW
'' SIG '' MFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
'' SIG '' cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1w
'' SIG '' JTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEE
'' SIG '' YDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUy
'' SIG '' MFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAM
'' SIG '' BgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUF
'' SIG '' BwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsF
'' SIG '' AAOCAgEAXnL+rEcNh0yzMlAtViSfhUfg4APSZL9JRrCL
'' SIG '' eMuvQpjo/Eet6BW4UpnHaWpMajW6/L/Xck2+EQ8jaraI
'' SIG '' Yol27a15kCuV+8v0PvhdMzKLU7U6Uz7xt3pbclfy7zte
'' SIG '' Zqy6DUO1uFR+fGi7dN9LTkcbPFZwEEBeQZkEDDrmvhEI
'' SIG '' B+H9ReLheq5dxAteyQUidMIx0nmv59FmIhz0dKpM/zUQ
'' SIG '' H/JUlFFdIGyDGsBiI5+/kSsgq/vJdcXTZCvxdFGLl94R
'' SIG '' tJxPvVnNC+AP3p5blDez2vbzlelYtwTiUk9EWP2se4me
'' SIG '' OZXjPJKgsOwRT3EyJFs8aY69pwrYq55MOzgUOhTYMCLg
'' SIG '' L2DU1O6+tFuNtWBTi+aU7DGXDQzjrANNcb+8pghes5Jz
'' SIG '' BqUR7sNEW9gQCQvarlOwl1mzGwCS3WelyDSmq4kpgl9/
'' SIG '' zC3c3FuVzsnCtEIaETUX+Fql0bIRAWmNspibxzuPKEkm
'' SIG '' P5KbmLwUt5YwALize0afI1ku7fdeqWhnhO6a5qz/RSbK
'' SIG '' MtSxSphZ1vr4ONwDYQcrgBF6vQmsuaOyth+TRZ0ecI/0
'' SIG '' i0SsCtYslF/duotUxL4hIgIfz1ciWwA+JKIqYoNvKf+h
'' SIG '' w7omDmdMFJJv2uVvKKyI6DnVN17CeItPAnzaeSO9wrLw
'' SIG '' eUD2DHC6RfTTv9S76EAMN1D3S+eTOR0wggdxMIIFWaAD
'' SIG '' AgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3
'' SIG '' DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYD
'' SIG '' VQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBB
'' SIG '' dXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0z
'' SIG '' MDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYD
'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
'' SIG '' QSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
'' SIG '' CgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9Kp
'' SIG '' bE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5K
'' SIG '' Wv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTz
'' SIG '' xXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9
'' SIG '' cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl
'' SIG '' 3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3K
'' SIG '' Ni1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3t
'' SIG '' pK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I5Jas
'' SIG '' AUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ
'' SIG '' 1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHo
'' SIG '' vwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz
'' SIG '' 1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymei
'' SIG '' XtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8w
'' SIG '' dJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFd
'' SIG '' Etsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94
'' SIG '' q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0w
'' SIG '' ggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGC
'' SIG '' NxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1Ud
'' SIG '' DgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAE
'' SIG '' VTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIB
'' SIG '' FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
'' SIG '' L0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYI
'' SIG '' KwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD
'' SIG '' AEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w
'' SIG '' HwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQw
'' SIG '' VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNy
'' SIG '' b3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9v
'' SIG '' Q2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB
'' SIG '' BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNy
'' SIG '' b3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRf
'' SIG '' MjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIB
'' SIG '' AJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEG
'' SIG '' k5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi
'' SIG '' 7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce57
'' SIG '' 32pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OO
'' SIG '' PcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECW
'' SIG '' OKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWK
'' SIG '' NsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3m
'' SIG '' Sj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSw
'' SIG '' ethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23K
'' SIG '' jgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4
'' SIG '' S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFE
'' SIG '' fnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+
'' SIG '' pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/
'' SIG '' Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7t
'' SIG '' fqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJt
'' SIG '' pQUQwXEGahC0HVUzWLOhcGbyoYIDTTCCAjUCAQEwgfmh
'' SIG '' gdGkgc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
'' SIG '' YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
'' SIG '' VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNV
'' SIG '' BAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMx
'' SIG '' JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo5NjAwLTA1
'' SIG '' RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
'' SIG '' U3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAuj2B
'' SIG '' 0cPfvUh/tacMuqs1Rt5PZW6ggYMwgYCkfjB8MQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
'' SIG '' VGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsF
'' SIG '' AAIFAOt7OAYwIhgPMjAyNTAzMTEyMjMwMzBaGA8yMDI1
'' SIG '' MDMxMjIyMzAzMFowdDA6BgorBgEEAYRZCgQBMSwwKjAK
'' SIG '' AgUA63s4BgIBADAHAgEAAgIPUDAHAgEAAgIT9DAKAgUA
'' SIG '' 63yJhgIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEE
'' SIG '' AYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0G
'' SIG '' CSqGSIb3DQEBCwUAA4IBAQB+QIaEJn2/IP4eTp7OLL3N
'' SIG '' rh3Gm4OrloJTYVVxfPot64pg1ch/paEAzfaK0ZYJwFil
'' SIG '' NRrEI3rzF8CEmnZ0ECUoU52MOOcKgyIz/dql9QZfU5Jg
'' SIG '' wdPYgamWW1ISh9CydtxWBF0RS8xtDVVt2LzSYS7EbLSg
'' SIG '' w2clQ9vsAkZFU40vNu5+uJ9SNPZ8QwY3YxLrCMwB0MBa
'' SIG '' y5Ij5cRLE0PRUN3F5hKULFtx0LYEyp3l5EE8dAkdjeOI
'' SIG '' New2ulLpReDrKsuRCmqL8n540ongf3z7zZuGRk+nxoYn
'' SIG '' h29d8b3A9n/oYAP/pK9Qja1qDFw6RLF3t1k+jGFJT8WG
'' SIG '' pAZNBglHcJtvMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgUENBIDIwMTACEzMAAAIE2OAOB5cyWJgA
'' SIG '' AQAAAgQwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3
'' SIG '' DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQx
'' SIG '' IgQgCrxz7aMNavaQLrkxUhjAxVXnFm8KmqnDn/syth1r
'' SIG '' Zs0wgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCD5
'' SIG '' 7Xhl/VsKvFXSTOpo38dRhCbLu/+pFOpdEkua3Hm5/jCB
'' SIG '' mDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
'' SIG '' YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
'' SIG '' VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
'' SIG '' BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
'' SIG '' AhMzAAACBNjgDgeXMliYAAEAAAIEMCIEILGdqJWIy2tF
'' SIG '' BrJRbRDMO10URR7UPBRQMO1v9aAvhABXMA0GCSqGSIb3
'' SIG '' DQEBCwUABIICAII+qCIObf4HKLanLg0roi+ZbC3h5OPc
'' SIG '' HlBn0zKZSWmShpAK8JYEsoo8Xp3kuFDCiJgdH1Chwe03
'' SIG '' cVHIsn5+t/vNTiSADOnot7loloeQ0X3ULEmQwm53FYC9
'' SIG '' bvG/YPUh09dN304LPdkOX7+ynb8V5+RmsLulnDY2sVsQ
'' SIG '' PG+XxvMdkgZ4sHR6K588fddPyr7qgEtPOV9+2kkAPmZ8
'' SIG '' ArtgXFPnp3YANL673vMUgIrjTBZn38zF3aU/hQC7vwTE
'' SIG '' Io7kyUu4JqkvpiiK1jYxZDUfHbNY23YMiU+rvY9QJWRj
'' SIG '' MasKuqlkt1Q8le2mmCwZwX/qMDSJekVrW6idfYvbC6EY
'' SIG '' 622nLKfRTAUxk4H3eZ4JxRnm/26is7qwKP9mtKagT34X
'' SIG '' RWqsPcwd2eQYr7MkniaCpVdxdCMwvWW5204S+VkkEoX2
'' SIG '' SmkBokp6WzHdjAvT7q8IRa94kFDYUQr+VV+ewQJYPZfH
'' SIG '' ECjUCMGCprrUvgMCkQsvYDbhE+TPXPa2G6DeLa1wuQYa
'' SIG '' 7fPhfX0z5E9c492ib7bH1Opj1fanGgbKjpxwRoGCEAtf
'' SIG '' 67qWoK8MY29L3L/gACRu973p5xVLTLTUTqPlIDjwFZQb
'' SIG '' aP4xsvBYjusqHnoGlk8x9vQdNayl01rYUEAmHKm/BOOA
'' SIG '' NCDR9wt32jHkzR8d9n/ALxMvg3Y20lJXeQ08
'' SIG '' End signature block
