Return-Path: Delivered-To: apmail-activemq-users-archive@www.apache.org Received: (qmail 49631 invoked from network); 3 Aug 2010 15:08:09 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 3 Aug 2010 15:08:09 -0000 Received: (qmail 49669 invoked by uid 500); 3 Aug 2010 15:08:08 -0000 Delivered-To: apmail-activemq-users-archive@activemq.apache.org Received: (qmail 49520 invoked by uid 500); 3 Aug 2010 15:08:07 -0000 Mailing-List: contact users-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@activemq.apache.org Delivered-To: mailing list users@activemq.apache.org Received: (qmail 49424 invoked by uid 99); 3 Aug 2010 15:08:07 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Aug 2010 15:08:07 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of david.delbecq@oma.be designates 193.190.231.71 as permitted sender) Received: from [193.190.231.71] (HELO bonnie1.oma.be) (193.190.231.71) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Aug 2010 15:08:03 +0000 Received: from [192.168.15.40] (cal-12.oma.be [192.168.15.40]) by bonnie1.oma.be (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id o73F7eNW013824 for ; Tue, 3 Aug 2010 15:07:40 GMT Message-ID: <4C5830D7.4060003@oma.be> Date: Tue, 03 Aug 2010 17:08:07 +0200 From: David Delbecq User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.10) Gecko/20100528 Thunderbird/3.0.5 MIME-Version: 1.0 To: users@activemq.apache.org Subject: Re: QueueReceiver.receive(timeout) never return messages References: <4C57D9AB.9020803@oma.be> <4C582BCD.8010008@oma.be> In-Reply-To: Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms020202090800030903090404" --------------ms020202090800030903090404 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Hello, thanks, its seems to work around our problem, we will keep an eye on=20 it. Are there any reason while failover: connection is capable of=20 detecting the network problem and reconnecting while the tcp: just=20 "wait"? Shouldn't it at least throw an exception when link is down? Le 03/08/10 16:52, Dejan Bosanac a =E9crit : > Hi David, > > failover transport can be used for just one broker as well and it is > used to solve these kind of problems. So > > failover:(tcp://localhost:61616) > > should work just fine. If the broker is down or there are network > problems, the transport will try to reestablish the connection. > > > > Cheers > -- > Dejan Bosanac - http://twitter.com/dejanb > > Open Source Integration - http://fusesource.com/ > ActiveMQ in Action - http://www.manning.com/snyder/ > Blog - http://www.nighttale.net > > > > On Tue, Aug 3, 2010 at 4:46 PM, David Delbecq wr= ote: > =20 >> Thanks for reply >> >> we do not use failover, because there is only one broker. It's not cri= tical >> enough to justify two or more brokers. We just want receive() to fail = in a >> way or other when the other ends (broker) dies for some reason, so we = can >> take appropriate measures. This is just illogical for receive(timeout)= to >> just return null when the underlying connection does not exist anymore= =2E >> >> >> Le 03/08/10 16:08, Dejan Bosanac a =E9crit : >> =20 >>> Hi David, >>> >>> did you try using failover transport >>> >>> http://activemq.apache.org/failover-transport-reference.html >>> >>> It should take care of detecting network problems and reconnecting. >>> Then you should just use receive() or message listener >>> >>> Cheers >>> -- >>> Dejan Bosanac - http://twitter.com/dejanb >>> >>> Open Source Integration - http://fusesource.com/ >>> ActiveMQ in Action - http://www.manning.com/snyder/ >>> Blog - http://www.nighttale.net >>> >>> >>> >>> On Tue, Aug 3, 2010 at 10:56 AM, David Delbecq >>> wrote: >>> >>> =20 >>>> Hello, >>>> >>>> we are having fiability troubles with activeMQ (5.2). To get around >>>> those, >>>> we use in consumer receive(timeout) with a timeout of 60 seconds to >>>> detect >>>> early problems with broker. We assumed if we called receive() on a >>>> closed >>>> connection (broker side closed) we sould somehow get an exception. >>>> However, >>>> when activeMQ server is shutdown for any reason, the receiver never >>>> detect >>>> this and the receive call never return any message. We suspect the >>>> timeout >>>> occurs, but we would expect some kind of exception telling us we nee= d to >>>> reconnect. >>>> >>>> >>>> Here is consumer code: >>>> while (!stopNow) { >>>> Message m =3D receiver.receive(60000);//wait 60 then= next >>>> loop >>>> if (m =3D=3D null) { >>>> continue; // timeout? >>>> } >>>> if (m instanceof MapMessage) { // The event queue sh= ould >>>> contain only map messages ! >>>> processEventMessage((MapMessage) m); >>>> >>>> >>>> Here is the threaddump of consumer. There are messages in that queue= >>>> waiting >>>> since yesterday, but the consumer never received any of those! This = is >>>> very >>>> problematic as, for now, we must restart every consumer after restar= ting >>>> the >>>> broker. We would expect the consumer to be able to detect this and >>>> reconnect. What's the procedure to follow for this? We could disconn= ect >>>> / >>>> reconnect every minutes to be sure, but that would mean some kind of= >>>> additional load on the broker. >>>> >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | "ActiveMQ Connection Worke= r: >>>> tcp://localhost/127.0.0.1:61616" daemon prio=3D10 tid=3D0x00007f1cc1= d7f000 >>>> nid=3D0x5d3a waiting on condition [0x0000000041f7b000] >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | java.lang.Thread.State:= >>>> WAITING >>>> (parking) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> sun.misc.Unsafe.park(Native >>>> Method) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | - parking to wait for >>>> <0x00007f1cc8412618> (a >>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObjec= t) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObjec= t.await(AbstractQueuedSynchronizer.java:1925) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.ja= va:358) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.j= ava:947) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecuto= r.java:907) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> java.lang.Thread.run(Thread.java:619) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | "WrapperJarAppMain" prio=3D= 10 >>>> tid=3D0x00007f1cc22b8000 nid=3D0x5f4d in Object.wait() [0x0000000040= af6000] >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | java.lang.Thread.State:= >>>> TIMED_WAITING (on object monitor) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> java.lang.Object.wait(Native Method) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | - waiting on >>>> <0x00007f1cc8413280> (a java.lang.Object) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> org.apache.activemq.MessageDispatchChannel.dequeue(MessageDispatchCh= annel.java:77) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | - >>>> locked<0x00007f1cc8413280> >>>> (a java.lang.Object) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> org.apache.activemq.ActiveMQMessageConsumer.dequeue(ActiveMQMessageC= onsumer.java:412) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> org.apache.activemq.ActiveMQMessageConsumer.receive(ActiveMQMessageC= onsumer.java:531) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> be.meteo.shark.client.emailer.JmsEmailer.processMessages(JmsEmailer.= java:178) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> be.meteo.shark.client.emailer.JmsEmailer.main(JmsEmailer.java:409) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl= =2Ejava:39) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> >>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce= ssorImpl.java:25) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> java.lang.reflect.Method.invoke(Method.java:597) >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> org.tanukisoftware.wrapper.WrapperJarApp.run(WrapperJarApp.java:352)= >>>> INFO | jvm 1 | 2010/08/03 08:35:35 | at >>>> java.lang.Thread.run(Thread.java:619) >>>> >>>> -- >>>> David Delbecq >>>> ICT >>>> Institut Royal M=E9t=E9orologique >>>> Ext:557 >>>> >>>> >>>> >>>> >>>> =20 >> >> -- >> David Delbecq >> ICT >> Institut Royal M=E9t=E9orologique >> Ext:557 >> >> >> >> =20 --=20 David Delbecq ICT Institut Royal M=E9t=E9orologique Ext:557 --------------ms020202090800030903090404 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIQ9jCC BIowggNyoAMCAQICECf06hH0eobEbp27bqkXBwcwDQYJKoZIhvcNAQEFBQAwbzELMAkGA1UE BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdDAeFw0w NTA2MDcwODA5MTBaFw0yMDA1MzAxMDQ4MzhaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMC VVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVRO LVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVN NRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQy lbsMTzC9mKALi+VuG6JG+ni8om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXq vgvOdjp6Dpvq/NonWz1zHyLmSGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6 hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu 9mIwFIws6wIDAQABo4HhMIHeMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8DveAky1QaMB0G A1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zB7BgNVHR8EdDByMDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9BZGRU cnVzdEV4dGVybmFsQ0FSb290LmNybDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8ubmV0L0Fk ZFRydXN0RXh0ZXJuYWxDQVJvb3QuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQAZ2IkRbyispgCi 54fBm5AD236hEv0e8+LwAamUVEJrmgnEoG3XkJIEA2Z5Q3H8+G+v23ZF4jcaPd3kWQR4rBz0 g0bzes9bhHIt5UbBuhgRKfPLSXmHPLptBZ2kbWhPrXIUNqi5sf2/z3/wpGqUNVCPz4FtVbHd WTBK322gnGQfSXzvNrv042n0+DmPWq1LhTq3Du3Tzw1EovsEv+QvcI4l+1pUBrPQxLxtjftz Mizpm4QkLdZ/kXpoAlAfDj9N6cz1u2fo3BwuO/xOzf4CjuOoEwqlJkRl6RDyTVKnrtw+ymsy XEFs/vVdoOr/0fqbhlhtPZZH5f4ulQTCAMyOofK7MIIGMDCCBRigAwIBAgIRAPahsPx1/sHL s4hgB6tfPmIwDQYJKoZIhvcNAQEFBQAwga4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEX MBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29y azEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMTYwNAYDVQQDEy1VVE4tVVNF UkZpcnN0LUNsaWVudCBBdXRoZW50aWNhdGlvbiBhbmQgRW1haWwwHhcNMTAwNjA3MDAwMDAw WhcNMTEwNjA3MjM1OTU5WjCB3TE1MDMGA1UECxMsQ29tb2RvIFRydXN0IE5ldHdvcmsgLSBQ RVJTT05BIE5PVCBWQUxJREFURUQxRjBEBgNVBAsTPVRlcm1zIGFuZCBDb25kaXRpb25zIG9m IHVzZTogaHR0cDovL3d3dy5jb21vZG8ubmV0L3JlcG9zaXRvcnkxHzAdBgNVBAsTFihjKTIw MDMgQ29tb2RvIExpbWl0ZWQxFjAUBgNVBAMTDURhdmlkIERlbGJlY3ExIzAhBgkqhkiG9w0B CQEWFGRhdmlkLmRlbGJlY3FAb21hLmJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAwfHE7IYsrjXpCS2/FJckqDpCvfjF4sYkktSPFZdyxScd6qj0Z0F2x+kPEHzuBwVifoZX e944qGI31kJcDl4OZsQKhjJUB5mh7xCv8rvfCxUJKBA8J5xiRh7oPcxLpezkJbPFZv/UO3Qf u8cbrYhSCIV7jUi8KzD0CflzM2EdD5riLELVtblGhSCOhBUV2yl74fTTgnUtYiQXBRP+EPHs HO9HSIM7AtkwRVAzEsr7t6GUJjYPIKjsGWhRxdCyRX3cZZvNEOwk7Ujb+Qym8meg6feyUFZ8 UafW3ecp1I/2cMKUsZnvzlhdAuHbRc7NPE7LmaJWhoB77EeOWJ76TpbDowIDAQABo4ICFjCC AhIwHwYDVR0jBBgwFoAUiYJnfcSdJnAAS7RQSHzePa4Ebn0wHQYDVR0OBBYEFOwxQRT5Cm9c m+gqTk92kg1Bqfq+MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMCAGA1UdJQQZMBcG CCsGAQUFBwMEBgsrBgEEAbIxAQMFAjARBglghkgBhvhCAQEEBAMCBSAwRgYDVR0gBD8wPTA7 BgwrBgEEAbIxAQIBAQEwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLm5l dC9DUFMwgaUGA1UdHwSBnTCBmjBMoEqgSIZGaHR0cDovL2NybC5jb21vZG9jYS5jb20vVVRO LVVTRVJGaXJzdC1DbGllbnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDBKoEigRoZEaHR0 cDovL2NybC5jb21vZG8ubmV0L1VUTi1VU0VSRmlyc3QtQ2xpZW50QXV0aGVudGljYXRpb25h bmRFbWFpbC5jcmwwbAYIKwYBBQUHAQEEYDBeMDYGCCsGAQUFBzAChipodHRwOi8vY3J0LmNv bW9kb2NhLmNvbS9VVE5BQUFDbGllbnRDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3Nw LmNvbW9kb2NhLmNvbTAfBgNVHREEGDAWgRRkYXZpZC5kZWxiZWNxQG9tYS5iZTANBgkqhkiG 9w0BAQUFAAOCAQEAaM2juZzJrhTZuFl/LNqOn1fbStud8tBYyRz47qqGyqwXWRv/x6jtTdIz 0/kdjGfOqYlErV4vdHROtk6+CYpRJoLf+ujjwyxyJjPuKHZVD6JzE3Cm/X1nP5CpE/3QyHs9 RpE4BKjNI+VUoBB2QqnsMsW26MwiT7XQ/UweA2jzpLhj6rz5BiLglAzYBHAeLlOGFY9ZokD3 1k/D0f8PGIQ4SCCYl/xPlfwBp+i3OICd4nVja20gHwiKYHYV5fQsdQzDvG0fiyqc3BVsIdT7 6V+iLvDkTCmtuPvlB8DyLaWrHlf6H+jv/b8QXGB2ADFJxjW/3nWH2EMOHcM2A2Fzv8wylDCC BjAwggUYoAMCAQICEQD2obD8df7By7OIYAerXz5iMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD VQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQK ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0 LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5k IEVtYWlsMB4XDTEwMDYwNzAwMDAwMFoXDTExMDYwNzIzNTk1OVowgd0xNTAzBgNVBAsTLENv bW9kbyBUcnVzdCBOZXR3b3JrIC0gUEVSU09OQSBOT1QgVkFMSURBVEVEMUYwRAYDVQQLEz1U ZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBv c2l0b3J5MR8wHQYDVQQLExYoYykyMDAzIENvbW9kbyBMaW1pdGVkMRYwFAYDVQQDEw1EYXZp ZCBEZWxiZWNxMSMwIQYJKoZIhvcNAQkBFhRkYXZpZC5kZWxiZWNxQG9tYS5iZTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMHxxOyGLK416QktvxSXJKg6Qr34xeLGJJLUjxWX csUnHeqo9GdBdsfpDxB87gcFYn6GV3veOKhiN9ZCXA5eDmbECoYyVAeZoe8Qr/K73wsVCSgQ PCecYkYe6D3MS6Xs5CWzxWb/1Dt0H7vHG62IUgiFe41IvCsw9An5czNhHQ+a4ixC1bW5RoUg joQVFdspe+H004J1LWIkFwUT/hDx7BzvR0iDOwLZMEVQMxLK+7ehlCY2DyCo7BloUcXQskV9 3GWbzRDsJO1I2/kMpvJnoOn3slBWfFGn1t3nKdSP9nDClLGZ785YXQLh20XOzTxOy5miVoaA e+xHjlie+k6Ww6MCAwEAAaOCAhYwggISMB8GA1UdIwQYMBaAFImCZ33EnSZwAEu0UEh83j2u BG59MB0GA1UdDgQWBBTsMUEU+QpvXJvoKk5PdpINQan6vjAOBgNVHQ8BAf8EBAMCBaAwDAYD VR0TAQH/BAIwADAgBgNVHSUEGTAXBggrBgEFBQcDBAYLKwYBBAGyMQEDBQIwEQYJYIZIAYb4 QgEBBAQDAgUgMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQEBMCswKQYIKwYBBQUHAgEWHWh0 dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1BTMIGlBgNVHR8EgZ0wgZowTKBKoEiGRmh0dHA6 Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtQ2xpZW50QXV0aGVudGljYXRpb25h bmRFbWFpbC5jcmwwSqBIoEaGRGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9VVE4tVVNFUkZpcnN0 LUNsaWVudEF1dGhlbnRpY2F0aW9uYW5kRW1haWwuY3JsMGwGCCsGAQUFBwEBBGAwXjA2Bggr BgEFBQcwAoYqaHR0cDovL2NydC5jb21vZG9jYS5jb20vVVROQUFBQ2xpZW50Q0EuY3J0MCQG CCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wHwYDVR0RBBgwFoEUZGF2aWQu ZGVsYmVjcUBvbWEuYmUwDQYJKoZIhvcNAQEFBQADggEBAGjNo7mcya4U2bhZfyzajp9X20rb nfLQWMkc+O6qhsqsF1kb/8eo7U3SM9P5HYxnzqmJRK1eL3R0TrZOvgmKUSaC3/ro48MsciYz 7ih2VQ+icxNwpv19Zz+QqRP90Mh7PUaROASozSPlVKAQdkKp7DLFtujMIk+10P1MHgNo86S4 Y+q8+QYi4JQM2ARwHi5ThhWPWaJA99ZPw9H/DxiEOEggmJf8T5X8AafotziAneJ1Y2ttIB8I imB2FeX0LHUMw7xtH4sqnNwVbCHU++lfoi7w5Ewprbj75QfA8i2lqx5X+h/o7/2/EFxgdgAx ScY1v951h9hDDh3DNgNhc7/MMpQxggRgMIIEXAIBATCBxDCBrjELMAkGA1UEBhMCVVMxCzAJ BgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJU UlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNV BAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbAIRAPah sPx1/sHLs4hgB6tfPmIwCQYFKw4DAhoFAKCCAnAwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEH ATAcBgkqhkiG9w0BCQUxDxcNMTAwODAzMTUwODA3WjAjBgkqhkiG9w0BCQQxFgQUJr7cZA2e wwzyrcwI5+n2TZCzUMIwXwYJKoZIhvcNAQkPMVIwUDALBglghkgBZQMEAQIwCgYIKoZIhvcN AwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMC AgEoMIHVBgkrBgEEAYI3EAQxgccwgcQwga4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEX MBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29y azEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMTYwNAYDVQQDEy1VVE4tVVNF UkZpcnN0LUNsaWVudCBBdXRoZW50aWNhdGlvbiBhbmQgRW1haWwCEQD2obD8df7By7OIYAer Xz5iMIHXBgsqhkiG9w0BCRACCzGBx6CBxDCBrjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVU MRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3 b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1V U0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbAIRAPahsPx1/sHLs4hg B6tfPmIwDQYJKoZIhvcNAQEBBQAEggEAhG4WiAYEM0nKa61XkSr172YnrEnwLQNKxHG3Z+K+ semJfFLAihMIdafGeeeCw0DanbcMY6+VsbDbO4s+aJb78jnlRfVRIp23zfCOAD9Vrom+wMqZ INAlrKGeQJtQ60EWg18OTqiOtPGPxOMBIa4e+GU4VL+rZkwOmS71hBGRYm+9W5mgEaDoPw3A VXRmuDjazW0NeNHfSyXtBM3TkWsW9y+ESTULVFhqJffOXO5WbJfmuHthgASdidIz6NomvXEc baTbGyPEpWUd30p8wcT2IKMQjEGuWAd0OdBfCz9pqLgmghhE8LtfKajVvd1A3P5JPZ0Hr+Zh r9eqSVzeJkXZVAAAAAAAAA== --------------ms020202090800030903090404--