' Windows Installer utility to copy a file into a database text field
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates processing of primary key data
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1

Const msiViewModifyUpdate  = 2
Const msiReadStreamAnsi    = 2

Dim argCount:argCount = Wscript.Arguments.Count
If argCount > 0 Then If InStr(1, Wscript.Arguments(0), "?", vbTextCompare) > 0 Then argCount = 0
If (argCount < 4) Then
	Wscript.Echo "Windows Installer utility to copy a file into a database text field." &_
		vbNewLine & "The 1st argument is the path to the installation database" &_
		vbNewLine & "The 2nd argument is the database table name" &_
		vbNewLine & "The 3rd argument is the set of primary key values, concatenated with colons" &_
		vbNewLine & "The 4th argument is non-key column name to receive the text data" &_
		vbNewLine & "The 5th argument is the path to the text file to copy" &_
		vbNewLine & "If the 5th argument is omitted, the existing data will be listed" &_
		vbNewLine & "All primary keys values must be specified in order, separated by colons" &_
		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


' Process input arguments and open database
Dim databasePath: databasePath = Wscript.Arguments(0)
Dim tableName   : tableName    = Wscript.Arguments(1)
Dim rowKeyValues: rowKeyValues = Split(Wscript.Arguments(2),":",-1,vbTextCompare)
Dim dataColumn  : dataColumn   = Wscript.Arguments(3)
Dim openMode : If argCount >= 5 Then openMode = msiOpenDatabaseModeTransact Else openMode = msiOpenDatabaseModeReadOnly
Dim database : Set database = installer.OpenDatabase(databasePath, openMode) : CheckError
Dim keyRecord : Set keyRecord = database.PrimaryKeys(tableName) : CheckError
Dim keyCount : keyCount = keyRecord.FieldCount
If UBound(rowKeyValues) + 1 <> keyCount Then Fail "Incorrect number of primary key values"

' Generate and execute query
Dim predicate, keyIndex
For keyIndex = 1 To keyCount
	If Not IsEmpty(predicate) Then predicate = predicate & " AND "
	predicate = predicate & "`" & keyRecord.StringData(keyIndex) & "`='" & rowKeyValues(keyIndex-1) & "'"
Next
Dim query : query = "SELECT `" & dataColumn & "` FROM `" & tableName & "` WHERE " & predicate
REM Wscript.Echo query 
Dim view : Set view = database.OpenView(query) : CheckError
view.Execute : CheckError
Dim resultRecord : Set resultRecord = view.Fetch : CheckError
If resultRecord Is Nothing Then Fail "Requested table row not present"

' Update value if supplied. Cannot store stream object in string column, must convert stream to string
If openMode = msiOpenDatabaseModeTransact Then
	resultRecord.SetStream 1, Wscript.Arguments(4) : CheckError
	Dim sizeStream : sizeStream = resultRecord.DataSize(1)
	resultRecord.StringData(1) = resultRecord.ReadStream(1, sizeStream, msiReadStreamAnsi) : CheckError
	view.Modify msiViewModifyUpdate, resultRecord : CheckError
	database.Commit : CheckError
Else
	Wscript.Echo resultRecord.StringData(1)
End If

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
	Fail message
End Sub

Sub Fail(message)
	Wscript.Echo message
	Wscript.Quit 2
End Sub

