C
Carl Youngblood
--------------ms070701060507010705010004
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Good points. The second problem could be fixed by not storing state
information in the session. Store information in the page itself or in
the URL that determines whose record you are updating and only use the
session for checking who is logged in and what their permissions are.
The problem with limited GET size would never be a problem for me
because all I hold in the session is usually a session id (32 bytes) and
maybe a userid and username of who is logged in. All other information
I can retrieve on a per-page basis from the database. Session bloat is
IMO something that should be strictly avoided, especially because
storing something in a session is inherently unsafe. The brownie idea
is what amazon.com uses. It's actually a pretty good solution. And of
course, none of these solutions will help a user who forgets to log out.
Carl
--------------ms070701060507010705010004
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIPxjCC
BMgwggQxoAMCAQICBAIAApswDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCVVMxGDAWBgNV
BAoTD0dURSBDb3Jwb3JhdGlvbjEcMBoGA1UEAxMTR1RFIEN5YmVyVHJ1c3QgUm9vdDAeFw0w
MjA4MjcxOTA3MDBaFw0wNjAyMjMyMzU5MDBaMIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMO
Q29tb2RvIExpbWl0ZWQxHTAbBgNVBAsTFENvbW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQL
Ez1UZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9y
ZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAyIENvbW9kbyBMaW1pdGVkMSwwKgYDVQQDEyND
b21vZG8gQ2xhc3MgMyBTZWN1cml0eSBTZXJ2aWNlcyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBALEeYGbgQwaeJ2gvApnHiN+F69tl7NRJZ3ouH83cFSzWHqzynUY6XQPA
PQUsWhgNWSVCo3LArSjSrTwx4ksH+16Y66gz1mmyWp7qLEmmJi5M8MyrQNKq3ixOgbW6e7hc
0Hu9R/XABtLA5NdH22JAr6EcUQMY27jQu5THPHnqJWSuJhnhPGZHZ5Kde1WrNMJ1btknjp2M
8B3aa5yGBKKQteqdjM/7OUOo8BgtnvcZECycL+HQsf/XWcTNQDL514HbURzyQVKBQbGDuMgJ
/pkiR4BPnMuu4CjVHKxwR7Alq6E4Qhdr+mpujV95+PYpAzCkbkbUhV2qQJk4dtseAX3lDKUC
AwEAAaOCAacwggGjMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0
LmNvbS9jZ2ktYmluL0NSTC8yMDA2L2NkcC5jcmwwHQYDVR0OBBYEFPZSIhcVEwgDWb8YlZ9I
tLnp/vhmMIGSBgNVHSAEgYowgYcwSQYKKoZIhvhjAQIBBTA7MDkGCCsGAQUFBwIBFi1odHRw
Oi8vd3d3LnB1YmxpYy10cnVzdC5jb20vQ1BTL09tbmlSb290Lmh0bWwwOgYMKwYBBAGyMQEC
AQMBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1AwWAYDVR0j
BFEwT6FJpEcwRTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEcMBoG
A1UEAxMTR1RFIEN5YmVyVHJ1c3QgUm9vdIICAaMwKwYDVR0QBCQwIoAPMjAwMjA4MjcxOTA3
MzFagQ8yMDA1MDIyMzIzNTkwMFowDgYDVR0PAQH/BAQDAgHmMA8GA1UdEwQIMAYBAf8CAQAw
DQYJKoZIhvcNAQEFBQADgYEAtqewenGL4LqzgR42MnqGGNbxq005CHEGWmegSwHlMEBtibWe
Faqxx/QKxlwO6TfeqJfH3M7Ncft0AgfcXxUnCFMHdtS5BunCd1AeysmwwkaBgACtRKpc1iDZ
VTK+Vpbx6r2g47wNgDrqzPuaV+14pTY9VurR53TKNMPPsVHp4AwwggV5MIIEYaADAgECAhEA
0778lNvXcqTJcbJWukDeKDANBgkqhkiG9w0BAQUFADCB3DELMAkGA1UEBhMCR0IxFzAVBgNV
BAoTDkNvbW9kbyBMaW1pdGVkMR0wGwYDVQQLExRDb21vZG8gVHJ1c3QgTmV0d29yazFGMEQG
A1UECxM9VGVybXMgYW5kIENvbmRpdGlvbnMgb2YgdXNlOiBodHRwOi8vd3d3LmNvbW9kby5u
ZXQvcmVwb3NpdG9yeTEfMB0GA1UECxMWKGMpMjAwMiBDb21vZG8gTGltaXRlZDEsMCoGA1UE
AxMjQ29tb2RvIENsYXNzIDMgU2VjdXJpdHkgU2VydmljZXMgQ0EwHhcNMDMwNzA2MDAwMDAw
WhcNMDQwNzA1MjM1OTU5WjCB3zE1MDMGA1UECxMsQ29tb2RvIFRydXN0IE5ldHdvcmsgLSBQ
RVJTT05BIE5PVCBWQUxJREFURUQxRjBEBgNVBAsTPVRlcm1zIGFuZCBDb25kaXRpb25zIG9m
IHVzZTogaHR0cDovL3d3dy5jb21vZG8ubmV0L3JlcG9zaXRvcnkxHzAdBgNVBAsTFihjKTIw
MDMgQ29tb2RvIExpbWl0ZWQxGDAWBgNVBAMTD0NhcmwgWW91bmdibG9vZDEjMCEGCSqGSIb3
DQEJARYUY2FybEB5b3VuZ2Jsb29kcy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
AKtIZSyfoppNIZm8EwguRgIMPh8Sohgro0UwKanm8DXCPiLWFd25/2WjoCB0VYUMXVEC7D+c
tvpruXiLH9lKuD2WNvdHUzr2EdyBP7uJ7Q7C4lMpIjQRtYCOeSH3CeZcy6FyLKZ8jOtV/BgH
fWsaX/z8u29bktnr1K18MCNIKq7RAgMBAAGjggGzMIIBrzAfBgNVHSMEGDAWgBT2UiIXFRMI
A1m/GJWfSLS56f74ZjAdBgNVHQ4EFgQUrG/w0IpUWEnwYe5gDksKWgjVwqcwDgYDVR0PAQH/
BAQDAgWgMAwGA1UdEwEB/wQCMAAwIAYDVR0lBBkwFwYIKwYBBQUHAwQGCysGAQQBsjEBAwUC
MEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQEBMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2Vj
dXJlLmNvbW9kby5uZXQvQ1BTMIGwBgNVHR8EgagwgaUwOKA2oDSGMmh0dHA6Ly9jcmwuY29t
b2RvLm5ldC9DbGFzczNTZWN1cml0eVNlcnZpY2VzXzIuY3JsMDqgOKA2hjRodHRwOi8vY3Js
LmNvbW9kb2NhLmNvbS9DbGFzczNTZWN1cml0eVNlcnZpY2VzXzIuY3JsMC2gK6ApgSdDbGFz
czNTZWN1cml0eVNlcnZpY2VzXzJAY3JsLmNvbW9kby5uZXQwEQYJYIZIAYb4QgEBBAQDAgUg
MB8GA1UdEQQYMBaBFGNhcmxAeW91bmdibG9vZHMub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAR
powtW8sldyqXAfqn276jiYMlTBSX6BH1pjnIHNiYECywMi1txd8hRB3c/iHXCyAHuYq3AgRI
WegFJ+8/B1jGcUxDjvzmSSjnhFSztT1oNJZUrw0yYhdp+yWDjov24sKFFWYwC4rsnO0y6y9D
U9qAyrKk7NuwHp/NPR2tujpnvStgFLk3hvJTUj3Cu//+OXuqPwk6pIDYvnsGkISIkYfO8kQz
F39TAlNLkyBIsrzZdTotnSNlkwgzW1Ys62MRjZsC6zlrv2dMPxn0iyrxxtse3d82EF1Y53B/
hWvgGoQfQtnsz9bJSPbl9CvfMqPO/fRxGomUcOCSr7NPdoafve+JMIIFeTCCBGGgAwIBAgIR
ANO+/JTb13KkyXGyVrpA3igwDQYJKoZIhvcNAQEFBQAwgdwxCzAJBgNVBAYTAkdCMRcwFQYD
VQQKEw5Db21vZG8gTGltaXRlZDEdMBsGA1UECxMUQ29tb2RvIFRydXN0IE5ldHdvcmsxRjBE
BgNVBAsTPVRlcm1zIGFuZCBDb25kaXRpb25zIG9mIHVzZTogaHR0cDovL3d3dy5jb21vZG8u
bmV0L3JlcG9zaXRvcnkxHzAdBgNVBAsTFihjKTIwMDIgQ29tb2RvIExpbWl0ZWQxLDAqBgNV
BAMTI0NvbW9kbyBDbGFzcyAzIFNlY3VyaXR5IFNlcnZpY2VzIENBMB4XDTAzMDcwNjAwMDAw
MFoXDTA0MDcwNTIzNTk1OVowgd8xNTAzBgNVBAsTLENvbW9kbyBUcnVzdCBOZXR3b3JrIC0g
UEVSU09OQSBOT1QgVkFMSURBVEVEMUYwRAYDVQQLEz1UZXJtcyBhbmQgQ29uZGl0aW9ucyBv
ZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBvc2l0b3J5MR8wHQYDVQQLExYoYyky
MDAzIENvbW9kbyBMaW1pdGVkMRgwFgYDVQQDEw9DYXJsIFlvdW5nYmxvb2QxIzAhBgkqhkiG
9w0BCQEWFGNhcmxAeW91bmdibG9vZHMub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQCrSGUsn6KaTSGZvBMILkYCDD4fEqIYK6NFMCmp5vA1wj4i1hXduf9lo6AgdFWFDF1RAuw/
nLb6a7l4ix/ZSrg9ljb3R1M69hHcgT+7ie0OwuJTKSI0EbWAjnkh9wnmXMuhciymfIzrVfwY
B31rGl/8/LtvW5LZ69StfDAjSCqu0QIDAQABo4IBszCCAa8wHwYDVR0jBBgwFoAU9lIiFxUT
CANZvxiVn0i0uen++GYwHQYDVR0OBBYEFKxv8NCKVFhJ8GHuYA5LCloI1cKnMA4GA1UdDwEB
/wQEAwIFoDAMBgNVHRMBAf8EAjAAMCAGA1UdJQQZMBcGCCsGAQUFBwMEBgsrBgEEAbIxAQMF
AjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgEBATArMCkGCCsGAQUFBwIBFh1odHRwczovL3Nl
Y3VyZS5jb21vZG8ubmV0L0NQUzCBsAYDVR0fBIGoMIGlMDigNqA0hjJodHRwOi8vY3JsLmNv
bW9kby5uZXQvQ2xhc3MzU2VjdXJpdHlTZXJ2aWNlc18yLmNybDA6oDigNoY0aHR0cDovL2Ny
bC5jb21vZG9jYS5jb20vQ2xhc3MzU2VjdXJpdHlTZXJ2aWNlc18yLmNybDAtoCugKYEnQ2xh
c3MzU2VjdXJpdHlTZXJ2aWNlc18yQGNybC5jb21vZG8ubmV0MBEGCWCGSAGG+EIBAQQEAwIF
IDAfBgNVHREEGDAWgRRjYXJsQHlvdW5nYmxvb2RzLm9yZzANBgkqhkiG9w0BAQUFAAOCAQEA
EaaMLVvLJXcqlwH6p9u+o4mDJUwUl+gR9aY5yBzYmBAssDItbcXfIUQd3P4h1wsgB7mKtwIE
SFnoBSfvPwdYxnFMQ4785kko54RUs7U9aDSWVK8NMmIXafslg46L9uLChRVmMAuK7JztMusv
Q1PagMqypOzbsB6fzT0drbo6Z70rYBS5N4byU1I9wrv//jl7qj8JOqSA2L57BpCEiJGHzvJE
Mxd/UwJTS5MgSLK82XU6LZ0jZZMIM1tWLOtjEY2bAus5a79nTD8Z9Isq8cbbHt3fNhBdWOdw
f4Vr4BqEH0LZ7M/WyUj25fQr3zKjzv30cRqJlHDgkq+zT3aGn73viTGCBF4wggRaAgEBMIHy
MIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMOQ29tb2RvIExpbWl0ZWQxHTAbBgNVBAsTFENv
bW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz1UZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB1
c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAy
IENvbW9kbyBMaW1pdGVkMSwwKgYDVQQDEyNDb21vZG8gQ2xhc3MgMyBTZWN1cml0eSBTZXJ2
aWNlcyBDQQIRANO+/JTb13KkyXGyVrpA3igwCQYFKw4DAhoFAKCCAsEwGAYJKoZIhvcNAQkD
MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDQwNTA4MDM1MzQ0WjAjBgkqhkiG9w0B
CQQxFgQUe42uSYSkLfS2ksnVnJo/Z6cbK/cwUgYJKoZIhvcNAQkPMUUwQzAKBggqhkiG9w0D
BzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwIC
ASgwggEDBgkrBgEEAYI3EAQxgfUwgfIwgdwxCzAJBgNVBAYTAkdCMRcwFQYDVQQKEw5Db21v
ZG8gTGltaXRlZDEdMBsGA1UECxMUQ29tb2RvIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsTPVRl
cm1zIGFuZCBDb25kaXRpb25zIG9mIHVzZTogaHR0cDovL3d3dy5jb21vZG8ubmV0L3JlcG9z
aXRvcnkxHzAdBgNVBAsTFihjKTIwMDIgQ29tb2RvIExpbWl0ZWQxLDAqBgNVBAMTI0NvbW9k
byBDbGFzcyAzIFNlY3VyaXR5IFNlcnZpY2VzIENBAhEA0778lNvXcqTJcbJWukDeKDCCAQUG
CyqGSIb3DQEJEAILMYH1oIHyMIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMOQ29tb2RvIExp
bWl0ZWQxHTAbBgNVBAsTFENvbW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz1UZXJtcyBh
bmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBvc2l0b3J5
MR8wHQYDVQQLExYoYykyMDAyIENvbW9kbyBMaW1pdGVkMSwwKgYDVQQDEyNDb21vZG8gQ2xh
c3MgMyBTZWN1cml0eSBTZXJ2aWNlcyBDQQIRANO+/JTb13KkyXGyVrpA3igwDQYJKoZIhvcN
AQEBBQAEgYBg+FG3kDSAXRkBTwFPSjPDFgprW2Cf6flDWHhfpHwmsCSvhiLkNR1P8Gs9pAOR
MCvZvgoCTe5Xtw0/pZPrvTpkRsCsXFQtNWCKtxcXUXSuS7+JLngDfkJvgPznL5Yq9eFUdDO3
KrYPlDN1adH1fDPbHLjzxQEux+NWiWUIcYCf2wAAAAAAAA==
--------------ms070701060507010705010004--
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Good points. The second problem could be fixed by not storing state
information in the session. Store information in the page itself or in
the URL that determines whose record you are updating and only use the
session for checking who is logged in and what their permissions are.
The problem with limited GET size would never be a problem for me
because all I hold in the session is usually a session id (32 bytes) and
maybe a userid and username of who is logged in. All other information
I can retrieve on a per-page basis from the database. Session bloat is
IMO something that should be strictly avoided, especially because
storing something in a session is inherently unsafe. The brownie idea
is what amazon.com uses. It's actually a pretty good solution. And of
course, none of these solutions will help a user who forgets to log out.
Carl
One. Picture two students, roommates, with one computer between them.
Student "A" logs into the online registration app and registers for a
few classes, and then minimizes the browser window without logging
out. Shortly thereafter, Student "B" comes along, opens a new browser
window (not realizing that there is already a window open, but
minimized) and logs into the online registration app. He then
registers for a few classes, and closes his window (without logging
out). Student "A" returns, and restores his browser window, intending
to add a few more classes. AT THIS POINT, THE SESSION REFLECTS THE
ACTIVITY OF STUDENT B, NOT STUDENT A. When Student A adds a class, he
inadvertantly adds it to Student B's schedule, which may not actually
be realized until the semester starts. This problem actually bit us
hard a few years ago.
Two. Picture an administrative employee. They are editing a student's
grade history when they get a phone call. It is another student with a
question about their grades, so the employee (not wishing to lose
their place) opens a new window and uses it to answer the student's
question. Then, they close that new window to return to their place.
THE SESSION NOW REFLECTS THE CALLER'S IDENTITY, NOT THE ORIGINAL
STUDENT'S IDENTITY. Thus, when the employee changes a grade, it goes
to the caller's record, not the original student's! This also bit us
hard a few years ago.
We got around this by using what we have called a "brownie." It is the
encoded and encrypted session information, stored in a hidden field on
the page itself and propogated via POSTs. (Another problem with using
GET, in addition to what I've read in this thread, is that GETs are
technically limited to 1k of data, which--in our case--is often
insufficient to transmit the brownie.)
--------------ms070701060507010705010004
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIPxjCC
BMgwggQxoAMCAQICBAIAApswDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCVVMxGDAWBgNV
BAoTD0dURSBDb3Jwb3JhdGlvbjEcMBoGA1UEAxMTR1RFIEN5YmVyVHJ1c3QgUm9vdDAeFw0w
MjA4MjcxOTA3MDBaFw0wNjAyMjMyMzU5MDBaMIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMO
Q29tb2RvIExpbWl0ZWQxHTAbBgNVBAsTFENvbW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQL
Ez1UZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9y
ZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAyIENvbW9kbyBMaW1pdGVkMSwwKgYDVQQDEyND
b21vZG8gQ2xhc3MgMyBTZWN1cml0eSBTZXJ2aWNlcyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBALEeYGbgQwaeJ2gvApnHiN+F69tl7NRJZ3ouH83cFSzWHqzynUY6XQPA
PQUsWhgNWSVCo3LArSjSrTwx4ksH+16Y66gz1mmyWp7qLEmmJi5M8MyrQNKq3ixOgbW6e7hc
0Hu9R/XABtLA5NdH22JAr6EcUQMY27jQu5THPHnqJWSuJhnhPGZHZ5Kde1WrNMJ1btknjp2M
8B3aa5yGBKKQteqdjM/7OUOo8BgtnvcZECycL+HQsf/XWcTNQDL514HbURzyQVKBQbGDuMgJ
/pkiR4BPnMuu4CjVHKxwR7Alq6E4Qhdr+mpujV95+PYpAzCkbkbUhV2qQJk4dtseAX3lDKUC
AwEAAaOCAacwggGjMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0
LmNvbS9jZ2ktYmluL0NSTC8yMDA2L2NkcC5jcmwwHQYDVR0OBBYEFPZSIhcVEwgDWb8YlZ9I
tLnp/vhmMIGSBgNVHSAEgYowgYcwSQYKKoZIhvhjAQIBBTA7MDkGCCsGAQUFBwIBFi1odHRw
Oi8vd3d3LnB1YmxpYy10cnVzdC5jb20vQ1BTL09tbmlSb290Lmh0bWwwOgYMKwYBBAGyMQEC
AQMBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1AwWAYDVR0j
BFEwT6FJpEcwRTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEcMBoG
A1UEAxMTR1RFIEN5YmVyVHJ1c3QgUm9vdIICAaMwKwYDVR0QBCQwIoAPMjAwMjA4MjcxOTA3
MzFagQ8yMDA1MDIyMzIzNTkwMFowDgYDVR0PAQH/BAQDAgHmMA8GA1UdEwQIMAYBAf8CAQAw
DQYJKoZIhvcNAQEFBQADgYEAtqewenGL4LqzgR42MnqGGNbxq005CHEGWmegSwHlMEBtibWe
Faqxx/QKxlwO6TfeqJfH3M7Ncft0AgfcXxUnCFMHdtS5BunCd1AeysmwwkaBgACtRKpc1iDZ
VTK+Vpbx6r2g47wNgDrqzPuaV+14pTY9VurR53TKNMPPsVHp4AwwggV5MIIEYaADAgECAhEA
0778lNvXcqTJcbJWukDeKDANBgkqhkiG9w0BAQUFADCB3DELMAkGA1UEBhMCR0IxFzAVBgNV
BAoTDkNvbW9kbyBMaW1pdGVkMR0wGwYDVQQLExRDb21vZG8gVHJ1c3QgTmV0d29yazFGMEQG
A1UECxM9VGVybXMgYW5kIENvbmRpdGlvbnMgb2YgdXNlOiBodHRwOi8vd3d3LmNvbW9kby5u
ZXQvcmVwb3NpdG9yeTEfMB0GA1UECxMWKGMpMjAwMiBDb21vZG8gTGltaXRlZDEsMCoGA1UE
AxMjQ29tb2RvIENsYXNzIDMgU2VjdXJpdHkgU2VydmljZXMgQ0EwHhcNMDMwNzA2MDAwMDAw
WhcNMDQwNzA1MjM1OTU5WjCB3zE1MDMGA1UECxMsQ29tb2RvIFRydXN0IE5ldHdvcmsgLSBQ
RVJTT05BIE5PVCBWQUxJREFURUQxRjBEBgNVBAsTPVRlcm1zIGFuZCBDb25kaXRpb25zIG9m
IHVzZTogaHR0cDovL3d3dy5jb21vZG8ubmV0L3JlcG9zaXRvcnkxHzAdBgNVBAsTFihjKTIw
MDMgQ29tb2RvIExpbWl0ZWQxGDAWBgNVBAMTD0NhcmwgWW91bmdibG9vZDEjMCEGCSqGSIb3
DQEJARYUY2FybEB5b3VuZ2Jsb29kcy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
AKtIZSyfoppNIZm8EwguRgIMPh8Sohgro0UwKanm8DXCPiLWFd25/2WjoCB0VYUMXVEC7D+c
tvpruXiLH9lKuD2WNvdHUzr2EdyBP7uJ7Q7C4lMpIjQRtYCOeSH3CeZcy6FyLKZ8jOtV/BgH
fWsaX/z8u29bktnr1K18MCNIKq7RAgMBAAGjggGzMIIBrzAfBgNVHSMEGDAWgBT2UiIXFRMI
A1m/GJWfSLS56f74ZjAdBgNVHQ4EFgQUrG/w0IpUWEnwYe5gDksKWgjVwqcwDgYDVR0PAQH/
BAQDAgWgMAwGA1UdEwEB/wQCMAAwIAYDVR0lBBkwFwYIKwYBBQUHAwQGCysGAQQBsjEBAwUC
MEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQEBMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2Vj
dXJlLmNvbW9kby5uZXQvQ1BTMIGwBgNVHR8EgagwgaUwOKA2oDSGMmh0dHA6Ly9jcmwuY29t
b2RvLm5ldC9DbGFzczNTZWN1cml0eVNlcnZpY2VzXzIuY3JsMDqgOKA2hjRodHRwOi8vY3Js
LmNvbW9kb2NhLmNvbS9DbGFzczNTZWN1cml0eVNlcnZpY2VzXzIuY3JsMC2gK6ApgSdDbGFz
czNTZWN1cml0eVNlcnZpY2VzXzJAY3JsLmNvbW9kby5uZXQwEQYJYIZIAYb4QgEBBAQDAgUg
MB8GA1UdEQQYMBaBFGNhcmxAeW91bmdibG9vZHMub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAR
powtW8sldyqXAfqn276jiYMlTBSX6BH1pjnIHNiYECywMi1txd8hRB3c/iHXCyAHuYq3AgRI
WegFJ+8/B1jGcUxDjvzmSSjnhFSztT1oNJZUrw0yYhdp+yWDjov24sKFFWYwC4rsnO0y6y9D
U9qAyrKk7NuwHp/NPR2tujpnvStgFLk3hvJTUj3Cu//+OXuqPwk6pIDYvnsGkISIkYfO8kQz
F39TAlNLkyBIsrzZdTotnSNlkwgzW1Ys62MRjZsC6zlrv2dMPxn0iyrxxtse3d82EF1Y53B/
hWvgGoQfQtnsz9bJSPbl9CvfMqPO/fRxGomUcOCSr7NPdoafve+JMIIFeTCCBGGgAwIBAgIR
ANO+/JTb13KkyXGyVrpA3igwDQYJKoZIhvcNAQEFBQAwgdwxCzAJBgNVBAYTAkdCMRcwFQYD
VQQKEw5Db21vZG8gTGltaXRlZDEdMBsGA1UECxMUQ29tb2RvIFRydXN0IE5ldHdvcmsxRjBE
BgNVBAsTPVRlcm1zIGFuZCBDb25kaXRpb25zIG9mIHVzZTogaHR0cDovL3d3dy5jb21vZG8u
bmV0L3JlcG9zaXRvcnkxHzAdBgNVBAsTFihjKTIwMDIgQ29tb2RvIExpbWl0ZWQxLDAqBgNV
BAMTI0NvbW9kbyBDbGFzcyAzIFNlY3VyaXR5IFNlcnZpY2VzIENBMB4XDTAzMDcwNjAwMDAw
MFoXDTA0MDcwNTIzNTk1OVowgd8xNTAzBgNVBAsTLENvbW9kbyBUcnVzdCBOZXR3b3JrIC0g
UEVSU09OQSBOT1QgVkFMSURBVEVEMUYwRAYDVQQLEz1UZXJtcyBhbmQgQ29uZGl0aW9ucyBv
ZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBvc2l0b3J5MR8wHQYDVQQLExYoYyky
MDAzIENvbW9kbyBMaW1pdGVkMRgwFgYDVQQDEw9DYXJsIFlvdW5nYmxvb2QxIzAhBgkqhkiG
9w0BCQEWFGNhcmxAeW91bmdibG9vZHMub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQCrSGUsn6KaTSGZvBMILkYCDD4fEqIYK6NFMCmp5vA1wj4i1hXduf9lo6AgdFWFDF1RAuw/
nLb6a7l4ix/ZSrg9ljb3R1M69hHcgT+7ie0OwuJTKSI0EbWAjnkh9wnmXMuhciymfIzrVfwY
B31rGl/8/LtvW5LZ69StfDAjSCqu0QIDAQABo4IBszCCAa8wHwYDVR0jBBgwFoAU9lIiFxUT
CANZvxiVn0i0uen++GYwHQYDVR0OBBYEFKxv8NCKVFhJ8GHuYA5LCloI1cKnMA4GA1UdDwEB
/wQEAwIFoDAMBgNVHRMBAf8EAjAAMCAGA1UdJQQZMBcGCCsGAQUFBwMEBgsrBgEEAbIxAQMF
AjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgEBATArMCkGCCsGAQUFBwIBFh1odHRwczovL3Nl
Y3VyZS5jb21vZG8ubmV0L0NQUzCBsAYDVR0fBIGoMIGlMDigNqA0hjJodHRwOi8vY3JsLmNv
bW9kby5uZXQvQ2xhc3MzU2VjdXJpdHlTZXJ2aWNlc18yLmNybDA6oDigNoY0aHR0cDovL2Ny
bC5jb21vZG9jYS5jb20vQ2xhc3MzU2VjdXJpdHlTZXJ2aWNlc18yLmNybDAtoCugKYEnQ2xh
c3MzU2VjdXJpdHlTZXJ2aWNlc18yQGNybC5jb21vZG8ubmV0MBEGCWCGSAGG+EIBAQQEAwIF
IDAfBgNVHREEGDAWgRRjYXJsQHlvdW5nYmxvb2RzLm9yZzANBgkqhkiG9w0BAQUFAAOCAQEA
EaaMLVvLJXcqlwH6p9u+o4mDJUwUl+gR9aY5yBzYmBAssDItbcXfIUQd3P4h1wsgB7mKtwIE
SFnoBSfvPwdYxnFMQ4785kko54RUs7U9aDSWVK8NMmIXafslg46L9uLChRVmMAuK7JztMusv
Q1PagMqypOzbsB6fzT0drbo6Z70rYBS5N4byU1I9wrv//jl7qj8JOqSA2L57BpCEiJGHzvJE
Mxd/UwJTS5MgSLK82XU6LZ0jZZMIM1tWLOtjEY2bAus5a79nTD8Z9Isq8cbbHt3fNhBdWOdw
f4Vr4BqEH0LZ7M/WyUj25fQr3zKjzv30cRqJlHDgkq+zT3aGn73viTGCBF4wggRaAgEBMIHy
MIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMOQ29tb2RvIExpbWl0ZWQxHTAbBgNVBAsTFENv
bW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz1UZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB1
c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAy
IENvbW9kbyBMaW1pdGVkMSwwKgYDVQQDEyNDb21vZG8gQ2xhc3MgMyBTZWN1cml0eSBTZXJ2
aWNlcyBDQQIRANO+/JTb13KkyXGyVrpA3igwCQYFKw4DAhoFAKCCAsEwGAYJKoZIhvcNAQkD
MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDQwNTA4MDM1MzQ0WjAjBgkqhkiG9w0B
CQQxFgQUe42uSYSkLfS2ksnVnJo/Z6cbK/cwUgYJKoZIhvcNAQkPMUUwQzAKBggqhkiG9w0D
BzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwIC
ASgwggEDBgkrBgEEAYI3EAQxgfUwgfIwgdwxCzAJBgNVBAYTAkdCMRcwFQYDVQQKEw5Db21v
ZG8gTGltaXRlZDEdMBsGA1UECxMUQ29tb2RvIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsTPVRl
cm1zIGFuZCBDb25kaXRpb25zIG9mIHVzZTogaHR0cDovL3d3dy5jb21vZG8ubmV0L3JlcG9z
aXRvcnkxHzAdBgNVBAsTFihjKTIwMDIgQ29tb2RvIExpbWl0ZWQxLDAqBgNVBAMTI0NvbW9k
byBDbGFzcyAzIFNlY3VyaXR5IFNlcnZpY2VzIENBAhEA0778lNvXcqTJcbJWukDeKDCCAQUG
CyqGSIb3DQEJEAILMYH1oIHyMIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMOQ29tb2RvIExp
bWl0ZWQxHTAbBgNVBAsTFENvbW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz1UZXJtcyBh
bmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBvc2l0b3J5
MR8wHQYDVQQLExYoYykyMDAyIENvbW9kbyBMaW1pdGVkMSwwKgYDVQQDEyNDb21vZG8gQ2xh
c3MgMyBTZWN1cml0eSBTZXJ2aWNlcyBDQQIRANO+/JTb13KkyXGyVrpA3igwDQYJKoZIhvcN
AQEBBQAEgYBg+FG3kDSAXRkBTwFPSjPDFgprW2Cf6flDWHhfpHwmsCSvhiLkNR1P8Gs9pAOR
MCvZvgoCTe5Xtw0/pZPrvTpkRsCsXFQtNWCKtxcXUXSuS7+JLngDfkJvgPznL5Yq9eFUdDO3
KrYPlDN1adH1fDPbHLjzxQEux+NWiWUIcYCf2wAAAAAAAA==
--------------ms070701060507010705010004--