Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc) » CDO library example fails to create resource
| |
Re: CDO library example fails to create resource [message #2158 is a reply to message #674] |
Fri, 04 November 2005 18:47 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
Mark,
Yes, that's exactly what I think.
Except for the implication in client/server mode.
I don't think it can become a problem there because in the server
the receipt (and processing) of data (the indication) is strictly
separated from transmission of the response. in other words, the client
has for sure finished transmission of the request and the server
has finished processing, before the latter attempts to send the first byte back.
I think it's nearly impossible that all that can happen before the client
is able to take the transition back to IDLE. What do you think?
Apart from that I'm not very sure at the moment, how to work around
this issue in the embedded mode. I have to think about it...
Would it be helpful for you to look at the state charts?
Where is google for my hd??? ;-)
Cheers
/Eike
geib schrieb:
> I have looked in more detail at the highlighted log and I think I see
> the problem. I assume from your message that if the state machine is not
> at "IDLE" it is an error to receive the response.
>
> Since I am running on a laptop with limited memory it is possible that
> once the request is made some swapping may occur to let the server run
> to fullfil the request. I would also assume that the server could
> fullfil the request and send the response while the client is swapped
> out, but not yet in IDLE state. Now the client swaps backin to run and
> THEN goes into the IDLE state, but the message has already been received
> while still in the REQUESTING state. Is this a reasonable senerio...?
>
> This would could be a problem even if the server were on another
> machine, could it not.? We run the client on windows PCs that can be
> VERY slow depending on how many windows the user has open, and it can be
> A LOT. The server could process a request and respond before the client
> is in IDLE state.
>
> Mark.
>
|
|
|
Re: CDO library example fails to create resource [message #2187 is a reply to message #2158] |
Fri, 04 November 2005 19:44 |
Mark Geib Messages: 432 Registered: July 2009 |
Senior Member |
|
|
Eike Stepper wrote:
> Mark,
> Yes, that's exactly what I think.
> Except for the implication in client/server mode.
> I don't think it can become a problem there because in the server
> the receipt (and processing) of data (the indication) is strictly
> separated from transmission of the response. in other words, the client
> has for sure finished transmission of the request and the server
> has finished processing, before the latter attempts to send the first byte
> back.
I don't know what is done after the client sends the request before it
transitions to IDLE, but it can be interrupted. Maybe any new message
should not be processed in any state other than IDLE. If the response was
recieved and queued, or buffered, then you could delay the processing
until the the state machine is in IDLE state.
> I think it's nearly impossible that all that can happen before the client
> is able to take the transition back to IDLE. What do you think?
Yes, I think it is less likely. However, I would look at this as an
opportunity to elminate a potential problem. There is a hole here.
Plugging the hole will only improve the stability and reliability of CDO.
> Apart from that I'm not very sure at the moment, how to work around
> this issue in the embedded mode. I have to think about it...
Is there any difference in embedded mode other than the communication
between client and server.?? I could try using network communication, even
on the same machine.
> Would it be helpful for you to look at the state charts?
> Where is google for my hd??? ;-)
Yes I would look at the state diagram(s).
> Cheers
> /Eike
> geib schrieb:
>> I have looked in more detail at the highlighted log and I think I see
>> the problem. I assume from your message that if the state machine is not
>> at "IDLE" it is an error to receive the response.
>>
>> Since I am running on a laptop with limited memory it is possible that
>> once the request is made some swapping may occur to let the server run
>> to fullfil the request. I would also assume that the server could
>> fullfil the request and send the response while the client is swapped
>> out, but not yet in IDLE state. Now the client swaps backin to run and
>> THEN goes into the IDLE state, but the message has already been received
>> while still in the REQUESTING state. Is this a reasonable senerio...?
>>
>> This would could be a problem even if the server were on another
>> machine, could it not.? We run the client on windows PCs that can be
>> VERY slow depending on how many windows the user has open, and it can be
>> A LOT. The server could process a request and respond before the client
>> is in IDLE state.
>>
>> Mark.
>>
|
|
|
Re: CDO library example fails to create resource [message #2223 is a reply to message #2187] |
Sat, 05 November 2005 06:17 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
This is a multi-part message in MIME format.
--------------070405080900080906050104
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit
geib schrieb:
> Eike Stepper wrote:
>
>> Mark,
>
>
>> Yes, that's exactly what I think.
>> Except for the implication in client/server mode.
>> I don't think it can become a problem there because in the server
>> the receipt (and processing) of data (the indication) is strictly
>> separated from transmission of the response. in other words, the client
>> has for sure finished transmission of the request and the server
>> has finished processing, before the latter attempts to send the first
>> byte back.
>
>
> I don't know what is done after the client sends the request before it
> transitions to IDLE, but it can be interrupted.
Nothing, I guess. Here is the respective code from ChannelImpl:
public Object transmit(Request request)
{
[...]
request.setChannel(this);
short signalId = request.getSignalId();
transmitShort(signalId);
processCommEvent(REQUEST_START);
request.request();
flush();
processCommEvent(REQUEST_END);
if (request.hasResponse())
{
[...]
> Maybe any new message
> should not be processed in any state other than IDLE. If the response
> was recieved and queued, or buffered, then you could delay the
> processing until the the state machine is in IDLE state.
I have to think about it...
>> I think it's nearly impossible that all that can happen before the client
>> is able to take the transition back to IDLE. What do you think?
>
>
> Yes, I think it is less likely. However, I would look at this as an
> opportunity to elminate a potential problem. There is a hole here.
> Plugging the hole will only improve the stability and reliability of CDO.
Of course ;-)
I also don't like to discuss about (un-) likelyness.
What about a synchronized region around REQUEST_START and REQUEST_END?
>> Apart from that I'm not very sure at the moment, how to work around
>> this issue in the embedded mode. I have to think about it...
>
>
> Is there any difference in embedded mode other than the communication
> between client and server.?? I could try using network communication,
> even on the same machine.
There are (intentionally) no differences at all between the threading models.
But in embedded mode some components can be shared (executor-pools, buffer-pools, ...)
>
>> Would it be helpful for you to look at the state charts?
>> Where is google for my hd??? ;-)
>
>
> Yes I would look at the state diagram(s).
Client and server (-channels) have slightly different state machines.
A server is not allowed to actively send RequestWithConfirmation
to a client (only one way notifications). The digrams are attached.
Cheers
/Eike
--------------070405080900080906050104
Content-Type: image/jpeg;
name="server-states.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="server-states.jpg"
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAJYAjsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3eiiisygooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKwNWs7u78Q
2XlSXawRWs0gEUzxxNMGj8vftIz/ABfKeCM8GkBv0V5bpcOvCyla9vdalgJi OoRpZ3cMqnd8
4jZpXZj6+QAuM7ewqyNS1KHSpZbVdbuY3g1G3tx5cskglEg8kPjLKQAQGfGO 5BNO39f136dw
Wr/r+tOvY9JpkkscKhpZFRSwUFjgZJwB9SSB+NefiLxA3jAu97qMeHURQx2U 7xmDyxn94Zhb
g53feQvnpkYrKtLbU7nTrqG+TW7i3iurOYy4vo3yJV34jfc+4AnPlSOnyggK erSu0v6/r9dB
X0/r+v8AganpUes6XLqkmmR6lZvqEY3SWqzqZUHByUzkdR27ircUsc8SSxOs kbqGV0OQwPQg
9xXDRwt/a32C0ttReJruZ5La+04qttu35lgulAVSS5P3nYhsDZ82MFRrFtb+ HYrCPW4RaQ2W
Y3hvHEmZdswblVXaAc+ZvypGwKBkkVf8PxG9D1d5Y42RXkVWkbagY4LHBOB6 nAJ/A0+uETSJ
ft2j6jeHWJZhrE+/M9wyxpmYRny1O1U5QZxjBGTg13dIOoUUUUAFFFFABRRR QAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUU
UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAV72+s
9NtHu7+6gtbaPG+aeQIi5IAyx4HJA/Gsj/hOfCP/AENWif8Agwi/+Ko8Yf8A IEtv+wrp3/pZ
DW/QBgf8Jz4R/wChq0T/AMGEX/xVMi8Z+DIVZYvEugxhmLkJfwjLE5J+91J5 roqKAMD/AITn
wj/0NWif+DCL/wCKo/4Tnwj/ANDVon/gwi/+KrfooAwP+E58I/8AQ1aJ/wCD CL/4qj/hOfCP
/Q1aJ/4MIv8A4qt+igCnp2q6drFu1xpmoWt9ArlGktpllUNgHBKkjOCOPcVc rA8P/wDIb8V/
9hVP/SO2rfoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKAMDxh/yBLb/sK6d/6WQ1v1geMP8A kCW3/YV07/0s
hrfoAKKKKACiiigAooooAwPD/wDyG/Ff/YVT/wBI7at+sDw//wAhvxX/ANhV P/SO2rfoAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KACiiigAooooAKKKw1v9Y1gb9DisYtPfiPUbtnffjnfHCoHmRnoGMiZ5YBl2 lxK4DPGH/IEt
v+wrp3/pZDW/XOXmheJtQgWG61nRJI1ljmA/siYYeN1dDxddmVT+HPFWP7P8 Xf8AQd0T/wAE
0v8A8lU+ViubdFYn9n+Lv+g7on/gml/+SqP7P8Xf9B3RP/BNL/8AJVHKwubd FYn9n+Lv+g7o
n/gml/8Akqj+z/F3/Qd0T/wTS/8AyVRysLm3VPUdRh0u3W5uVcWwcCaZQCsC 4PzvzkIDgEjO
3OThQzCh/Z/i7/oO6J/4Jpf/AJKo/s/xd/0HdE/8E0v/AMlUcrC5QsNRh03U /FMkivLJJq8c
cEEQBknkNlbEIgJAzgE5JAABZiFBI6quJ0bwHrGg397eWOr6Osl0+cPpU7LA u1F2RA3WETEa
cD+6o+6iBdpr/WNHG/XIrGXT04k1G0Z02Z53yQsD5cY6FhI+OGIVdxQaYXNy iiikMKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACi
iigDB8ZjzPC9xZn/AFd/NBp8pHUR3EyQuV/2gsjEZyMgZBHFdNXK+Np4bXw9 FcXEscMEWp6e
8kkjBVRReQkkk8AAc5q1/wAJ34P/AOhr0P8A8GMP/wAVVR2Ezl5I5V+IF7fW 4dprNriURqT+
8Ty7QOuO5K5x7gVh2r+GJ7BpNR/s9tUfRbRtM80J9qLkS7fIB+fdu24285xX on/Cd+D/APoa
9D/8GMP/AMVR/wAJ34P/AOhr0P8A8GMP/wAVVfZURdbnJXkmnQ6xeS+KlgbR 0nladblQ1ubg
W9ttDg/KTjzNoPfpzin6Trml2Y0++uNQjg03ytQtraW5k27R5yGOI7uQ2wcI fmwuMZBrqv8A
hO/B/wD0Neh/+DGH/wCKo/4Tvwf/ANDXof8A4MYf/iqHr936W/4YFocPYW2l w+J9LXWLnw7a
3UOm6eEh1a0V7ksN/ELNIpRs4H3W5xV21g0E+Lmg26Pq11dXc0c6FGi1CFG3 blmUkmaLkAbw
ihQhAb5a6v8A4Tvwf/0Neh/+DGH/AOKo/wCE78H/APQ16H/4MYf/AIqm3d3E lZWOWPh/RdNs
NQuLDSLC1nXWoolkgtkRgnnRHaCBnHt0qhZfb7PSdK02y+0NcroFxPYumS5D JF8qk/xK2cD0
K13H/Cd+D/8Aoa9D/wDBjD/8VR/wnfg//oa9D/8ABjD/APFUlpG39bW/4I+t /wCtzC8OS+Hx
4tij8NWumfZzat9omsLrMu75SBcxBOGznDO+7O/jk13tc/8A8J34P/6GvQ// AAYw/wDxVH/C
d+D/APoa9D/8GMP/AMVQJGB8MriWLQrnQ57o3DaNdTWCOy4LRxSNGp6nso4z x06Yrt686+Gk
8N1qfiO4t5Y5oJdTu3jkjYMrqZ3III4II5zXotQ9ykFFFFIYUUUUAFFFFABR RRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRWZr
OsjRxZKtjdX095cfZ4YbYxhi3lvISTI6qBtjbv6UAadFYH/CQan/ANCdrf8A 3+sv/kij/hIN
T/6E7W/+/wBZf/JFAG/RWB/wkGp/9Cdrf/f6y/8Akij/AISDU/8AoTtb/wC/ 1l/8kUAb9FYH
/CQan/0J2t/9/rL/AOSKP+Eg1P8A6E7W/wDv9Zf/ACRQBv0Vgf8ACQan/wBC drf/AH+sv/ki
j/hINT/6E7W/+/1l/wDJFAG/RWB/wkGp/wDQna3/AN/rL/5Io/4SDU/+hO1v /v8AWX/yRQBv
0Vgf8JBqf/Qna3/3+sv/AJIo/wCEg1P/AKE7W/8Av9Zf/JFAG/RWB/wkGp/9 Cdrf/f6y/wDk
ij/hINT/AOhO1v8A7/WX/wAkUAb9FYH/AAkGp/8AQna3/wB/rL/5Io/4SDU/ +hO1v/v9Zf8A
yRQBv0Vgf8JBqf8A0J2t/wDf6y/+SKP+Eg1P/oTtb/7/AFl/8kUAb9FYH/CQ an/0J2t/9/rL
/wCSKP8AhINT/wChO1v/AL/WX/yRQAvi/wD5A1r/ANhXTv8A0thrpq8n1DVL y1u7TQY9A1G1
05r7T50WeS3YWIF9CAv7uViImO4IpAKlWC5QYi9Yq4iYUUUUxBRRRQAUUUUA FFFFABRRRQB5
t8O/+Q34o/7C15/6UPXoNeR6Pc6zaR+LZdCt0muhrF0H3MQ0cRuX3ugCPucL kgbT/uuQEbst
Ll8QQaZbrpuiaA1myeZFImuTSCQN82/f9mJcsSWLEksSSSSc1Etxo6qisD7X 4u/6Aeif+DiX
/wCRaPtfi7/oB6J/4OJf/kWkM36KwPtfi7/oB6J/4OJf/kWj7X4u/wCgHon/ AIOJf/kWgDfo
rA+1+Lv+gHon/g4l/wDkWj7X4u/6Aeif+DiX/wCRaAN+isD7X4u/6Aeif+Di X/5Fo+1+Lv8A
oB6J/wCDiX/5FoA36KwPtfi7/oB6J/4OJf8A5Fo+1+Lv+gHon/g4l/8AkWgD forA+1+Lv+gH
on/g4l/+RaPtfi7/AKAeif8Ag4l/+RaAN+isD7X4u/6Aeif+DiX/AORaPtfi 7/oB6J/4OJf/
AJFoA36KwPtfi7/oB6J/4OJf/kWj7X4u/wCgHon/AIOJf/kWgDforA+1+Lv+ gHon/g4l/wDk
Wj7X4u/6Aeif+DiX/wCRaAN+iqGhan/bXh/TdV8nyfttrFc+Vu3bN6BtucDO M4zgVfoAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Qf8hvwp/2FX/8ASO5r frA8Qf8AIb8K
f9hV/wD0juaAN+iiigAooooAKKKKACiiigAooooAqahfJp9us0hQK0scfzkg fMwXsDzz9PUj
rWbD4w0O4tJrqO5mMUSxsc2kwZxISIzGpXMgYggFAc44q9q+m/2rZpb+b5W2 eKbdt3fccNjq
OuMVj/8ACJSJb2wh1AJcWtrbQwyNBuXfCxIZl3DIOcFQQfQ0LbXv+APbQktf GNhPAbiYiCAG
fG4OZG8uVYxhNmcksBt+9kgAE9JZPGOiRWS3T3FwIyXDL9im8yLZjcZE2bow MjJYAYIOeRVA
+DZ3jR5NVU3aPLMsotsL5rzpMDt3fdBQDbnJB6g81Br/AIJ1DxJYiHUtZtJ3 aKaNxJp26JC4
AV4ozJ8jrg4Zi5+ZsEA4DVrK4dTVXxdp6z6jHNHdp9juhbAJaTSNMxQP8iqh LdT93OAMngiq
174uYanbWWlW1pdvNAJ0S4vhbyTjLZWFCp3uoRtwYoF4yeuK2o+Bv7QMpln0 6cfaVuYYr3Tv
PiDeSImDqXG4EKCMbSp7kVNc+EryTR00eC/08aY0AimtZ9KR48gklolVkCHJ 6MHAKqcZzk0/
r0/zEv6+/wDyLa+LrBZdQjuIbyI2d0LYKtpLI0rFA/yKqEtjJztzgDPQio9T 8baRYafJcxNP
duLMXiRwW0rho2DFCzKhCA7Ty2Kq3/gye8E0Q1C3ktZLpLg295aGdHAhEZWQ eYBJyquCRwwz
huMPsfBhsvD9xpf9oBzLpcWniXyMbdgcB9u7nO/pkdOvPBpb7vy1/EaOohlW eCOZQ4WRQwDo
VYAjPIIBB9iM0+mQrIsEazOjyhQHZF2qxxyQCTge2T9TT6TEttTltd06HTfD 1vHGzyySaxp0
k88pBknkN5AC7kADOABgAAABVAUADsa5nxf/AMga1/7Cunf+lsNdNVR2BhRR RVCCiiigAooo
oAKKKKACiiigDzb4d/8AIb8Uf9ha8/8ASh67m1srey84W0flrNK0zqGO3e33 iB0XJ5OMZYsx
5Yk8N8O/+Q34o/7C15/6UPXoNRLcaCquo6la6VZm6vZDHCGVMhGclmYKoAUE kkkDp3q1VLU9
P/tK2ih83y9lxFPnbnOx1fHXvtx+NIZVTxPpT3SWxlnjdlBLS2ssaISu4K7s oVHwQdjENyOK
ZaeK9GvQfJuZBzHxJbSxkiRtqMAyglWPAYcH1rLuPAdnc+IbjUZE05oriTzZ C+nI10GKbSFn
Jyq8Zxt3DnDAdI/+EY1mW5njuNSgbZb2otbpbQBQ0MrOA6b8t/DkgqDnjbQv MTv0Ny58S6Va
KpkmmfMkke2G1llYFDtckIpIUHgsfl5HPNMfxTpCXhtRPK8mDtaO3kaNyF37 VkC7GfaCdoJP
tWBd/D0XkcL3Fxpt3dq9w0j32lrcR4lk3nYjP8jKeAckY6g8Ytp4J8rxJFqk N5BDGgCkQWvk
zyIEChHeN1R0+UEBoyR2I4wug3v5EUfjia9bTk0/TYHmvLRboW95efZZpQc5 WBGT94wCknOw
cqc4ORpL4usFl1CO4hvIjZ3Qtgq2ksjSsUD/ACKqEtjJztzgDPQiqUvhTVZt Cg0aTV7CayFs
ltNFcaWJFYL0dB5nytjH3t4yoIA5BS/8GT3gmiGoW8lrJdJcG3vLQzo4EIjK yDzAJOVVwSOG
GcNxina7t/Wv+Qi1qfjbSLDT5LmJp7txZi8SOC2lcNGwYoWZUIQHaeWxXQwy rPBHMocLIoYB
0KsARnkEAg+xGa5ex8GGy8P3Gl/2gHMulxaeJfIxt2BwH27uc7+mR0688dRC siwRrM6PKFAd
kXarHHJAJOB7ZP1NDtd2AfRRRSGFFFFABRRRQAUUUUAYHgb/AJJ94b/7BVr/ AOilrfrA8Df8
k+8N/wDYKtf/AEUtb9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFYHiD/AJDf
hT/sKv8A+kdzW/WB4g/5DfhT/sKv/wCkdzQBv0UUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUU
UAFFFFABRRRQAUUUUAYni2CaXw1cy28Tzz2bxX0cEaktO0EizCMY5y5j25wc bs4PQ78E8N1b
xXFvLHNBKgeOSNgyupGQQRwQRzmo65fU/D2rwXj33hjW3095HEk1jNGs1rK2 4sxCHlC2Tu2M
u4nJ5yS0xM7CivNrrWfiTZ8zp4cRN6xhzayhSzMFUA+d1JIAHckDrTv7V+J/ /PtoX/gFN/8A
HqsR6PRXnH9q/E//AJ9tC/8AAKb/AOPUf2r8T/8An20L/wAApv8A49QB6PRX nH9q/E//AJ9t
C/8AAKb/AOPUf2r8T/8An20L/wAApv8A49QB6PRXnH9q/E//AJ9tC/8AAKb/ AOPUf2r8T/8A
n20L/wAApv8A49QB6PVXUtSstH0241HUbmO2tLdN8sshwFH9T2AHJPArz6HX PiTcIXgj8PSo
HZCyWkrAMrFWHE3UMCCOxBFZa+CfFXiS4t5vFOsz3YhYEW5RYoFYE7XCKACQ CRk5PPsKAL3w
jhvJNJuNSvXLz3sj3ExKBCJJHLsCPqT6fQV6TVDSdKg0mzWCEAcDcR3q/Wb3 GFFFFAwooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKAMDwN/yT7w3/ANgq1/8ARS1v 1geBv+SfeG/+
wVa/+ilrfoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Qf8 hvwp/wBhV/8A
0jua36wPEH/Ib8Kf9hV//SO5oA36KKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKACiiigDA8Yf8AIEtv+wrp3/pZDW/WB4w/5Alt/wBhXTv/AEshrfoA KKKKACiiigAo
oooAwPB//IEuf+wrqP8A6WTVv1geD/8AkCXP/YV1H/0smrfoAKKKKACiiigA ooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKAMDwN/yT7w3/wBgq1/9FLW/WB4G/wCS feG/+wVa/wDo
pa36ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwPEH/Ib8Kf9 hV//AEjua36w
PEH/ACG/Cn/YVf8A9I7mgDfooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKAMDxh/yBLb/sK6d/6WQ1v1geMP8AkCW3/YV07/0shrfoAKKKKACi iigAooooAwPB
/wDyBLn/ALCuo/8ApZNW/WB4P/5Alz/2FdR/9LJq36ACiiigAooooAKKKKAC iiigAooooAKK
KKACiiigAooooAKKKKACiiigDA8Df8k+8N/9gq1/9FLW/WB4G/5J94b/AOwV a/8Aopa36ACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwPEH/Ib8Kf9hV//SO5 rfrA8Qf8hvwp
/wBhV/8A0juaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAoooo
AwPGH/IEtv8AsK6d/wClkNb9YHjD/kCW3/YV07/0shrfoAKKKKACiiigAooo oAwPB/8AyBLn
/sK6j/6WTVv1geD/APkCXP8A2FdR/wDSyat+gAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKACiiigAooooAwPA3/ACT7w3/2CrX/ANFLW/WB4G/5J94b/wCwVa/+ ilrfoAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Qf8AIb8Kf9hV/wD0jua3 6wPEH/Ib8Kf9
hV//AEjuaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAwP
GH/IEtv+wrp3/pZDW/WB4w/5Alt/2FdO/wDSyGt+gAooooAKKKKACiiigDA8 H/8AIEuf+wrq
P/pZNW/WB4P/AOQJc/8AYV1H/wBLJq36ACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigDA8Df8k+8N/wDYKtf/AEUtb9YHgb/kn3hv/sFWv/opa36A CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKwPEH/Ib8Kf8AYVf/ANI7mt+sDxB/ yG/Cn/YVf/0j
uaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAwPGH/ACBL
b/sK6d/6WQ1v1geMP+QJbf8AYV07/wBLIa36ACiiigAooooAKKKKAMDwf/yB Ln/sK6j/AOlk
1b9YHg//AJAlz/2FdR/9LJq36ACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KACiiigDA8Df8k+8N/8AYKtf/RS1v1geBv8Akn3hv/sFWv8A6KWt+gAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACsDxB/yG/Cn/YVf/wBI7mt+sDxB/wAhvwp/ 2FX/APSO5oA3
6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDA 8Yf8gS2/7Cun
f+lkNb9YHjD/AJAlt/2FdO/9LIa36ACiiigAooooAKKKKAMDwf8A8gS5/wCw rqP/AKWTVv1g
eD/+QJc/9hXUf/Syat+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooo
oAwPA3/JPvDf/YKtf/RS1v1geBv+SfeG/wDsFWv/AKKWt+gAooooAKKKKACi iigAooooAKKK
KACiiigCve3tvp9o91dSbIkwCQpYkkgKqqMlmJIAUAkkgAEmswL4svvnjXSt Ij6qtwr3sjg9
A4Vo1jYdwrSAk8HAyyX4+0+NdAtH4jghu9QUr1MiBIAD/s7bqQnvkLzgEHoJ /wDj3k/3D/Kn
sri3djA/s/xd/wBB3RP/AATS/wDyVR/Z/i7/AKDuif8Agml/+Sq81+wxWHho NPpGjaMLjw9K
Unt23DUCVQt5vyINyhdxBLZ3HB4auliTQI9AtUS78OXOif2jnU20a3SC1C+U 20TKruNu/wAv
JY4+7kYzVuKX9edhX/r5HS/2f4u/6Duif+CaX/5KqvcaF4mup7SabWdEaS0l M0B/siYbHKMh
PF1z8rsOfX1xXOaXrWhxvBfWV3BbeH7XV/3ZdhHFbI9oR0PEcZkY7c4Ulvly CM0L6PSp7zSJ
dVu/DttbSx380L67arNHIrXKspjDSJglSCDzwelCirrz/wArg3Zf13sd1/Z/ i7/oO6J/4Jpf
/kqj+z/F3/Qd0T/wTS//ACVXMasdEh8XPcGTSdQvmngEVpKGhv4xhMG2kBJe PGTsVQh3Pl/v
Cnan4Y0CxXxbPaaHplvNBZKYZIrSNGjLRvkqQOM98UJIOtjpf7P8Xf8AQd0T /wAE0v8A8lUf
2f4u/wCg7on/AIJpf/kquVsPOsZ9LgTe0V7rV3NCTkhJQbgMuewIwwHqGo0O XSY9V0EWlrYy
a83GqyC6CaikhQiTzowhLx7uu5gAdhHRaSSv/X9f0u4N2OpM3iTS/wB5fwWO p2i/NLPYpJDM
i+i258zzMfeJEgYjIVCQA2xBPDdW8VxbypNBKgeOSNgyupGQQRwQR3q5XA+E LiWx8W+KtAlu
jNHBqD3UIZcbROFnZRyehlI/DOOTSaHc7aiiipGFFFFAEF3dJZxLJJ90yJH9 9V5Zgo5Ygd+n
U9gTxVSPxDok1tdXMWsae8Fp/wAfEq3KFYf985wv40a5p8up6ekELIrrcQyk uSBhJFY9B1wD
XPr4Tv4LSz8k2bTWlnZRrG7MEkkgdmwSFyF+bhsEg84oW2vf+mD20Nu08S6b dwtcJPGtqqzO
bh5Ywm2NgrNndyvOd3THUjIzI3iTQksre9bWtOW0uX2QTm6QRytnGFbOGOQe B6VzR8I6pJFH
K509Z0lnuPJVmMZdrmOdUJ25x8hBbHBOcHpUHiHwrr+u2UiiHSraW4huEkjt 7uWEI7hQrtIk
Yab7p3KQinIyG2g01bS4dTpx4q0MNqPnapaQLp06wXLzToioxAIySeOuOccg jtTW8Rb9WFjZ
aXe3yeXFK91bvB5SJITtOWkViMKT8oPHrWFqHhTVbqaSVfIk2Xi3USLqU9qZ MwCJgZIl3IQR
kEbtwJBAzUdl4PudO1i2u/7D0K+EcMKLPc3MhltmVnZjGXjkZvv5BLgkjt2E l+X5Ets62LW9
Knubi2i1OykntlLzxJcKWiUdSwzlR9aZpWt2GtfaG064S4hgcJ50Tq8bkqGy rKTkc4+oNYFx
4Qup7PyBLbISl8pOCQfPmEigjAyOPmH861tBsL+2uNTu9Ris4Zr2dZfLtZGk VQI1TlmVcn5e
uB2pFG1RRRQAUUUUAYHjD/kCW3/YV07/ANLIa36wPGH/ACBLb/sK6d/6WQ1v 0AFFFFABRRRQ
AUUUUAYHg/8A5Alz/wBhXUf/AEsmrfrA8H/8gS5/7Cuo/wDpZNW/QAUUUUAF Q3V3bWVu1xd3
EVvCuN0krhFGeBknipqztb059UsooE8v5LqCYiToQkquex5wvHvQAsOu6RcX cNpBqtjLczRC
aKFLhGeSMjIdVByVxzkcUttrmkXqM1pqtjOquI2MVwjAMTtCnB6k8Y9a5i88 F3N34gu5nYGz
up/tBmOo3IaM+WFwLcERMQRw5PTgqcZMI0PXJbqWNrLT4Z7e1shA0byeTN5M zNtZ9ny5A6BW
256tQrPf+u/3fj0E76/1/X9I6271vSbCNJLzVLK3R5TCjTXCIGkHBQEnluDx 1ol1zSYb2Wxl
1OyS8ijMslu06iRUAyWK5yBjnNcfc+DdXuFiuJDby3LNdeZCmp3NqiLNLvBD xAF8AYKsAG4O
RjmxF4R1G38RW88D28VhEwZttzI4f92E/wBRIrhX4I8xJFJBOd3OV0/r+v6t uN7+Rp2HjGDV
5rcaVpl9fwSwxTNcwPB5cSyFgN26UEkbWyFBxj1rWi1vSp7m4totTspJ7ZS8 8SXClolHUsM5
UfWuR07wpqNpqNhd3WheH76WC0trcXE1y3mW5iLAtGTAeoIPVeRj3q5ceELq ez8gS2yEpfKT
gkHz5hIoIwMjj5h/Oqla+nmJX6m/pWt2GtfaG064S4hgcJ50Tq8bkqGyrKTk c4+oNaNYug2F
/bXGp3eoxWcM17Osvl2sjSKoEapyzKuT8vXA7VtUmAUUUUDCsm71O9e7kstF soL25gwblri4
MEMOQCELqjkyEENtC8LyxXcm7WrH8Djf4K0q7P8ArL+H+0JR2ElwTO4X/ZDS MBnJwBkk800r
iYz+z/F3/Qd0T/wTS/8AyVR/Z/i7/oO6J/4Jpf8A5KrG8e2q3ur6XbO7oJFV d6Nhl/0u2wQf
Udaxrq60i61rPipNPS3i1byrkagqCDzVssA/PxgnBX6iqSTV/X8BN2Oy/s/x d/0HdE/8E0v/
AMlUf2f4u/6Duif+CaX/AOSq4+UKLa0FsGGleXceX5ecfYftcGdv/TPy92Mc bOnGK1JrzRU0
aXTvBlp9shvboJJDpWwQiMKpmMZZlixtAUlWwHcZ+YkUW0v/AFv1GaljoXib TdPtrC01nRI7
a2iWGFP7ImO1FACjJusngDrVj+z/ABd/0HdE/wDBNL/8lVzl9aWeseDLy11r Qoxe6UfLhjv4
opZY4mYbGBBcDKgAkNyVNR6rotvb+M7Oy0e3gsPJaCW2jt0EUayCO7YZVcDB PX1BNOyFc6f+
z/F3/Qd0T/wTS/8AyVR9i8XR/P8A2todxt58n+zJYfM/2d/nvsz03bWx12np XIw3emXsEF1r
0UC6K9xqBMWpYS2F153yLNuBAIHmAEgjOcZOK7DwVKsvhuMxW8cEAmkEKQXB nh2bjt8pyi5j
x93AwBgDgCkkn/X9f8NqDdn87E+n6lPLctYalbR2eoqhkEUcpljljyBvjcqp YAkBgVBUkZGG
Rm0q5P4mma18O2OsW1w0Mul6nbzjaud4dvIZeo/hmJ75xgjBrprWdbm0hnUg iRA2R05FS1Ya
JqKKKQwooooAKKKKACiio5p4bdA88qRIXVAzsFBZmCqOe5YgAdyQKAOb1nVt N0bx1otxqmoW
ljA2mXyLJdTLEpbzbQ4BYgZwCcexrQ/4Tvwf/wBDXof/AIMYf/iqjn/5KHo/ /YKv/wD0baV0
lWtiWc//AMJ34P8A+hr0P/wYw/8AxVH/AAnfg/8A6GvQ/wDwYw//ABVdBRTA 5/8A4Tvwf/0N
eh/+DGH/AOKo/wCE78H/APQ16H/4MYf/AIqugooA5/8A4Tvwf/0Neh/+DGH/ AOKo/wCE78H/
APQ16H/4MYf/AIqugooA5/8A4Tvwf/0Neh/+DGH/AOKo/wCE78H/APQ16H/4 MYf/AIqugooA
5/8A4Tvwf/0Neh/+DGH/AOKrz+z16NfHPjLWtFh/txUEbwRWEqv55W2iBCsD g4IOcZPBABOA
fYK830X/AJLD4p/66Q/+ksNDA0tH1zU109Jz4e1vUGusTtcrcWXlvuAx5a/a SFjwBtAJ45JZ
izG//wAJBqf/AEJ2t/8Af6y/+SK07PTobG4uZLdnSO4fzGgyPLWQklnUYyCx OWGcEjdjczFr
lZlGB/wkGp/9Cdrf/f6y/wDkij/hINT/AOhO1v8A7/WX/wAkVv0UAYH/AAkG p/8AQna3/wB/
rL/5Io/4SDU/+hO1v/v9Zf8AyRW/RQBgf8JBqf8A0J2t/wDf6y/+SKP+Eg1P /oTtb/7/AFl/
8kVv0UAYH/CQan/0J2t/9/rL/wCSKP8AhINT/wChO1v/AL/WX/yRW/RQBgf8 JBqf/Qna3/3+
sv8A5Io/4SDU/wDoTtb/AO/1l/8AJFb9FAGB/wAJBqf/AEJ2t/8Af6y/+SKP +Eg1P/oTtb/7
/WX/AMkVv0UAYH/CQan/ANCdrf8A3+sv/kij/hINT/6E7W/+/wBZf/JFb9FA HI6vd6trVta2
SeFtVtv9Ps5nmnmtNiJHcRyMTtmZvuoegNddRRQAUUUUAFFFFABRRRQBxuha 7baPZ3dle2es
LOupXz/u9IupVKvdSupDJGVIKsDkHvWn/wAJhpn/AD663/4Ir3/41W/RQBgf 8Jhpn/Prrf8A
4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UAYH/CYaZ/z663/AOCK9/8AjVH/ AAmGmf8APrrf
/givf/jVb9FAGB/wmGmf8+ut/wDgivf/AI1R/wAJhpn/AD663/4Ir3/41W/R QBgf8Jhpn/Pr
rf8A4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UAYH/CYaZ/z663/AOCK9/8A jVH/AAmGmf8A
Prrf/givf/jVb9FAGB/wmGmf8+ut/wDgivf/AI1R/wAJhpn/AD663/4Ir3/4 1W/RQBgf8Jhp
n/Prrf8A4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UAcTeeMrTS9QW9RNbks rmWOG4t5tIvB
5bsVjR4i0eByVDR5+bqvz5WR3gvxp4VtfAvh63uPEujQzxaZbJJHJfxKyMIl BBBbIIPGK6X+
zPN1f7fdTed5PFnDtwsGVwzdTukOWG7sp2gDLl63gT/knnhr/sFWv/opaqIm H/Cd+D/+hr0P
/wAGMP8A8VR/wnfg/wD6GvQ//BjD/wDFV0FFUI5//hO/B/8A0Neh/wDgxh/+ Ko/4Tvwf/wBD
Xof/AIMYf/iq6CigDn/+E78H/wDQ16H/AODGH/4qj/hO/B//AENeh/8Agxh/ +KroKKAOf/4T
vwf/ANDXof8A4MYf/iqP+E78H/8AQ16H/wCDGH/4qugooA80+JHizw3qfge6 s7DxBpV3dSXN
pshgvY5HbFzEThQcnABP4V2Wg/8AICs/+uYrF+Kv/JO77/r5s/8A0qira0H/ AJAVn/1zFTLY
aNGiiipGFFFFAHK6VrvijWNHsdTt9B0dYLy3juI1k1eUMFdQwBxbEZwfWrf2 vxd/0A9E/wDB
xL/8i0eBv+SfeG/+wVa/+ilrfoAwPtfi7/oB6J/4OJf/AJFqOeTxRdW8tvce HtAmglQpJHJq
0rK6kYIINrggjtXR1XvbK31G0e0u4/Mt5MCSMsQHAIO1sdVOMFTwwJBBBIoA 4Xwjd6vd+M7A
6hFB9iTT75dPuI7t7hp4fMs+S7IhdQchZCMuoB+biST0qubn/wCSh6P/ANgq /wD/AEbaV0lW
tiQooopgFFFFABRRRQAUUUUAFeb6L/yWHxT/ANdIf/SWGvSK830X/ksPin/r pD/6Sw0nsB6B
RRRUFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVj+BP+SeeGv8AsFWv/opa2Kx/ An/JPPDX/YKt
f/RS1URM6CiiiqEFFFFABRRRQAUUUUAcZ8Vf+Sd33/XzZ/8ApVFW1oP/ACAr P/rmKxfir/yT
u+/6+bP/ANKoq2tB/wCQFZ/9cxUy2GjRoooqRhRRRQBgeBv+SfeG/wDsFWv/ AKKWt+sDwN/y
T7w3/wBgq1/9FLW/QAUUUUAYc/8AyUPR/wDsFX//AKNtK6Sub1Q/YvFOg6m3 ML+fpshPCx+c
EdXLe7wJGB3aZec4B6SrjsSwooopgFFFFABRRRQAUUUUAFeX2aXknxV8WrYT wQXJkg2STwmV
B/o0OcqGUnjP8Q/HpXps00VvBJPPIkUUal3kdgqqoGSST0AFeV/D2eTW/F2v +IFuPPgu7yQx
MU2fuVAjiIGBkFEU9M8jr1pPYDsPsni7/oOaJ/4J5f8A5Ko+yeLv+g5on/gn l/8Akqt+ioKM
D7J4u/6Dmif+CeX/AOSqPsni7/oOaJ/4J5f/AJKrfooAwPsni7/oOaJ/4J5f /kqj7J4u/wCg
5on/AIJ5f/kqtXUdStdKszdXshjhDKmQjOSzMFUAKCSSSB071STxPpT3SWxl njdlBLS2ssaI
Su4K7soVHwQdjENyOKAK/wBk8Xf9BzRP/BPL/wDJVH2Txd/0HNE/8E8v/wAl VLaeK9GvQfJu
ZBzHxJbSxkiRtqMAyglWPAYcH1qS58S6VaKpkmmfMkke2G1llYFDtckIpIUH gsfl5HPNAit9
k8Xf9BzRP/BPL/8AJVH2Txd/0HNE/wDBPL/8lVM/inSEvDaieV5MHa0dvI0b kLv2rIF2M+0E
7QSfasKz8fjUNS0+1hh0y3+128E4TUNQa2nbzCwKxxGImTG3rkZyOxzQk3sD djX+yeLv+g5o
n/gnl/8Akqj7J4u/6Dmif+CeX/5KqVPFmivNcx/a3X7MkkkjyQSIm2Ntsm1y oV9pIBCk4NS6
NrsGtyXwt4pUS1lWPMsbxuSUVuUdQy/e6Ee/egZV+yeLv+g5on/gnl/+SqPs ni7/AKDmif8A
gnl/+Sq36KAMD7J4u/6Dmif+CeX/AOSqPsni7/oOaJ/4J5f/AJKrfooA5HXZ /F2i+H9S1X+1
tEm+xWstz5X9kyrv2IW25+0nGcYzg111YHjn/kn3iT/sFXX/AKKat+gAoooo AKKKKACiiigD
nIvFVzdGdrLwxrF1BFcS2/nRvaqrtHI0bEB5w2NynqBUn/CQan/0J2t/9/rL /wCSKPB//IEu
f+wrqP8A6WTVv0AYH/CQan/0J2t/9/rL/wCSKP8AhINT/wChO1v/AL/WX/yR W/RQBgf8JBqf
/Qna3/3+sv8A5Io/4SDU/wDoTtb/AO/1l/8AJFb9VNQvk0+3WaQoFaWOP5yQ PmYL2B55+nqR
1oAy/wDhINT/AOhO1v8A7/WX/wAkUf8ACQan/wBCdrf/AH+sv/kinQ+MNDuL Sa6juZjFEsbH
NpMGcSEiMxqVzIGIIBQHOOKhtfGNhPAbiYiCAGfG4OZG8uVYxhNmcksBt+9k gAE9C2tgJP8A
hINT/wChO1v/AL/WX/yRR/wkGp/9Cdrf/f6y/wDkilk8Y6JFZLdPcXAjJcMv 2KbzItmNxkTZ
ujAyMlgBgg55FIvi7T1n1GOaO7T7HdC2AS0mkaZigf5FVCW6n7ucAZPBFAg/ 4SDU/wDoTtb/
AO/1l/8AJFH/AAkGp/8AQna3/wB/rL/5IqjL41jbxHBpdo+keXNHDIrXmpG3 mk3swxHF5ZLE
behIOTjitNPFmivNcx/a3X7MkkkjyQSIm2Ntsm1yoV9pIBCk4NFg3Iv+Eg1P /oTtb/7/AFl/
8kUf8JBqf/Qna3/3+sv/AJIq1o2uwa3JfC3ilRLWVY8yxvG5JRW5R1DL97oR 7961aBmB/wAJ
Bqf/AEJ2t/8Af6y/+SKP+Eg1P/oTtb/7/WX/AMkVv0UAYkGuajNcRRP4U1iB HcK0sktoVQE/
eO2cnA68An0Bp/gT/knnhr/sFWv/AKKWtisfwSfJ8LWumNxNpWdNkB4Y+Sdi uV/h3oEkA/uy
LyRgmoiZ0FFFFUIKKKKACiiigAooooA4z4q/8k7vv+vmz/8ASqKtrQf+QFZ/ 9cxXH/F3U430
/S/DsN4qXV9exSzRBdzfZ4yX3EfwjzFjGcjJ6ZwRXaaPC9vpFrE+NyxgHFTL YaLtFFFSMKKK
KAMDwN/yT7w3/wBgq1/9FLW/WB4G/wCSfeG/+wVa/wDopa36ACiiigCOeCG6 t5be4iSaCVCk
kcihldSMEEHggjtXIz6P4x0aZm8P6+l7Z4bZZ6xF55jy2fllDK7Y5A3s3GPT NdlRQnYDgP7V
+J//AD7aF/4BTf8Ax6oxrnxJa4e3WPw8Z0RXeMWku5VYkKSPOyASrYPfafSv Q6wLT/koOsf9
gqw/9G3dVzCsc/8A2r8T/wDn20L/AMApv/j1H9q/E/8A59tC/wDAKb/49Xf1 majp02q3C21y
yDSQgM0Kklrpsn5H4wIgMEgZ35wcKGWQ5gscfBrnxJureK4t4/D00EqB45I7 SVldSMggibBB
HepP7V+J/wDz7aF/4BTf/Hq0fh5pn2HwfoM1rNstJ9Kt5JLXblRMY0JkQ5+X d8xZcEM2GGCX
L9dRzBY4D+1fif8A8+2hf+AU3/x6j+1fif8A8+2hf+AU3/x6u/opcwWPKLrw r408VuY/Emry
NZ+YWNjbxrDAykghWHJfBAwGJ6e5z6BoOgwaHaiOMAyEYLD/AD/n8869FDdw sFFFFIYUUUUA
UtT0/wDtK2ih83y9lxFPnbnOx1fHXvtx+Nc9ceA7O58Q3GoyJpzRXEnmyF9O RroMU2kLOTlV
4zjbuHOGA6ddRS/r+vuA43/hGNZluZ47jUoG2W9qLW6W0AUNDKzgOm/Lfw5I Kg5421Dd/D0X
kcL3Fxpt3dq9w0j32lrcR4lk3nYjP8jKeAckY6g8Y7iincPI5JPBPleJItUh vIIY0AUiC18m
eRAgUI7xuqOnyggNGSOxHGH6X4b1vSJoGt9Z09oxbQW0yyac5LrFuAKkTDaS rY5DcjPtXVUU
XewrI5qbwis9ssL3rAAXY3LGMgzSCQHkn7pH4+1aGjaXd2El9PfXsV3cXcqy O0VuYUXCKmAp
Zj/DnknrWrRQMKKKKACiiigDA8c/8k+8Sf8AYKuv/RTVv1geOf8Akn3iT/sF XX/opq36ACii
igAooooAKKKKAMDwf/yBLn/sK6j/AOlk1b9YHg//AJAlz/2FdR/9LJq36ACi iigAqhq+m/2r
Zpb+b5W2eKbdt3fccNjqOuMVfopAcx/wiUiW9sIdQCXFra20MMjQbl3wsSGZ dwyDnBUEH0NQ
nwbO8aPJqqm7R5ZllFthfNedJgdu77oKAbc5IPUHmutoqru9w/r7ji9f8E6h 4ksRDqWs2k7t
FNG4k07dEhcAK8UZk+R1wcMxc/M2CAcB+o+Bv7QMpln06cfaVuYYr3TvPiDe SImDqXG4EKCM
bSp7kV2NFK4HL6f4Z1LR7tH0zUdOhtjDFFNC2mYzsLElPLkRUB3njace9Pm8 IrPbLC96wAF2
NyxjIM0gkB5J+6R+PtXS0UN3EklojK0bS7uwkvp769iu7i7lWR2itzCi4RUw FLMf4c8k9a1a
KKBhRRRQAVi63oMuoyJeadqdzpWpxrtW6ttpEi4bCSIwKuoLMRkZUkkEZOdq igDhJbn4nWQS
EPoN4FUDz/sUoZyOpIEwAJ68AD2HSo/7V+J//PtoX/gFN/8AHq7+inzCscB/ avxP/wCfbQv/
AACm/wDj1H9q/E//AJ9tC/8AAKb/AOPV39V737Z9kcWHkC5OAjT52LkgFiBy 2Bk7cjdjG5c7
g+YLHCDXPiS1w9usfh4zoiu8YtJdyqxIUkedkAlWwe+0+lSf2r8T/wDn20L/ AMApv/j1S2vh
uGLxxqr2lw8eqR6bZSjUJAHkkkaW6DeaBgOjBVBQYACoE2bEK91RzBY4D+1f if8A8+2hf+AU
3/x6q93dfFG8RI1m02xAcF5bSxJkK9wPMd1756dQPevR6KXMFjzrw58OpLS9 a/1a8mvruQgy
3Fy++SQAYXJPoOMf4nPoiqERUUYVRgClopN3AKKKKBhRRRQBgeBv+SfeG/8A sFWv/opa36wP
A3/JPvDf/YKtf/RS1v0AFFFFABRRRQAVgWn/ACUHWP8AsFWH/o27rfrAtP8A koOsf9gqw/8A
Rt3QBv0UUUAYHgb/AJJ94b/7BVr/AOilrfrA8Df8k+8N/wDYKtf/AEUtb9AB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBgeOf+SfeJP+wVdf+imr frA8c/8AJPvE
n/YKuv8A0U1b9ABRRRQAUUUUAFFFFAGB4P8A+QJc/wDYV1H/ANLJq36wPB// ACBLn/sK6j/6
WTVv0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAG Baf8lB1j/sFW
H/o27rfrAtP+Sg6x/wBgqw/9G3db9ABRRRQAUUUUAFFFFABRRRQBgeBv+Sfe G/8AsFWv/opa
365ix8I3em6fbWFp4t1uO2tolhhTy7M7UUAKMm3yeAOtWP8AhH9T/wChx1v/ AL82X/yPQBv0
Vgf8I/qf/Q463/35sv8A5Ho/4R/U/wDocdb/AO/Nl/8AI9AG/RWB/wAI/qf/ AEOOt/8Afmy/
+R6P+Ef1P/ocdb/782X/AMj0Ab9YFp/yUHWP+wVYf+jbuj/hH9T/AOhx1v8A 782X/wAj1Y0n
QjpuoXd/Nqt9qFzcxRQs90IRtSMuVAEcaDrK3XPagDXooooAwPA3/JPvDf8A 2CrX/wBFLW/W
B4G/5J94b/7BVr/6KWt+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAwPHP/ACT7xJ/2Crr/ANFNW/WB45/5J94k/wCwVdf+imrfoAKKKKACiiig AooooAwPB/8A
yBLn/sK6j/6WTVv1geD/APkCXP8A2FdR/wDSyat+gAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAwLT/koOsf9gqw/wDRt3W/WBaf8lB1j/sFWH/o 27rfoAKKKKAC
iiigAooooAK53VvEs+l3t8g08S2ljaLczyiY7zu3hVSMIdxygHUfe74xXRVT n0uyuWu2nt1k
+1wiCcMSQ8Y3YUjp/G350gRzdj4w1O/EVvHoDR6hJIQEuGnghKBclg8sCuSO BgJjJHNWYfF/
m2X2h7AxfubSTY8oyDPIY9p46rj8enFXB4T0hbXyBHdE+YJfON9OZ9wG3/Wl 9+MEjG7GCRiq
9r4L0mK1sI7iJppbOGKIOkrxK4jbcm5Fba21uRnOMnFVpcSvbUoQeObi5ur1 YdAvpbeJZfIl
jguD5pjyOSYQgBwcbHcnjjPFRWPjDUNZl0v7Fb2KF9Qe2u0F2zbQImbGGiV1 YEcq6ocrjoc1
unwnorTXMjWjP9oDh43nkaNd5y5RC22Mk8kqASeadF4X0qFYwI7l2jnE6yTX k0khYKVGXZyz
LgkbSSvJ4pLzDucrLrHiHTNM1CS7vLtNUFlLKlrfW0Qg3qAd8E0SkbR82EkL OQASAMk6reM5
YfEttpE2nx7ZG8mSeKZ5Ak3lGQrkR7AMDGGdX5B2YINaEHg/RLeKaFLadopI Wt/Lku5nWKNh
grGrOREMYHybeAPQU5fCWjC/jvjBcNPG4kQveTMocJ5e7aX27ivBOMnvmi4z O0jX9b1PWdJM
1haWthe2El1sW7MkmP3e0keWBkbiMBsYJOeAK6yqEWjWEEthJFE6NYQmC32y uAqEAFSM4YfK
v3s8jPWr9N26f1qIKKKKQzA8Df8AJPvDf/YKtf8A0Utb9YHgb/kn3hv/ALBV r/6KWt+gAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAwPHP8AyT7x J/2Crr/0U1b9
YHjn/kn3iT/sFXX/AKKat+gAooooAKKKKACiiigDA8H/APIEuf8AsK6j/wCl k1b9YHg//kCX
P/YV1H/0smrfoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKAMC0/5
KDrH/YKsP/Rt3W/WBaf8lB1j/sFWH/o27rfoAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KACiiigAooooAwPA3/JPvDf/AGCrX/0Utb9YHgb/AJJ94b/7BVr/AOilrfoA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMDxz/yT7xJ/2Crr/wBF NW/WB45/5J94
k/7BV1/6Kat+gAooooAKKKKACiiigDA8H/8AIEuf+wrqP/pZNW/WB4P/AOQJ c/8AYV1H/wBL
Jq36ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDA tP8AkoOsf9gq
w/8ARt3W/WBaf8lB1j/sFWH/AKNu636ACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKAMDwN/wAk+8N/9gq1/wDRS1v1geBv+SfeG/8AsFWv/opa36ACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigDA8c/wDJPvEn/YKuv/RTVv1g eOf+SfeJP+wV
df8Aopq36ACiiigAooooAKKKKAMDwf8A8gS5/wCwrqP/AKWTVv1geD/+QJc/ 9hXUf/Syat+g
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAwLT/ko Osf9gqw/9G3d
b9YFp/yUHWP+wVYf+jbut+gAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigD
A8Df8k+8N/8AYKtf/RS1v1geBv8Akn3hv/sFWv8A6KWt+gAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooqnqOq6do9utxqeoWtjAzhFkuZliUtgnALED OAePY0AZnjn/
AJJ94k/7BV1/6Kat+vMvHHizRR4a19tN8TaVfpe2E0MtiNSiZ1cxFVeHLfQN H3+8vzZWTb07
xn4fnuG1HUPFejwO6FIbFdUhKwISD8+Hw8pwMnkL91c/M8gB2VFYH/Cc+Ef+ hq0T/wAGEX/x
VH/Cc+Ef+hq0T/wYRf8AxVAG/RWB/wAJz4R/6GrRP/BhF/8AFUf8Jz4R/wCh q0T/AMGEX/xV
AG/RWB/wnPhH/oatE/8ABhF/8VVDU/F/hyXyrrT/ABjoiXcGdsUmpxiGdTjK OAxxnAw4BZTz
yCyMAX/B/wDyBLn/ALCuo/8ApZNW/Xl3hTxho93Zst7r+naVaRaleXHkyalA s1wzXUkiglHI
WIBh0P7w/wDTMfvfRdO1XTtYt2uNM1C1voFco0ltMsqhsA4JUkZwRx7ihgXK KKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMC0/5KDrH/YKsP8A0bd1 v1gWn/JQdY/7
BVh/6Nu636ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAM DwN/yT7w3/2C
rX/0Utb9YHgb/kn3hv8A7BVr/wCilrfoAKKKKACiiigAooooAKKKx9T1i4sd VtbOCzjmWSGS
4mlknKCKNGQNgBWLNh8gcdOo60gNiiuJsPHd5qEQ2eH545p2QWfnCeGN9x6P JJCoUgc4QSDg
4J73h4ukS2ne504QyQW13NInn5GYGCkA7Rw2cg4HHb0dgWux1FFckvjSWTXz YQ6LdzWyuInu
IoZ2IcqG4PleVtGQCTID149c5fHOpajaTJZ2Npb30F3axvBLdOrqkkgBDo8S uhwRzsK4bKsS
MUJNuwrrc76iuNF9rdprbm/u7yHzJpUt7eW3iaynXDbAssYMkTYCZMp5JYKp 4xVg8dXtpZ6E
l9YxTTXcNs13LDM7eX5zBFbCxELnr85jB5CliDQlfby/Eb0O8orkR4h1u71P TBBp9pDYzajN
auz3ZMjrGJQTt8vA5QMPmyehx1rrqA62CiiigDM1zUJtPsYvsqo95c3EVtbo 4LfM7AF9oILB
F3SFQR8sbcqMkT6b4e03S7hryK2jk1KRCk+oSopuJ8kE73ABxkD5RhQAAoAA Aztd/wCQ94T/
AOwrJ/6RXVdLVREwoooqhBXLXHibVJNfuNJ0rSLS4lt95Zrm+aEEKsR4xE/J 83GDjp15rqa5
a48M6pFr9xq2lavaW8txvDpc2LTABliHGJU5HlZyc9enFC3121/4APbTy/4J o6Pr8eszFYoG
jT7LDcgs3P7wuNpHYjZ6nrWf4c8Wtr+q3VqBo6LA8qmKDU/Oul2SFMvD5Y2A 4z944yOuaWDw
3qWl3kcmj6raRQC1htpEvLJpnfyy53BllQAnec/Kefyq3omk6tpMjwzalZT6 f5kskcSWTxyq
XcvzIZSDjcR9wZ9qfUWpuUUUUhhWXqXh7TdUuFvJbaOPUo0CQahEii4gwSRs cgnGSflOVIJD
AgkHUooA5nwx4iTXYr6CTYt/p13LZ3KoMKzRuV3qCSQGADbSSRnGTwTvVweh zyJ8WvFsIb92
8sBIPr9mh5rvKhqw0FY3ied7fSopIwm77ZbD50DDmZB0IPPv1HUVs0VLGedw 61rEGlo93rku
y5s7K6lu3hhH2MSMwkZcJtCgAYLhtvJJIqnbatPaWizWt+jxu94X1EwIWWM3 cStMDjAARmbP
3OAxGBivUKKq+tw/4B5b4j8XXenaKjaV4pS8KpczxXsghiW58sKfLDeWyzMC xGI0XODl1Knc
7UNZv7C41VrTW4rf7RqcZnlurmKFLRDbKyfOYZAoYjaC6kHbgEE5PqFFF/6+ a/yA8s1aexuY
7PUNbutDutQNipS0vhJEZfmba9pOVUpIeCSkZJIT7oKmpb3WbjTZdXSDW3tL m61OJdt1LBF9
nBtldVZ2jfbu27RlJCxXAwSWHp1FK+/9dbi/r8LHmMup6t4h8H3l1Nq89tGv h+G5kjt44sSS
Oku8sWQkD5RwMYr0eyZXsbd0uPtKNEpWfKnzRj72VAHPXgY54qeim3dsAooo pDCiiigAoooo
AKKKKAMC0/5KDrH/AGCrD/0bd1v1gWn/ACUHWP8AsFWH/o27rfoAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooA4Xwb4y8L2vgfw/b3HiTR4Z4tNt0kjkvo lZGESgggtkEH
tW3/AMJz4R/6GrRP/BhF/wDFVv0UAYH/AAnPhH/oatE/8GEX/wAVR/wnPhH/ AKGrRP8AwYRf
/FVv0UAYH/Cc+Ef+hq0T/wAGEX/xVH/Cc+Ef+hq0T/wYRf8AxVb9FAGB/wAJ z4R/6GrRP/Bh
F/8AFUf8Jz4R/wChq0T/AMGEX/xVb9FAGB/wnPhH/oatE/8ABhF/8VUD+LfB Ml4l23ibQzOk
bRK39oxcKxBIxuxyVH5V01FAHCRXXw2gt5YI/EOlBJAqjOt5aIKcqImMmYgD yAhUDAxVeNvh
01iLS78TaROiyTspGriNikrbmRyJMuDxncTkjJ5r0OigDim1T4dtqP25vEGj GXglDqy+UzBd
oYxb9hbbgbiM4A54qGK6+HEVtJAviTTSj7Mb9eLNGEYMojYykxgEA4UgcCu7 oouKxxEGo/Dq
3v8A7ZH4i0kP5jSiI6yDCrtncyxGTy1Y5JyFBySe5quX+GZFup8Q6YVgWNUU 68SuI33x5Hm4
YqehOcDgccV39FCdgOQOveASlso8SaMotrlrqLZqyqVkYsWOQ/IO9sqeOcYr Q/4Tnwj/ANDV
on/gwi/+KrfooGYH/Cc+Ef8AoatE/wDBhF/8VR/wnPhH/oatE/8ABhF/8VW/ RQBxesa1aa9q
XhxfDeuaVPdRaqcyIwukizZ3X3lR1PIDY+YevOMVufY/GH/Qd0P/AME03/yV UWu/8h7wn/2F
ZP8A0iuq6WrjsJnP/Y/GH/Qd0P8A8E03/wAlUfY/GH/Qd0P/AME03/yVXQUU xHP/AGPxh/0H
dD/8E03/AMlUfY/GH/Qd0P8A8E03/wAlV0FFAHP/AGPxh/0HdD/8E03/AMlU fY/GH/Qd0P8A
8E03/wAlV0FFAHP/AGPxh/0HdD/8E03/AMlUfY/GH/Qd0P8A8E03/wAlV0FF AHP/AGPxh/0H
dD/8E03/AMlUfY/GH/Qd0P8A8E03/wAlV0FFAHk+i2moz/ErxTbXOp+VemSH dd2FuseP9HhI
2pL5gHHBznuRjjHY/wDCP6n/ANDjrf8A35sv/keue0X/AJLD4p/66Q/+ksNe gVEtxowP+Ef1
P/ocdb/782X/AMj0f8I/qf8A0OOt/wDfmy/+R636KQzA/wCEf1P/AKHHW/8A vzZf/I9H/CP6
n/0OOt/9+bL/AOR636KAMD/hH9T/AOhx1v8A782X/wAj0f8ACP6n/wBDjrf/ AH5sv/ket+ig
DA/4R/U/+hx1v/vzZf8AyPR/wj+p/wDQ463/AN+bL/5HrfooAwP+Ef1P/ocd b/782X/yPR/w
j+p/9Djrf/fmy/8Aket+igDA/wCEf1P/AKHHW/8AvzZf/I9H/CP6n/0OOt/9 +bL/AOR636KA
MD/hH9T/AOhx1v8A782X/wAj0f8ACP6n/wBDjrf/AH5sv/ket+igDA/4R/U/ +hx1v/vzZf8A
yPR/wj+p/wDQ463/AN+bL/5HrfooAwP+Ef1P/ocdb/782X/yPR/wj+p/9Djr f/fmy/8Aket+
igDI0nQjpuoXd/Nqt9qFzcxRQs90IRtSMuVAEcaDrK3XPateiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACi
iigAooooAwtd/wCQ94T/AOwrJ/6RXVdLXNa7/wAh7wn/ANhWT/0iuq6WrjsJ hRRRTEFFFFAB
RRRQAUUUUAFFFFAHm+i/8lh8U/8AXSH/ANJYa9Arz/Rf+Sw+Kf8ArpD/AOks NegVEtxoKKKK
QwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAwtd/5D3hP/sKyf+kV1XS1kazpv9q6cbYTeTIssVxFIV3BZIpFkTcu RldyLkAgkZAI
PIyx4/0iyvRp/iBm0S/DbcXgIt5MLu3Rz4CMp5xkq3GCqniqiJnV0Vz/APwn fg//AKGvQ/8A
wYw//FUf8J34P/6GvQ//AAYw/wDxVUI6Ciuf/wCE78H/APQ16H/4MYf/AIqj /hO/B/8A0Neh
/wDgxh/+KoA6Ciuf/wCE78H/APQ16H/4MYf/AIqj/hO/B/8A0Neh/wDgxh/+ KoA6Ciuf/wCE
78H/APQ16H/4MYf/AIqj/hO/B/8A0Neh/wDgxh/+KoA6Ciuf/wCE78H/APQ1 6H/4MYf/AIqu
a1z4uaPFFJa+Gg+takS8cZhjb7NG4xy8mMFcZPy5yB2yDQBnaSmm6/8AFDxf DPBBe2TXKRSR
TxBkZo4YlIKsMHDofyyK6/8A4Qbwj/0Kuif+C+L/AOJrA+HGi3lnDcXuoN51 xcyvcPMVC5kk
Ys5AHABLHgf4E99US3GjA/4Qbwj/ANCron/gvi/+Jo/4Qbwj/wBCron/AIL4 v/ia36yPElxd
W+lRmyuTbTSXVvD5oRWKq8qq2AwIzgntS8hlf/hBvCP/AEKuif8Agvi/+Jo/ 4Qbwj/0Kuif+
C+L/AOJrm/7b12Dxi2nHVrUrDIsK2txKDNPH5YJm8mO33MScncsioMYwMGqG meL9Qk0+/wDt
OvxkRS2u+9RreeKBXkCv8yohTgn5JYwV2k7mGcC12Edn/wAIN4R/6FXRP/Bf F/8AE0f8IN4R
/wChV0T/AMF8X/xNctdeJr5dNgY+ITBCUuzaXwhiP9oPG4EKcrtbcCeIwpfG VwK0jqmtDV2u
PtkhQX32T+z/ACo9hBtfM67d+7f/ALWMcY70dLjsa/8Awg3hH/oVdE/8F8X/ AMTR/wAIN4R/
6FXRP/BfF/8AE1xaXdtqkOpPf+I0uEawtDczzWweKB/OctDKke392DwysQQp O9sVLYT2Mcuk
/YJ7OzsodWKiTSZFazu3Nu+NisCEJIwY0JwWPzFjkO1txen9aXOv/wCEG8I/ 9Cron/gvi/8A
iaP+EG8I/wDQq6J/4L4v/ia4rRvFusamLyJNajlEpsZIZo2hlaETTlHQhYwq sAANhMhU/wAb
V1vhWNrfVvEVvNqs99PHeR7ln8oOoMEeGIRVxu57Y+Xjvks/6+X+YFj/AIQb wj/0Kuif+C+L
/wCJo/4Qbwj/ANCron/gvi/+JrfopDMD/hBvCP8A0Kuif+C+L/4mj/hBvCP/ AEKuif8Agvi/
+JrfooAwP+EG8I/9Cron/gvi/wDiaP8AhBvCP/Qq6J/4L4v/AImt+igDA/4Q bwj/ANCron/g
vi/+Jo/4Qbwj/wBCron/AIL4v/ia36KAOV0LStO0fxxrVvpmn2tjA2m2LtHb QrEpbzboZIUA
ZwBz7CuqrAtP+Sg6x/2CrD/0bd1v0AFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB UF3ZWt9F5V1B
HMn911zU9FAHOHwNoBJIsgM9gelH/CC6B/z5iujoouxHOf8ACC6B/wA+Yo/4 QXQP+fMV0dFF
2Bzn/CC6B/z5ij/hBdA/58xXR0UXYHOf8ILoH/PmKr3vhPwxp1o91dW4SJMA kDcSSQAqqASz
EkAKASSQACTXV1HJBDM8TyxI7wvviZlBKNtK5X0O1mGR2JHei7A810jT9On1 XUbfWNCjsLeO
9S1t5VlD7HaGKRY5iBhXbzQAVJUtlM52GTtbPwrpFiSYbUcnOD2PqPeofD// ACG/Ff8A2FU/
9I7at+ndgIqqihUUKo6ADApaKKQwooooAKhurSC8jWO4TeiyJKBkjDKwZTx6 EA1NRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAYFp/yUHWP+wVYf8Ao27rfrAtP+Sg 6x/2CrD/ANG3
db9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA GB4f/wCQ34r/
AOwqn/pHbVv1geH/APkN+K/+wqn/AKR21b9ABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRR
QAUUUUAFFFFABRRRQBgWn/JQdY/7BVh/6Nu636wLT/koOsf9gqw/9G3db9AB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGB4f/AOQ34r/7Cqf+ kdtW/WB4f/5D
fiv/ALCqf+kdtW/QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFYk/ i3RYriW3iupL
2eFyk8enW8t40DA4xIIVYxnIOA2M4OOhwAbdFYP/AAl+m/8APprn/givf/jV H/CX6b/z6a5/
4Ir3/wCNUWYG9RWD/wAJfpv/AD6a5/4Ir3/41Ve98Q6LqNo9rdWGuPE+CQND vlIIIIZWEQKs
CAQwIIIBBBFFmBPaf8lB1j/sFWH/AKNu6368vg1PUJPFF+LtdZGmzWVtbtqE OjXqXFwsbzts
2rCBG5EoDOvYZQKX/dddB4n0i1t4re30/WYYIkCRxx6BeKqKBgAAQ4AA7U7C OiorB/4S/Tf+
fTXP/BFe/wDxqj/hL9N/59Nc/wDBFe//ABqlZjN6isSDxbostxFby3UllPM4 SCPUbeWzadic
YjEyqZDkjIXOMjPUZ26ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigDA8P/8A
Ib8V/wDYVT/0jtq36wPD/wDyG/Ff/YVT/wBI7at+gAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAxtammuNR0zRbeWSM3rSSXTRMUkW1jX5yj/wAJMjwoSPmAkJXBG5dt IorKyWG2hjhh
gjCxRRqFVFUYCgDgAAYwKwZ/+Sh6P/2Cr/8A9G2ldG6h0ZT0IxVWfLoLqeaW vj7UZdJlu4tU
0LU5Bpkl48VjbuTZyKFIWUCZ92dzDHyEleO+Np9e1tNBS6SQTyPdeU1x/wAI /eR+Qm0nJti5
lkyQFyCAN2f4TnQuvB1jcWENol1eW4jsTYNJEybpYsYXflSCVPIOOCT2JBnb QLt7MRSeJdYa
dJfMjuh5CunGCu1YhGy8nh1bnkYIGLdun9a/5COcv/GVzbwaaW8R+F7VbiC4 kN7IDLBO0bqo
Ef71NpO45XL4IIycZq2PEmu3em3Wq21tZ29vp8KSXNpcRuZZm8pZXVX3KI8B to3K2SDkAVua
d4ettOuYroXFzPcqkqvLMy5lMjKzMwCgZ+QYwAAO1Q6h4Wt9QuriQ3t7Bb3e Be2kLoIrrAC/
PlSwyoCnYy5AAOaOn9f1/WwdfIzJPFt5He6pA0EASG6gjs3w37xG8nzAwz94 eaCMdiOODS2O
ua5utr28l06Swurue1SGG2eOSIq0gRi5kYPny8EbV+9ntg6d74V0+/WUSvOp e+jvgyOAVkQI
ABx90hACDnOT7YjsvCcVpdLJJqmoXNvHLLNBazeUI4XkLEsNkascb2A3MwGf UAhPbTf/AICD
1MPTPG+o3VnPJc21qjlrX7OyBtrhxD5oIJ6qZuOehHoc3JPEt+ssN897o1pp 8161pBZ3Z2T3
AWTy2ZZTIF3cFgmwkgAZBPFxfBOmLpkVj5t1siuYLlH3gOHiVFAyB0IjAIxz k9OMSv4Uga4f
ZqN9FYSTefJpyGPyXkLbiclDIuW+YhXAznjk5btfT+tv+CHT+v6/r79ueCG6 t5be4ijmglQp
JHIoZXUjBBB4II4xXKaHq8sHifVvC9ytwwsfLlsp5yWaWB0BG5j97a4kQNyS E+YlgWbr6861
KR4/jfBsYjdpECn3BmnqWgO9oooqCgooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigDA8
P/8AIb8V/wDYVT/0jtq36wPD/wDyG/Ff/YVT/wBI7at+gAooooAKKKzNQ1uP T9RtrL7JczyT
o8paLYFijUqGZizDgbweMnrgGkBp0VxVv8UfD1zZXdzG5K26q4UXFud6swUN kS7Yxkj/AFhQ
89K0pPGNvHZW9yNL1N/NhkuGjSNCY44yAzE79rD5gRsLbhyu6nYDo6Kwv+Ep tDqn2RbW7aHz
BD9sCr5PmmPzAn3t2duDnbtycZzxVa38a21xaNMNL1JHZIZLeF1j33KzEhCm HIGSDneVx3xR
Zh5nTUVwM3jHVp7q2hhC2XmtdBlfSLi9dfLlCBSsLjbwTlslSeldC3ii3i1Z rCW0uwiSmB7z
aghEoi83b97f93vtxnjOaLaXDq12N2isDRfEUus6rND9guLS3FpFcRfaFUPI HZwG+ViMEKOD
hh3ArfosIKKKKBnL6zZT33jrRYrfU7vT3GmXzGW1WJmI820+U+YjjHOemeBz 1zof8I9qn/Q5
65/35sv/AJHqOf8A5KHo/wD2Cr//ANG2ldJVrYlnP/8ACPap/wBDnrn/AH5s v/kej/hHtU/6
HPXP+/Nl/wDI9dBRTA5//hHtU/6HPXP+/Nl/8j0f8I9qn/Q565/35sv/AJHr oKKAOf8A+Ee1
T/oc9c/782X/AMj0f8I9qn/Q565/35sv/keugooA5/8A4R7VP+hz1z/vzZf/ ACPR/wAI9qn/
AEOeuf8Afmy/+R66CigDn/8AhHtU/wChz1z/AL82X/yPXGPZT2PxmhiuNTu9 Qc6ZAwluliVg
PNn+UeWiDHGemeTz0x6nXnGq/wDJbrf/ALBNv/6OnoA7+iiisygooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigDkbTV4dF1/xIl7aar/AKRfpNE8Gl3M6On2W3TIaONl +8jDr2q//wAJ
hpn/AD663/4Ir3/41W/RQBgf8Jhpn/Prrf8A4Ir3/wCNUf8ACYaZ/wA+ut/+ CK9/+NVv0UAY
H/CYaZ/z663/AOCK9/8AjVVJtf0W41CO8ktdeLpBJb7P7DvNpVypOR5P+wP1 rqqKAOBhuNNg
sntl1PxngKiQMdIus26qchVH2fa/oTIHJHUms1bLR7cWtpZz+JbWxSC4juPI 0K4jebzWQldq
22xVIU8oFI4wckmvUKKL63A4QXGgrqf2tR4mWHzBMLMaLd+SJQnliT/Ubs7R jG7b3xnmmtL4
fNtFEg8TRvDbwwQzJot3vj8oko4zBgtk85BB6YrvaKLiPO1/suB4ZbTVPGNt cJ52+ZNCmdpf
NcO27fasPvDjAGOlX2v9BkkZ5YfEUhe6+1OG0S7wz+V5WOIOm3n6/lXa0UeQ +tziNIv9H0e5
knWTxRdM0KW6C40W6IjjQsVUbYB03Hk5J7k1sf8ACYaZ/wA+ut/+CK9/+NVv 0UXuKxgf8Jhp
n/Prrf8A4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UDOYtdSg1Tx3pM9vHdI i6ZfoRc2ktu2
fNszwsiqSOeuMdfQ119c3P8A8lD0f/sFX/8A6NtK6SrWxLCiiimAUUUUAFFF FABRRRQAV5xq
v/Jbrf8A7BNv/wCjp69HrzjVf+S3W/8A2Cbf/wBHT0Ad/RRRWZQUUUUAFFFF ABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF AGHdfu/H2iyv
8sb6fewKzcBpC9s4QH+8VjkYDrhGPQGukrI1TTf7Qjt3im8i8tJfPtZiu8Ry bWT5lyNylXdS
Mg4Y4KthhhP8Q4dLuWtfEujajpUqhj58cTXdtJhsDY8YLcgg/Mi9x1FVFiZ2 lFcZ/wALV8H/
APQQu/8AwWXX/wAbo/4Wr4P/AOghd/8Agsuv/jdUI7OiuM/4Wr4P/wCghd/+ Cy6/+N0f8LV8
H/8AQQu//BZdf/G6AOzorjP+Fq+D/wDoIXf/AILLr/43R/wtXwf/ANBC7/8A BZdf/G6AOzor
jP8Ahavg/wD6CF3/AOCy6/8AjdH/AAtXwf8A9BC7/wDBZdf/ABugDs68wurt bz45TLHHIBZ2
VtbSOy/KXJklwD/uyL6H+dSap8XYZBLb+GdFvtRuQQouLiI29uu5Thjvw5AP UbR0PPTJ4B8P
6lBfXWsatPJcXl2/mXMkowWfAAwOigAAADgAD0yRgeh0UUVmUFFFFABRRRQA UUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UySKOZCksaSI
eqsMin0UAZ39g6V/z4w/lR/YOlf8+MP5Vo0UXYGd/YOlf8+MP5Uf2DpX/PjD +VaNFF2Bnf2D
pX/PjD+VH9g6V/z4w/lWjRRdgZ39g6V/z4w/lR/YOlf8+MP5Vo0UXYFKHR9P t5N8VpErYxkC
rgAUAAAAcAClooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKAP//Z
--------------070405080900080906050104
Content-Type: image/jpeg;
name="client-states.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="client-states.jpg"
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAJJAi8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3eiiisygooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAw2D+I9SvrAzT22n6fKsNx5EzRTXEpjSQAOhDJGqy IflIZm4OFUiT
O17RPBPh+yF1f+FbG8LCQlzZRzzSFI2kYs7/ADOxCHkkkk8nkmtTwX/yAbj/ ALCuo/8ApbNS
+LdCutesYYLWSFGQy5MpIHzQyRjoD3cfhmrSF11MC7svAdvCjweCtOvGkjgk ijg022DP5zlE
A37QDkc5IxQtl4CSDfe+DNNsHWV4p4rjTbfdAViMpLFNykbBkFSev1xav/C2 qpql3d6c1lLE
z2s1vbzytFtZJmkkUsEbAJOQcHkkYxin3fhTUdZjkl1CS1tp7qaRpkt5GkWF DbvCoViq7zlg
xyF6kduWtr/15C+1Z7af8EoLZeCEhuZLzwDaWLRWz3ccdxpdtuniXG5k2k4I yuVbaw3DIqfU
9I8EabJNCPBGnXU8fkARQadbAuZnKIAX2jqpzkipbjQfE+s3NwNWbSordrGe 0hNtJIzIzqg3
sGQZBK/dyNuT8z5GE1Lw3rGs2d3NqFjo8tzM9oPsL3DyW7xwyFyGcxZ+bceN hAwOuaNNP66/
5f10Frbz/Ugn0jwrAlsn/Ctbd764V5BYpYWXmIiEAszb/Lxll4Dk/N04OILi w8LQ3VrDF8Ll
nF0u6F106yj3fLuIKySKykdwwHIrUu9AvZtKsLdPDPhoJbl9tmLh41tmJ+WS CZYco3XoinJB
DDHOnaaNewjQzcXQnewRxNI7MWcsm0YJyWx6scnqcmn/AF/X9f5DOYhh+Hss 97D/AMIdpqSW
dtJcuG0uD5lR3RgpHBbMZ444I98S3en+CbaWYQ+ArK8htVVrue20y2KW2VDY YMQzEKQxCBjg
jjJAMlx4J1GSw1hYri1S7uUf7JISxVWMk7EPx0KTbTjPf0FWr/w7rPl3tnYv C1rfOsrTDUJr
Sa1kCKhKmJSZF+UNtLLzkHg8Jj6mgPBPhjaHstIt9PZh/rtLJspGX0LwlWK9 DtJxkA4yBTNP
1Y2+uS+G9QuRNqEMCXMM+0L9ohZmUFgAAJAUYMBweGAGSidBBG0VvHG7mRkU KXPViB1rgPGk
i2fxI8JXccUfmvBdxyNtG50DQEKT1wCSR6ZPqaJJCTdtTu6KKKzKCiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiqcmow w6nFYTK8bzpm
CRgNkrDJZFOfvhRuwcZGSM7X2gHNeGbnxJHpt2thpWlT2o1XUNkk+pyRO3+m TZyogYDnP8R9
eOlbP2zxh/0AtD/8HM3/AMi0ngv/AJANx/2FdR/9LZq6GtCTn/tnjD/oBaH/ AODmb/5Fo+2e
MP8AoBaH/wCDmb/5FroKKAOf+2eMP+gFof8A4OZv/kWj7Z4w/wCgFof/AIOZ v/kWugooA5/7
Z4w/6AWh/wDg5m/+RaPtnjD/AKAWh/8Ag5m/+Ra6CigDn/tnjD/oBaH/AODm b/5Fo+2eMP8A
oBaH/wCDmb/5FroKKAOf+2eMP+gFof8A4OZv/kWuJ8WTaxL478Kf2tY2NriO 78v7JePcbvmg
zndEmO3TOcnpjn1avOfiB/yPfg//AK53n/oVvQB31FU49Rhm1OWwhV5HgTM8 igbImOCqMc/f
KndgZwME43JuuVmUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxvhuw1nWPC+kanceL9YWe8so biRY4LMKGdAx
AzATjJ9a7KsDwN/yT7w3/wBgq1/9FLQAf8I/qf8A0OOt/wDfmy/+R6P+Ef1P /ocdb/782X/y
PW/RQBgf8I/qf/Q463/35sv/AJHo/wCEf1P/AKHHW/8AvzZf/I9b9FAGB/wj +p/9Djrf/fmy
/wDkej/hH9T/AOhx1v8A782X/wAj1v0UAYH/AAj+p/8AQ463/wB+bL/5Ho/4 R/U/+hx1v/vz
Zf8AyPW/RQBgf8I/qf8A0OOt/wDfmy/+R6P+Ef1P/ocdb/782X/yPW/RQBgf 8I/qf/Q463/3
5sv/AJHo/wCEf1P/AKHHW/8AvzZf/I9YkHiTVxcT+T9jW0tblFmSRJJJJFku 5Ijtcv8ALgKD
yGHYBRiq19r+qyM97JcW32ZrLUHhtYTJGy+UyqN7B/mPuu0qSRz1p2DrY6T/ AIR/U/8Aocdb
/wC/Nl/8j0f8I/qf/Q463/35sv8A5HrPbxJqMNtd6pNc6VHp6NcxRWzrIJg8 RYZ3AtvzsJKB
AQD1OOcu08R+IL28tY7ry7aey1R4bmFbfBmT7KZQu1J3APJ/ibnacDGKQHSf 8I/qf/Q463/3
5sv/AJHo/wCEf1P/AKHHW/8AvzZf/I9c3ba/r+uaTLFeLbad9rihntZGuY7b eryKPKDxzSv8
4O0SBUOTwucYltrq+tL/AE+xhubu1MGosLy3vZ2vAV+zs+I5d+9kOCR5mWBI O0ABadrb/wBf
1/XQW+xv/wDCP6n/ANDjrf8A35sv/kej/hH9T/6HHW/+/Nl/8j1zlh40126+ 1RPb2iTN9ikt
HeAqhiuJSmSolZiABkFhGx7otdF4afVGvdbTU72C5MV2qR+TA0QX9zGTgM7Y Bz09cnJzwWfX
+tv8wF/4R/U/+hx1v/vzZf8AyPWJr2h6jfI2hweK9YuLydA53xWgS1Td8szl YAwIZcoFIZmX
5SoVnTuqKQzC8CRtD4ZeJ5nndNS1BWlkChnIvJvmO0AZPXgAegFdLXPeC/8A kA3H/YV1H/0t
mroa0JCiiigAooooAKKKKACiiigArzn4gf8AI9+D/wDrnef+hW9ejV5z8QP+ R78H/wDXO8/9
Ct6ALFn4NtNL1BrJ31uSyuZZJre4h1e8HluxaR0lCyYHJYrJj5ujfPhpNf8A 4Q/TP+frW/8A
we3v/wAdrfqlrGoHStGvdQEJmNtC8vlBtu/aM4z2zWdyrGb/AMIfpn/P1rf/ AIPb3/47R/wh
+mf8/Wt/+D29/wDjtZ134zv7HVIrCXQpJpVVXufsguJxGHYhQrJAVLYGSHKA Z4J609vGN3Hb
yXcmkILRra4ubaRbrLOsWOHXZ8hbORgtx154oF5F7/hD9M/5+tb/APB7e/8A x2j/AIQ/TP8A
n61v/wAHt7/8dqprHjJtNmntrfTnurpLlbdETzXBzEJSzCKORlABxwp7dAeK 0vjuSC80uKfS
XtYb3YC968luQ7MQVTfGEJGCdrujEdFJwKFdgan/AAh+mf8AP1rf/g9vf/jt H/CH6Z/z9a3/
AOD29/8AjtYn9oeJ77T4Z5DdW8C3V0k0ukCGaVFSUqhKzJyoAfIRWc7Vx1Ip 6eK9Qt2u53Nr
e2kVjavC4ZoGlmkd1OYyjMpJGNg3MCoAUscUDNj/AIQ/TP8An61v/wAHt7/8 do/4Q/TP+frW
/wDwe3v/AMdrOsfGN/qtvZ/YdIh+0zJctKlxcvEsXkyCNhzFvJOcgFFPY4rb 8NXd5f8AhnTL
y/EYup7ZJJPLbcCSM5+6OvXGOM45607P+vn/AJCKv/CH6Z/z9a3/AOD29/8A jtH/AAh+mf8A
P1rf/g9vf/jtb9FIZgf8Ifpn/P1rf/g9vf8A47R/wh+mf8/Wt/8Ag9vf/jtb 9FAGB/wh+mf8
/Wt/+D29/wDjtH/CH6Z/z9a3/wCD29/+O1v0UAYH/CH6Z/z9a3/4Pb3/AOO0 f8Ifpn/P1rf/
AIPb3/47W/RQBgf8Ifpn/P1rf/g9vf8A47VfRLQab4w1ewhub6S2Wws5lS6v Zrja7SXIYgyM
xGQi9PQV09YFp/yUHWP+wVYf+jbugDfooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACsDwN/yT7w3/wBgq1/9FLW/WB4G/wCSfeG/+wVa/wDopaAN+iiigAooooAK KKKACiiigAoo
ooAqjTbFd+LK2G8gviJfmIYsCeOcMS31JNRf2JpP2m4uf7LsvPuQVnl+zpul BGCGOMtwB1q/
RQBQbQ9Ie7ubttKsTc3MZhnmNum+VCACrNjLLgDg8cUyDw/ottFHFb6Pp8Uc cqzIkdsihZFG
FcADhgOAeorSooAzo9A0aGC7gi0mwSG8JN1GtsgWcnrvGPm6nrSw6Do9taw2 sGk2MVvBL58U
UduipHJ/fUAYDcnkc1oUUAZtp4f0WwBFno+n2wJUnybZEyVbcDwOzcj35q5F Z2sFzPcxW0Mc
9xt86VEAaTaMLuPU4HAz0qaigAooooAxvBf/ACAbj/sK6j/6WzV0Ncr9ut/B 93fy6nKINHvr
oTRXOCIrWRwiNG4HCKzgyeZwpaR9207S/R2d7aajaR3djdQ3VtICUmgkDo3O OGHB5Bq0ST0U
UUwCiiigAooooAKKKKACvNvH00TfELwlAJEMqQ3btGGG5VLQAEj0JVsfQ+ld hrvizQPDUZfW
dXtLMhQwjkkHmMCcAhB8xGQeg7H0NebaRc3Hjf4gf8JDNp5t7JYVtbVHH71Y 1Zm3t6MxYkgd
AADnBoA9aqG7tIL6zmtLlN8EyFJFyRlSMEZHNTUVmUZd74e0zUL6O8uYHaZA qnbPIiyBTlRI
isFkAJJAYHGT61Tk8H6Y+ptdbGMUsM8M1u8jujCUqW2gtiMHBJCgZJzXQUUB 1uYY8IaMtq0A
huRumE5m+2z+d5gXZuEu/eDt+X73TjpSnwloplhdbaWPykVNkdzKiSBTlfMR WCyck/fB6mtu
ii4rIxJvCWjzHd5V1E/mSSiSC+nidTIdzgMjghSQDsB25GcZpZvCmjTJsNtL GohjhAguZYsL
G29CNjDDBsncPm5PODW1RQMzNO8PaXpWw2dsUKCUAtK7n94wd87ic5YA81a0 +wt9LsIbG0V1
t4V2xq8jSED03MScfjwOKs0UXAKKKKACiiigAooooAKKKKACsC0/5KDrH/YK sP8A0bd1v1gW
n/JQdY/7BVh/6Nu6AN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKwPA3/JPvDf
/YKtf/RS1v1geBv+SfeG/wDsFWv/AKKWgDfooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAR0WRGR1DIwwykZBHpXF6j8KfCWoTtONKt4ZGYlikYw2e vHrmu1oouB5b
o/wu8K6tZSXP9mwxbLq5ttvlq2fKmeLdnA67M47Zxz1rQ/4U34V/584f+/K1 0fg//kCXP/YV
1H/0smrfp3YrHnv/AApvwr/z5w/9+Vo/4U34V/584f8AvytehUUXYWPPf+FN +Ff+fOH/AL8r
R/wpvwr/AM+cP/fla9Coouwsee/8Kb8K/wDPnD/35Ws+b4XeFYvEFnpX9mwn 7Taz3Pm+Wvy+
U8K7cY5z52c542988epVgXf/ACUHR/8AsFX/AP6NtKLsLGLYfCrw5p1z50Fr GpI2tiIDI9P0
rrrHTbXT49lvEF9T3NW6KV2AUUUUDCiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KwLT/koOsf8AYKsP/Rt3W/WBaf8AJQdY/wCwVYf+jbugDfooooAKKKKACiii gAooooAKKKKA
CiiigAooooAKKKKACsDwN/yT7w3/ANgq1/8ARS1v1geBv+SfeG/+wVa/+ilo A36KKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDA8H/wDIEuf+ wrqP/pZNW/WB
4P8A+QJc/wDYV1H/ANLJq36ACiiigAooooAKwLv/AJKDo/8A2Cr/AP8ARtpW /WBd/wDJQdH/
AOwVf/8Ao20oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACsC0/
5KDrH/YKsP8A0bd1v1gWn/JQdY/7BVh/6Nu6AN+iiigAooooAKKKKACiiigA ooooAKKKKACi
iigAooooAKwPA3/JPvDf/YKtf/RS1v1geBv+SfeG/wDsFWv/AKKWgDfooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMDwf/yBLn/sK6j/AOlk 1b9YHg//AJAl
z/2FdR/9LJq36ACiiigAooooAKwLv/koOj/9gq//APRtpW/WBd/8lB0f/sFX /wD6NtKAN+ii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArAtP+Sg6x /wBgqw/9G3db
9YFp/wAlB1j/ALBVh/6Nu6AN+iiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKwPA3
/JPvDf8A2CrX/wBFLW/WB4G/5J94b/7BVr/6KWgDfooooAKKKKACiiigAooo oAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKAMDwf/AMgS5/7Cuo/+lk1b9YHg/wD5Alz/ ANhXUf8A0smr
foAKKKKACiiigArAu/8AkoOj/wDYKv8A/wBG2lb9YF3/AMlB0f8A7BV//wCj bSgDfooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwLT/koOsf9gqw /wDRt3W/WBaf
8lB1j/sFWH/o27oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA rA8Df8k+8N/9
gq1/9FLW/WB4G/5J94b/AOwVa/8AopaAN+iiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAwPB//IEuf+wrqP8A6WTVv1geD/8AkCXP/YV1H/0s mrfoAKKKKACi
iigArAu/+Sg6P/2Cr/8A9G2lb9YF3/yUHR/+wVf/APo20oA36KKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACsC0/5KDrH/AGCrD/0bd1v1gWn/ACUH WP8AsFWH/o27
oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Df8k+8N/wDY Ktf/AEUtb9YH
gb/kn3hv/sFWv/opaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiig
AooooAwPB/8AyBLn/sK6j/6WTVv1geD/APkCXP8A2FdR/wDSyat+gAooooAK KKKACsC7/wCS
g6P/ANgq/wD/AEbaVv1gXf8AyUHR/wDsFX//AKNtKAN+iiigAooooAKKKKAC iiigAooooAKK
KKACiiigAooooAKKKKACiiigArAtP+Sg6x/2CrD/ANG3db9YFp/yUHWP+wVY f+jbugDfoooo
AKKKKACiiigAooooAKKKKACiiigAorndOsIfF+nWus6k07WV5Ek1rYJO8cYg cBgJlUgSswI3
K25APlAPzM+Vq2meD9KvLi3X4eWl6trbrc3E1tp1ptiQ7uzsrE/IxwoNPl7i O3orjbPRvCF/
qs1pbfD6yktoZPLe/wDsFmIQdgfoW8w8MB9zqfxqOz0/wNeXEK/8IPYQ211u +x3kumW4iusK
W+TGWGVViN6rkDIzTcbbgnfY7asTwbBNa+B/D9vcRPDPFptukkcilWRhEoII PIIPasS4sPAV
vpsV8fBumOkuntqCIumW+4xrs+XnA3fOO+OvNLJo/hWC0ikn+GttFdTzeTBZ GwsjLKdpYkFX
KAABj8zDp6kZORoLna0Vwd1Y+FbaK2k/4VcsgncRYGm2SFJCxXYQ7rk5H3hl SCCGIqS2s/Ac
2sw6TN4J0+1vJd67ZtMtyEZUjcqWXcM4kGOxIPPTIo3C53FFcMbHwVNHbHT/ AABZ6jNNbrct
Bb6dahoo2yFLl2VRkggAEk4PHFbVn4R8IXtjBe6foVlZ+cgkiuLKD7HOgI7P HtdDjggEcEg8
EijlC5v0VgR340HXLTQL26aaO8jkk0+aVi0mEKhopGP3iN67XJywyG+Zd0m/ UtWGFFFFABRR
RQAUVx0Pi+8FxJGunia3guFS4nlugrqr3MkK7FWPDY2ZwSvGOWPWG98Vanve 4W1Fvp/2S8lh
aOdWklMRUAsGQhD1IHzjB59KLB1sdvRXNr4lvfLu75tLiGkwCcC5a9VX3REg 70YBVUlWAbee
xIGTjJtfGuo6hLZ7bCK1EWoPb3qSPKp8sW5lBUSQq3Q55VeVGCQc0WA7qivP Ljxrquq6QxtN
L1Owkkmt/JlggYO8byKpUG5iSMSEHoC69fmrVn17VdG06CM2Fze3AtZ7yf8A tK5hhlVI2XI/
cIyFsMMAYHHJBp2f9feJO7sjrqK5abxDf3GtWcNrapHpxv8A7K9wZQXkPks5 HlleFzj5g2cj
pjmuppdLhcKKKKBhRRRQBgeD/wDkCXP/AGFdR/8ASyat+sDwf/yBLn/sK6j/ AOlk1b9ABRRR
QAUUUUAFYF3/AMlB0f8A7BV//wCjbSt+sC7/AOSg6P8A9gq//wDRtpQBv0UU UAFFFFABRRXH
XnjS+tbXzl0USGa7ktrVElmlZ/LZw7usULsg+QYwG+9zjGaAOxorko/GF7Oi zw6G4t4zClz9
olaGWN5GCgLGyZIGQSWKnB6dqmufGUVpa/aJbNyNl4+yN9zHyJAmAAMncSPp nvQC12OnoriJ
PHl9Do0l7NoE0LxShZGmS6jgRNpbeXa2DgDGCfL2jjLVU1LxPrd2JH08GO2l isGhNjPBNNmW
VlcIXUxHIBGSxHygjqcFne39aiurXPQqK5GfXtV0bToIzYXN7cC1nvJ/7SuY YZVSNlyP3CMh
bDDAGBxyQalm8Q39xrVnDa2qR6cb/wCyvcGUF5D5LOR5ZXhc4+YNnI6Y5ot/ X4Bsr/13Opoo
ooGFFFFABRWTqd3cPqVpotlJ5FzeRSzNclQ3kxRmNXKg5BkJlQLkbRyx3bdj U9R8K+FdP025
v9R0aLUxbxtI0moZvZgoGdqvOWYDqQuQMknuaaVxHRUVxNtZfD+6g82PwhpY xeyWLK2lwhg6
BiT0+6QhwR6j3xXtofBElk93dfD61sY/sZvYftGnWhM8QAJ27GYAgMvDbTz9 cNRuF/6/A76s
S1gmXxxqtw0TiB9NskSQqdrMst0WAPQkBlyO24etZMOj+C7jUxaxeBLFrYzN AL8aZbmDzVzu
Xj5xgqRuK7cjGc4qaPQPBE91qFtbeDtJnnshkomnW4809whbAJBGDkgA9aLB c6uiuBt7XwhJ
5rXHw1gtIop1tnlmsLEgSMyqFwkjH+IHOMYB57VNZ23w6u9Ms9Q/4RbSIba5 tpbrdNpkK+Us
eN4cY4I3ds9Ppk5dLh1sdxRXH6bofhC/vFtZ/h/Z6e0kZlga70y2xMoIyRsL FSNy/K4U89OD
jXbwvDpg+0eHR9imT7tn5zrZuvdPKBKRbjzvRQwb5juBZWOULmzRWboOuWXi PRLXVrBmNvcx
hwrjDJkZ2sOxH/6sjmtKpGFFFFABRRRQAVgeOf8Akn3iT/sFXX/opq36wPHP /JPvEn/YKuv/
AEU1AHT1yXiDwc2uX+oXX2qWJpbSKGBUupUjZkZ2KzRqQro24KQcnBbGOtXf tnjD/oBaH/4O
Zv8A5Fo+2eMP+gFof/g5m/8AkWtBJ2M7TPDl3a+JbnUrjw/oDNcy7zfpcE3M KmJUKLmDkZUj
744PQdKZa6D4kjudIsp30x9I0whVdZXE8oCOgcjZtUgMMrk5IzuUfKdT7Z4w /wCgFof/AIOZ
v/kWj7Z4w/6AWh/+Dmb/AORaN9BLS5iv4U1q70OWwuxpuYNKk0212zOy3Abb 88mU/d8Rj5Rv
6nk45s/8I/df2D9hTwn4UihFx5jadvL28ox97d5C7HBwc+W2QMcZyNH7Z4w/ 6AWh/wDg5m/+
RaPtnjD/AKAWh/8Ag5m/+Rabbf8AXncLEVpoWoJo9jb3E6tLDfLclXuJJxGg YnYJHG98Z4LY
/AYFQS+FLqfXr++aeFI5/MaFlJLxuRBsbGMcNCT19PU4ufbPGH/QC0P/AMHM 3/yLR9s8Yf8A
QC0P/wAHM3/yLS/r8l+gf1/X3mTbeGtc03TYI4BZXUs1hDa3sX26a0CvHuIe KWNGcZ3EYwDw
OeoPUaPZTado9pZ3Fy9zNDGFeZ2Zi59SWJJ+pOazftnjD/oBaH/4OZv/AJFo +2eMP+gFof8A
4OZv/kWjrcDA+KO2BPDF4scZuItYCo5UEhWgm3DPXB2jP0HpXWnULdZrOB3x cXaloogCxIUZ
YnA4UZALHAyyjOWAPnvxFn16WDw8uqabpttB/a6FXtdQedi3kTcFWhQAYzzn sOOeNFdHvtP1
ya6n8S6rb22qNEsNxFHalYWwFS3cvCxVck7DnaWdlIDsDLMho7uisD/hH9T/ AOhx1v8A782X
/wAj0f8ACP6n/wBDjrf/AH5sv/kepGb9FYH/AAj+p/8AQ463/wB+bL/5Ho/4 R/U/+hx1v/vz
Zf8AyPQBcTw9paCYLa4EzK8n7xvmKyNKO/8AfZj+OOnFQHwnorT3ExtHLTpJ G6meTYFkwXCr
u2puIBO0DJ561F/wj+p/9Djrf/fmy/8Akej/AIR/U/8Aocdb/wC/Nl/8j0AS S+EtFnnuJZbW
RvtCuHjNxJ5alxh2RN21HOTllAbk88mlt/Cej2rBoobjzBcLdGR7yZ3aQJsy zM5LfLwQSQR1
BqL/AIR/U/8Aocdb/wC/Nl/8j0f8I/qf/Q463/35sv8A5HoAB4M0NbaS3W3u Fjcpgi9nDRBG
3Ksbb8xqDyFQge1W4/D2nJB5LJcTL5MkG64u5ZnMchBdSzsW5wO/GOMVU/4R /U/+hx1v/vzZ
f/I9H/CP6n/0OOt/9+bL/wCR6A63LX/CN6V/akeoi2cXEbB1xPIEDhdm/Zu2 7tpxuxnHGa1a
wP8AhH9T/wChx1v/AL82X/yPR/wj+p/9Djrf/fmy/wDkegRv0Vgf8I/qf/Q4 63/35sv/AJHo
/wCEf1P/AKHHW/8AvzZf/I9AzforA/4R/U/+hx1v/vzZf/I9H/CP6n/0OOt/ 9+bL/wCR6ADw
f/yBLn/sK6j/AOlk1b9UNG0pNF00WSXE9z+9lmeafbvd5JGkYnaqr95z0Aq/ QAUUUUAFFFFA
BWBd/wDJQdH/AOwVf/8Ao20rfrE1fSNRutYsdT0zULW1ntree3Zbm0adXWRo myNsiEEGIdz1
NAG3RWB9k8Xf9BzRP/BPL/8AJVH2Txd/0HNE/wDBPL/8lUAb9FYH2Txd/wBB zRP/AATy/wDy
VR9k8Xf9BzRP/BPL/wDJVAG/WXc+HtNurJLR4ZEjSZp0aG4kikSRixZldWDL nc3Q9CR04qp9
k8Xf9BzRP/BPL/8AJVH2Txd/0HNE/wDBPL/8lUANvvB2l3UVusCPbPAYthSR 9hEbhxvQMFc9
cMwJBJNTr4T0QXNxObMu1wsqSJJM7x7ZTmQKhYqoYjJwBk81F9k8Xf8AQc0T /wAE8v8A8lUf
ZPF3/Qc0T/wTy/8AyVQC02H/APCIaP8AZhD5d3uEnmi4+3z+fu27f9dv8zGO MbsY7UTeEdFn
QI0FwgEccQMN5NGcI+9TlXB3BiTu+9yeeaZ9k8Xf9BzRP/BPL/8AJVH2Txd/ 0HNE/wDBPL/8
lUCsW4/D2nJB5LJcTL5MkG64u5ZnMchBdSzsW5wO/GOMUn/CN6V/akeoi2cX EbB1xPIEDhdm
/Zu27tpxuxnHGaq/ZPF3/Qc0T/wTy/8AyVR9k8Xf9BzRP/BPL/8AJVAG/RWB 9k8Xf9BzRP8A
wTy//JVH2Txd/wBBzRP/AATy/wDyVQM36r3V7b2Xkm5k8tZpVhRip272+6Ce i5PAzjLFVHLA
HI+yeLv+g5on/gnl/wDkqqmqReIINMuG1LW9AazZPLljfQ5pBIG+XZs+0kuW JChQCWJAAJOK
AL+n/wDJQda/7BVh/wCjbutPXbGXU9Bv7GFkWW4geJC5IUEjAzjtXA+Fk8Y6 f4iv4p4dN1C6
Om2hP2m6ktmhi8678tGIWbzHC8Md3YfNIcu3XfbPGH/QC0P/AMHM3/yLVoRm HwhfrLp8sM9s
pjuriS6UlsSIxmMeDj7ymXntgn0FRJ4a16+0SOx1BNNtmtNMeyt/s9y8wldk Vd7ExpsAC9AG
zu68c7H2zxh/0AtD/wDBzN/8i0fbPGH/AEAtD/8ABzN/8i01pcXVPsR2lj4h 0ySS0sl0xrDz
pZ1mmkk807yz+XsC4GGbG/ceB90mqum+EL7SbvT7uPXru8kgZ/OiuI4UjdZT ulIKRB8lsMMs
eRgnnNXvtnjD/oBaH/4OZv8A5Fo+2eMP+gFof/g5m/8AkWhAxlzoF1NY3cCy QhptTS8UljgI
roxB464U/pzWUvga7ZLW3a7hjtjpL2lxsBLLOUjQSJkYIwgyDj7o9TWx9s8Y f9ALQ/8Awczf
/ItH2zxh/wBALQ//AAczf/ItC0Vv62sHW/8AXcj07Tdck8QJqWpmG3EcJiZL XUZ5Y7gnGGML
KqRkYzxuPOM8ZPSVz/2zxh/0AtD/APBzN/8AItH2zxh/0AtD/wDBzN/8i0Ac z8N5FhuPEVhF
FHHbwatdiJEUKEUTuNoA4x6V31edfDQzNqfiNriOOOc6ndmRI3Lqree+QGIB Iz3wM+gr0Wol
uNBRRRSGFFFFABWB45/5J94k/wCwVdf+imrfrA8c/wDJPvEn/YKuv/RTUAdP RRRWhIUUUUAF
FFFABRRRQAUUUUAef/Ff/kH+HP8AsNJ/6Inrs7X/AI9If+ua/wAq4z4r/wDI P8Of9hpP/RE9
dna/8ekP/XNf5VMholoooqRhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUckEMzxPLEjv C++JmUEo20rl
fQ7WYZHYkd6kooAxNP8A+Sg61/2CrD/0bd10dc5p/wDyUHWv+wVYf+jbuujq 1sSFFFFMAooo
oAKKKKACiiigDzb4d/8AIb8Uf9ha8/8ASh69Brz74d/8hvxR/wBha8/9KHr0 GoluNBRRRSGF
FFFABWB45/5J94k/7BV1/wCimrfrA8c/8k+8Sf8AYKuv/RTUAdPRRRWhIUUU UAFFFFABRRRQ
AUUUUAef/Ff/AJB/hz/sNJ/6Inrs7X/j0h/65r/KuJ+LE0S23hqAyIJX1dXW MsNzKIJgSB6A
sufqPWttPBvhe6Rbi48N6PNPKN8kkljEzOx5JJK5JJ71Mho6CisD/hBvCP8A 0Kuif+C+L/4m
j/hBvCP/AEKuif8Agvi/+JqRm/RWB/wg3hH/AKFXRP8AwXxf/E0f8IN4R/6F XRP/AAXxf/E0
Ab9FYH/CDeEf+hV0T/wXxf8AxNH/AAg3hH/oVdE/8F8X/wATQBv0Vgf8IN4R /wChV0T/AMF8
X/xNH/CDeEf+hV0T/wAF8X/xNAG/RWB/wg3hH/oVdE/8F8X/AMTR/wAIN4R/ 6FXRP/BfF/8A
E0Ab9FYH/CDeEf8AoVdE/wDBfF/8TR/wg3hH/oVdE/8ABfF/8TQBv0Vgf8IN 4R/6FXRP/BfF
/wDE0f8ACDeEf+hV0T/wXxf/ABNAG/RWB/wg3hH/AKFXRP8AwXxf/E0f8IN4 R/6FXRP/AAXx
f/E0Ab9Fcx4RsbPTb/xPaWFrBa20eqrshgjCIubO2Jwo4HJJ/GunoAKKKKAC iiigAoornNaN
/deKNL0y11a606CWyuriRraOFmdke3VQfMRwBiRugHagDo6KwP8AhH9T/wCh x1v/AL82X/yP
R/wj+p/9Djrf/fmy/wDkegDforA/4R/U/wDocdb/AO/Nl/8AI9H/AAj+p/8A Q463/wB+bL/5
HoA36KwP+Ef1P/ocdb/782X/AMj0f8I/qf8A0OOt/wDfmy/+R6AN+isD/hH9 T/6HHW/+/Nl/
8j0f8I/qf/Q463/35sv/AJHoA36KwP8AhH9T/wChx1v/AL82X/yPR/wj+p/9 Djrf/fmy/wDk
egDforA/4R/U/wDocdb/AO/Nl/8AI9H/AAj+p/8AQ463/wB+bL/5HoA36KwP +Ef1P/ocdb/7
82X/AMj0f8I/qf8A0OOt/wDfmy/+R6AN+isD/hH9T/6HHW/+/Nl/8j0f8I/q f/Q463/35sv/
AJHoAk0//koOtf8AYKsP/Rt3XR1ymhW8tr411aGa8nvJF0qxzPOEDvma8PIR VXjpwB09ea6u
rWxIUUUUwCiiigAooooAKKKKAPNvh3/yG/FH/YWvP/Sh69Brzv4azRXGqeJJ 4JElik1S7dJE
YMrKbhyCCOoIr0SoluNBRRRSGFFFFABUc8EN1by29xEk0EqFJI5FDK6kYIIP BBHapKKAOc07
xHZeHbay0PxJqcdtfwwCOO7vZdqXyoFXzVkbgucgshO4En7y7Xbq6zdQ06y1 Wzezv7WK5t5B
ho5VyDXFz/B/wjLKXj06GMH+ERKQD7VSkKx6NRXmv/Cm/Cv/AD5w/wDflaP+ FN+Ff+fOH/vy
tO6FY9KorzX/AIU34V/584f+/K1zFp4Q8E3fiCXTxpJSy8qB4NSaJPJnaV5F QDuFYxkI5+Vz
0+9GZC6A9xorzX/hTfhX/nzh/wC/K0f8Kb8K/wDPnD/35Wi6Cx6VWbrHiDSP D9t9o1fUrWyj
2sy+fKFLheu0dWPI4GTyPWuH/wCFN+Ff+fOH/vytS2vwk8NWdylxBaxLIh4I iX6Gi6Cxz17r
B+IXjXT7uzs92jab5iW8kinfcF9u6QD+FcKAvcgk8ZAr1yNBHGqDOFAAzVLT 9GsdLUC1hC4G
AT1A9Kv1LdxoKKKKQwooooA4e78SeI0tYntbe1nmvL6a1to4rcExrE0mS2+e MOSEHAZcfMfm
6UReK9angF15enW0cBto54JTveRpZNhZHSQqoHYfPkgjPFdZc6Rpt7ZNZXen 2k9ozF2glhVo
yxO7JUjGcknPrVa/8OaTqItzLYwLLbbBBMkSB4lVgwVGx8q/KAQO1AnuYF34 0uLSyM/kwSus
WoSeWvGfs8oReScAc/MT+lVJPFPimGweOXToV1BJgCFhikkMewsStsl0SxGO 0mSDkKa7KPRt
Lhu57uLTbNLm4z50ywKHkz13NjJz71B/wjOgf2b/AGb/AGHpv2Df5n2X7JH5 W/8AvbMYz74o
6DZw+oanrOr+Y8N5G0M8enBbeCa4tPneZlceaMOgOGB+QNjAPTnYvb3WtCsI LSzW0hlisbm9
mW6uJ7/PlsvyCV2R+d/3iDjHQ10Vx4d0S7jEdzo+nzIIlgCyWqMBGpyqYI+6 DyB0Bp9tomk2
dsLa10uyggCOgiit0VQrHLDAGMHAyO+Kd/1/L+mJb3fkc3LrWo3mvWOy4tob Aan9l+zqGEzk
W7OSzbsEHI+Xb0AOe1dnVM6Rpp1Bb86faG9VQi3Hkr5gUdAGxnHJ/OrlLSwa 9QooooGFFFFA
GB4f/wCQ34r/AOwqn/pHbVv1geH/APkN+K/+wqn/AKR21b9ABRRRQAUUUUAF YF3/AMlB0f8A
7BV//wCjbSt+sC7/AOSg6P8A9gq//wDRtpQBv0UUUAFFFFABXCweJNXFxP5P 2NbS1uUWZJEk
kkkWS7kiO1y/y4Cg8hh2AUYruqqjTbFd+LK2G8gviJfmIYsCeOcMS31JNCA4 a+1/VZGe9kuL
b7M1lqDw2sJkjZfKZVG9g/zH3XaVJI561qN4k1GG2u9UmudKj09GuYorZ1kE weIsM7gW352E
lAgIB6nHPQf2JpP2m4uf7LsvPuQVnl+zpulBGCGOMtwB1obQ9Ie7ubttKsTc 3MZhnmNum+VC
ACrNjLLgDg8cUdLAcXaeI/EF7eWsd15dtPZao8NzCtvgzJ9lMoXak7gHk/xN ztOBjFVJvEPi
PWtIjiuLJbf7ZJazWxivBaFkeVRs8yGaWTaQf9YFX/d5xXeQeH9Ftoo4rfR9 PijjlWZEjtkU
LIowrgAcMBwD1FNPhrQTb3NudE03yLpxJcR/ZE2zMDkM4xhjnnJp3V0/T+vn /W4mrq39f1/X
Q5+9vda0KwgtLNbSGWKxub2Zbq4nv8+Wy/IJXZH53/eIOMdDSy61qN5r1jsu LaGwGp/Zfs6h
hM5Fuzks27BByPl29ADntXSW2iaTZ2wtrXS7KCAI6CKK3RVCscsMAYwcDI74 p50jTTqC350+
0N6qhFuPJXzAo6ANjOOT+dF9df61/wAtPxB7WX9af0y5RRRSGFFFFAGNqMU1 hrVvrsEUk0Ud
u9teQQKTI8ZZWWQAcyGMh8J1xLJty3yPf0bxDo3iG3M+j6naX0YVWfyJQxTc MgMOqnrwcHg1
armdd+H/AIa8RTtc32l27XTDmYRjcfrxz3/OmmKx11Fea/8ACm/Cv/PnD/35 Wj/hTfhX/nzh
/wC/K1V0Kx6VRXmv/Cm/Cv8Az5w/9+VrA8R+A/CWgrEkOinUbt5YEa3t441M aSyrErszEKMs
2FBPzEHoFdlLoLHtNFeW2Xwo8G6jaJdWtvC8T5AJgCkEEgqykAqwIIKkAggg gEVY/wCFN+Ff
+fOH/vytF0Fj0quD8T/FHRtMha00O6ttX1qRR5Nvbyb40zn55HXgKMcgHccg Acg1R/4U34V/
584f+/K1taR4B0TR0VILddqZ2gKFAB5I9xmjmQWM34X6G2jeHUjkTEoUKXAx 5ncsffPP4967
qmxxrEgRFCqOgFOqG7lBRRRQAUUUUAFFFFABRRRQAUUUUAV72yt9RtHtLuPz LeTAkjLEBwCD
tbHVTjBU8MCQQQSKxI4IbrxxrtvcRJNBLpFkkkcihldTLdggg8EEdq6OsC0/ 5KDrH/YKsP8A
0bd0Ab9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQBgeH/wDk
N+K/+wqn/pHbVv1geH/+Q34r/wCwqn/pHbVv0AFFFFABRRRQAVgXf/JQdH/7 BV//AOjbSt+s
C7/5KDo//YKv/wD0baUAb9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFF
FABXMeJrK3stEUwR7Wn1qwmlYsWZ3N5BySeTwAB6KqqMAADp6wPGH/IEtv8A sK6d/wClkNAG
3HBDC8rxRIjzPvlZVALttC5b1O1VGT2AHapKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigArAtP+Sg6x/2CrD/ANG3db9YFp/yUHWP+wVYf+jbugDfooooAKKKKACi iigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKAMDw/8A8hvxX/2FU/8ASO2rfrA8 P/8AIb8V/wDY
VT/0jtq36ACiiigAooooAKwLv/koOj/9gq//APRtpW/WBd/8lB0f/sFX/wD6 NtKAN+iiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Yf8gS2/wCw rp3/AKWQ1v1g
eMP+QJbf9hXTv/SyGgDfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACsC0/5KDrH
/YKsP/Rt3W/WBaf8lB1j/sFWH/o27oA36KKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigDA8P8A/Ib8V/8AYVT/ANI7at+sDw//AMhvxX/2FU/9 I7at+gAooooA
KKKKACsC7/5KDo//AGCr/wD9G2lb9YF3/wAlB0f/ALBV/wD+jbSgDfooooAK KKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKwPGH/IEtv+wrp3/pZDW/WB4w /wCQJbf9hXTv
/SyGgDfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsC0/5KDrH/ AGCrD/0bd1v1
gWn/ACUHWP8AsFWH/o27oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigDA8P/8AIb8V/wDYVT/0jtq36wPD/wDyG/Ff/YVT/wBI7at+gAoo ooAKKKKACsC7
/wCSg6P/ANgq/wD/AEbaVv1gXf8AyUHR/wDsFX//AKNtKAN+iiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigArA8Yf8AIEtv+wrp3/pZDW/WB4w/5Alt /wBhXTv/AEsh
oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArAtP8AkoOsf9gq w/8ARt3W/WBa
f8lB1j/sFWH/AKNu6AN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiig
AooooAwPD/8AyG/Ff/YVT/0jtq36wPD/APyG/Ff/AGFU/wDSO2rfoAKKKKAC iiigArAu/wDk
oOj/APYKv/8A0baVv1gXf/JQdH/7BV//AOjbSgDfooooAKKKKACiiigAoooo AKKKKACiiigA
ooooAKKKKACiiigAooooAKwPGH/IEtv+wrp3/pZDW/WB4w/5Alt/2FdO/wDS yGgDfooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACsC0/5KDrH/
|
|
|
Re: CDO library example fails to create resource [message #2255 is a reply to message #2223] |
Sat, 05 November 2005 06:38 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
>> I don't know what is done after the client sends the request before it
>> transitions to IDLE, but it can be interrupted.
>
>
> Nothing, I guess. Here is the respective code from ChannelImpl:
>
> public Object transmit(Request request)
> {
> [...]
> request.setChannel(this);
> short signalId = request.getSignalId();
> transmitShort(signalId);
>
> processCommEvent(REQUEST_START);
> request.request();
> flush();
Just one more idea: this "flush()" doesn't necessarily mean that it is
the first time the signal buffer is flushed! In case of big signals
bigger than the configured buffer size) there can be an indeterminate
number of preceding flushes. On the other hand, as I explained, the server
will start responding not earlier than after the last byte of the signal
has been received. I believe that we can exclude the case that this last
flush() is without effect at all, because an implicit flush only happens
when the buffer is full *and* more data needs to be buffered, so after
request.request() there is a guarantee that the buffer is not empty...
Any more ideas?
Cheers
/Eike
|
|
| | |
Re: CDO library example fails to create resource [message #2403 is a reply to message #2285] |
Tue, 08 November 2005 07:08 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
Mark,
See my comments inline...
geib schrieb:
> Eike,
>
> Some more information for you.
>
> As you know we are running the old CDO in production. I watch the server
> and client logs pretty carefully and find that the only excpetions that
> occur seem to be related to similar problems.
>
> On the server I only see "timeout while waiting for response"
> exceptions. In this case it looks like the server missed a message from
> the client.
Are you sure that this message occured in the server log (not client or combined)?
In general Net4j doesn't permit requests from server to client except that
it doesn't imply a response. In other words, only (unacknowledged) notifications
are allowed in this direction.
> On the client side I always see "already requesting" exceptions. This
> looks the client missed a response from the server.
A missed response from the server (out-of-sequence errors in the protocol layer)
can be one reason for AlreadyRequestingException. But originally it has been
introduced to detect multithreading problems in the client, like 2 threads
that use the same channel in an unsynchronized manner.
> A couple of times I have looked at the logs for both sides and see that
> the 'missing' messages were sent, just not received by the other side.
>
> Now in the new CDO it seems that the messages are not missed but may
> arrive when they are not expected. Does this point to a common problem
> with different symptoms.??
Maybe. The state machines have been introduced to Net4j to better be able to detect
defects in these areas:
- Protocol implementations (like CDO)
- Client usage (like concurrency problems)
- Setup problems (like swapping client and server, in the extreme case)
Are you able to reproduce these problems?
I believe the most important influence is whether server initiated signals
are enabled or not. In CDO these are the InvalidationNotification. Does the problem
persist, if you switch off this feature?
Cheers
/Eike
|
|
|
Re: CDO library example fails to create resource [message #2433 is a reply to message #2316] |
Tue, 08 November 2005 07:15 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
Mark,
Yes, the state machines of the Channel are implemented table-driven
and with externalized state. But I can see no problem in this fact alone.
What do you mean with 'real' state?
Maybe we should move the flush() call directly *into* the transition code,
so that it is more atomically inline with the state change itself...
Are you able to test that? For me it's a problem until we arrange to
reproduce the situation here...
Cheers
/Eike
geib schrieb:
> Eike,
>
> Maybe there is a problem in that the machinery of the state machine is
> separate from the state maintained by the state machine.
>
> For example, as soon as flush() is called the 'real' state of the
> machine has changed to IDLE, but the state machine object does not
> reflect this until processCommEvent() is called.
>
> Mark.
>
|
|
|
Re: CDO library example fails to create resource [message #2519 is a reply to message #2403] |
Tue, 08 November 2005 17:26 |
Mark Geib Messages: 432 Registered: July 2009 |
Senior Member |
|
|
See my comments inline..
Eike Stepper wrote:
> Mark,
> See my comments inline...
> geib schrieb:
>> Eike,
>>
>> Some more information for you.
>>
>> As you know we are running the old CDO in production. I watch the server
>> and client logs pretty carefully and find that the only excpetions that
>> occur seem to be related to similar problems.
>>
>> On the server I only see "timeout while waiting for response"
>> exceptions. In this case it looks like the server missed a message from
>> the client.
> Are you sure that this message occured in the server log (not client or
combined)?
> In general Net4j doesn't permit requests from server to client except that
> it doesn't imply a response. In other words, only (unacknowledged)
notifications
> are allowed in this direction.
Yes, they are in the server log. The server is on a separate machine from
clients.
>> On the client side I always see "already requesting" exceptions. This
>> looks the client missed a response from the server.
> A missed response from the server (out-of-sequence errors in the protocol
layer)
> can be one reason for AlreadyRequestingException. But originally it has been
> introduced to detect multithreading problems in the client, like 2 threads
> that use the same channel in an unsynchronized manner.
>> A couple of times I have looked at the logs for both sides and see that
>> the 'missing' messages were sent, just not received by the other side.
>>
>> Now in the new CDO it seems that the messages are not missed but may
>> arrive when they are not expected. Does this point to a common problem
>> with different symptoms.??
> Maybe. The state machines have been introduced to Net4j to better be able to
detect
> defects in these areas:
> - Protocol implementations (like CDO)
> - Client usage (like concurrency problems)
> - Setup problems (like swapping client and server, in the extreme case)
> Are you able to reproduce these problems?
They happen periodically, maybe once a week.
> I believe the most important influence is whether server initiated signals
> are enabled or not. In CDO these are the InvalidationNotification. Does the
problem
> persist, if you switch off this feature?
I am sorry I can't do this easily. We are in the process of rebuilding our
developement servers.
I think I have seen this happen with only one client connected, but I will
check.
> Cheers
> /Eike
Thanks,
Mark.
|
|
|
Re: CDO library example fails to create resource [message #2548 is a reply to message #2433] |
Tue, 08 November 2005 18:00 |
Mark Geib Messages: 432 Registered: July 2009 |
Senior Member |
|
|
Eike Stepper wrote:
> Mark,
> Yes, the state machines of the Channel are implemented table-driven
> and with externalized state. But I can see no problem in this fact alone.
> What do you mean with 'real' state?
It appears that the state machine object is simply keeping track of the
state, but it does not implement the logic of the machine. What I mean is
that once flush() returns the thread of execution is actually in the IDLE
state, but the state machine is not aware of this. So there is this window
where the thread 'could' accept a response with no problem, but the state
machine does not allow it because it does not realize the state has
changed.
> Maybe we should move the flush() call directly *into* the transition code,
> so that it is more atomically inline with the state change itself...
> Are you able to test that? For me it's a problem until we arrange to
> reproduce the situation here...
Yes, this would be easy. But I am having a similar problem in
SignalTaskImpl which is not so easy to fix...
[DEBUG] common.slave-1-channel-1:
[DEBUG] common.slave-1-channel-1:
------------------------------------------------------------ ---------
[DEBUG] common.slave-1-channel-1: Receiving indication ResourcePath
[DEBUG] common.slave-1-channel-1: Setting comm state: INDICATING
[DEBUG] common.slave-1-channel-1: Received String:
/org/eclipse/net4j/cdo/test/res1
[DEBUG] common.slave-1-channel-1: Requested path
/org/eclipse/net4j/cdo/test/res1
[DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
[DEBUG] common.slave-1-channel-1: Transmitting short: -4
[DEBUG] common.slave-1-channel-1:
[DEBUG] common.slave-1-channel-1:
------------------------------------------------------------ ---------
[DEBUG] common.slave-1-channel-1: Transmitting response ResourcePath
[DEBUG] common.slave-1-channel-1: Setting comm state: RESPONDING
[DEBUG] common.server.mapper: SELECT RID FROM CDO_RESOURCE WHERE
PATH=/org/eclipse/net4j/cdo/test/res1
[DEBUG] common.server.mapper: SELECT MAX(OID) FROM CDO_OBJECT WHERE OID
BETWEEN 281474976710657 AND 562949953421312
[DEBUG] common.server.mapper: Selected ResourceInfo(rid=1,
path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
[DEBUG] common.server.resourceManager: Registering ResourceInfo(rid=1,
path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
[DEBUG] common.slave-1-channel-1: Responding rid 1
[DEBUG] common.slave-1-channel-1: Transmitting int: 1
[DEBUG] common.slave-1-channel-1: flushing
[DEBUG] common.multiplexer: Scheduling channel common.slave-1-channel-1
[DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
[DEBUG] common.executorPool: checking in
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
common.executor-2 (queues = common.executorPool:2)
[DEBUG] common.slave-1-channel-1: Transmitting data: ......
[DEBUG] common.connector-channel-1: Received data: ......
[DEBUG] common.executorPool: checked out
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
common.executor-2 (queues = common.executorPool:2)
[DEBUG] common.executor-2: Set task =
org.eclipse.net4j.core.impl.SignalTaskImpl@e5376a
[DEBUG] common.connector-channel-1: Waiting for signal id
[DEBUG] common.connector-channel-1: Received short: -4
[DEBUG] common.connector-channel-1:
[DEBUG] common.connector-channel-1:
------------------------------------------------------------ ---------
[DEBUG] common.connector-channel-1: Receiving confirmation ResourcePath
[DEBUG] common.connector-channel-1: Setting comm state: IDLE
[DEBUG] common.executor-6: Validating
org.eclipse.net4j.core.impl.BlockingExecutorImpl
[DEBUG] common.executor-6: --> autoStart = true
[DEBUG] common.executor-6: --> executeCount = 0
[DEBUG] common.executor-6: --> singleton = false
[DEBUG] common.executor-6: --> state = STOPPED
[DEBUG] common.executor-6: Activating
[DEBUG] common.executorPool: created new object
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=10042026 ):
common.executor-6 (queues = common.executorPool:2)
[DEBUG] common.slave-1-channel-0: Setting comm state: IDLE
[DEBUG] common.executor-7: Validating
org.eclipse.net4j.core.impl.BlockingExecutorImpl
[DEBUG] common.executor-7: --> autoStart = true
[DEBUG] common.executor-7: --> executeCount = 0
[DEBUG] common.executor-7: --> singleton = false
[DEBUG] common.executor-7: --> state = STOPPED
[DEBUG] common.executor-7: Activating
[DEBUG] common.executorPool: checking in
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=9171253) :
common.executor-5 (queues = common.executorPool:3)
[DEBUG] common.executorPool: created new object
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=15732239 ):
common.executor-7 (queues = common.executorPool:3)
[ERROR] common.connector-channel-1: Error while processing CommEvent
CONFIRM_START
org.eclipse.net4j.core.IllegalEventException: Illegal event CONFIRM_START
in state REQUESTING for channel common.connector-channel-1
at
org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:987)
at
org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:1)
at
org.eclipse.net4j.util.fsm.StateMachine.process(StateMachine .java:123)
at
org.eclipse.net4j.core.impl.ChannelImpl.processCommEvent(Cha nnelImpl.java:138)
at
org.eclipse.net4j.core.impl.SignalTaskImpl.execute(SignalTas kImpl.java:52)
at
org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.tryExecute(BlockingExecutorImpl.java:89)
at
org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.doWorkStep(BlockingExecutorImpl.java:73)
at org.eclipse.net4j.util.thread.Worker.run(Worker.java:140)
[DEBUG] common.connector-channel-1: Received int: 1
[DEBUG] common.connector-channel-1: Responded rid 1
> Cheers
> /Eike
> geib schrieb:
>> Eike,
>>
>> Maybe there is a problem in that the machinery of the state machine is
>> separate from the state maintained by the state machine.
>>
>> For example, as soon as flush() is called the 'real' state of the
>> machine has changed to IDLE, but the state machine object does not
>> reflect this until processCommEvent() is called.
>>
>> Mark.
>>
|
|
|
Re: CDO library example fails to create resource [message #2577 is a reply to message #2548] |
Tue, 08 November 2005 18:29 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
Mark,
The line "[ERROR] common.connector-channel-1: Error while processing CommEvent ..."
again makes me think that Spring containers are not configured correctly.
At the server side the connection endpoints are called "slave".
There shouldn't be a "connector-X".
Can you send me your config files?
Cheers
/Eike
geib schrieb:
> Eike Stepper wrote:
>
>> Mark,
>
>
>> Yes, the state machines of the Channel are implemented table-driven
>> and with externalized state. But I can see no problem in this fact alone.
>> What do you mean with 'real' state?
>
>
>
> It appears that the state machine object is simply keeping track of the
> state, but it does not implement the logic of the machine. What I mean
> is that once flush() returns the thread of execution is actually in the
> IDLE state, but the state machine is not aware of this. So there is this
> window where the thread 'could' accept a response with no problem, but
> the state machine does not allow it because it does not realize the
> state has changed.
>
>
>> Maybe we should move the flush() call directly *into* the transition
>> code,
>> so that it is more atomically inline with the state change itself...
>
>
>> Are you able to test that? For me it's a problem until we arrange to
>> reproduce the situation here...
>
>
> Yes, this would be easy. But I am having a similar problem in
> SignalTaskImpl which is not so easy to fix...
>
> [DEBUG] common.slave-1-channel-1:
> [DEBUG] common.slave-1-channel-1:
> ------------------------------------------------------------ ---------
> [DEBUG] common.slave-1-channel-1: Receiving indication ResourcePath
> [DEBUG] common.slave-1-channel-1: Setting comm state: INDICATING
> [DEBUG] common.slave-1-channel-1: Received String:
> /org/eclipse/net4j/cdo/test/res1
> [DEBUG] common.slave-1-channel-1: Requested path
> /org/eclipse/net4j/cdo/test/res1
> [DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
> [DEBUG] common.slave-1-channel-1: Transmitting short: -4
> [DEBUG] common.slave-1-channel-1:
> [DEBUG] common.slave-1-channel-1:
> ------------------------------------------------------------ ---------
> [DEBUG] common.slave-1-channel-1: Transmitting response ResourcePath
> [DEBUG] common.slave-1-channel-1: Setting comm state: RESPONDING
> [DEBUG] common.server.mapper: SELECT RID FROM CDO_RESOURCE WHERE
> PATH=/org/eclipse/net4j/cdo/test/res1
> [DEBUG] common.server.mapper: SELECT MAX(OID) FROM CDO_OBJECT WHERE OID
> BETWEEN 281474976710657 AND 562949953421312
> [DEBUG] common.server.mapper: Selected ResourceInfo(rid=1,
> path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
> [DEBUG] common.server.resourceManager: Registering ResourceInfo(rid=1,
> path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
> [DEBUG] common.slave-1-channel-1: Responding rid 1
> [DEBUG] common.slave-1-channel-1: Transmitting int: 1
> [DEBUG] common.slave-1-channel-1: flushing
> [DEBUG] common.multiplexer: Scheduling channel common.slave-1-channel-1
> [DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
> [DEBUG] common.executorPool: checking in
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
> common.executor-2 (queues = common.executorPool:2)
> [DEBUG] common.slave-1-channel-1: Transmitting data: ......
> [DEBUG] common.connector-channel-1: Received data: ......
> [DEBUG] common.executorPool: checked out
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
> common.executor-2 (queues = common.executorPool:2)
> [DEBUG] common.executor-2: Set task =
> org.eclipse.net4j.core.impl.SignalTaskImpl@e5376a
> [DEBUG] common.connector-channel-1: Waiting for signal id
> [DEBUG] common.connector-channel-1: Received short: -4
> [DEBUG] common.connector-channel-1:
> [DEBUG] common.connector-channel-1:
> ------------------------------------------------------------ ---------
> [DEBUG] common.connector-channel-1: Receiving confirmation ResourcePath
> [DEBUG] common.connector-channel-1: Setting comm state: IDLE
> [DEBUG] common.executor-6: Validating
> org.eclipse.net4j.core.impl.BlockingExecutorImpl
> [DEBUG] common.executor-6: --> autoStart = true
> [DEBUG] common.executor-6: --> executeCount = 0
> [DEBUG] common.executor-6: --> singleton = false
> [DEBUG] common.executor-6: --> state = STOPPED
> [DEBUG] common.executor-6: Activating
> [DEBUG] common.executorPool: created new object
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=10042026 ):
> common.executor-6 (queues = common.executorPool:2)
> [DEBUG] common.slave-1-channel-0: Setting comm state: IDLE
> [DEBUG] common.executor-7: Validating
> org.eclipse.net4j.core.impl.BlockingExecutorImpl
> [DEBUG] common.executor-7: --> autoStart = true
> [DEBUG] common.executor-7: --> executeCount = 0
> [DEBUG] common.executor-7: --> singleton = false
> [DEBUG] common.executor-7: --> state = STOPPED
> [DEBUG] common.executor-7: Activating
> [DEBUG] common.executorPool: checking in
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=9171253) :
> common.executor-5 (queues = common.executorPool:3)
> [DEBUG] common.executorPool: created new object
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=15732239 ):
> common.executor-7 (queues = common.executorPool:3)
> [ERROR] common.connector-channel-1: Error while processing CommEvent
> CONFIRM_START
> org.eclipse.net4j.core.IllegalEventException: Illegal event
> CONFIRM_START in state REQUESTING for channel common.connector-channel-1
> at
> org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:987)
> at
> org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:1)
> at
> org.eclipse.net4j.util.fsm.StateMachine.process(StateMachine .java:123)
> at
> org.eclipse.net4j.core.impl.ChannelImpl.processCommEvent(Cha nnelImpl.java:138)
>
> at
> org.eclipse.net4j.core.impl.SignalTaskImpl.execute(SignalTas kImpl.java:52)
> at
> org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.tryExecute(BlockingExecutorImpl.java:89)
>
> at
> org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.doWorkStep(BlockingExecutorImpl.java:73)
>
> at org.eclipse.net4j.util.thread.Worker.run(Worker.java:140)
> [DEBUG] common.connector-channel-1: Received int: 1
> [DEBUG] common.connector-channel-1: Responded rid 1
>
>
>> Cheers
>> /Eike
>
>
>
>
>> geib schrieb:
>>
>>> Eike,
>>>
>>> Maybe there is a problem in that the machinery of the state machine
>>> is separate from the state maintained by the state machine.
>>>
>>> For example, as soon as flush() is called the 'real' state of the
>>> machine has changed to IDLE, but the state machine object does not
>>> reflect this until processCommEvent() is called.
>>>
>>> Mark.
>>>
>
|
|
| | |
Re: CDO library example fails to create resource [message #561094 is a reply to message #674] |
Fri, 04 November 2005 18:47 |
|
Mark,
Yes, that's exactly what I think.
Except for the implication in client/server mode.
I don't think it can become a problem there because in the server
the receipt (and processing) of data (the indication) is strictly
separated from transmission of the response. in other words, the client
has for sure finished transmission of the request and the server
has finished processing, before the latter attempts to send the first byte back.
I think it's nearly impossible that all that can happen before the client
is able to take the transition back to IDLE. What do you think?
Apart from that I'm not very sure at the moment, how to work around
this issue in the embedded mode. I have to think about it...
Would it be helpful for you to look at the state charts?
Where is google for my hd??? ;-)
Cheers
/Eike
geib schrieb:
> I have looked in more detail at the highlighted log and I think I see
> the problem. I assume from your message that if the state machine is not
> at "IDLE" it is an error to receive the response.
>
> Since I am running on a laptop with limited memory it is possible that
> once the request is made some swapping may occur to let the server run
> to fullfil the request. I would also assume that the server could
> fullfil the request and send the response while the client is swapped
> out, but not yet in IDLE state. Now the client swaps backin to run and
> THEN goes into the IDLE state, but the message has already been received
> while still in the REQUESTING state. Is this a reasonable senerio...?
>
> This would could be a problem even if the server were on another
> machine, could it not.? We run the client on windows PCs that can be
> VERY slow depending on how many windows the user has open, and it can be
> A LOT. The server could process a request and respond before the client
> is in IDLE state.
>
> Mark.
>
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
|
Re: CDO library example fails to create resource [message #561110 is a reply to message #2158] |
Fri, 04 November 2005 19:44 |
Mark Geib Messages: 432 Registered: July 2009 |
Senior Member |
|
|
Eike Stepper wrote:
> Mark,
> Yes, that's exactly what I think.
> Except for the implication in client/server mode.
> I don't think it can become a problem there because in the server
> the receipt (and processing) of data (the indication) is strictly
> separated from transmission of the response. in other words, the client
> has for sure finished transmission of the request and the server
> has finished processing, before the latter attempts to send the first byte
> back.
I don't know what is done after the client sends the request before it
transitions to IDLE, but it can be interrupted. Maybe any new message
should not be processed in any state other than IDLE. If the response was
recieved and queued, or buffered, then you could delay the processing
until the the state machine is in IDLE state.
> I think it's nearly impossible that all that can happen before the client
> is able to take the transition back to IDLE. What do you think?
Yes, I think it is less likely. However, I would look at this as an
opportunity to elminate a potential problem. There is a hole here.
Plugging the hole will only improve the stability and reliability of CDO.
> Apart from that I'm not very sure at the moment, how to work around
> this issue in the embedded mode. I have to think about it...
Is there any difference in embedded mode other than the communication
between client and server.?? I could try using network communication, even
on the same machine.
> Would it be helpful for you to look at the state charts?
> Where is google for my hd??? ;-)
Yes I would look at the state diagram(s).
> Cheers
> /Eike
> geib schrieb:
>> I have looked in more detail at the highlighted log and I think I see
>> the problem. I assume from your message that if the state machine is not
>> at "IDLE" it is an error to receive the response.
>>
>> Since I am running on a laptop with limited memory it is possible that
>> once the request is made some swapping may occur to let the server run
>> to fullfil the request. I would also assume that the server could
>> fullfil the request and send the response while the client is swapped
>> out, but not yet in IDLE state. Now the client swaps backin to run and
>> THEN goes into the IDLE state, but the message has already been received
>> while still in the REQUESTING state. Is this a reasonable senerio...?
>>
>> This would could be a problem even if the server were on another
>> machine, could it not.? We run the client on windows PCs that can be
>> VERY slow depending on how many windows the user has open, and it can be
>> A LOT. The server could process a request and respond before the client
>> is in IDLE state.
>>
>> Mark.
>>
|
|
|
Re: CDO library example fails to create resource [message #561127 is a reply to message #2187] |
Sat, 05 November 2005 06:17 |
|
This is a multi-part message in MIME format.
--------------070405080900080906050104
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit
geib schrieb:
> Eike Stepper wrote:
>
>> Mark,
>
>
>> Yes, that's exactly what I think.
>> Except for the implication in client/server mode.
>> I don't think it can become a problem there because in the server
>> the receipt (and processing) of data (the indication) is strictly
>> separated from transmission of the response. in other words, the client
>> has for sure finished transmission of the request and the server
>> has finished processing, before the latter attempts to send the first
>> byte back.
>
>
> I don't know what is done after the client sends the request before it
> transitions to IDLE, but it can be interrupted.
Nothing, I guess. Here is the respective code from ChannelImpl:
public Object transmit(Request request)
{
[...]
request.setChannel(this);
short signalId = request.getSignalId();
transmitShort(signalId);
processCommEvent(REQUEST_START);
request.request();
flush();
processCommEvent(REQUEST_END);
if (request.hasResponse())
{
[...]
> Maybe any new message
> should not be processed in any state other than IDLE. If the response
> was recieved and queued, or buffered, then you could delay the
> processing until the the state machine is in IDLE state.
I have to think about it...
>> I think it's nearly impossible that all that can happen before the client
>> is able to take the transition back to IDLE. What do you think?
>
>
> Yes, I think it is less likely. However, I would look at this as an
> opportunity to elminate a potential problem. There is a hole here.
> Plugging the hole will only improve the stability and reliability of CDO.
Of course ;-)
I also don't like to discuss about (un-) likelyness.
What about a synchronized region around REQUEST_START and REQUEST_END?
>> Apart from that I'm not very sure at the moment, how to work around
>> this issue in the embedded mode. I have to think about it...
>
>
> Is there any difference in embedded mode other than the communication
> between client and server.?? I could try using network communication,
> even on the same machine.
There are (intentionally) no differences at all between the threading models.
But in embedded mode some components can be shared (executor-pools, buffer-pools, ...)
>
>> Would it be helpful for you to look at the state charts?
>> Where is google for my hd??? ;-)
>
>
> Yes I would look at the state diagram(s).
Client and server (-channels) have slightly different state machines.
A server is not allowed to actively send RequestWithConfirmation
to a client (only one way notifications). The digrams are attached.
Cheers
/Eike
--------------070405080900080906050104
Content-Type: image/jpeg;
name="server-states.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="server-states.jpg"
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAJYAjsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3eiiisygooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKwNWs7u78Q
2XlSXawRWs0gEUzxxNMGj8vftIz/ABfKeCM8GkBv0V5bpcOvCyla9vdalgJi OoRpZ3cMqnd8
4jZpXZj6+QAuM7ewqyNS1KHSpZbVdbuY3g1G3tx5cskglEg8kPjLKQAQGfGO 5BNO39f136dw
Wr/r+tOvY9JpkkscKhpZFRSwUFjgZJwB9SSB+NefiLxA3jAu97qMeHURQx2U 7xmDyxn94Zhb
g53feQvnpkYrKtLbU7nTrqG+TW7i3iurOYy4vo3yJV34jfc+4AnPlSOnyggK erSu0v6/r9dB
X0/r+v8AganpUes6XLqkmmR6lZvqEY3SWqzqZUHByUzkdR27ircUsc8SSxOs kbqGV0OQwPQg
9xXDRwt/a32C0ttReJruZ5La+04qttu35lgulAVSS5P3nYhsDZ82MFRrFtb+ HYrCPW4RaQ2W
Y3hvHEmZdswblVXaAc+ZvypGwKBkkVf8PxG9D1d5Y42RXkVWkbagY4LHBOB6 nAJ/A0+uETSJ
ft2j6jeHWJZhrE+/M9wyxpmYRny1O1U5QZxjBGTg13dIOoUUUUAFFFFABRRR QAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUU
UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAV72+s
9NtHu7+6gtbaPG+aeQIi5IAyx4HJA/Gsj/hOfCP/AENWif8Agwi/+Ko8Yf8A IEtv+wrp3/pZ
DW/QBgf8Jz4R/wChq0T/AMGEX/xVMi8Z+DIVZYvEugxhmLkJfwjLE5J+91J5 roqKAMD/AITn
wj/0NWif+DCL/wCKo/4Tnwj/ANDVon/gwi/+KrfooAwP+E58I/8AQ1aJ/wCD CL/4qj/hOfCP
/Q1aJ/4MIv8A4qt+igCnp2q6drFu1xpmoWt9ArlGktpllUNgHBKkjOCOPcVc rA8P/wDIb8V/
9hVP/SO2rfoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKAMDxh/yBLb/sK6d/6WQ1v1geMP8A kCW3/YV07/0s
hrfoAKKKKACiiigAooooAwPD/wDyG/Ff/YVT/wBI7at+sDw//wAhvxX/ANhV P/SO2rfoAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KACiiigAooooAKKKw1v9Y1gb9DisYtPfiPUbtnffjnfHCoHmRnoGMiZ5YBl2 lxK4DPGH/IEt
v+wrp3/pZDW/XOXmheJtQgWG61nRJI1ljmA/siYYeN1dDxddmVT+HPFWP7P8 Xf8AQd0T/wAE
0v8A8lU+ViubdFYn9n+Lv+g7on/gml/+SqP7P8Xf9B3RP/BNL/8AJVHKwubd FYn9n+Lv+g7o
n/gml/8Akqj+z/F3/Qd0T/wTS/8AyVRysLm3VPUdRh0u3W5uVcWwcCaZQCsC 4PzvzkIDgEjO
3OThQzCh/Z/i7/oO6J/4Jpf/AJKo/s/xd/0HdE/8E0v/AMlUcrC5QsNRh03U /FMkivLJJq8c
cEEQBknkNlbEIgJAzgE5JAABZiFBI6quJ0bwHrGg397eWOr6Osl0+cPpU7LA u1F2RA3WETEa
cD+6o+6iBdpr/WNHG/XIrGXT04k1G0Z02Z53yQsD5cY6FhI+OGIVdxQaYXNy iiikMKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACi
iigDB8ZjzPC9xZn/AFd/NBp8pHUR3EyQuV/2gsjEZyMgZBHFdNXK+Np4bXw9 FcXEscMEWp6e
8kkjBVRReQkkk8AAc5q1/wAJ34P/AOhr0P8A8GMP/wAVVR2Ezl5I5V+IF7fW 4dprNriURqT+
8Ty7QOuO5K5x7gVh2r+GJ7BpNR/s9tUfRbRtM80J9qLkS7fIB+fdu24285xX on/Cd+D/APoa
9D/8GMP/AMVR/wAJ34P/AOhr0P8A8GMP/wAVVfZURdbnJXkmnQ6xeS+KlgbR 0nladblQ1ubg
W9ttDg/KTjzNoPfpzin6Trml2Y0++uNQjg03ytQtraW5k27R5yGOI7uQ2wcI fmwuMZBrqv8A
hO/B/wD0Neh/+DGH/wCKo/4Tvwf/ANDXof8A4MYf/iqHr936W/4YFocPYW2l w+J9LXWLnw7a
3UOm6eEh1a0V7ksN/ELNIpRs4H3W5xV21g0E+Lmg26Pq11dXc0c6FGi1CFG3 blmUkmaLkAbw
ihQhAb5a6v8A4Tvwf/0Neh/+DGH/AOKo/wCE78H/APQ16H/4MYf/AIqm3d3E lZWOWPh/RdNs
NQuLDSLC1nXWoolkgtkRgnnRHaCBnHt0qhZfb7PSdK02y+0NcroFxPYumS5D JF8qk/xK2cD0
K13H/Cd+D/8Aoa9D/wDBjD/8VR/wnfg//oa9D/8ABjD/APFUlpG39bW/4I+t /wCtzC8OS+Hx
4tij8NWumfZzat9omsLrMu75SBcxBOGznDO+7O/jk13tc/8A8J34P/6GvQ// AAYw/wDxVH/C
d+D/APoa9D/8GMP/AMVQJGB8MriWLQrnQ57o3DaNdTWCOy4LRxSNGp6nso4z x06Yrt686+Gk
8N1qfiO4t5Y5oJdTu3jkjYMrqZ3III4II5zXotQ9ykFFFFIYUUUUAFFFFABR RRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRWZr
OsjRxZKtjdX095cfZ4YbYxhi3lvISTI6qBtjbv6UAadFYH/CQan/ANCdrf8A 3+sv/kij/hIN
T/6E7W/+/wBZf/JFAG/RWB/wkGp/9Cdrf/f6y/8Akij/AISDU/8AoTtb/wC/ 1l/8kUAb9FYH
/CQan/0J2t/9/rL/AOSKP+Eg1P8A6E7W/wDv9Zf/ACRQBv0Vgf8ACQan/wBC drf/AH+sv/ki
j/hINT/6E7W/+/1l/wDJFAG/RWB/wkGp/wDQna3/AN/rL/5Io/4SDU/+hO1v /v8AWX/yRQBv
0Vgf8JBqf/Qna3/3+sv/AJIo/wCEg1P/AKE7W/8Av9Zf/JFAG/RWB/wkGp/9 Cdrf/f6y/wDk
ij/hINT/AOhO1v8A7/WX/wAkUAb9FYH/AAkGp/8AQna3/wB/rL/5Io/4SDU/ +hO1v/v9Zf8A
yRQBv0Vgf8JBqf8A0J2t/wDf6y/+SKP+Eg1P/oTtb/7/AFl/8kUAb9FYH/CQ an/0J2t/9/rL
/wCSKP8AhINT/wChO1v/AL/WX/yRQAvi/wD5A1r/ANhXTv8A0thrpq8n1DVL y1u7TQY9A1G1
05r7T50WeS3YWIF9CAv7uViImO4IpAKlWC5QYi9Yq4iYUUUUxBRRRQAUUUUA FFFFABRRRQB5
t8O/+Q34o/7C15/6UPXoNeR6Pc6zaR+LZdCt0muhrF0H3MQ0cRuX3ugCPucL kgbT/uuQEbst
Ll8QQaZbrpuiaA1myeZFImuTSCQN82/f9mJcsSWLEksSSSSc1Etxo6qisD7X 4u/6Aeif+DiX
/wCRaPtfi7/oB6J/4OJf/kWkM36KwPtfi7/oB6J/4OJf/kWj7X4u/wCgHon/ AIOJf/kWgDfo
rA+1+Lv+gHon/g4l/wDkWj7X4u/6Aeif+DiX/wCRaAN+isD7X4u/6Aeif+Di X/5Fo+1+Lv8A
oB6J/wCDiX/5FoA36KwPtfi7/oB6J/4OJf8A5Fo+1+Lv+gHon/g4l/8AkWgD forA+1+Lv+gH
on/g4l/+RaPtfi7/AKAeif8Ag4l/+RaAN+isD7X4u/6Aeif+DiX/AORaPtfi 7/oB6J/4OJf/
AJFoA36KwPtfi7/oB6J/4OJf/kWj7X4u/wCgHon/AIOJf/kWgDforA+1+Lv+ gHon/g4l/wDk
Wj7X4u/6Aeif+DiX/wCRaAN+iqGhan/bXh/TdV8nyfttrFc+Vu3bN6BtucDO M4zgVfoAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Qf8hvwp/2FX/8ASO5r frA8Qf8AIb8K
f9hV/wD0juaAN+iiigAooooAKKKKACiiigAooooAqahfJp9us0hQK0scfzkg fMwXsDzz9PUj
rWbD4w0O4tJrqO5mMUSxsc2kwZxISIzGpXMgYggFAc44q9q+m/2rZpb+b5W2 eKbdt3fccNjq
OuMVj/8ACJSJb2wh1AJcWtrbQwyNBuXfCxIZl3DIOcFQQfQ0LbXv+APbQktf GNhPAbiYiCAG
fG4OZG8uVYxhNmcksBt+9kgAE9JZPGOiRWS3T3FwIyXDL9im8yLZjcZE2bow MjJYAYIOeRVA
+DZ3jR5NVU3aPLMsotsL5rzpMDt3fdBQDbnJB6g81Br/AIJ1DxJYiHUtZtJ3 aKaNxJp26JC4
AV4ozJ8jrg4Zi5+ZsEA4DVrK4dTVXxdp6z6jHNHdp9juhbAJaTSNMxQP8iqh LdT93OAMngiq
174uYanbWWlW1pdvNAJ0S4vhbyTjLZWFCp3uoRtwYoF4yeuK2o+Bv7QMpln0 6cfaVuYYr3Tv
PiDeSImDqXG4EKCMbSp7kVNc+EryTR00eC/08aY0AimtZ9KR48gklolVkCHJ 6MHAKqcZzk0/
r0/zEv6+/wDyLa+LrBZdQjuIbyI2d0LYKtpLI0rFA/yKqEtjJztzgDPQio9T 8baRYafJcxNP
duLMXiRwW0rho2DFCzKhCA7Ty2Kq3/gye8E0Q1C3ktZLpLg295aGdHAhEZWQ eYBJyquCRwwz
huMPsfBhsvD9xpf9oBzLpcWniXyMbdgcB9u7nO/pkdOvPBpb7vy1/EaOohlW eCOZQ4WRQwDo
VYAjPIIBB9iM0+mQrIsEazOjyhQHZF2qxxyQCTge2T9TT6TEttTltd06HTfD 1vHGzyySaxp0
k88pBknkN5AC7kADOABgAAABVAUADsa5nxf/AMga1/7Cunf+lsNdNVR2BhRR RVCCiiigAooo
oAKKKKACiiigDzb4d/8AIb8Uf9ha8/8ASh67m1srey84W0flrNK0zqGO3e33 iB0XJ5OMZYsx
5Yk8N8O/+Q34o/7C15/6UPXoNRLcaCquo6la6VZm6vZDHCGVMhGclmYKoAUE kkkDp3q1VLU9
P/tK2ih83y9lxFPnbnOx1fHXvtx+NIZVTxPpT3SWxlnjdlBLS2ssaISu4K7s oVHwQdjENyOK
ZaeK9GvQfJuZBzHxJbSxkiRtqMAyglWPAYcH1rLuPAdnc+IbjUZE05oriTzZ C+nI10GKbSFn
Jyq8Zxt3DnDAdI/+EY1mW5njuNSgbZb2otbpbQBQ0MrOA6b8t/DkgqDnjbQv MTv0Ny58S6Va
KpkmmfMkke2G1llYFDtckIpIUHgsfl5HPNMfxTpCXhtRPK8mDtaO3kaNyF37 VkC7GfaCdoJP
tWBd/D0XkcL3Fxpt3dq9w0j32lrcR4lk3nYjP8jKeAckY6g8Ytp4J8rxJFqk N5BDGgCkQWvk
zyIEChHeN1R0+UEBoyR2I4wug3v5EUfjia9bTk0/TYHmvLRboW95efZZpQc5 WBGT94wCknOw
cqc4ORpL4usFl1CO4hvIjZ3Qtgq2ksjSsUD/ACKqEtjJztzgDPQiqUvhTVZt Cg0aTV7CayFs
ltNFcaWJFYL0dB5nytjH3t4yoIA5BS/8GT3gmiGoW8lrJdJcG3vLQzo4EIjK yDzAJOVVwSOG
GcNxina7t/Wv+Qi1qfjbSLDT5LmJp7txZi8SOC2lcNGwYoWZUIQHaeWxXQwy rPBHMocLIoYB
0KsARnkEAg+xGa5ex8GGy8P3Gl/2gHMulxaeJfIxt2BwH27uc7+mR0688dRC siwRrM6PKFAd
kXarHHJAJOB7ZP1NDtd2AfRRRSGFFFFABRRRQAUUUUAYHgb/AJJ94b/7BVr/ AOilrfrA8Df8
k+8N/wDYKtf/AEUtb9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFYHiD/AJDf
hT/sKv8A+kdzW/WB4g/5DfhT/sKv/wCkdzQBv0UUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUU
UAFFFFABRRRQAUUUUAYni2CaXw1cy28Tzz2bxX0cEaktO0EizCMY5y5j25wc bs4PQ78E8N1b
xXFvLHNBKgeOSNgyupGQQRwQRzmo65fU/D2rwXj33hjW3095HEk1jNGs1rK2 4sxCHlC2Tu2M
u4nJ5yS0xM7CivNrrWfiTZ8zp4cRN6xhzayhSzMFUA+d1JIAHckDrTv7V+J/ /PtoX/gFN/8A
HqsR6PRXnH9q/E//AJ9tC/8AAKb/AOPUf2r8T/8An20L/wAApv8A49QB6PRX nH9q/E//AJ9t
C/8AAKb/AOPUf2r8T/8An20L/wAApv8A49QB6PRXnH9q/E//AJ9tC/8AAKb/ AOPUf2r8T/8A
n20L/wAApv8A49QB6PVXUtSstH0241HUbmO2tLdN8sshwFH9T2AHJPArz6HX PiTcIXgj8PSo
HZCyWkrAMrFWHE3UMCCOxBFZa+CfFXiS4t5vFOsz3YhYEW5RYoFYE7XCKACQ CRk5PPsKAL3w
jhvJNJuNSvXLz3sj3ExKBCJJHLsCPqT6fQV6TVDSdKg0mzWCEAcDcR3q/Wb3 GFFFFAwooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKAMDwN/yT7w3/ANgq1/8ARS1v 1geBv+SfeG/+
wVa/+ilrfoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Qf8 hvwp/wBhV/8A
0jua36wPEH/Ib8Kf9hV//SO5oA36KKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKACiiigDA8Yf8AIEtv+wrp3/pZDW/WB4w/5Alt/wBhXTv/AEshrfoA KKKKACiiigAo
oooAwPB//IEuf+wrqP8A6WTVv1geD/8AkCXP/YV1H/0smrfoAKKKKACiiigA ooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKAMDwN/yT7w3/wBgq1/9FLW/WB4G/wCS feG/+wVa/wDo
pa36ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwPEH/Ib8Kf9 hV//AEjua36w
PEH/ACG/Cn/YVf8A9I7mgDfooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKAMDxh/yBLb/sK6d/6WQ1v1geMP8AkCW3/YV07/0shrfoAKKKKACi iigAooooAwPB
/wDyBLn/ALCuo/8ApZNW/WB4P/5Alz/2FdR/9LJq36ACiiigAooooAKKKKAC iiigAooooAKK
KKACiiigAooooAKKKKACiiigDA8Df8k+8N/9gq1/9FLW/WB4G/5J94b/AOwV a/8Aopa36ACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwPEH/Ib8Kf9hV//SO5 rfrA8Qf8hvwp
/wBhV/8A0juaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAoooo
AwPGH/IEtv8AsK6d/wClkNb9YHjD/kCW3/YV07/0shrfoAKKKKACiiigAooo oAwPB/8AyBLn
/sK6j/6WTVv1geD/APkCXP8A2FdR/wDSyat+gAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKACiiigAooooAwPA3/ACT7w3/2CrX/ANFLW/WB4G/5J94b/wCwVa/+ ilrfoAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Qf8AIb8Kf9hV/wD0jua3 6wPEH/Ib8Kf9
hV//AEjuaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAwP
GH/IEtv+wrp3/pZDW/WB4w/5Alt/2FdO/wDSyGt+gAooooAKKKKACiiigDA8 H/8AIEuf+wrq
P/pZNW/WB4P/AOQJc/8AYV1H/wBLJq36ACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigDA8Df8k+8N/wDYKtf/AEUtb9YHgb/kn3hv/sFWv/opa36A CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKwPEH/Ib8Kf8AYVf/ANI7mt+sDxB/ yG/Cn/YVf/0j
uaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAwPGH/ACBL
b/sK6d/6WQ1v1geMP+QJbf8AYV07/wBLIa36ACiiigAooooAKKKKAMDwf/yB Ln/sK6j/AOlk
1b9YHg//AJAlz/2FdR/9LJq36ACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KACiiigDA8Df8k+8N/8AYKtf/RS1v1geBv8Akn3hv/sFWv8A6KWt+gAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACsDxB/yG/Cn/YVf/wBI7mt+sDxB/wAhvwp/ 2FX/APSO5oA3
6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDA 8Yf8gS2/7Cun
f+lkNb9YHjD/AJAlt/2FdO/9LIa36ACiiigAooooAKKKKAMDwf8A8gS5/wCw rqP/AKWTVv1g
eD/+QJc/9hXUf/Syat+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooo
oAwPA3/JPvDf/YKtf/RS1v1geBv+SfeG/wDsFWv/AKKWt+gAooooAKKKKACi iigAooooAKKK
KACiiigCve3tvp9o91dSbIkwCQpYkkgKqqMlmJIAUAkkgAEmswL4svvnjXSt Ij6qtwr3sjg9
A4Vo1jYdwrSAk8HAyyX4+0+NdAtH4jghu9QUr1MiBIAD/s7bqQnvkLzgEHoJ /wDj3k/3D/Kn
sri3djA/s/xd/wBB3RP/AATS/wDyVR/Z/i7/AKDuif8Agml/+Sq81+wxWHho NPpGjaMLjw9K
Unt23DUCVQt5vyINyhdxBLZ3HB4auliTQI9AtUS78OXOif2jnU20a3SC1C+U 20TKruNu/wAv
JY4+7kYzVuKX9edhX/r5HS/2f4u/6Duif+CaX/5KqvcaF4mup7SabWdEaS0l M0B/siYbHKMh
PF1z8rsOfX1xXOaXrWhxvBfWV3BbeH7XV/3ZdhHFbI9oR0PEcZkY7c4Ulvly CM0L6PSp7zSJ
dVu/DttbSx380L67arNHIrXKspjDSJglSCDzwelCirrz/wArg3Zf13sd1/Z/ i7/oO6J/4Jpf
/kqj+z/F3/Qd0T/wTS//ACVXMasdEh8XPcGTSdQvmngEVpKGhv4xhMG2kBJe PGTsVQh3Pl/v
Cnan4Y0CxXxbPaaHplvNBZKYZIrSNGjLRvkqQOM98UJIOtjpf7P8Xf8AQd0T /wAE0v8A8lUf
2f4u/wCg7on/AIJpf/kquVsPOsZ9LgTe0V7rV3NCTkhJQbgMuewIwwHqGo0O XSY9V0EWlrYy
a83GqyC6CaikhQiTzowhLx7uu5gAdhHRaSSv/X9f0u4N2OpM3iTS/wB5fwWO p2i/NLPYpJDM
i+i258zzMfeJEgYjIVCQA2xBPDdW8VxbypNBKgeOSNgyupGQQRwQR3q5XA+E LiWx8W+KtAlu
jNHBqD3UIZcbROFnZRyehlI/DOOTSaHc7aiiipGFFFFAEF3dJZxLJJ90yJH9 9V5Zgo5Ygd+n
U9gTxVSPxDok1tdXMWsae8Fp/wAfEq3KFYf985wv40a5p8up6ekELIrrcQyk uSBhJFY9B1wD
XPr4Tv4LSz8k2bTWlnZRrG7MEkkgdmwSFyF+bhsEg84oW2vf+mD20Nu08S6b dwtcJPGtqqzO
bh5Ywm2NgrNndyvOd3THUjIzI3iTQksre9bWtOW0uX2QTm6QRytnGFbOGOQe B6VzR8I6pJFH
K509Z0lnuPJVmMZdrmOdUJ25x8hBbHBOcHpUHiHwrr+u2UiiHSraW4huEkjt 7uWEI7hQrtIk
Yab7p3KQinIyG2g01bS4dTpx4q0MNqPnapaQLp06wXLzToioxAIySeOuOccg jtTW8Rb9WFjZ
aXe3yeXFK91bvB5SJITtOWkViMKT8oPHrWFqHhTVbqaSVfIk2Xi3USLqU9qZ MwCJgZIl3IQR
kEbtwJBAzUdl4PudO1i2u/7D0K+EcMKLPc3MhltmVnZjGXjkZvv5BLgkjt2E l+X5Ets62LW9
Knubi2i1OykntlLzxJcKWiUdSwzlR9aZpWt2GtfaG064S4hgcJ50Tq8bkqGy rKTkc4+oNYFx
4Qup7PyBLbISl8pOCQfPmEigjAyOPmH861tBsL+2uNTu9Ris4Zr2dZfLtZGk VQI1TlmVcn5e
uB2pFG1RRRQAUUUUAYHjD/kCW3/YV07/ANLIa36wPGH/ACBLb/sK6d/6WQ1v 0AFFFFABRRRQ
AUUUUAYHg/8A5Alz/wBhXUf/AEsmrfrA8H/8gS5/7Cuo/wDpZNW/QAUUUUAF Q3V3bWVu1xd3
EVvCuN0krhFGeBknipqztb059UsooE8v5LqCYiToQkquex5wvHvQAsOu6RcX cNpBqtjLczRC
aKFLhGeSMjIdVByVxzkcUttrmkXqM1pqtjOquI2MVwjAMTtCnB6k8Y9a5i88 F3N34gu5nYGz
up/tBmOo3IaM+WFwLcERMQRw5PTgqcZMI0PXJbqWNrLT4Z7e1shA0byeTN5M zNtZ9ny5A6BW
256tQrPf+u/3fj0E76/1/X9I6271vSbCNJLzVLK3R5TCjTXCIGkHBQEnluDx 1ol1zSYb2Wxl
1OyS8ijMslu06iRUAyWK5yBjnNcfc+DdXuFiuJDby3LNdeZCmp3NqiLNLvBD xAF8AYKsAG4O
RjmxF4R1G38RW88D28VhEwZttzI4f92E/wBRIrhX4I8xJFJBOd3OV0/r+v6t uN7+Rp2HjGDV
5rcaVpl9fwSwxTNcwPB5cSyFgN26UEkbWyFBxj1rWi1vSp7m4totTspJ7ZS8 8SXClolHUsM5
UfWuR07wpqNpqNhd3WheH76WC0trcXE1y3mW5iLAtGTAeoIPVeRj3q5ceELq ez8gS2yEpfKT
gkHz5hIoIwMjj5h/Oqla+nmJX6m/pWt2GtfaG064S4hgcJ50Tq8bkqGyrKTk c4+oNaNYug2F
/bXGp3eoxWcM17Osvl2sjSKoEapyzKuT8vXA7VtUmAUUUUDCsm71O9e7kstF soL25gwblri4
MEMOQCELqjkyEENtC8LyxXcm7WrH8Djf4K0q7P8ArL+H+0JR2ElwTO4X/ZDS MBnJwBkk800r
iYz+z/F3/Qd0T/wTS/8AyVR/Z/i7/oO6J/4Jpf8A5KrG8e2q3ur6XbO7oJFV d6Nhl/0u2wQf
Udaxrq60i61rPipNPS3i1byrkagqCDzVssA/PxgnBX6iqSTV/X8BN2Oy/s/x d/0HdE/8E0v/
AMlUf2f4u/6Duif+CaX/AOSq4+UKLa0FsGGleXceX5ecfYftcGdv/TPy92Mc bOnGK1JrzRU0
aXTvBlp9shvboJJDpWwQiMKpmMZZlixtAUlWwHcZ+YkUW0v/AFv1GaljoXib TdPtrC01nRI7
a2iWGFP7ImO1FACjJusngDrVj+z/ABd/0HdE/wDBNL/8lVzl9aWeseDLy11r Qoxe6UfLhjv4
opZY4mYbGBBcDKgAkNyVNR6rotvb+M7Oy0e3gsPJaCW2jt0EUayCO7YZVcDB PX1BNOyFc6f+
z/F3/Qd0T/wTS/8AyVR9i8XR/P8A2todxt58n+zJYfM/2d/nvsz03bWx12np XIw3emXsEF1r
0UC6K9xqBMWpYS2F153yLNuBAIHmAEgjOcZOK7DwVKsvhuMxW8cEAmkEKQXB nh2bjt8pyi5j
x93AwBgDgCkkn/X9f8NqDdn87E+n6lPLctYalbR2eoqhkEUcpljljyBvjcqp YAkBgVBUkZGG
Rm0q5P4mma18O2OsW1w0Mul6nbzjaud4dvIZeo/hmJ75xgjBrprWdbm0hnUg iRA2R05FS1Ya
JqKKKQwooooAKKKKACiio5p4bdA88qRIXVAzsFBZmCqOe5YgAdyQKAOb1nVt N0bx1otxqmoW
ljA2mXyLJdTLEpbzbQ4BYgZwCcexrQ/4Tvwf/wBDXof/AIMYf/iqjn/5KHo/ /YKv/wD0baV0
lWtiWc//AMJ34P8A+hr0P/wYw/8AxVH/AAnfg/8A6GvQ/wDwYw//ABVdBRTA 5/8A4Tvwf/0N
eh/+DGH/AOKo/wCE78H/APQ16H/4MYf/AIqugooA5/8A4Tvwf/0Neh/+DGH/ AOKo/wCE78H/
APQ16H/4MYf/AIqugooA5/8A4Tvwf/0Neh/+DGH/AOKo/wCE78H/APQ16H/4 MYf/AIqugooA
5/8A4Tvwf/0Neh/+DGH/AOKrz+z16NfHPjLWtFh/txUEbwRWEqv55W2iBCsD g4IOcZPBABOA
fYK830X/AJLD4p/66Q/+ksNDA0tH1zU109Jz4e1vUGusTtcrcWXlvuAx5a/a SFjwBtAJ45JZ
izG//wAJBqf/AEJ2t/8Af6y/+SK07PTobG4uZLdnSO4fzGgyPLWQklnUYyCx OWGcEjdjczFr
lZlGB/wkGp/9Cdrf/f6y/wDkij/hINT/AOhO1v8A7/WX/wAkVv0UAYH/AAkG p/8AQna3/wB/
rL/5Io/4SDU/+hO1v/v9Zf8AyRW/RQBgf8JBqf8A0J2t/wDf6y/+SKP+Eg1P /oTtb/7/AFl/
8kVv0UAYH/CQan/0J2t/9/rL/wCSKP8AhINT/wChO1v/AL/WX/yRW/RQBgf8 JBqf/Qna3/3+
sv8A5Io/4SDU/wDoTtb/AO/1l/8AJFb9FAGB/wAJBqf/AEJ2t/8Af6y/+SKP +Eg1P/oTtb/7
/WX/AMkVv0UAYH/CQan/ANCdrf8A3+sv/kij/hINT/6E7W/+/wBZf/JFb9FA HI6vd6trVta2
SeFtVtv9Ps5nmnmtNiJHcRyMTtmZvuoegNddRRQAUUUUAFFFFABRRRQBxuha 7baPZ3dle2es
LOupXz/u9IupVKvdSupDJGVIKsDkHvWn/wAJhpn/AD663/4Ir3/41W/RQBgf 8Jhpn/Prrf8A
4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UAYH/CYaZ/z663/AOCK9/8AjVH/ AAmGmf8APrrf
/givf/jVb9FAGB/wmGmf8+ut/wDgivf/AI1R/wAJhpn/AD663/4Ir3/41W/R QBgf8Jhpn/Pr
rf8A4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UAYH/CYaZ/z663/AOCK9/8A jVH/AAmGmf8A
Prrf/givf/jVb9FAGB/wmGmf8+ut/wDgivf/AI1R/wAJhpn/AD663/4Ir3/4 1W/RQBgf8Jhp
n/Prrf8A4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UAcTeeMrTS9QW9RNbks rmWOG4t5tIvB
5bsVjR4i0eByVDR5+bqvz5WR3gvxp4VtfAvh63uPEujQzxaZbJJHJfxKyMIl BBBbIIPGK6X+
zPN1f7fdTed5PFnDtwsGVwzdTukOWG7sp2gDLl63gT/knnhr/sFWv/opaqIm H/Cd+D/+hr0P
/wAGMP8A8VR/wnfg/wD6GvQ//BjD/wDFV0FFUI5//hO/B/8A0Neh/wDgxh/+ Ko/4Tvwf/wBD
Xof/AIMYf/iq6CigDn/+E78H/wDQ16H/AODGH/4qj/hO/B//AENeh/8Agxh/ +KroKKAOf/4T
vwf/ANDXof8A4MYf/iqP+E78H/8AQ16H/wCDGH/4qugooA80+JHizw3qfge6 s7DxBpV3dSXN
pshgvY5HbFzEThQcnABP4V2Wg/8AICs/+uYrF+Kv/JO77/r5s/8A0qira0H/ AJAVn/1zFTLY
aNGiiipGFFFFAHK6VrvijWNHsdTt9B0dYLy3juI1k1eUMFdQwBxbEZwfWrf2 vxd/0A9E/wDB
xL/8i0eBv+SfeG/+wVa/+ilrfoAwPtfi7/oB6J/4OJf/AJFqOeTxRdW8tvce HtAmglQpJHJq
0rK6kYIINrggjtXR1XvbK31G0e0u4/Mt5MCSMsQHAIO1sdVOMFTwwJBBBIoA 4Xwjd6vd+M7A
6hFB9iTT75dPuI7t7hp4fMs+S7IhdQchZCMuoB+biST0qubn/wCSh6P/ANgq /wD/AEbaV0lW
tiQooopgFFFFABRRRQAUUUUAFeb6L/yWHxT/ANdIf/SWGvSK830X/ksPin/r pD/6Sw0nsB6B
RRRUFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVj+BP+SeeGv8AsFWv/opa2Kx/ An/JPPDX/YKt
f/RS1URM6CiiiqEFFFFABRRRQAUUUUAcZ8Vf+Sd33/XzZ/8ApVFW1oP/ACAr P/rmKxfir/yT
u+/6+bP/ANKoq2tB/wCQFZ/9cxUy2GjRoooqRhRRRQBgeBv+SfeG/wDsFWv/ AKKWt+sDwN/y
T7w3/wBgq1/9FLW/QAUUUUAYc/8AyUPR/wDsFX//AKNtK6Sub1Q/YvFOg6m3 ML+fpshPCx+c
EdXLe7wJGB3aZec4B6SrjsSwooopgFFFFABRRRQAUUUUAFeX2aXknxV8WrYT wQXJkg2STwmV
B/o0OcqGUnjP8Q/HpXps00VvBJPPIkUUal3kdgqqoGSST0AFeV/D2eTW/F2v +IFuPPgu7yQx
MU2fuVAjiIGBkFEU9M8jr1pPYDsPsni7/oOaJ/4J5f8A5Ko+yeLv+g5on/gn l/8Akqt+ioKM
D7J4u/6Dmif+CeX/AOSqPsni7/oOaJ/4J5f/AJKrfooAwPsni7/oOaJ/4J5f /kqj7J4u/wCg
5on/AIJ5f/kqtXUdStdKszdXshjhDKmQjOSzMFUAKCSSSB071STxPpT3SWxl njdlBLS2ssaI
Su4K7soVHwQdjENyOKAK/wBk8Xf9BzRP/BPL/wDJVH2Txd/0HNE/8E8v/wAl VLaeK9GvQfJu
ZBzHxJbSxkiRtqMAyglWPAYcH1qS58S6VaKpkmmfMkke2G1llYFDtckIpIUH gsfl5HPNAit9
k8Xf9BzRP/BPL/8AJVH2Txd/0HNE/wDBPL/8lVM/inSEvDaieV5MHa0dvI0b kLv2rIF2M+0E
7QSfasKz8fjUNS0+1hh0y3+128E4TUNQa2nbzCwKxxGImTG3rkZyOxzQk3sD djX+yeLv+g5o
n/gnl/8Akqj7J4u/6Dmif+CeX/5KqVPFmivNcx/a3X7MkkkjyQSIm2Ntsm1y oV9pIBCk4NS6
NrsGtyXwt4pUS1lWPMsbxuSUVuUdQy/e6Ee/egZV+yeLv+g5on/gnl/+SqPs ni7/AKDmif8A
gnl/+Sq36KAMD7J4u/6Dmif+CeX/AOSqPsni7/oOaJ/4J5f/AJKrfooA5HXZ /F2i+H9S1X+1
tEm+xWstz5X9kyrv2IW25+0nGcYzg111YHjn/kn3iT/sFXX/AKKat+gAoooo AKKKKACiiigD
nIvFVzdGdrLwxrF1BFcS2/nRvaqrtHI0bEB5w2NynqBUn/CQan/0J2t/9/rL /wCSKPB//IEu
f+wrqP8A6WTVv0AYH/CQan/0J2t/9/rL/wCSKP8AhINT/wChO1v/AL/WX/yR W/RQBgf8JBqf
/Qna3/3+sv8A5Io/4SDU/wDoTtb/AO/1l/8AJFb9VNQvk0+3WaQoFaWOP5yQ PmYL2B55+nqR
1oAy/wDhINT/AOhO1v8A7/WX/wAkUf8ACQan/wBCdrf/AH+sv/kinQ+MNDuL Sa6juZjFEsbH
NpMGcSEiMxqVzIGIIBQHOOKhtfGNhPAbiYiCAGfG4OZG8uVYxhNmcksBt+9k gAE9C2tgJP8A
hINT/wChO1v/AL/WX/yRR/wkGp/9Cdrf/f6y/wDkilk8Y6JFZLdPcXAjJcMv 2KbzItmNxkTZ
ujAyMlgBgg55FIvi7T1n1GOaO7T7HdC2AS0mkaZigf5FVCW6n7ucAZPBFAg/ 4SDU/wDoTtb/
AO/1l/8AJFH/AAkGp/8AQna3/wB/rL/5IqjL41jbxHBpdo+keXNHDIrXmpG3 mk3swxHF5ZLE
behIOTjitNPFmivNcx/a3X7MkkkjyQSIm2Ntsm1yoV9pIBCk4NFg3Iv+Eg1P /oTtb/7/AFl/
8kUf8JBqf/Qna3/3+sv/AJIq1o2uwa3JfC3ilRLWVY8yxvG5JRW5R1DL97oR 7961aBmB/wAJ
Bqf/AEJ2t/8Af6y/+SKP+Eg1P/oTtb/7/WX/AMkVv0UAYkGuajNcRRP4U1iB HcK0sktoVQE/
eO2cnA68An0Bp/gT/knnhr/sFWv/AKKWtisfwSfJ8LWumNxNpWdNkB4Y+Sdi uV/h3oEkA/uy
LyRgmoiZ0FFFFUIKKKKACiiigAooooA4z4q/8k7vv+vmz/8ASqKtrQf+QFZ/ 9cxXH/F3U430
/S/DsN4qXV9exSzRBdzfZ4yX3EfwjzFjGcjJ6ZwRXaaPC9vpFrE+NyxgHFTL YaLtFFFSMKKK
KAMDwN/yT7w3/wBgq1/9FLW/WB4G/wCSfeG/+wVa/wDopa36ACiiigCOeCG6 t5be4iSaCVCk
kcihldSMEEHggjtXIz6P4x0aZm8P6+l7Z4bZZ6xF55jy2fllDK7Y5A3s3GPT NdlRQnYDgP7V
+J//AD7aF/4BTf8Ax6oxrnxJa4e3WPw8Z0RXeMWku5VYkKSPOyASrYPfafSv Q6wLT/koOsf9
gqw/9G3dVzCsc/8A2r8T/wDn20L/AMApv/j1H9q/E/8A59tC/wDAKb/49Xf1 majp02q3C21y
yDSQgM0Kklrpsn5H4wIgMEgZ35wcKGWQ5gscfBrnxJureK4t4/D00EqB45I7 SVldSMggibBB
HepP7V+J/wDz7aF/4BTf/Hq0fh5pn2HwfoM1rNstJ9Kt5JLXblRMY0JkQ5+X d8xZcEM2GGCX
L9dRzBY4D+1fif8A8+2hf+AU3/x6j+1fif8A8+2hf+AU3/x6u/opcwWPKLrw r408VuY/Emry
NZ+YWNjbxrDAykghWHJfBAwGJ6e5z6BoOgwaHaiOMAyEYLD/AD/n8869FDdw sFFFFIYUUUUA
UtT0/wDtK2ih83y9lxFPnbnOx1fHXvtx+Nc9ceA7O58Q3GoyJpzRXEnmyF9O RroMU2kLOTlV
4zjbuHOGA6ddRS/r+vuA43/hGNZluZ47jUoG2W9qLW6W0AUNDKzgOm/Lfw5I Kg5421Dd/D0X
kcL3Fxpt3dq9w0j32lrcR4lk3nYjP8jKeAckY6g8Y7iincPI5JPBPleJItUh vIIY0AUiC18m
eRAgUI7xuqOnyggNGSOxHGH6X4b1vSJoGt9Z09oxbQW0yyac5LrFuAKkTDaS rY5DcjPtXVUU
XewrI5qbwis9ssL3rAAXY3LGMgzSCQHkn7pH4+1aGjaXd2El9PfXsV3cXcqy O0VuYUXCKmAp
Zj/DnknrWrRQMKKKKACiiigDA8c/8k+8Sf8AYKuv/RTVv1geOf8Akn3iT/sF XX/opq36ACii
igAooooAKKKKAMDwf/yBLn/sK6j/AOlk1b9YHg//AJAlz/2FdR/9LJq36ACi iigAqhq+m/2r
Zpb+b5W2eKbdt3fccNjqOuMVfopAcx/wiUiW9sIdQCXFra20MMjQbl3wsSGZ dwyDnBUEH0NQ
nwbO8aPJqqm7R5ZllFthfNedJgdu77oKAbc5IPUHmutoqru9w/r7ji9f8E6h 4ksRDqWs2k7t
FNG4k07dEhcAK8UZk+R1wcMxc/M2CAcB+o+Bv7QMpln06cfaVuYYr3TvPiDe SImDqXG4EKCM
bSp7kV2NFK4HL6f4Z1LR7tH0zUdOhtjDFFNC2mYzsLElPLkRUB3njace9Pm8 IrPbLC96wAF2
NyxjIM0gkB5J+6R+PtXS0UN3EklojK0bS7uwkvp769iu7i7lWR2itzCi4RUw FLMf4c8k9a1a
KKBhRRRQAVi63oMuoyJeadqdzpWpxrtW6ttpEi4bCSIwKuoLMRkZUkkEZOdq igDhJbn4nWQS
EPoN4FUDz/sUoZyOpIEwAJ68AD2HSo/7V+J//PtoX/gFN/8AHq7+inzCscB/ avxP/wCfbQv/
AACm/wDj1H9q/E//AJ9tC/8AAKb/AOPV39V737Z9kcWHkC5OAjT52LkgFiBy 2Bk7cjdjG5c7
g+YLHCDXPiS1w9usfh4zoiu8YtJdyqxIUkedkAlWwe+0+lSf2r8T/wDn20L/ AMApv/j1S2vh
uGLxxqr2lw8eqR6bZSjUJAHkkkaW6DeaBgOjBVBQYACoE2bEK91RzBY4D+1f if8A8+2hf+AU
3/x6q93dfFG8RI1m02xAcF5bSxJkK9wPMd1756dQPevR6KXMFjzrw58OpLS9 a/1a8mvruQgy
3Fy++SQAYXJPoOMf4nPoiqERUUYVRgClopN3AKKKKBhRRRQBgeBv+SfeG/8A sFWv/opa36wP
A3/JPvDf/YKtf/RS1v0AFFFFABRRRQAVgWn/ACUHWP8AsFWH/o27rfrAtP8A koOsf9gqw/8A
Rt3QBv0UUUAYHgb/AJJ94b/7BVr/AOilrfrA8Df8k+8N/wDYKtf/AEUtb9AB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBgeOf+SfeJP+wVdf+imr frA8c/8AJPvE
n/YKuv8A0U1b9ABRRRQAUUUUAFFFFAGB4P8A+QJc/wDYV1H/ANLJq36wPB// ACBLn/sK6j/6
WTVv0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAG Baf8lB1j/sFW
H/o27rfrAtP+Sg6x/wBgqw/9G3db9ABRRRQAUUUUAFFFFABRRRQBgeBv+Sfe G/8AsFWv/opa
365ix8I3em6fbWFp4t1uO2tolhhTy7M7UUAKMm3yeAOtWP8AhH9T/wChx1v/ AL82X/yPQBv0
Vgf8I/qf/Q463/35sv8A5Ho/4R/U/wDocdb/AO/Nl/8AI9AG/RWB/wAI/qf/ AEOOt/8Afmy/
+R6P+Ef1P/ocdb/782X/AMj0Ab9YFp/yUHWP+wVYf+jbuj/hH9T/AOhx1v8A 782X/wAj1Y0n
QjpuoXd/Nqt9qFzcxRQs90IRtSMuVAEcaDrK3XPagDXooooAwPA3/JPvDf8A 2CrX/wBFLW/W
B4G/5J94b/7BVr/6KWt+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAwPHP/ACT7xJ/2Crr/ANFNW/WB45/5J94k/wCwVdf+imrfoAKKKKACiiig AooooAwPB/8A
yBLn/sK6j/6WTVv1geD/APkCXP8A2FdR/wDSyat+gAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAwLT/koOsf9gqw/wDRt3W/WBaf8lB1j/sFWH/o 27rfoAKKKKAC
iiigAooooAK53VvEs+l3t8g08S2ljaLczyiY7zu3hVSMIdxygHUfe74xXRVT n0uyuWu2nt1k
+1wiCcMSQ8Y3YUjp/G350gRzdj4w1O/EVvHoDR6hJIQEuGnghKBclg8sCuSO BgJjJHNWYfF/
m2X2h7AxfubSTY8oyDPIY9p46rj8enFXB4T0hbXyBHdE+YJfON9OZ9wG3/Wl 9+MEjG7GCRiq
9r4L0mK1sI7iJppbOGKIOkrxK4jbcm5Fba21uRnOMnFVpcSvbUoQeObi5ur1 YdAvpbeJZfIl
jguD5pjyOSYQgBwcbHcnjjPFRWPjDUNZl0v7Fb2KF9Qe2u0F2zbQImbGGiV1 YEcq6ocrjoc1
unwnorTXMjWjP9oDh43nkaNd5y5RC22Mk8kqASeadF4X0qFYwI7l2jnE6yTX k0khYKVGXZyz
LgkbSSvJ4pLzDucrLrHiHTNM1CS7vLtNUFlLKlrfW0Qg3qAd8E0SkbR82EkL OQASAMk6reM5
YfEttpE2nx7ZG8mSeKZ5Ak3lGQrkR7AMDGGdX5B2YINaEHg/RLeKaFLadopI Wt/Lku5nWKNh
grGrOREMYHybeAPQU5fCWjC/jvjBcNPG4kQveTMocJ5e7aX27ivBOMnvmi4z O0jX9b1PWdJM
1haWthe2El1sW7MkmP3e0keWBkbiMBsYJOeAK6yqEWjWEEthJFE6NYQmC32y uAqEAFSM4YfK
v3s8jPWr9N26f1qIKKKKQzA8Df8AJPvDf/YKtf8A0Utb9YHgb/kn3hv/ALBV r/6KWt+gAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAwPHP8AyT7x J/2Crr/0U1b9
YHjn/kn3iT/sFXX/AKKat+gAooooAKKKKACiiigDA8H/APIEuf8AsK6j/wCl k1b9YHg//kCX
P/YV1H/0smrfoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKAMC0/5
KDrH/YKsP/Rt3W/WBaf8lB1j/sFWH/o27rfoAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KACiiigAooooAwPA3/JPvDf/AGCrX/0Utb9YHgb/AJJ94b/7BVr/AOilrfoA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMDxz/yT7xJ/2Crr/wBF NW/WB45/5J94
k/7BV1/6Kat+gAooooAKKKKACiiigDA8H/8AIEuf+wrqP/pZNW/WB4P/AOQJ c/8AYV1H/wBL
Jq36ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDA tP8AkoOsf9gq
w/8ARt3W/WBaf8lB1j/sFWH/AKNu636ACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKAMDwN/wAk+8N/9gq1/wDRS1v1geBv+SfeG/8AsFWv/opa36ACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigDA8c/wDJPvEn/YKuv/RTVv1g eOf+SfeJP+wV
df8Aopq36ACiiigAooooAKKKKAMDwf8A8gS5/wCwrqP/AKWTVv1geD/+QJc/ 9hXUf/Syat+g
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAwLT/ko Osf9gqw/9G3d
b9YFp/yUHWP+wVYf+jbut+gAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigD
A8Df8k+8N/8AYKtf/RS1v1geBv8Akn3hv/sFWv8A6KWt+gAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooqnqOq6do9utxqeoWtjAzhFkuZliUtgnALED OAePY0AZnjn/
AJJ94k/7BV1/6Kat+vMvHHizRR4a19tN8TaVfpe2E0MtiNSiZ1cxFVeHLfQN H3+8vzZWTb07
xn4fnuG1HUPFejwO6FIbFdUhKwISD8+Hw8pwMnkL91c/M8gB2VFYH/Cc+Ef+ hq0T/wAGEX/x
VH/Cc+Ef+hq0T/wYRf8AxVAG/RWB/wAJz4R/6GrRP/BhF/8AFUf8Jz4R/wCh q0T/AMGEX/xV
AG/RWB/wnPhH/oatE/8ABhF/8VVDU/F/hyXyrrT/ABjoiXcGdsUmpxiGdTjK OAxxnAw4BZTz
yCyMAX/B/wDyBLn/ALCuo/8ApZNW/Xl3hTxho93Zst7r+naVaRaleXHkyalA s1wzXUkiglHI
WIBh0P7w/wDTMfvfRdO1XTtYt2uNM1C1voFco0ltMsqhsA4JUkZwRx7ihgXK KKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMC0/5KDrH/YKsP8A0bd1 v1gWn/JQdY/7
BVh/6Nu636ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAM DwN/yT7w3/2C
rX/0Utb9YHgb/kn3hv8A7BVr/wCilrfoAKKKKACiiigAooooAKKKx9T1i4sd VtbOCzjmWSGS
4mlknKCKNGQNgBWLNh8gcdOo60gNiiuJsPHd5qEQ2eH545p2QWfnCeGN9x6P JJCoUgc4QSDg
4J73h4ukS2ne504QyQW13NInn5GYGCkA7Rw2cg4HHb0dgWux1FFckvjSWTXz YQ6LdzWyuInu
IoZ2IcqG4PleVtGQCTID149c5fHOpajaTJZ2Npb30F3axvBLdOrqkkgBDo8S uhwRzsK4bKsS
MUJNuwrrc76iuNF9rdprbm/u7yHzJpUt7eW3iaynXDbAssYMkTYCZMp5JYKp 4xVg8dXtpZ6E
l9YxTTXcNs13LDM7eX5zBFbCxELnr85jB5CliDQlfby/Eb0O8orkR4h1u71P TBBp9pDYzajN
auz3ZMjrGJQTt8vA5QMPmyehx1rrqA62CiiigDM1zUJtPsYvsqo95c3EVtbo 4LfM7AF9oILB
F3SFQR8sbcqMkT6b4e03S7hryK2jk1KRCk+oSopuJ8kE73ABxkD5RhQAAoAA Aztd/wCQ94T/
AOwrJ/6RXVdLVREwoooqhBXLXHibVJNfuNJ0rSLS4lt95Zrm+aEEKsR4xE/J 83GDjp15rqa5
a48M6pFr9xq2lavaW8txvDpc2LTABliHGJU5HlZyc9enFC3121/4APbTy/4J o6Pr8eszFYoG
jT7LDcgs3P7wuNpHYjZ6nrWf4c8Wtr+q3VqBo6LA8qmKDU/Oul2SFMvD5Y2A 4z944yOuaWDw
3qWl3kcmj6raRQC1htpEvLJpnfyy53BllQAnec/Kefyq3omk6tpMjwzalZT6 f5kskcSWTxyq
XcvzIZSDjcR9wZ9qfUWpuUUUUhhWXqXh7TdUuFvJbaOPUo0CQahEii4gwSRs cgnGSflOVIJD
AgkHUooA5nwx4iTXYr6CTYt/p13LZ3KoMKzRuV3qCSQGADbSSRnGTwTvVweh zyJ8WvFsIb92
8sBIPr9mh5rvKhqw0FY3ied7fSopIwm77ZbD50DDmZB0IPPv1HUVs0VLGedw 61rEGlo93rku
y5s7K6lu3hhH2MSMwkZcJtCgAYLhtvJJIqnbatPaWizWt+jxu94X1EwIWWM3 cStMDjAARmbP
3OAxGBivUKKq+tw/4B5b4j8XXenaKjaV4pS8KpczxXsghiW58sKfLDeWyzMC xGI0XODl1Knc
7UNZv7C41VrTW4rf7RqcZnlurmKFLRDbKyfOYZAoYjaC6kHbgEE5PqFFF/6+ a/yA8s1aexuY
7PUNbutDutQNipS0vhJEZfmba9pOVUpIeCSkZJIT7oKmpb3WbjTZdXSDW3tL m61OJdt1LBF9
nBtldVZ2jfbu27RlJCxXAwSWHp1FK+/9dbi/r8LHmMup6t4h8H3l1Nq89tGv h+G5kjt44sSS
Oku8sWQkD5RwMYr0eyZXsbd0uPtKNEpWfKnzRj72VAHPXgY54qeim3dsAooo pDCiiigAoooo
AKKKKAMC0/5KDrH/AGCrD/0bd1v1gWn/ACUHWP8AsFWH/o27rfoAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooA4Xwb4y8L2vgfw/b3HiTR4Z4tNt0kjkvo lZGESgggtkEH
tW3/AMJz4R/6GrRP/BhF/wDFVv0UAYH/AAnPhH/oatE/8GEX/wAVR/wnPhH/ AKGrRP8AwYRf
/FVv0UAYH/Cc+Ef+hq0T/wAGEX/xVH/Cc+Ef+hq0T/wYRf8AxVb9FAGB/wAJ z4R/6GrRP/Bh
F/8AFUf8Jz4R/wChq0T/AMGEX/xVb9FAGB/wnPhH/oatE/8ABhF/8VUD+LfB Ml4l23ibQzOk
bRK39oxcKxBIxuxyVH5V01FAHCRXXw2gt5YI/EOlBJAqjOt5aIKcqImMmYgD yAhUDAxVeNvh
01iLS78TaROiyTspGriNikrbmRyJMuDxncTkjJ5r0OigDim1T4dtqP25vEGj GXglDqy+UzBd
oYxb9hbbgbiM4A54qGK6+HEVtJAviTTSj7Mb9eLNGEYMojYykxgEA4UgcCu7 oouKxxEGo/Dq
3v8A7ZH4i0kP5jSiI6yDCrtncyxGTy1Y5JyFBySe5quX+GZFup8Q6YVgWNUU 68SuI33x5Hm4
YqehOcDgccV39FCdgOQOveASlso8SaMotrlrqLZqyqVkYsWOQ/IO9sqeOcYr Q/4Tnwj/ANDV
on/gwi/+KrfooGYH/Cc+Ef8AoatE/wDBhF/8VR/wnPhH/oatE/8ABhF/8VW/ RQBxesa1aa9q
XhxfDeuaVPdRaqcyIwukizZ3X3lR1PIDY+YevOMVufY/GH/Qd0P/AME03/yV UWu/8h7wn/2F
ZP8A0iuq6WrjsJnP/Y/GH/Qd0P8A8E03/wAlUfY/GH/Qd0P/AME03/yVXQUU xHP/AGPxh/0H
dD/8E03/AMlUfY/GH/Qd0P8A8E03/wAlV0FFAHP/AGPxh/0HdD/8E03/AMlU fY/GH/Qd0P8A
8E03/wAlV0FFAHP/AGPxh/0HdD/8E03/AMlUfY/GH/Qd0P8A8E03/wAlV0FF AHP/AGPxh/0H
dD/8E03/AMlUfY/GH/Qd0P8A8E03/wAlV0FFAHk+i2moz/ErxTbXOp+VemSH dd2FuseP9HhI
2pL5gHHBznuRjjHY/wDCP6n/ANDjrf8A35sv/keue0X/AJLD4p/66Q/+ksNe gVEtxowP+Ef1
P/ocdb/782X/AMj0f8I/qf8A0OOt/wDfmy/+R636KQzA/wCEf1P/AKHHW/8A vzZf/I9H/CP6
n/0OOt/9+bL/AOR636KAMD/hH9T/AOhx1v8A782X/wAj0f8ACP6n/wBDjrf/ AH5sv/ket+ig
DA/4R/U/+hx1v/vzZf8AyPR/wj+p/wDQ463/AN+bL/5HrfooAwP+Ef1P/ocd b/782X/yPR/w
j+p/9Djrf/fmy/8Aket+igDA/wCEf1P/AKHHW/8AvzZf/I9H/CP6n/0OOt/9 +bL/AOR636KA
MD/hH9T/AOhx1v8A782X/wAj0f8ACP6n/wBDjrf/AH5sv/ket+igDA/4R/U/ +hx1v/vzZf8A
yPR/wj+p/wDQ463/AN+bL/5HrfooAwP+Ef1P/ocdb/782X/yPR/wj+p/9Djr f/fmy/8Aket+
igDI0nQjpuoXd/Nqt9qFzcxRQs90IRtSMuVAEcaDrK3XPateiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACi
iigAooooAwtd/wCQ94T/AOwrJ/6RXVdLXNa7/wAh7wn/ANhWT/0iuq6WrjsJ hRRRTEFFFFAB
RRRQAUUUUAFFFFAHm+i/8lh8U/8AXSH/ANJYa9Arz/Rf+Sw+Kf8ArpD/AOks NegVEtxoKKKK
QwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAwtd/5D3hP/sKyf+kV1XS1kazpv9q6cbYTeTIssVxFIV3BZIpFkTcu RldyLkAgkZAI
PIyx4/0iyvRp/iBm0S/DbcXgIt5MLu3Rz4CMp5xkq3GCqniqiJnV0Vz/APwn fg//AKGvQ/8A
wYw//FUf8J34P/6GvQ//AAYw/wDxVUI6Ciuf/wCE78H/APQ16H/4MYf/AIqj /hO/B/8A0Neh
/wDgxh/+KoA6Ciuf/wCE78H/APQ16H/4MYf/AIqj/hO/B/8A0Neh/wDgxh/+ KoA6Ciuf/wCE
78H/APQ16H/4MYf/AIqj/hO/B/8A0Neh/wDgxh/+KoA6Ciuf/wCE78H/APQ1 6H/4MYf/AIqu
a1z4uaPFFJa+Gg+takS8cZhjb7NG4xy8mMFcZPy5yB2yDQBnaSmm6/8AFDxf DPBBe2TXKRSR
TxBkZo4YlIKsMHDofyyK6/8A4Qbwj/0Kuif+C+L/AOJrA+HGi3lnDcXuoN51 xcyvcPMVC5kk
Ys5AHABLHgf4E99US3GjA/4Qbwj/ANCron/gvi/+Jo/4Qbwj/wBCron/AIL4 v/ia36yPElxd
W+lRmyuTbTSXVvD5oRWKq8qq2AwIzgntS8hlf/hBvCP/AEKuif8Agvi/+Jo/ 4Qbwj/0Kuif+
C+L/AOJrm/7b12Dxi2nHVrUrDIsK2txKDNPH5YJm8mO33MScncsioMYwMGqG meL9Qk0+/wDt
OvxkRS2u+9RreeKBXkCv8yohTgn5JYwV2k7mGcC12Edn/wAIN4R/6FXRP/Bf F/8AE0f8IN4R
/wChV0T/AMF8X/xNctdeJr5dNgY+ITBCUuzaXwhiP9oPG4EKcrtbcCeIwpfG VwK0jqmtDV2u
PtkhQX32T+z/ACo9hBtfM67d+7f/ALWMcY70dLjsa/8Awg3hH/oVdE/8F8X/ AMTR/wAIN4R/
6FXRP/BfF/8AE1xaXdtqkOpPf+I0uEawtDczzWweKB/OctDKke392DwysQQp O9sVLYT2Mcuk
/YJ7OzsodWKiTSZFazu3Nu+NisCEJIwY0JwWPzFjkO1txen9aXOv/wCEG8I/ 9Cron/gvi/8A
iaP+EG8I/wDQq6J/4L4v/ia4rRvFusamLyJNajlEpsZIZo2hlaETTlHQhYwq sAANhMhU/wAb
V1vhWNrfVvEVvNqs99PHeR7ln8oOoMEeGIRVxu57Y+Xjvks/6+X+YFj/AIQb wj/0Kuif+C+L
/wCJo/4Qbwj/ANCron/gvi/+JrfopDMD/hBvCP8A0Kuif+C+L/4mj/hBvCP/ AEKuif8Agvi/
+JrfooAwP+EG8I/9Cron/gvi/wDiaP8AhBvCP/Qq6J/4L4v/AImt+igDA/4Q bwj/ANCron/g
vi/+Jo/4Qbwj/wBCron/AIL4v/ia36KAOV0LStO0fxxrVvpmn2tjA2m2LtHb QrEpbzboZIUA
ZwBz7CuqrAtP+Sg6x/2CrD/0bd1v0AFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB UF3ZWt9F5V1B
HMn911zU9FAHOHwNoBJIsgM9gelH/CC6B/z5iujoouxHOf8ACC6B/wA+Yo/4 QXQP+fMV0dFF
2Bzn/CC6B/z5ij/hBdA/58xXR0UXYHOf8ILoH/PmKr3vhPwxp1o91dW4SJMA kDcSSQAqqASz
EkAKASSQACTXV1HJBDM8TyxI7wvviZlBKNtK5X0O1mGR2JHei7A810jT9On1 XUbfWNCjsLeO
9S1t5VlD7HaGKRY5iBhXbzQAVJUtlM52GTtbPwrpFiSYbUcnOD2PqPeofD// ACG/Ff8A2FU/
9I7at+ndgIqqihUUKo6ADApaKKQwooooAKhurSC8jWO4TeiyJKBkjDKwZTx6 EA1NRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAYFp/yUHWP+wVYf8Ao27rfrAtP+Sg 6x/2CrD/ANG3
db9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA GB4f/wCQ34r/
AOwqn/pHbVv1geH/APkN+K/+wqn/AKR21b9ABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRR
QAUUUUAFFFFABRRRQBgWn/JQdY/7BVh/6Nu636wLT/koOsf9gqw/9G3db9AB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGB4f/AOQ34r/7Cqf+ kdtW/WB4f/5D
fiv/ALCqf+kdtW/QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFYk/ i3RYriW3iupL
2eFyk8enW8t40DA4xIIVYxnIOA2M4OOhwAbdFYP/AAl+m/8APprn/givf/jV H/CX6b/z6a5/
4Ir3/wCNUWYG9RWD/wAJfpv/AD6a5/4Ir3/41Ve98Q6LqNo9rdWGuPE+CQND vlIIIIZWEQKs
CAQwIIIBBBFFmBPaf8lB1j/sFWH/AKNu6368vg1PUJPFF+LtdZGmzWVtbtqE OjXqXFwsbzts
2rCBG5EoDOvYZQKX/dddB4n0i1t4re30/WYYIkCRxx6BeKqKBgAAQ4AA7U7C OiorB/4S/Tf+
fTXP/BFe/wDxqj/hL9N/59Nc/wDBFe//ABqlZjN6isSDxbostxFby3UllPM4 SCPUbeWzadic
YjEyqZDkjIXOMjPUZ26ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigDA8P/8A
Ib8V/wDYVT/0jtq36wPD/wDyG/Ff/YVT/wBI7at+gAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAxtammuNR0zRbeWSM3rSSXTRMUkW1jX5yj/wAJMjwoSPmAkJXBG5dt IorKyWG2hjhh
gjCxRRqFVFUYCgDgAAYwKwZ/+Sh6P/2Cr/8A9G2ldG6h0ZT0IxVWfLoLqeaW vj7UZdJlu4tU
0LU5Bpkl48VjbuTZyKFIWUCZ92dzDHyEleO+Np9e1tNBS6SQTyPdeU1x/wAI /eR+Qm0nJti5
lkyQFyCAN2f4TnQuvB1jcWENol1eW4jsTYNJEybpYsYXflSCVPIOOCT2JBnb QLt7MRSeJdYa
dJfMjuh5CunGCu1YhGy8nh1bnkYIGLdun9a/5COcv/GVzbwaaW8R+F7VbiC4 kN7IDLBO0bqo
Ef71NpO45XL4IIycZq2PEmu3em3Wq21tZ29vp8KSXNpcRuZZm8pZXVX3KI8B to3K2SDkAVua
d4ettOuYroXFzPcqkqvLMy5lMjKzMwCgZ+QYwAAO1Q6h4Wt9QuriQ3t7Bb3e Be2kLoIrrAC/
PlSwyoCnYy5AAOaOn9f1/WwdfIzJPFt5He6pA0EASG6gjs3w37xG8nzAwz94 eaCMdiOODS2O
ua5utr28l06Swurue1SGG2eOSIq0gRi5kYPny8EbV+9ntg6d74V0+/WUSvOp e+jvgyOAVkQI
ABx90hACDnOT7YjsvCcVpdLJJqmoXNvHLLNBazeUI4XkLEsNkascb2A3MwGf UAhPbTf/AICD
1MPTPG+o3VnPJc21qjlrX7OyBtrhxD5oIJ6qZuOehHoc3JPEt+ssN897o1pp 8161pBZ3Z2T3
AWTy2ZZTIF3cFgmwkgAZBPFxfBOmLpkVj5t1siuYLlH3gOHiVFAyB0IjAIxz k9OMSv4Uga4f
ZqN9FYSTefJpyGPyXkLbiclDIuW+YhXAznjk5btfT+tv+CHT+v6/r79ueCG6 t5be4ijmglQp
JHIoZXUjBBB4II4xXKaHq8sHifVvC9ytwwsfLlsp5yWaWB0BG5j97a4kQNyS E+YlgWbr6861
KR4/jfBsYjdpECn3BmnqWgO9oooqCgooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigDA8
P/8AIb8V/wDYVT/0jtq36wPD/wDyG/Ff/YVT/wBI7at+gAooooAKKKzNQ1uP T9RtrL7JczyT
o8paLYFijUqGZizDgbweMnrgGkBp0VxVv8UfD1zZXdzG5K26q4UXFud6swUN kS7Yxkj/AFhQ
89K0pPGNvHZW9yNL1N/NhkuGjSNCY44yAzE79rD5gRsLbhyu6nYDo6Kwv+Ep tDqn2RbW7aHz
BD9sCr5PmmPzAn3t2duDnbtycZzxVa38a21xaNMNL1JHZIZLeF1j33KzEhCm HIGSDneVx3xR
Zh5nTUVwM3jHVp7q2hhC2XmtdBlfSLi9dfLlCBSsLjbwTlslSeldC3ii3i1Z rCW0uwiSmB7z
aghEoi83b97f93vtxnjOaLaXDq12N2isDRfEUus6rND9guLS3FpFcRfaFUPI HZwG+ViMEKOD
hh3ArfosIKKKKBnL6zZT33jrRYrfU7vT3GmXzGW1WJmI820+U+YjjHOemeBz 1zof8I9qn/Q5
65/35sv/AJHqOf8A5KHo/wD2Cr//ANG2ldJVrYlnP/8ACPap/wBDnrn/AH5s v/kej/hHtU/6
HPXP+/Nl/wDI9dBRTA5//hHtU/6HPXP+/Nl/8j0f8I9qn/Q565/35sv/AJHr oKKAOf8A+Ee1
T/oc9c/782X/AMj0f8I9qn/Q565/35sv/keugooA5/8A4R7VP+hz1z/vzZf/ ACPR/wAI9qn/
AEOeuf8Afmy/+R66CigDn/8AhHtU/wChz1z/AL82X/yPXGPZT2PxmhiuNTu9 Qc6ZAwluliVg
PNn+UeWiDHGemeTz0x6nXnGq/wDJbrf/ALBNv/6OnoA7+iiisygooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigDkbTV4dF1/xIl7aar/AKRfpNE8Gl3M6On2W3TIaONl +8jDr2q//wAJ
hpn/AD663/4Ir3/41W/RQBgf8Jhpn/Prrf8A4Ir3/wCNUf8ACYaZ/wA+ut/+ CK9/+NVv0UAY
H/CYaZ/z663/AOCK9/8AjVVJtf0W41CO8ktdeLpBJb7P7DvNpVypOR5P+wP1 rqqKAOBhuNNg
sntl1PxngKiQMdIus26qchVH2fa/oTIHJHUms1bLR7cWtpZz+JbWxSC4juPI 0K4jebzWQldq
22xVIU8oFI4wckmvUKKL63A4QXGgrqf2tR4mWHzBMLMaLd+SJQnliT/Ubs7R jG7b3xnmmtL4
fNtFEg8TRvDbwwQzJot3vj8oko4zBgtk85BB6YrvaKLiPO1/suB4ZbTVPGNt cJ52+ZNCmdpf
NcO27fasPvDjAGOlX2v9BkkZ5YfEUhe6+1OG0S7wz+V5WOIOm3n6/lXa0UeQ +tziNIv9H0e5
knWTxRdM0KW6C40W6IjjQsVUbYB03Hk5J7k1sf8ACYaZ/wA+ut/+CK9/+NVv 0UXuKxgf8Jhp
n/Prrf8A4Ir3/wCNUf8ACYaZ/wA+ut/+CK9/+NVv0UDOYtdSg1Tx3pM9vHdI i6ZfoRc2ktu2
fNszwsiqSOeuMdfQ119c3P8A8lD0f/sFX/8A6NtK6SrWxLCiiimAUUUUAFFF FABRRRQAV5xq
v/Jbrf8A7BNv/wCjp69HrzjVf+S3W/8A2Cbf/wBHT0Ad/RRRWZQUUUUAFFFF ABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF AGHdfu/H2iyv
8sb6fewKzcBpC9s4QH+8VjkYDrhGPQGukrI1TTf7Qjt3im8i8tJfPtZiu8Ry bWT5lyNylXdS
Mg4Y4KthhhP8Q4dLuWtfEujajpUqhj58cTXdtJhsDY8YLcgg/Mi9x1FVFiZ2 lFcZ/wALV8H/
APQQu/8AwWXX/wAbo/4Wr4P/AOghd/8Agsuv/jdUI7OiuM/4Wr4P/wCghd/+ Cy6/+N0f8LV8
H/8AQQu//BZdf/G6AOzorjP+Fq+D/wDoIXf/AILLr/43R/wtXwf/ANBC7/8A BZdf/G6AOzor
jP8Ahavg/wD6CF3/AOCy6/8AjdH/AAtXwf8A9BC7/wDBZdf/ABugDs68wurt bz45TLHHIBZ2
VtbSOy/KXJklwD/uyL6H+dSap8XYZBLb+GdFvtRuQQouLiI29uu5Thjvw5AP UbR0PPTJ4B8P
6lBfXWsatPJcXl2/mXMkowWfAAwOigAAADgAD0yRgeh0UUVmUFFFFABRRRQA UUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UySKOZCksaSI
eqsMin0UAZ39g6V/z4w/lR/YOlf8+MP5Vo0UXYGd/YOlf8+MP5Uf2DpX/PjD +VaNFF2Bnf2D
pX/PjD+VH9g6V/z4w/lWjRRdgZ39g6V/z4w/lR/YOlf8+MP5Vo0UXYFKHR9P t5N8VpErYxkC
rgAUAAAAcAClooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKAP//Z
--------------070405080900080906050104
Content-Type: image/jpeg;
name="client-states.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="client-states.jpg"
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAJJAi8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3eiiisygooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAw2D+I9SvrAzT22n6fKsNx5EzRTXEpjSQAOhDJGqy IflIZm4OFUiT
O17RPBPh+yF1f+FbG8LCQlzZRzzSFI2kYs7/ADOxCHkkkk8nkmtTwX/yAbj/ ALCuo/8ApbNS
+LdCutesYYLWSFGQy5MpIHzQyRjoD3cfhmrSF11MC7svAdvCjweCtOvGkjgk ijg022DP5zlE
A37QDkc5IxQtl4CSDfe+DNNsHWV4p4rjTbfdAViMpLFNykbBkFSev1xav/C2 qpql3d6c1lLE
z2s1vbzytFtZJmkkUsEbAJOQcHkkYxin3fhTUdZjkl1CS1tp7qaRpkt5GkWF DbvCoViq7zlg
xyF6kduWtr/15C+1Z7af8EoLZeCEhuZLzwDaWLRWz3ccdxpdtuniXG5k2k4I yuVbaw3DIqfU
9I8EabJNCPBGnXU8fkARQadbAuZnKIAX2jqpzkipbjQfE+s3NwNWbSordrGe 0hNtJIzIzqg3
sGQZBK/dyNuT8z5GE1Lw3rGs2d3NqFjo8tzM9oPsL3DyW7xwyFyGcxZ+bceN hAwOuaNNP66/
5f10Frbz/Ugn0jwrAlsn/Ctbd764V5BYpYWXmIiEAszb/Lxll4Dk/N04OILi w8LQ3VrDF8Ll
nF0u6F106yj3fLuIKySKykdwwHIrUu9AvZtKsLdPDPhoJbl9tmLh41tmJ+WS CZYco3XoinJB
DDHOnaaNewjQzcXQnewRxNI7MWcsm0YJyWx6scnqcmn/AF/X9f5DOYhh+Hss 97D/AMIdpqSW
dtJcuG0uD5lR3RgpHBbMZ444I98S3en+CbaWYQ+ArK8htVVrue20y2KW2VDY YMQzEKQxCBjg
jjJAMlx4J1GSw1hYri1S7uUf7JISxVWMk7EPx0KTbTjPf0FWr/w7rPl3tnYv C1rfOsrTDUJr
Sa1kCKhKmJSZF+UNtLLzkHg8Jj6mgPBPhjaHstIt9PZh/rtLJspGX0LwlWK9 DtJxkA4yBTNP
1Y2+uS+G9QuRNqEMCXMM+0L9ohZmUFgAAJAUYMBweGAGSidBBG0VvHG7mRkU KXPViB1rgPGk
i2fxI8JXccUfmvBdxyNtG50DQEKT1wCSR6ZPqaJJCTdtTu6KKKzKCiiigAoo ooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiqcmow w6nFYTK8bzpm
CRgNkrDJZFOfvhRuwcZGSM7X2gHNeGbnxJHpt2thpWlT2o1XUNkk+pyRO3+m TZyogYDnP8R9
eOlbP2zxh/0AtD/8HM3/AMi0ngv/AJANx/2FdR/9LZq6GtCTn/tnjD/oBaH/ AODmb/5Fo+2e
MP8AoBaH/wCDmb/5FroKKAOf+2eMP+gFof8A4OZv/kWj7Z4w/wCgFof/AIOZ v/kWugooA5/7
Z4w/6AWh/wDg5m/+RaPtnjD/AKAWh/8Ag5m/+Ra6CigDn/tnjD/oBaH/AODm b/5Fo+2eMP8A
oBaH/wCDmb/5FroKKAOf+2eMP+gFof8A4OZv/kWuJ8WTaxL478Kf2tY2NriO 78v7JePcbvmg
zndEmO3TOcnpjn1avOfiB/yPfg//AK53n/oVvQB31FU49Rhm1OWwhV5HgTM8 igbImOCqMc/f
KndgZwME43JuuVmUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxvhuw1nWPC+kanceL9YWe8so biRY4LMKGdAx
AzATjJ9a7KsDwN/yT7w3/wBgq1/9FLQAf8I/qf8A0OOt/wDfmy/+R6P+Ef1P /ocdb/782X/y
PW/RQBgf8I/qf/Q463/35sv/AJHo/wCEf1P/AKHHW/8AvzZf/I9b9FAGB/wj +p/9Djrf/fmy
/wDkej/hH9T/AOhx1v8A782X/wAj1v0UAYH/AAj+p/8AQ463/wB+bL/5Ho/4 R/U/+hx1v/vz
Zf8AyPW/RQBgf8I/qf8A0OOt/wDfmy/+R6P+Ef1P/ocdb/782X/yPW/RQBgf 8I/qf/Q463/3
5sv/AJHo/wCEf1P/AKHHW/8AvzZf/I9YkHiTVxcT+T9jW0tblFmSRJJJJFku 5Ijtcv8ALgKD
yGHYBRiq19r+qyM97JcW32ZrLUHhtYTJGy+UyqN7B/mPuu0qSRz1p2DrY6T/ AIR/U/8Aocdb
/wC/Nl/8j0f8I/qf/Q463/35sv8A5HrPbxJqMNtd6pNc6VHp6NcxRWzrIJg8 RYZ3AtvzsJKB
AQD1OOcu08R+IL28tY7ry7aey1R4bmFbfBmT7KZQu1J3APJ/ibnacDGKQHSf 8I/qf/Q463/3
5sv/AJHo/wCEf1P/AKHHW/8AvzZf/I9c3ba/r+uaTLFeLbad9rihntZGuY7b eryKPKDxzSv8
4O0SBUOTwucYltrq+tL/AE+xhubu1MGosLy3vZ2vAV+zs+I5d+9kOCR5mWBI O0ABadrb/wBf
1/XQW+xv/wDCP6n/ANDjrf8A35sv/kej/hH9T/6HHW/+/Nl/8j1zlh40126+ 1RPb2iTN9ikt
HeAqhiuJSmSolZiABkFhGx7otdF4afVGvdbTU72C5MV2qR+TA0QX9zGTgM7Y Bz09cnJzwWfX
+tv8wF/4R/U/+hx1v/vzZf8AyPWJr2h6jfI2hweK9YuLydA53xWgS1Td8szl YAwIZcoFIZmX
5SoVnTuqKQzC8CRtD4ZeJ5nndNS1BWlkChnIvJvmO0AZPXgAegFdLXPeC/8A kA3H/YV1H/0t
mroa0JCiiigAooooAKKKKACiiigArzn4gf8AI9+D/wDrnef+hW9ejV5z8QP+ R78H/wDXO8/9
Ct6ALFn4NtNL1BrJ31uSyuZZJre4h1e8HluxaR0lCyYHJYrJj5ujfPhpNf8A 4Q/TP+frW/8A
we3v/wAdrfqlrGoHStGvdQEJmNtC8vlBtu/aM4z2zWdyrGb/AMIfpn/P1rf/ AIPb3/47R/wh
+mf8/Wt/+D29/wDjtZ134zv7HVIrCXQpJpVVXufsguJxGHYhQrJAVLYGSHKA Z4J609vGN3Hb
yXcmkILRra4ubaRbrLOsWOHXZ8hbORgtx154oF5F7/hD9M/5+tb/APB7e/8A x2j/AIQ/TP8A
n61v/wAHt7/8dqprHjJtNmntrfTnurpLlbdETzXBzEJSzCKORlABxwp7dAeK 0vjuSC80uKfS
XtYb3YC968luQ7MQVTfGEJGCdrujEdFJwKFdgan/AAh+mf8AP1rf/g9vf/jt H/CH6Z/z9a3/
AOD29/8AjtYn9oeJ77T4Z5DdW8C3V0k0ukCGaVFSUqhKzJyoAfIRWc7Vx1Ip 6eK9Qt2u53Nr
e2kVjavC4ZoGlmkd1OYyjMpJGNg3MCoAUscUDNj/AIQ/TP8An61v/wAHt7/8 do/4Q/TP+frW
/wDwe3v/AMdrOsfGN/qtvZ/YdIh+0zJctKlxcvEsXkyCNhzFvJOcgFFPY4rb 8NXd5f8AhnTL
y/EYup7ZJJPLbcCSM5+6OvXGOM45607P+vn/AJCKv/CH6Z/z9a3/AOD29/8A jtH/AAh+mf8A
P1rf/g9vf/jtb9FIZgf8Ifpn/P1rf/g9vf8A47R/wh+mf8/Wt/8Ag9vf/jtb 9FAGB/wh+mf8
/Wt/+D29/wDjtH/CH6Z/z9a3/wCD29/+O1v0UAYH/CH6Z/z9a3/4Pb3/AOO0 f8Ifpn/P1rf/
AIPb3/47W/RQBgf8Ifpn/P1rf/g9vf8A47VfRLQab4w1ewhub6S2Wws5lS6v Zrja7SXIYgyM
xGQi9PQV09YFp/yUHWP+wVYf+jbugDfooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACsDwN/yT7w3/wBgq1/9FLW/WB4G/wCSfeG/+wVa/wDopaAN+iiigAooooAK KKKACiiigAoo
ooAqjTbFd+LK2G8gviJfmIYsCeOcMS31JNRf2JpP2m4uf7LsvPuQVnl+zpul BGCGOMtwB1q/
RQBQbQ9Ie7ubttKsTc3MZhnmNum+VCACrNjLLgDg8cUyDw/ottFHFb6Pp8Uc cqzIkdsihZFG
FcADhgOAeorSooAzo9A0aGC7gi0mwSG8JN1GtsgWcnrvGPm6nrSw6Do9taw2 sGk2MVvBL58U
UduipHJ/fUAYDcnkc1oUUAZtp4f0WwBFno+n2wJUnybZEyVbcDwOzcj35q5F Z2sFzPcxW0Mc
9xt86VEAaTaMLuPU4HAz0qaigAooooAxvBf/ACAbj/sK6j/6WzV0Ncr9ut/B 93fy6nKINHvr
oTRXOCIrWRwiNG4HCKzgyeZwpaR9207S/R2d7aajaR3djdQ3VtICUmgkDo3O OGHB5Bq0ST0U
UUwCiiigAooooAKKKKACvNvH00TfELwlAJEMqQ3btGGG5VLQAEj0JVsfQ+ld hrvizQPDUZfW
dXtLMhQwjkkHmMCcAhB8xGQeg7H0NebaRc3Hjf4gf8JDNp5t7JYVtbVHH71Y 1Zm3t6MxYkgd
AADnBoA9aqG7tIL6zmtLlN8EyFJFyRlSMEZHNTUVmUZd74e0zUL6O8uYHaZA qnbPIiyBTlRI
isFkAJJAYHGT61Tk8H6Y+ptdbGMUsM8M1u8jujCUqW2gtiMHBJCgZJzXQUUB 1uYY8IaMtq0A
huRumE5m+2z+d5gXZuEu/eDt+X73TjpSnwloplhdbaWPykVNkdzKiSBTlfMR WCyck/fB6mtu
ii4rIxJvCWjzHd5V1E/mSSiSC+nidTIdzgMjghSQDsB25GcZpZvCmjTJsNtL GohjhAguZYsL
G29CNjDDBsncPm5PODW1RQMzNO8PaXpWw2dsUKCUAtK7n94wd87ic5YA81a0 +wt9LsIbG0V1
t4V2xq8jSED03MScfjwOKs0UXAKKKKACiiigAooooAKKKKACsC0/5KDrH/YK sP8A0bd1v1gW
n/JQdY/7BVh/6Nu6AN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKwPA3/JPvDf
/YKtf/RS1v1geBv+SfeG/wDsFWv/AKKWgDfooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAR0WRGR1DIwwykZBHpXF6j8KfCWoTtONKt4ZGYlikYw2e vHrmu1oouB5b
o/wu8K6tZSXP9mwxbLq5ttvlq2fKmeLdnA67M47Zxz1rQ/4U34V/584f+/K1 0fg//kCXP/YV
1H/0smrfp3YrHnv/AApvwr/z5w/9+Vo/4U34V/584f8AvytehUUXYWPPf+FN +Ff+fOH/AL8r
R/wpvwr/AM+cP/fla9Coouwsee/8Kb8K/wDPnD/35Ws+b4XeFYvEFnpX9mwn 7Taz3Pm+Wvy+
U8K7cY5z52c542988epVgXf/ACUHR/8AsFX/AP6NtKLsLGLYfCrw5p1z50Fr GpI2tiIDI9P0
rrrHTbXT49lvEF9T3NW6KV2AUUUUDCiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KwLT/koOsf8AYKsP/Rt3W/WBaf8AJQdY/wCwVYf+jbugDfooooAKKKKACiii gAooooAKKKKA
CiiigAooooAKKKKACsDwN/yT7w3/ANgq1/8ARS1v1geBv+SfeG/+wVa/+ilo A36KKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDA8H/wDIEuf+ wrqP/pZNW/WB
4P8A+QJc/wDYV1H/ANLJq36ACiiigAooooAKwLv/AJKDo/8A2Cr/AP8ARtpW /WBd/wDJQdH/
AOwVf/8Ao20oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACsC0/
5KDrH/YKsP8A0bd1v1gWn/JQdY/7BVh/6Nu6AN+iiigAooooAKKKKACiiigA ooooAKKKKACi
iigAooooAKwPA3/JPvDf/YKtf/RS1v1geBv+SfeG/wDsFWv/AKKWgDfooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMDwf/yBLn/sK6j/AOlk 1b9YHg//AJAl
z/2FdR/9LJq36ACiiigAooooAKwLv/koOj/9gq//APRtpW/WBd/8lB0f/sFX /wD6NtKAN+ii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArAtP+Sg6x /wBgqw/9G3db
9YFp/wAlB1j/ALBVh/6Nu6AN+iiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKwPA3
/JPvDf8A2CrX/wBFLW/WB4G/5J94b/7BVr/6KWgDfooooAKKKKACiiigAooo oAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKAMDwf/AMgS5/7Cuo/+lk1b9YHg/wD5Alz/ ANhXUf8A0smr
foAKKKKACiiigArAu/8AkoOj/wDYKv8A/wBG2lb9YF3/AMlB0f8A7BV//wCj bSgDfooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwLT/koOsf9gqw /wDRt3W/WBaf
8lB1j/sFWH/o27oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA rA8Df8k+8N/9
gq1/9FLW/WB4G/5J94b/AOwVa/8AopaAN+iiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAwPB//IEuf+wrqP8A6WTVv1geD/8AkCXP/YV1H/0s mrfoAKKKKACi
iigArAu/+Sg6P/2Cr/8A9G2lb9YF3/yUHR/+wVf/APo20oA36KKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACsC0/5KDrH/AGCrD/0bd1v1gWn/ACUH WP8AsFWH/o27
oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Df8k+8N/wDY Ktf/AEUtb9YH
gb/kn3hv/sFWv/opaAN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiig
AooooAwPB/8AyBLn/sK6j/6WTVv1geD/APkCXP8A2FdR/wDSyat+gAooooAK KKKACsC7/wCS
g6P/ANgq/wD/AEbaVv1gXf8AyUHR/wDsFX//AKNtKAN+iiigAooooAKKKKAC iiigAooooAKK
KKACiiigAooooAKKKKACiiigArAtP+Sg6x/2CrD/ANG3db9YFp/yUHWP+wVY f+jbugDfoooo
AKKKKACiiigAooooAKKKKACiiigAorndOsIfF+nWus6k07WV5Ek1rYJO8cYg cBgJlUgSswI3
K25APlAPzM+Vq2meD9KvLi3X4eWl6trbrc3E1tp1ptiQ7uzsrE/IxwoNPl7i O3orjbPRvCF/
qs1pbfD6yktoZPLe/wDsFmIQdgfoW8w8MB9zqfxqOz0/wNeXEK/8IPYQ211u +x3kumW4iusK
W+TGWGVViN6rkDIzTcbbgnfY7asTwbBNa+B/D9vcRPDPFptukkcilWRhEoII PIIPasS4sPAV
vpsV8fBumOkuntqCIumW+4xrs+XnA3fOO+OvNLJo/hWC0ikn+GttFdTzeTBZ GwsjLKdpYkFX
KAABj8zDp6kZORoLna0Vwd1Y+FbaK2k/4VcsgncRYGm2SFJCxXYQ7rk5H3hl SCCGIqS2s/Ac
2sw6TN4J0+1vJd67ZtMtyEZUjcqWXcM4kGOxIPPTIo3C53FFcMbHwVNHbHT/ AABZ6jNNbrct
Bb6dahoo2yFLl2VRkggAEk4PHFbVn4R8IXtjBe6foVlZ+cgkiuLKD7HOgI7P HtdDjggEcEg8
EijlC5v0VgR340HXLTQL26aaO8jkk0+aVi0mEKhopGP3iN67XJywyG+Zd0m/ UtWGFFFFABRR
RQAUVx0Pi+8FxJGunia3guFS4nlugrqr3MkK7FWPDY2ZwSvGOWPWG98Vanve 4W1Fvp/2S8lh
aOdWklMRUAsGQhD1IHzjB59KLB1sdvRXNr4lvfLu75tLiGkwCcC5a9VX3REg 70YBVUlWAbee
xIGTjJtfGuo6hLZ7bCK1EWoPb3qSPKp8sW5lBUSQq3Q55VeVGCQc0WA7qivP Ljxrquq6QxtN
L1Owkkmt/JlggYO8byKpUG5iSMSEHoC69fmrVn17VdG06CM2Fze3AtZ7yf8A tK5hhlVI2XI/
cIyFsMMAYHHJBp2f9feJO7sjrqK5abxDf3GtWcNrapHpxv8A7K9wZQXkPks5 HlleFzj5g2cj
pjmuppdLhcKKKKBhRRRQBgeD/wDkCXP/AGFdR/8ASyat+sDwf/yBLn/sK6j/ AOlk1b9ABRRR
QAUUUUAFYF3/AMlB0f8A7BV//wCjbSt+sC7/AOSg6P8A9gq//wDRtpQBv0UU UAFFFFABRRXH
XnjS+tbXzl0USGa7ktrVElmlZ/LZw7usULsg+QYwG+9zjGaAOxorko/GF7Oi zw6G4t4zClz9
olaGWN5GCgLGyZIGQSWKnB6dqmufGUVpa/aJbNyNl4+yN9zHyJAmAAMncSPp nvQC12OnoriJ
PHl9Do0l7NoE0LxShZGmS6jgRNpbeXa2DgDGCfL2jjLVU1LxPrd2JH08GO2l isGhNjPBNNmW
VlcIXUxHIBGSxHygjqcFne39aiurXPQqK5GfXtV0bToIzYXN7cC1nvJ/7SuY YZVSNlyP3CMh
bDDAGBxyQalm8Q39xrVnDa2qR6cb/wCyvcGUF5D5LOR5ZXhc4+YNnI6Y5ot/ X4Bsr/13Opoo
ooGFFFFABRWTqd3cPqVpotlJ5FzeRSzNclQ3kxRmNXKg5BkJlQLkbRyx3bdj U9R8K+FdP025
v9R0aLUxbxtI0moZvZgoGdqvOWYDqQuQMknuaaVxHRUVxNtZfD+6g82PwhpY xeyWLK2lwhg6
BiT0+6QhwR6j3xXtofBElk93dfD61sY/sZvYftGnWhM8QAJ27GYAgMvDbTz9 cNRuF/6/A76s
S1gmXxxqtw0TiB9NskSQqdrMst0WAPQkBlyO24etZMOj+C7jUxaxeBLFrYzN AL8aZbmDzVzu
Xj5xgqRuK7cjGc4qaPQPBE91qFtbeDtJnnshkomnW4809whbAJBGDkgA9aLB c6uiuBt7XwhJ
5rXHw1gtIop1tnlmsLEgSMyqFwkjH+IHOMYB57VNZ23w6u9Ms9Q/4RbSIba5 tpbrdNpkK+Us
eN4cY4I3ds9Ppk5dLh1sdxRXH6bofhC/vFtZ/h/Z6e0kZlga70y2xMoIyRsL FSNy/K4U89OD
jXbwvDpg+0eHR9imT7tn5zrZuvdPKBKRbjzvRQwb5juBZWOULmzRWboOuWXi PRLXVrBmNvcx
hwrjDJkZ2sOxH/6sjmtKpGFFFFABRRRQAVgeOf8Akn3iT/sFXX/opq36wPHP /JPvEn/YKuv/
AEU1AHT1yXiDwc2uX+oXX2qWJpbSKGBUupUjZkZ2KzRqQro24KQcnBbGOtXf tnjD/oBaH/4O
Zv8A5Fo+2eMP+gFof/g5m/8AkWtBJ2M7TPDl3a+JbnUrjw/oDNcy7zfpcE3M KmJUKLmDkZUj
744PQdKZa6D4kjudIsp30x9I0whVdZXE8oCOgcjZtUgMMrk5IzuUfKdT7Z4w /wCgFof/AIOZ
v/kWj7Z4w/6AWh/+Dmb/AORaN9BLS5iv4U1q70OWwuxpuYNKk0212zOy3Abb 88mU/d8Rj5Rv
6nk45s/8I/df2D9hTwn4UihFx5jadvL28ox97d5C7HBwc+W2QMcZyNH7Z4w/ 6AWh/wDg5m/+
RaPtnjD/AKAWh/8Ag5m/+Rabbf8AXncLEVpoWoJo9jb3E6tLDfLclXuJJxGg YnYJHG98Z4LY
/AYFQS+FLqfXr++aeFI5/MaFlJLxuRBsbGMcNCT19PU4ufbPGH/QC0P/AMHM 3/yLR9s8Yf8A
QC0P/wAHM3/yLS/r8l+gf1/X3mTbeGtc03TYI4BZXUs1hDa3sX26a0CvHuIe KWNGcZ3EYwDw
OeoPUaPZTado9pZ3Fy9zNDGFeZ2Zi59SWJJ+pOazftnjD/oBaH/4OZv/AJFo +2eMP+gFof8A
4OZv/kWjrcDA+KO2BPDF4scZuItYCo5UEhWgm3DPXB2jP0HpXWnULdZrOB3x cXaloogCxIUZ
YnA4UZALHAyyjOWAPnvxFn16WDw8uqabpttB/a6FXtdQedi3kTcFWhQAYzzn sOOeNFdHvtP1
ya6n8S6rb22qNEsNxFHalYWwFS3cvCxVck7DnaWdlIDsDLMho7uisD/hH9T/ AOhx1v8A782X
/wAj0f8ACP6n/wBDjrf/AH5sv/kepGb9FYH/AAj+p/8AQ463/wB+bL/5Ho/4 R/U/+hx1v/vz
Zf8AyPQBcTw9paCYLa4EzK8n7xvmKyNKO/8AfZj+OOnFQHwnorT3ExtHLTpJ G6meTYFkwXCr
u2puIBO0DJ561F/wj+p/9Djrf/fmy/8Akej/AIR/U/8Aocdb/wC/Nl/8j0AS S+EtFnnuJZbW
RvtCuHjNxJ5alxh2RN21HOTllAbk88mlt/Cej2rBoobjzBcLdGR7yZ3aQJsy zM5LfLwQSQR1
BqL/AIR/U/8Aocdb/wC/Nl/8j0f8I/qf/Q463/35sv8A5HoAB4M0NbaS3W3u Fjcpgi9nDRBG
3Ksbb8xqDyFQge1W4/D2nJB5LJcTL5MkG64u5ZnMchBdSzsW5wO/GOMVU/4R /U/+hx1v/vzZ
f/I9H/CP6n/0OOt/9+bL/wCR6A63LX/CN6V/akeoi2cXEbB1xPIEDhdm/Zu2 7tpxuxnHGa1a
wP8AhH9T/wChx1v/AL82X/yPR/wj+p/9Djrf/fmy/wDkegRv0Vgf8I/qf/Q4 63/35sv/AJHo
/wCEf1P/AKHHW/8AvzZf/I9AzforA/4R/U/+hx1v/vzZf/I9H/CP6n/0OOt/ 9+bL/wCR6ADw
f/yBLn/sK6j/AOlk1b9UNG0pNF00WSXE9z+9lmeafbvd5JGkYnaqr95z0Aq/ QAUUUUAFFFFA
BWBd/wDJQdH/AOwVf/8Ao20rfrE1fSNRutYsdT0zULW1ntree3Zbm0adXWRo myNsiEEGIdz1
NAG3RWB9k8Xf9BzRP/BPL/8AJVH2Txd/0HNE/wDBPL/8lUAb9FYH2Txd/wBB zRP/AATy/wDy
VR9k8Xf9BzRP/BPL/wDJVAG/WXc+HtNurJLR4ZEjSZp0aG4kikSRixZldWDL nc3Q9CR04qp9
k8Xf9BzRP/BPL/8AJVH2Txd/0HNE/wDBPL/8lUANvvB2l3UVusCPbPAYthSR 9hEbhxvQMFc9
cMwJBJNTr4T0QXNxObMu1wsqSJJM7x7ZTmQKhYqoYjJwBk81F9k8Xf8AQc0T /wAE8v8A8lUf
ZPF3/Qc0T/wTy/8AyVQC02H/APCIaP8AZhD5d3uEnmi4+3z+fu27f9dv8zGO MbsY7UTeEdFn
QI0FwgEccQMN5NGcI+9TlXB3BiTu+9yeeaZ9k8Xf9BzRP/BPL/8AJVH2Txd/ 0HNE/wDBPL/8
lUCsW4/D2nJB5LJcTL5MkG64u5ZnMchBdSzsW5wO/GOMUn/CN6V/akeoi2cX EbB1xPIEDhdm
/Zu27tpxuxnHGaq/ZPF3/Qc0T/wTy/8AyVR9k8Xf9BzRP/BPL/8AJVAG/RWB 9k8Xf9BzRP8A
wTy//JVH2Txd/wBBzRP/AATy/wDyVQM36r3V7b2Xkm5k8tZpVhRip272+6Ce i5PAzjLFVHLA
HI+yeLv+g5on/gnl/wDkqqmqReIINMuG1LW9AazZPLljfQ5pBIG+XZs+0kuW JChQCWJAAJOK
AL+n/wDJQda/7BVh/wCjbutPXbGXU9Bv7GFkWW4geJC5IUEjAzjtXA+Fk8Y6 f4iv4p4dN1C6
Om2hP2m6ktmhi8678tGIWbzHC8Md3YfNIcu3XfbPGH/QC0P/AMHM3/yLVoRm HwhfrLp8sM9s
pjuriS6UlsSIxmMeDj7ymXntgn0FRJ4a16+0SOx1BNNtmtNMeyt/s9y8wldk Vd7ExpsAC9AG
zu68c7H2zxh/0AtD/wDBzN/8i0fbPGH/AEAtD/8ABzN/8i01pcXVPsR2lj4h 0ySS0sl0xrDz
pZ1mmkk807yz+XsC4GGbG/ceB90mqum+EL7SbvT7uPXru8kgZ/OiuI4UjdZT ulIKRB8lsMMs
eRgnnNXvtnjD/oBaH/4OZv8A5Fo+2eMP+gFof/g5m/8AkWhAxlzoF1NY3cCy QhptTS8UljgI
roxB464U/pzWUvga7ZLW3a7hjtjpL2lxsBLLOUjQSJkYIwgyDj7o9TWx9s8Y f9ALQ/8Awczf
/ItH2zxh/wBALQ//AAczf/ItC0Vv62sHW/8AXcj07Tdck8QJqWpmG3EcJiZL XUZ5Y7gnGGML
KqRkYzxuPOM8ZPSVz/2zxh/0AtD/APBzN/8AItH2zxh/0AtD/wDBzN/8i0Ac z8N5FhuPEVhF
FHHbwatdiJEUKEUTuNoA4x6V31edfDQzNqfiNriOOOc6ndmRI3Lqree+QGIB Iz3wM+gr0Wol
uNBRRRSGFFFFABWB45/5J94k/wCwVdf+imrfrA8c/wDJPvEn/YKuv/RTUAdP RRRWhIUUUUAF
FFFABRRRQAUUUUAef/Ff/kH+HP8AsNJ/6Inrs7X/AI9If+ua/wAq4z4r/wDI P8Of9hpP/RE9
dna/8ekP/XNf5VMholoooqRhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUckEMzxPLEjv C++JmUEo20rl
fQ7WYZHYkd6kooAxNP8A+Sg61/2CrD/0bd10dc5p/wDyUHWv+wVYf+jbuujq 1sSFFFFMAooo
oAKKKKACiiigDzb4d/8AIb8Uf9ha8/8ASh69Brz74d/8hvxR/wBha8/9KHr0 GoluNBRRRSGF
FFFABWB45/5J94k/7BV1/wCimrfrA8c/8k+8Sf8AYKuv/RTUAdPRRRWhIUUU UAFFFFABRRRQ
AUUUUAef/Ff/AJB/hz/sNJ/6Inrs7X/j0h/65r/KuJ+LE0S23hqAyIJX1dXW MsNzKIJgSB6A
sufqPWttPBvhe6Rbi48N6PNPKN8kkljEzOx5JJK5JJ71Mho6CisD/hBvCP8A 0Kuif+C+L/4m
j/hBvCP/AEKuif8Agvi/+JqRm/RWB/wg3hH/AKFXRP8AwXxf/E0f8IN4R/6F XRP/AAXxf/E0
Ab9FYH/CDeEf+hV0T/wXxf8AxNH/AAg3hH/oVdE/8F8X/wATQBv0Vgf8IN4R /wChV0T/AMF8
X/xNH/CDeEf+hV0T/wAF8X/xNAG/RWB/wg3hH/oVdE/8F8X/AMTR/wAIN4R/ 6FXRP/BfF/8A
E0Ab9FYH/CDeEf8AoVdE/wDBfF/8TR/wg3hH/oVdE/8ABfF/8TQBv0Vgf8IN 4R/6FXRP/BfF
/wDE0f8ACDeEf+hV0T/wXxf/ABNAG/RWB/wg3hH/AKFXRP8AwXxf/E0f8IN4 R/6FXRP/AAXx
f/E0Ab9Fcx4RsbPTb/xPaWFrBa20eqrshgjCIubO2Jwo4HJJ/GunoAKKKKAC iiigAoornNaN
/deKNL0y11a606CWyuriRraOFmdke3VQfMRwBiRugHagDo6KwP8AhH9T/wCh x1v/AL82X/yP
R/wj+p/9Djrf/fmy/wDkegDforA/4R/U/wDocdb/AO/Nl/8AI9H/AAj+p/8A Q463/wB+bL/5
HoA36KwP+Ef1P/ocdb/782X/AMj0f8I/qf8A0OOt/wDfmy/+R6AN+isD/hH9 T/6HHW/+/Nl/
8j0f8I/qf/Q463/35sv/AJHoA36KwP8AhH9T/wChx1v/AL82X/yPR/wj+p/9 Djrf/fmy/wDk
egDforA/4R/U/wDocdb/AO/Nl/8AI9H/AAj+p/8AQ463/wB+bL/5HoA36KwP +Ef1P/ocdb/7
82X/AMj0f8I/qf8A0OOt/wDfmy/+R6AN+isD/hH9T/6HHW/+/Nl/8j0f8I/q f/Q463/35sv/
AJHoAk0//koOtf8AYKsP/Rt3XR1ymhW8tr411aGa8nvJF0qxzPOEDvma8PIR VXjpwB09ea6u
rWxIUUUUwCiiigAooooAKKKKAPNvh3/yG/FH/YWvP/Sh69Brzv4azRXGqeJJ 4JElik1S7dJE
YMrKbhyCCOoIr0SoluNBRRRSGFFFFABUc8EN1by29xEk0EqFJI5FDK6kYIIP BBHapKKAOc07
xHZeHbay0PxJqcdtfwwCOO7vZdqXyoFXzVkbgucgshO4En7y7Xbq6zdQ06y1 Wzezv7WK5t5B
ho5VyDXFz/B/wjLKXj06GMH+ERKQD7VSkKx6NRXmv/Cm/Cv/AD5w/wDflaP+ FN+Ff+fOH/vy
tO6FY9KorzX/AIU34V/584f+/K1zFp4Q8E3fiCXTxpJSy8qB4NSaJPJnaV5F QDuFYxkI5+Vz
0+9GZC6A9xorzX/hTfhX/nzh/wC/K0f8Kb8K/wDPnD/35Wi6Cx6VWbrHiDSP D9t9o1fUrWyj
2sy+fKFLheu0dWPI4GTyPWuH/wCFN+Ff+fOH/vytS2vwk8NWdylxBaxLIh4I iX6Gi6Cxz17r
B+IXjXT7uzs92jab5iW8kinfcF9u6QD+FcKAvcgk8ZAr1yNBHGqDOFAAzVLT 9GsdLUC1hC4G
AT1A9Kv1LdxoKKKKQwooooA4e78SeI0tYntbe1nmvL6a1to4rcExrE0mS2+e MOSEHAZcfMfm
6UReK9angF15enW0cBto54JTveRpZNhZHSQqoHYfPkgjPFdZc6Rpt7ZNZXen 2k9ozF2glhVo
yxO7JUjGcknPrVa/8OaTqItzLYwLLbbBBMkSB4lVgwVGx8q/KAQO1AnuYF34 0uLSyM/kwSus
WoSeWvGfs8oReScAc/MT+lVJPFPimGweOXToV1BJgCFhikkMewsStsl0SxGO 0mSDkKa7KPRt
Lhu57uLTbNLm4z50ywKHkz13NjJz71B/wjOgf2b/AGb/AGHpv2Df5n2X7JH5 W/8AvbMYz74o
6DZw+oanrOr+Y8N5G0M8enBbeCa4tPneZlceaMOgOGB+QNjAPTnYvb3WtCsI LSzW0hlisbm9
mW6uJ7/PlsvyCV2R+d/3iDjHQ10Vx4d0S7jEdzo+nzIIlgCyWqMBGpyqYI+6 DyB0Bp9tomk2
dsLa10uyggCOgiit0VQrHLDAGMHAyO+Kd/1/L+mJb3fkc3LrWo3mvWOy4tob Aan9l+zqGEzk
W7OSzbsEHI+Xb0AOe1dnVM6Rpp1Bb86faG9VQi3Hkr5gUdAGxnHJ/OrlLSwa 9QooooGFFFFA
GB4f/wCQ34r/AOwqn/pHbVv1geH/APkN+K/+wqn/AKR21b9ABRRRQAUUUUAF YF3/AMlB0f8A
7BV//wCjbSt+sC7/AOSg6P8A9gq//wDRtpQBv0UUUAFFFFABXCweJNXFxP5P 2NbS1uUWZJEk
kkkWS7kiO1y/y4Cg8hh2AUYruqqjTbFd+LK2G8gviJfmIYsCeOcMS31JNCA4 a+1/VZGe9kuL
b7M1lqDw2sJkjZfKZVG9g/zH3XaVJI561qN4k1GG2u9UmudKj09GuYorZ1kE weIsM7gW352E
lAgIB6nHPQf2JpP2m4uf7LsvPuQVnl+zpulBGCGOMtwB1obQ9Ie7ubttKsTc 3MZhnmNum+VC
ACrNjLLgDg8cUdLAcXaeI/EF7eWsd15dtPZao8NzCtvgzJ9lMoXak7gHk/xN ztOBjFVJvEPi
PWtIjiuLJbf7ZJazWxivBaFkeVRs8yGaWTaQf9YFX/d5xXeQeH9Ftoo4rfR9 PijjlWZEjtkU
LIowrgAcMBwD1FNPhrQTb3NudE03yLpxJcR/ZE2zMDkM4xhjnnJp3V0/T+vn /W4mrq39f1/X
Q5+9vda0KwgtLNbSGWKxub2Zbq4nv8+Wy/IJXZH53/eIOMdDSy61qN5r1jsu LaGwGp/Zfs6h
hM5Fuzks27BByPl29ADntXSW2iaTZ2wtrXS7KCAI6CKK3RVCscsMAYwcDI74 p50jTTqC350+
0N6qhFuPJXzAo6ANjOOT+dF9df61/wAtPxB7WX9af0y5RRRSGFFFFAGNqMU1 hrVvrsEUk0Ud
u9teQQKTI8ZZWWQAcyGMh8J1xLJty3yPf0bxDo3iG3M+j6naX0YVWfyJQxTc MgMOqnrwcHg1
armdd+H/AIa8RTtc32l27XTDmYRjcfrxz3/OmmKx11Fea/8ACm/Cv/PnD/35 Wj/hTfhX/nzh
/wC/K1V0Kx6VRXmv/Cm/Cv8Az5w/9+VrA8R+A/CWgrEkOinUbt5YEa3t441M aSyrErszEKMs
2FBPzEHoFdlLoLHtNFeW2Xwo8G6jaJdWtvC8T5AJgCkEEgqykAqwIIKkAggg gEVY/wCFN+Ff
+fOH/vytF0Fj0quD8T/FHRtMha00O6ttX1qRR5Nvbyb40zn55HXgKMcgHccg Acg1R/4U34V/
584f+/K1taR4B0TR0VILddqZ2gKFAB5I9xmjmQWM34X6G2jeHUjkTEoUKXAx 5ncsffPP4967
qmxxrEgRFCqOgFOqG7lBRRRQAUUUUAFFFFABRRRQAUUUUAV72yt9RtHtLuPz LeTAkjLEBwCD
tbHVTjBU8MCQQQSKxI4IbrxxrtvcRJNBLpFkkkcihldTLdggg8EEdq6OsC0/ 5KDrH/YKsP8A
0bd0Ab9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQBgeH/wDk
N+K/+wqn/pHbVv1geH/+Q34r/wCwqn/pHbVv0AFFFFABRRRQAVgXf/JQdH/7 BV//AOjbSt+s
C7/5KDo//YKv/wD0baUAb9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFF
FABXMeJrK3stEUwR7Wn1qwmlYsWZ3N5BySeTwAB6KqqMAADp6wPGH/IEtv8A sK6d/wClkNAG
3HBDC8rxRIjzPvlZVALttC5b1O1VGT2AHapKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigArAtP+Sg6x/2CrD/ANG3db9YFp/yUHWP+wVYf+jbugDfooooAKKKKACi iigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKAMDw/8A8hvxX/2FU/8ASO2rfrA8 P/8AIb8V/wDY
VT/0jtq36ACiiigAooooAKwLv/koOj/9gq//APRtpW/WBd/8lB0f/sFX/wD6 NtKAN+iiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArA8Yf8gS2/wCw rp3/AKWQ1v1g
eMP+QJbf9hXTv/SyGgDfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACsC0/5KDrH
/YKsP/Rt3W/WBaf8lB1j/sFWH/o27oA36KKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigDA8P8A/Ib8V/8AYVT/ANI7at+sDw//AMhvxX/2FU/9 I7at+gAooooA
KKKKACsC7/5KDo//AGCr/wD9G2lb9YF3/wAlB0f/ALBV/wD+jbSgDfooooAK KKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKwPGH/IEtv+wrp3/pZDW/WB4w /wCQJbf9hXTv
/SyGgDfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsC0/5KDrH/ AGCrD/0bd1v1
gWn/ACUHWP8AsFWH/o27oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigDA8P/8AIb8V/wDYVT/0jtq36wPD/wDyG/Ff/YVT/wBI7at+gAoo ooAKKKKACsC7
/wCSg6P/ANgq/wD/AEbaVv1gXf8AyUHR/wDsFX//AKNtKAN+iiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigArA8Yf8AIEtv+wrp3/pZDW/WB4w/5Alt /wBhXTv/AEsh
oA36KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArAtP8AkoOsf9gq w/8ARt3W/WBa
f8lB1j/sFWH/AKNu6AN+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiig
AooooAwPD/8AyG/Ff/YVT/0jtq36wPD/APyG/Ff/AGFU/wDSO2rfoAKKKKAC iiigArAu/wDk
oOj/APYKv/8A0baVv1gXf/JQdH/7BV//AOjbSgDfooooAKKKKACiiigAoooo AKKKKACiiigA
ooooAKKKKACiiigAooooAKwPGH/IEtv+wrp3/pZDW/WB4w/5Alt/2FdO/wDS yGgDfooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACsC0/5KDrH/YKsP8A0bd1v1gW n/JQdY/7BVh/
6Nu6AN+iiigAooooAKKKKACiii
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
|
Re: CDO library example fails to create resource [message #561144 is a reply to message #2223] |
Sat, 05 November 2005 06:38 |
|
>> I don't know what is done after the client sends the request before it
>> transitions to IDLE, but it can be interrupted.
>
>
> Nothing, I guess. Here is the respective code from ChannelImpl:
>
> public Object transmit(Request request)
> {
> [...]
> request.setChannel(this);
> short signalId = request.getSignalId();
> transmitShort(signalId);
>
> processCommEvent(REQUEST_START);
> request.request();
> flush();
Just one more idea: this "flush()" doesn't necessarily mean that it is
the first time the signal buffer is flushed! In case of big signals
bigger than the configured buffer size) there can be an indeterminate
number of preceding flushes. On the other hand, as I explained, the server
will start responding not earlier than after the last byte of the signal
has been received. I believe that we can exclude the case that this last
flush() is without effect at all, because an implicit flush only happens
when the buffer is full *and* more data needs to be buffered, so after
request.request() there is a guarantee that the buffer is not empty...
Any more ideas?
Cheers
/Eike
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
| | |
Re: CDO library example fails to create resource [message #561220 is a reply to message #2285] |
Tue, 08 November 2005 07:08 |
|
Mark,
See my comments inline...
geib schrieb:
> Eike,
>
> Some more information for you.
>
> As you know we are running the old CDO in production. I watch the server
> and client logs pretty carefully and find that the only excpetions that
> occur seem to be related to similar problems.
>
> On the server I only see "timeout while waiting for response"
> exceptions. In this case it looks like the server missed a message from
> the client.
Are you sure that this message occured in the server log (not client or combined)?
In general Net4j doesn't permit requests from server to client except that
it doesn't imply a response. In other words, only (unacknowledged) notifications
are allowed in this direction.
> On the client side I always see "already requesting" exceptions. This
> looks the client missed a response from the server.
A missed response from the server (out-of-sequence errors in the protocol layer)
can be one reason for AlreadyRequestingException. But originally it has been
introduced to detect multithreading problems in the client, like 2 threads
that use the same channel in an unsynchronized manner.
> A couple of times I have looked at the logs for both sides and see that
> the 'missing' messages were sent, just not received by the other side.
>
> Now in the new CDO it seems that the messages are not missed but may
> arrive when they are not expected. Does this point to a common problem
> with different symptoms.??
Maybe. The state machines have been introduced to Net4j to better be able to detect
defects in these areas:
- Protocol implementations (like CDO)
- Client usage (like concurrency problems)
- Setup problems (like swapping client and server, in the extreme case)
Are you able to reproduce these problems?
I believe the most important influence is whether server initiated signals
are enabled or not. In CDO these are the InvalidationNotification. Does the problem
persist, if you switch off this feature?
Cheers
/Eike
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
|
Re: CDO library example fails to create resource [message #561237 is a reply to message #2316] |
Tue, 08 November 2005 07:15 |
|
Mark,
Yes, the state machines of the Channel are implemented table-driven
and with externalized state. But I can see no problem in this fact alone.
What do you mean with 'real' state?
Maybe we should move the flush() call directly *into* the transition code,
so that it is more atomically inline with the state change itself...
Are you able to test that? For me it's a problem until we arrange to
reproduce the situation here...
Cheers
/Eike
geib schrieb:
> Eike,
>
> Maybe there is a problem in that the machinery of the state machine is
> separate from the state maintained by the state machine.
>
> For example, as soon as flush() is called the 'real' state of the
> machine has changed to IDLE, but the state machine object does not
> reflect this until processCommEvent() is called.
>
> Mark.
>
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
|
Re: CDO library example fails to create resource [message #561291 is a reply to message #2403] |
Tue, 08 November 2005 17:26 |
Mark Geib Messages: 432 Registered: July 2009 |
Senior Member |
|
|
See my comments inline..
Eike Stepper wrote:
> Mark,
> See my comments inline...
> geib schrieb:
>> Eike,
>>
>> Some more information for you.
>>
>> As you know we are running the old CDO in production. I watch the server
>> and client logs pretty carefully and find that the only excpetions that
>> occur seem to be related to similar problems.
>>
>> On the server I only see "timeout while waiting for response"
>> exceptions. In this case it looks like the server missed a message from
>> the client.
> Are you sure that this message occured in the server log (not client or
combined)?
> In general Net4j doesn't permit requests from server to client except that
> it doesn't imply a response. In other words, only (unacknowledged)
notifications
> are allowed in this direction.
Yes, they are in the server log. The server is on a separate machine from
clients.
>> On the client side I always see "already requesting" exceptions. This
>> looks the client missed a response from the server.
> A missed response from the server (out-of-sequence errors in the protocol
layer)
> can be one reason for AlreadyRequestingException. But originally it has been
> introduced to detect multithreading problems in the client, like 2 threads
> that use the same channel in an unsynchronized manner.
>> A couple of times I have looked at the logs for both sides and see that
>> the 'missing' messages were sent, just not received by the other side.
>>
>> Now in the new CDO it seems that the messages are not missed but may
>> arrive when they are not expected. Does this point to a common problem
>> with different symptoms.??
> Maybe. The state machines have been introduced to Net4j to better be able to
detect
> defects in these areas:
> - Protocol implementations (like CDO)
> - Client usage (like concurrency problems)
> - Setup problems (like swapping client and server, in the extreme case)
> Are you able to reproduce these problems?
They happen periodically, maybe once a week.
> I believe the most important influence is whether server initiated signals
> are enabled or not. In CDO these are the InvalidationNotification. Does the
problem
> persist, if you switch off this feature?
I am sorry I can't do this easily. We are in the process of rebuilding our
developement servers.
I think I have seen this happen with only one client connected, but I will
check.
> Cheers
> /Eike
Thanks,
Mark.
|
|
|
Re: CDO library example fails to create resource [message #561309 is a reply to message #2433] |
Tue, 08 November 2005 18:00 |
Mark Geib Messages: 432 Registered: July 2009 |
Senior Member |
|
|
Eike Stepper wrote:
> Mark,
> Yes, the state machines of the Channel are implemented table-driven
> and with externalized state. But I can see no problem in this fact alone.
> What do you mean with 'real' state?
It appears that the state machine object is simply keeping track of the
state, but it does not implement the logic of the machine. What I mean is
that once flush() returns the thread of execution is actually in the IDLE
state, but the state machine is not aware of this. So there is this window
where the thread 'could' accept a response with no problem, but the state
machine does not allow it because it does not realize the state has
changed.
> Maybe we should move the flush() call directly *into* the transition code,
> so that it is more atomically inline with the state change itself...
> Are you able to test that? For me it's a problem until we arrange to
> reproduce the situation here...
Yes, this would be easy. But I am having a similar problem in
SignalTaskImpl which is not so easy to fix...
[DEBUG] common.slave-1-channel-1:
[DEBUG] common.slave-1-channel-1:
------------------------------------------------------------ ---------
[DEBUG] common.slave-1-channel-1: Receiving indication ResourcePath
[DEBUG] common.slave-1-channel-1: Setting comm state: INDICATING
[DEBUG] common.slave-1-channel-1: Received String:
/org/eclipse/net4j/cdo/test/res1
[DEBUG] common.slave-1-channel-1: Requested path
/org/eclipse/net4j/cdo/test/res1
[DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
[DEBUG] common.slave-1-channel-1: Transmitting short: -4
[DEBUG] common.slave-1-channel-1:
[DEBUG] common.slave-1-channel-1:
------------------------------------------------------------ ---------
[DEBUG] common.slave-1-channel-1: Transmitting response ResourcePath
[DEBUG] common.slave-1-channel-1: Setting comm state: RESPONDING
[DEBUG] common.server.mapper: SELECT RID FROM CDO_RESOURCE WHERE
PATH=/org/eclipse/net4j/cdo/test/res1
[DEBUG] common.server.mapper: SELECT MAX(OID) FROM CDO_OBJECT WHERE OID
BETWEEN 281474976710657 AND 562949953421312
[DEBUG] common.server.mapper: Selected ResourceInfo(rid=1,
path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
[DEBUG] common.server.resourceManager: Registering ResourceInfo(rid=1,
path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
[DEBUG] common.slave-1-channel-1: Responding rid 1
[DEBUG] common.slave-1-channel-1: Transmitting int: 1
[DEBUG] common.slave-1-channel-1: flushing
[DEBUG] common.multiplexer: Scheduling channel common.slave-1-channel-1
[DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
[DEBUG] common.executorPool: checking in
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
common.executor-2 (queues = common.executorPool:2)
[DEBUG] common.slave-1-channel-1: Transmitting data: ......
[DEBUG] common.connector-channel-1: Received data: ......
[DEBUG] common.executorPool: checked out
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
common.executor-2 (queues = common.executorPool:2)
[DEBUG] common.executor-2: Set task =
org.eclipse.net4j.core.impl.SignalTaskImpl@e5376a
[DEBUG] common.connector-channel-1: Waiting for signal id
[DEBUG] common.connector-channel-1: Received short: -4
[DEBUG] common.connector-channel-1:
[DEBUG] common.connector-channel-1:
------------------------------------------------------------ ---------
[DEBUG] common.connector-channel-1: Receiving confirmation ResourcePath
[DEBUG] common.connector-channel-1: Setting comm state: IDLE
[DEBUG] common.executor-6: Validating
org.eclipse.net4j.core.impl.BlockingExecutorImpl
[DEBUG] common.executor-6: --> autoStart = true
[DEBUG] common.executor-6: --> executeCount = 0
[DEBUG] common.executor-6: --> singleton = false
[DEBUG] common.executor-6: --> state = STOPPED
[DEBUG] common.executor-6: Activating
[DEBUG] common.executorPool: created new object
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=10042026 ):
common.executor-6 (queues = common.executorPool:2)
[DEBUG] common.slave-1-channel-0: Setting comm state: IDLE
[DEBUG] common.executor-7: Validating
org.eclipse.net4j.core.impl.BlockingExecutorImpl
[DEBUG] common.executor-7: --> autoStart = true
[DEBUG] common.executor-7: --> executeCount = 0
[DEBUG] common.executor-7: --> singleton = false
[DEBUG] common.executor-7: --> state = STOPPED
[DEBUG] common.executor-7: Activating
[DEBUG] common.executorPool: checking in
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=9171253) :
common.executor-5 (queues = common.executorPool:3)
[DEBUG] common.executorPool: created new object
org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=15732239 ):
common.executor-7 (queues = common.executorPool:3)
[ERROR] common.connector-channel-1: Error while processing CommEvent
CONFIRM_START
org.eclipse.net4j.core.IllegalEventException: Illegal event CONFIRM_START
in state REQUESTING for channel common.connector-channel-1
at
org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:987)
at
org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:1)
at
org.eclipse.net4j.util.fsm.StateMachine.process(StateMachine .java:123)
at
org.eclipse.net4j.core.impl.ChannelImpl.processCommEvent(Cha nnelImpl.java:138)
at
org.eclipse.net4j.core.impl.SignalTaskImpl.execute(SignalTas kImpl.java:52)
at
org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.tryExecute(BlockingExecutorImpl.java:89)
at
org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.doWorkStep(BlockingExecutorImpl.java:73)
at org.eclipse.net4j.util.thread.Worker.run(Worker.java:140)
[DEBUG] common.connector-channel-1: Received int: 1
[DEBUG] common.connector-channel-1: Responded rid 1
> Cheers
> /Eike
> geib schrieb:
>> Eike,
>>
>> Maybe there is a problem in that the machinery of the state machine is
>> separate from the state maintained by the state machine.
>>
>> For example, as soon as flush() is called the 'real' state of the
>> machine has changed to IDLE, but the state machine object does not
>> reflect this until processCommEvent() is called.
>>
>> Mark.
>>
|
|
|
Re: CDO library example fails to create resource [message #561327 is a reply to message #2548] |
Tue, 08 November 2005 18:29 |
|
Mark,
The line "[ERROR] common.connector-channel-1: Error while processing CommEvent ..."
again makes me think that Spring containers are not configured correctly.
At the server side the connection endpoints are called "slave".
There shouldn't be a "connector-X".
Can you send me your config files?
Cheers
/Eike
geib schrieb:
> Eike Stepper wrote:
>
>> Mark,
>
>
>> Yes, the state machines of the Channel are implemented table-driven
>> and with externalized state. But I can see no problem in this fact alone.
>> What do you mean with 'real' state?
>
>
>
> It appears that the state machine object is simply keeping track of the
> state, but it does not implement the logic of the machine. What I mean
> is that once flush() returns the thread of execution is actually in the
> IDLE state, but the state machine is not aware of this. So there is this
> window where the thread 'could' accept a response with no problem, but
> the state machine does not allow it because it does not realize the
> state has changed.
>
>
>> Maybe we should move the flush() call directly *into* the transition
>> code,
>> so that it is more atomically inline with the state change itself...
>
>
>> Are you able to test that? For me it's a problem until we arrange to
>> reproduce the situation here...
>
>
> Yes, this would be easy. But I am having a similar problem in
> SignalTaskImpl which is not so easy to fix...
>
> [DEBUG] common.slave-1-channel-1:
> [DEBUG] common.slave-1-channel-1:
> ------------------------------------------------------------ ---------
> [DEBUG] common.slave-1-channel-1: Receiving indication ResourcePath
> [DEBUG] common.slave-1-channel-1: Setting comm state: INDICATING
> [DEBUG] common.slave-1-channel-1: Received String:
> /org/eclipse/net4j/cdo/test/res1
> [DEBUG] common.slave-1-channel-1: Requested path
> /org/eclipse/net4j/cdo/test/res1
> [DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
> [DEBUG] common.slave-1-channel-1: Transmitting short: -4
> [DEBUG] common.slave-1-channel-1:
> [DEBUG] common.slave-1-channel-1:
> ------------------------------------------------------------ ---------
> [DEBUG] common.slave-1-channel-1: Transmitting response ResourcePath
> [DEBUG] common.slave-1-channel-1: Setting comm state: RESPONDING
> [DEBUG] common.server.mapper: SELECT RID FROM CDO_RESOURCE WHERE
> PATH=/org/eclipse/net4j/cdo/test/res1
> [DEBUG] common.server.mapper: SELECT MAX(OID) FROM CDO_OBJECT WHERE OID
> BETWEEN 281474976710657 AND 562949953421312
> [DEBUG] common.server.mapper: Selected ResourceInfo(rid=1,
> path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
> [DEBUG] common.server.resourceManager: Registering ResourceInfo(rid=1,
> path=/org/eclipse/net4j/cdo/test/res1, nextOidFragment=9)
> [DEBUG] common.slave-1-channel-1: Responding rid 1
> [DEBUG] common.slave-1-channel-1: Transmitting int: 1
> [DEBUG] common.slave-1-channel-1: flushing
> [DEBUG] common.multiplexer: Scheduling channel common.slave-1-channel-1
> [DEBUG] common.slave-1-channel-1: Setting comm state: IDLE
> [DEBUG] common.executorPool: checking in
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
> common.executor-2 (queues = common.executorPool:2)
> [DEBUG] common.slave-1-channel-1: Transmitting data: ......
> [DEBUG] common.connector-channel-1: Received data: ......
> [DEBUG] common.executorPool: checked out
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=5557177) :
> common.executor-2 (queues = common.executorPool:2)
> [DEBUG] common.executor-2: Set task =
> org.eclipse.net4j.core.impl.SignalTaskImpl@e5376a
> [DEBUG] common.connector-channel-1: Waiting for signal id
> [DEBUG] common.connector-channel-1: Received short: -4
> [DEBUG] common.connector-channel-1:
> [DEBUG] common.connector-channel-1:
> ------------------------------------------------------------ ---------
> [DEBUG] common.connector-channel-1: Receiving confirmation ResourcePath
> [DEBUG] common.connector-channel-1: Setting comm state: IDLE
> [DEBUG] common.executor-6: Validating
> org.eclipse.net4j.core.impl.BlockingExecutorImpl
> [DEBUG] common.executor-6: --> autoStart = true
> [DEBUG] common.executor-6: --> executeCount = 0
> [DEBUG] common.executor-6: --> singleton = false
> [DEBUG] common.executor-6: --> state = STOPPED
> [DEBUG] common.executor-6: Activating
> [DEBUG] common.executorPool: created new object
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=10042026 ):
> common.executor-6 (queues = common.executorPool:2)
> [DEBUG] common.slave-1-channel-0: Setting comm state: IDLE
> [DEBUG] common.executor-7: Validating
> org.eclipse.net4j.core.impl.BlockingExecutorImpl
> [DEBUG] common.executor-7: --> autoStart = true
> [DEBUG] common.executor-7: --> executeCount = 0
> [DEBUG] common.executor-7: --> singleton = false
> [DEBUG] common.executor-7: --> state = STOPPED
> [DEBUG] common.executor-7: Activating
> [DEBUG] common.executorPool: checking in
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=9171253) :
> common.executor-5 (queues = common.executorPool:3)
> [DEBUG] common.executorPool: created new object
> org.eclipse.net4j.core.impl.BlockingExecutorImpl(id=15732239 ):
> common.executor-7 (queues = common.executorPool:3)
> [ERROR] common.connector-channel-1: Error while processing CommEvent
> CONFIRM_START
> org.eclipse.net4j.core.IllegalEventException: Illegal event
> CONFIRM_START in state REQUESTING for channel common.connector-channel-1
> at
> org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:987)
> at
> org.eclipse.net4j.core.impl.ChannelImpl$1.process(ChannelImp l.java:1)
> at
> org.eclipse.net4j.util.fsm.StateMachine.process(StateMachine .java:123)
> at
> org.eclipse.net4j.core.impl.ChannelImpl.processCommEvent(Cha nnelImpl.java:138)
>
> at
> org.eclipse.net4j.core.impl.SignalTaskImpl.execute(SignalTas kImpl.java:52)
> at
> org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.tryExecute(BlockingExecutorImpl.java:89)
>
> at
> org.eclipse.net4j.core.impl.BlockingExecutorImpl$WorkerThrea d.doWorkStep(BlockingExecutorImpl.java:73)
>
> at org.eclipse.net4j.util.thread.Worker.run(Worker.java:140)
> [DEBUG] common.connector-channel-1: Received int: 1
> [DEBUG] common.connector-channel-1: Responded rid 1
>
>
>> Cheers
>> /Eike
>
>
>
>
>> geib schrieb:
>>
>>> Eike,
>>>
>>> Maybe there is a problem in that the machinery of the state machine
>>> is separate from the state maintained by the state machine.
>>>
>>> For example, as soon as flush() is called the 'real' state of the
>>> machine has changed to IDLE, but the state machine object does not
>>> reflect this until processCommEvent() is called.
>>>
>>> Mark.
>>>
>
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
| |
Goto Forum:
Current Time: Sat Nov 09 00:53:58 GMT 2024
Powered by FUDForum. Page generated in 0.07582 seconds
|