'' SIG '' Begin signature block
'' SIG '' MIIpYgYJKoZIhvcNAQcCoIIpUzCCKU8CAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' +n92KCymBpb0NXQZvmHi9Nqe+zPewtCgF8ON8kB0lL+g
'' SIG '' gg3WMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
'' SIG '' AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
'' SIG '' Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
'' SIG '' ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
'' SIG '' VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
'' SIG '' cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
'' SIG '' SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
'' SIG '' 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
'' SIG '' hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
'' SIG '' B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
'' SIG '' UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
'' SIG '' 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
'' SIG '' xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
'' SIG '' YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
'' SIG '' 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
'' SIG '' uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
'' SIG '' 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
'' SIG '' 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
'' SIG '' K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
'' SIG '' O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
'' SIG '' LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
'' SIG '' yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
'' SIG '' 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
'' SIG '' AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
'' SIG '' gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
'' SIG '' DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
'' SIG '' X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
'' SIG '' nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
'' SIG '' +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
'' SIG '' /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
'' SIG '' ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
'' SIG '' iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
'' SIG '' RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
'' SIG '' khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
'' SIG '' /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
'' SIG '' FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
'' SIG '' MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
'' SIG '' mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
'' SIG '' cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
'' SIG '' nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
'' SIG '' iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
'' SIG '' kFS+KpYAm5VE9r5kKZZVdzCCBxEwggT5oAMCAQICEzMA
'' SIG '' AACHvIJuhaGuU6gAAAAAAIcwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjQ1NFoXDTI2MDUwNjE4MjQ1NFowdDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEAtCb7zQqvXhNLC7dFnQK7CLbh
'' SIG '' GaW7kyNFtxFTEouj05GNcZ4mYbJvK7BM6/zYKu+x5Jyl
'' SIG '' fBmGDZFcYaacHaEIpYf0dChC12YttkKouIxFLDmIJAxz
'' SIG '' yG51BHEL22htUdoozpnv7hhPQ190QcfT5G4vE2HnNXdo
'' SIG '' g4cxf8aH8qGRz1E7y9j8w2nu53AI40QoRu5As6G0oZHD
'' SIG '' KVGT8mDFyragjAMeDgWHXgRejxn37eGdenK1gJkhBjAn
'' SIG '' F0OxFcVo9Vu0ebDqOE4pVkAUKfcmMrymFDm6YkMFIzWW
'' SIG '' +MAC3mOprJiaIKeywuTesGqy2E24cCSW5ZoWUCIWg/FA
'' SIG '' Abj9N9J1KH1ZBg6iusQv0RJzhCk57BPimkW/CQzgV1kr
'' SIG '' HDTEEke8G19jRfoSv0uHYOjVB869KdJNtMmPC2YNDjzn
'' SIG '' mx4OVnV1KpBRzQeApNmjk+K4bu2GImAXsH1WVxeP1xfw
'' SIG '' XppDCoJ0E6CbxSWCzD2TN7aLDdSFtDsNzct0b8EHxzxk
'' SIG '' NZEqqazpdeCRUyPQjvwmc4WW4HkQfWd3VnF7dUWKbjSA
'' SIG '' JDFpe4A00WMuIFoZIJsxNcdXM9YQPISmSLw9FZjYsKjd
'' SIG '' Rx0Qx59q8sZi4GYC4ZLYeCv4twkfsUoqbTZ2J6TJBNEa
'' SIG '' 3vPa+OTClB8rc9M9MqkrHsvwbCfUYZ076oja1wMtEwcC
'' SIG '' AwEAAaOCAa8wggGrMA4GA1UdDwEB/wQEAwIHgDAfBgNV
'' SIG '' HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
'' SIG '' HRMBAf8EAjAAMB0GA1UdDgQWBBQmBkeooj1VeFa1e/hy
'' SIG '' jZGQTX+kqDBFBgNVHREEPjA8pDowODEeMBwGA1UECxMV
'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMRYwFAYDVQQFEw0y
'' SIG '' MzA4NjUrNTA0NTgxMB8GA1UdIwQYMBaAFB6C3w7XjLPX
'' SIG '' AjSDDtqrrWW5r7jsMGoGA1UdHwRjMGEwX6BdoFuGWWh0
'' SIG '' dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
'' SIG '' L01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2RlJTIwU2ln
'' SIG '' bmluZyUyMFBDQSUyMDIwMjQuY3JsMHcGCCsGAQUFBwEB
'' SIG '' BGswaTBnBggrBgEFBQcwAoZbaHR0cDovL3d3dy5taWNy
'' SIG '' b3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl
'' SIG '' MjBXaW5kb3dzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0El
'' SIG '' MjAyMDI0LmNydDANBgkqhkiG9w0BAQwFAAOCAgEAfsvy
'' SIG '' zZE4Anv72F4x8SK0v+9/hU7oLTDhu5f37olRcN6aC2hh
'' SIG '' rXJ+yxebPP4erKM+Ek/NkHmQN8vwA75eVV3jteZkTnBC
'' SIG '' 5BWfJG3c6l058rlqQzk05ueA19l1cMUHxSMWCagYo/Kc
'' SIG '' L5TQAea9yTgTgH3oDmndTbgqD9P2gOYYLuHIt3dIvi2g
'' SIG '' VR5tkZRzOOLItSshIPEbPYP0kD0oo8ETLQ2u07Fps+xd
'' SIG '' SfT/lFd+sjpsEOI3qReYfIRVEqwid8e7RKgNK7ostsgk
'' SIG '' 9eRXGiXZ0N7WfEUVHaAif6cbQyN2MkjCwNl2C7OKh86B
'' SIG '' f0zzzbWlg076+GvqwW1GZufKVfkteI4bZEAKDvtu+f2v
'' SIG '' hEnkUhHj/fh3XtxM9OlNTESrvronEz3w4VIIEl83GgyJ
'' SIG '' p0UuohYxK8iRh4UcmWKDKYQoy5/jwSXufJ7y/x1rj+5A
'' SIG '' jG0iTmM9YIVVP5OXIE2Kqv1dxMsyKNitDLcKFEHGcoJE
'' SIG '' 3QkVL+hLahVm8bSun8jOpmwqEYLNrSnTJfBDeZ0jEV2R
'' SIG '' K7MemxujOwYE4kj+ehf/x73S8hinwEduOzbuP9Z8YHAw
'' SIG '' WVXLwico+hZmCp70BFosW2lxZabwjL2oVBVdW/9RSpNh
'' SIG '' BeJ7TEnAo8kylF0k7fHIJlX0vBQdWJGZuyLAowZLmhlm
'' SIG '' xmQSypcC8rO8KRYarzsxghrkMIIa4AIBATB2MF8xCzAJ
'' SIG '' BgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5k
'' SIG '' b3dzIENvZGUgU2lnbmluZyBQQ0EgMjAyNAITMwAAAIe8
'' SIG '' gm6Foa5TqAAAAAAAhzANBglghkgBZQMEAgEFAKCBqDAZ
'' SIG '' BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG
'' SIG '' 9w0BCQQxIgQgVoGH4+dmBshTi+at5GlIupRaD+jboiJ/
'' SIG '' aGuZbreGi74wWgYKKwYBBAGCNwIBDDFMMEqgJIAiAE0A
'' SIG '' aQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABvAHcAc6Ei
'' SIG '' gCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2luZG93
'' SIG '' czANBgkqhkiG9w0BAQEFAASCAgAvmhAWy/5urY9Nv1+y
'' SIG '' a+K+oMEkHYQrsy27jkF0Nd1XUgCmvNJ49YQ2IiNi1xyE
'' SIG '' Pd+R/7NqLELwRDf9gjOnbkznjB+5P32HI/pWC7JtYWR4
'' SIG '' 2AK+/6sU0VujeYd8Rxo0QDEhyfrN4x8ZEnU//Qi8Ze2s
'' SIG '' JDGQn58M6xR3fFqWHhm3yK+XAtIthLj3EYCqFq2RJMK4
'' SIG '' yp6SgA+mh856qjZ+6RXblwGBoLR6qGRIKnEO/QlzfE/o
'' SIG '' Uw1M/1y/JUswFN4te689V/VJsIKqbeTYHcGxX4lelviC
'' SIG '' MWRIT152j39qA6CNArKkynIpCDcl+8xnJT2MTLZXmMKt
'' SIG '' Ml194KmH5fMaMO+HQERUfYZ1uBArez224O+3pN4SMkm3
'' SIG '' GsapCEz4CQqwaOWpPSdCN+4Zh9Gc2SFoJs+gdh72JLhF
'' SIG '' rzlw1vfgSB99VHq0HM9lGtH7vl5BmBGdMma9JAMR4OK2
'' SIG '' 5bc3elgQWkCe2FdBgy7ERqXToBVOKdM6qDOLOriOKCmS
'' SIG '' pT+A6BkcFpmRUacZF2nj52wjcZM9oRIPeqzYPniArAkF
'' SIG '' EBpM8rAJ0oUMtGdnEmzwOb9/azXZ0YZPLm+19iTvGdsg
'' SIG '' j5eN9EaSHEMzJChPP7ZkZjf17ZAe36Sw1xShF/bk7lkI
'' SIG '' yJfsxnhjqgZzYv+RQUkCYlERTgRVm9CFT/L6+xMyqw0P
'' SIG '' SKoXzKGCF5QwgheQBgorBgEEAYI3AwMBMYIXgDCCF3wG
'' SIG '' CSqGSIb3DQEHAqCCF20wghdpAgEDMQ8wDQYJYIZIAWUD
'' SIG '' BAIBBQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9MIIB
'' SIG '' OQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUA
'' SIG '' BCDhV9Y19hQmu6y9R1c+T9xb1Ms6wnXNEp3CseialKoz
'' SIG '' TwIGaW+uoFsbGBMyMDI2MDEyNzAxMjEwNS40NTlaMASA
'' SIG '' AgH0oIHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUw
'' SIG '' IwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRp
'' SIG '' b25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046OTYw
'' SIG '' MC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFNlcnZpY2WgghHqMIIHIDCCBQigAwIB
'' SIG '' AgITMwAAAgTY4A4HlzJYmAABAAACBDANBgkqhkiG9w0B
'' SIG '' AQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
'' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
'' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
'' SIG '' Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAe
'' SIG '' Fw0yNTAxMzAxOTQyNDdaFw0yNjA0MjIxOTQyNDdaMIHL
'' SIG '' MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
'' SIG '' bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
'' SIG '' cm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNy
'' SIG '' b3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQL
'' SIG '' Ex5uU2hpZWxkIFRTUyBFU046OTYwMC0wNUUwLUQ5NDcx
'' SIG '' JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl
'' SIG '' cnZpY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
'' SIG '' AoICAQDw3Sbcee2d66vkWGTIXhfGqqgQGxQXTnq44XlU
'' SIG '' vNzFSt7ELtO4B939jwZFX7DrRt/4fpzGNkFdGpc7EL5S
'' SIG '' 86qKYv360eXjW+fIv1lAqDD31d/p8Ai9/AZz8M95zo0r
'' SIG '' DpK2csz9WAyR9FtUDx52VOs9qP3/pgpHvgUvD8s6/3KN
'' SIG '' ITzms8QC1tJ3TMw1cRn9CZgVIYzw2iD/ZvOW0sbF/DRd
'' SIG '' gM8UdtxjFIKTXTaI/bJhsQge3TwayKQ2j85RafFFVCR5
'' SIG '' /ChapkrBQWGwNFaPzpmYN46mPiOvUxriISC9nQ/GrDXU
'' SIG '' JWzLDmchrmr2baABJevvw31UYlTlLZY6zUmjkgaRfpoz
'' SIG '' d+Glq9TY2E3Dglr6PtTEKgPu2hM6v8NiU5nTvxhDnxdm
'' SIG '' cf8UN7goeVlELXbOm7j8yw1xM9IyyQuUMWkorBaN/5r9
'' SIG '' g4lvYkMohRXEYB0tMaOPt0FmZmQMLBFpNRVnXBTa4haX
'' SIG '' vn1adKrvTz8VlfnHxkH6riA/h2AlqYWhv0YULsEcHnaD
'' SIG '' WgqA29ry+jH097MpJ/FHGHxk+d9kH2L5aJPpAYuNmMNP
'' SIG '' B7FDTPWAx7Apjr/J5MhUx0i07gV2brAZ9J9RHi+fMPbS
'' SIG '' +Qm4AonC5iOTj+dKCttVRs+jKKuO63CLwqlljvnUCmuS
'' SIG '' avOX54IXOtKcFZkfDdOZ7cE4DioP1QIDAQABo4IBSTCC
'' SIG '' AUUwHQYDVR0OBBYEFBp1dktAcGpW/Km6qm+vu4M1GaJf
'' SIG '' MB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1Gely
'' SIG '' MF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWlj
'' SIG '' cm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUy
'' SIG '' MFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBs
'' SIG '' BggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMv
'' SIG '' TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIw
'' SIG '' MTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/
'' SIG '' BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0G
'' SIG '' CSqGSIb3DQEBCwUAA4ICAQBecv6sRw2HTLMyUC1WJJ+F
'' SIG '' R+DgA9Jkv0lGsIt4y69CmOj8R63oFbhSmcdpakxqNbr8
'' SIG '' v9dyTb4RDyNqtohiiXbtrXmQK5X7y/Q++F0zMotTtTpT
'' SIG '' PvG3eltyV/LvO15mrLoNQ7W4VH58aLt030tORxs8VnAQ
'' SIG '' QF5BmQQMOua+EQgH4f1F4uF6rl3EC17JBSJ0wjHSea/n
'' SIG '' 0WYiHPR0qkz/NRAf8lSUUV0gbIMawGIjn7+RKyCr+8l1
'' SIG '' xdNkK/F0UYuX3hG0nE+9Wc0L4A/enluUN7Pa9vOV6Vi3
'' SIG '' BOJST0RY/ax7iZ45leM8kqCw7BFPcTIkWzxpjr2nCtir
'' SIG '' nkw7OBQ6FNgwIuAvYNTU7r60W421YFOL5pTsMZcNDOOs
'' SIG '' A01xv7ymCF6zknMGpRHuw0Rb2BAJC9quU7CXWbMbAJLd
'' SIG '' Z6XINKariSmCX3/MLdzcW5XOycK0QhoRNRf4WqXRshEB
'' SIG '' aY2ymJvHO48oSSY/kpuYvBS3ljAAuLN7Rp8jWS7t916p
'' SIG '' aGeE7prmrP9FJsoy1LFKmFnW+vg43ANhByuAEXq9Cay5
'' SIG '' o7K2H5NFnR5wj/SLRKwK1iyUX926i1TEviEiAh/PVyJb
'' SIG '' AD4koipig28p/6HDuiYOZ0wUkm/a5W8orIjoOdU3XsJ4
'' SIG '' i08CfNp5I73CsvB5QPYMcLpF9NO/1LvoQAw3UPdL55M5
'' SIG '' HTCCB3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAA
'' SIG '' ABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENl
'' SIG '' cnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkz
'' SIG '' MDE4MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEB
'' SIG '' AQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9
'' SIG '' DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9c
'' SIG '' T8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1q
'' SIG '' UoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP
'' SIG '' 2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBb
'' SIG '' fowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOOR
'' SIG '' j7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c
'' SIG '' +gVVmG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s
'' SIG '' 4mKyzbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9
'' SIG '' QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+
'' SIG '' Nuw2TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjt
'' SIG '' p+iZfD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi
'' SIG '' 0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJ
'' SIG '' NmSLW6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR
'' SIG '' /bLUHMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PA
'' SIG '' PBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIu
'' SIG '' rQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEA
'' SIG '' ATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnP
'' SIG '' EP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1
'' SIG '' GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEw
'' SIG '' PwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAT
'' SIG '' BgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIE
'' SIG '' DB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0T
'' SIG '' AQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo
'' SIG '' 0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRw
'' SIG '' Oi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9k
'' SIG '' dWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmww
'' SIG '' WgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01p
'' SIG '' Y1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG
'' SIG '' 9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv
'' SIG '' 6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsP
'' SIG '' MeTCj/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgAD
'' SIG '' sAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU
'' SIG '' 5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/
'' SIG '' GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefw
'' SIG '' C2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvf
'' SIG '' SaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT9
'' SIG '' 9kxybxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3B
'' SIG '' FARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFr
'' SIG '' DZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S
'' SIG '' 0Ex2tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6T
'' SIG '' vsv4O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAo
'' SIG '' GokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9
'' SIG '' JZTmdHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoI
'' SIG '' Yn/ZcGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNN
'' SIG '' MIICNQIBATCB+aGB0aSBzjCByzELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg
'' SIG '' T3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1Mg
'' SIG '' RVNOOjk2MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNy
'' SIG '' b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYF
'' SIG '' Kw4DAhoDFQC6PYHRw9+9SH+1pwy6qzVG3k9lbqCBgzCB
'' SIG '' gKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
'' SIG '' aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT
'' SIG '' HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0G
'' SIG '' CSqGSIb3DQEBCwUAAgUA7SIVDTAiGA8yMDI2MDEyNjE2
'' SIG '' MzAwNVoYDzIwMjYwMTI3MTYzMDA1WjB0MDoGCisGAQQB
'' SIG '' hFkKBAExLDAqMAoCBQDtIhUNAgEAMAcCAQACAg5xMAcC
'' SIG '' AQACAhSSMAoCBQDtI2aNAgEAMDYGCisGAQQBhFkKBAIx
'' SIG '' KDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAI
'' SIG '' AgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBAByCYGg4
'' SIG '' Mu/uKKmsXXdhwgzzlXASUEWA9juRVsHlcbBWoVRGTbao
'' SIG '' 9yhSs4M/SUNqUAANi5ZoboL0VSdPq3XceG9vndGx1BBL
'' SIG '' xD7hfcX0YYJ+YxPqHFzfiM2XerJG3OgpjfeGWD//dvKF
'' SIG '' bTQC9b2H5fIvtZhc1gRCugoWNyo6YaIHtFQLW1gSbBnG
'' SIG '' 46EUDVVHK6hbeftsCPi0l5LB2MgD7zqrtmLbJ+W6DFwB
'' SIG '' 8dBL91aFMAkqMAgWNfiBJDQusEJAu2WEne5JAu1CQXEl
'' SIG '' 90uMAkgBsqT2I6b3C3m2IqFSNY1Rr39zJ1aDqm6IvFRo
'' SIG '' b4cdHRZUY5GNFTjORnvFbdLlk2oxggQNMIIECQIBATCB
'' SIG '' kzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
'' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
'' SIG '' aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAA
'' SIG '' AgTY4A4HlzJYmAABAAACBDANBglghkgBZQMEAgEFAKCC
'' SIG '' AUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8G
'' SIG '' CSqGSIb3DQEJBDEiBCDzLZk1qO5LvKneNmxXTSkyq4+Z
'' SIG '' IgFiCPYgbwp5F8P+5DCB+gYLKoZIhvcNAQkQAi8xgeow
'' SIG '' gecwgeQwgb0EIPnteGX9Wwq8VdJM6mjfx1GEJsu7/6kU
'' SIG '' 6l0SS5rcebn+MIGYMIGApH4wfDELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh
'' SIG '' bXAgUENBIDIwMTACEzMAAAIE2OAOB5cyWJgAAQAAAgQw
'' SIG '' IgQgbC22O6+9Rq6WhuMcsbRj4MUUC6GDYTA9ozgU+4W2
'' SIG '' NIgwDQYJKoZIhvcNAQELBQAEggIA26SgAFL8J21sHDbx
'' SIG '' dWjcdpzGHc5R9/gWeM4GPloBNZR7fF3YuCNjvsjhCzqd
'' SIG '' Jw9v2AENTg1qoYLt0YlBCP+S9w4js3qQDKpe+AqMc1ze
'' SIG '' lp2m1wx7qC3VVSwAWMshr4IXTWtaJlu1z7QcALK5PPuS
'' SIG '' bWBHF9wSrwFTOfTUpmYMoWd3ayJ7ky0yZVaSosgaCDQK
'' SIG '' 7pDvDlZXoL2aGry6oMDci/NTmfpCRwmtGU4wPw1mQDEs
'' SIG '' s//r68u/qOqcVR6qJXnlLaaSlGFziP4zr8/H6CeVgXI3
'' SIG '' xoZRYr+YVF++hPy+t+ye+CVdhYE3V/NKsGzNgHxk8nXW
'' SIG '' YXdlE0R3C7/MRhi5w3dumFINn2LTmw7m5HG1xva5CUxr
'' SIG '' 5Q3rvrR6M6A+xIvk89oj8zg6YI8yef/rQW2KqyTTAZ+b
'' SIG '' XWv9IELXUVkfVKcSh1yu7ogJizD/22ji5SQWRF8YAdZL
'' SIG '' 2AmN/dgh75ppOtGgTmiIskH5vpBMpigdfCe9QdMpP1vd
'' SIG '' cYTfuUX5OghI/Shk4O7P+ANwcYXr+NcC2EDsnYzK/ulc
'' SIG '' mi9V/KfuqTk921/fNZftRZpyq+bdjvo76xhZSlVDBv2a
'' SIG '' rC8YhM3giWXE5SYVflgbWvDvJ0WBx/1HW+K31Xq2guAj
'' SIG '' /zvh8xevPkrL20RDxanjXbsYZ8PKbcugC8CtRLLavGBJ
'' SIG '' DxkgjU4=
'' SIG '' End signature block
