[PATCH] udev enhancements to use kernel event queue

Steven Dake (sdake@mvista.com)
Thu, 12 Jun 2003 12:10:48 -0700


This is a MIME-formatted message. If you see this text it means that your
E-mail software does not support MIME-formatted messages.

--=_courier-23405-1055445208-0001-2
Content-Type: text/plain; charset=iso-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Folks,

I have been looking at the udev idea that Greg KH has developed.
Userland device enumeration definately is the way to go, however, there
are some problems with using /sbin/hotplug to transmit device
enumeration events:

1) performance of fork/exec with lots of devices is very poor
2) lots of processes can be forked with no policy to control how many
are forked at once potentially leading to OOM
3) /sbin/hotplug events can occur out of order, eg: remove event occurs,
/sbin/hotplug sleeps waiting for something, insert event occurs and
completes immediately. Then the remove event completes, after the
insert, resulting in out-of-order completion and a broken /dev. I have
seen this several times with udev.
4) early device enumeration (character devices, etc) are missed because
/sbin/hotplug is not available during early device init.

To solve these problems, I've developed a driver and some minor
modifications to the lib/kobject.c to queue these events and allow a
user space program to read the events at its leisure. The driver
supports poll/select for effecient use of the processor.

The feature is called the System Device Enumeration Event Queue. I've
attached a tarball which includes udev-0.1 modified to use the SDEQ, a
kernel patch against linux 2.5.70 that implements the SDEQ, and a
test/library that tests the SDEQ functionality.

To jump right in try these steps:
1) apply the SDEQ patch
2) configure CONFIG_SDEQ on in config/general
3) make in the udev-0.1 directory
4) mkdir /newdevs (this is where the devices are enumerated)
5) reboot with new kernel
6) mount sysfs in /sys
7) mknod /dev/sdeq c 10 222 (this creates the device node that is used
to communicate with the SDEQ)
7) run ./udev in udev-0.1 directory

Look in /newdevs for enumerated devices.

you can use fdisk on a disk device to see how dynamic device
creation/deletion works.

If it works for you or doesn't or you like the idea or don't, I've love
to hear about it

Thanks
-steve

--=_courier-23405-1055445208-0001-2
Content-Type: application/x-gzip; name="sdeq.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="sdeq.tar.gz"

H4sIAA3Q5T4AA+w9+3vaxrL9VfwVU6dNwAbMy3Zs1/mCQbZ1y8PlkTTntp+ODMLoWiAqCae+
bf73O7O7klYgwE5oes495vtipH3Mzs5rZ3ZniTc0f9v/5q/9FAqVwtHRAX4XCkeHldi3+HyD
BUfFSql4VKZ2h1QNB38xXuwz93zDBfgaQ/0rfjzi/93M8Afjv0wMGP8PDr4JeR3/lvhfPEAZ
+KZQLJK4fF3+u47jr2u3qf7f9CPz37am899zpfxB/qiQo4o8K//iMQpF1OgFvY/0v3x0cFgM
+F85JDuBD0Xkf2EL89v4+Q/X/6E1GkFu3nJB5v5+3RnMJ+bUN3zLme4PzXtrYHp5/3cfloRk
ddtULpd7JFil6UyhaTxA6RCKr08KhZPyayihcKT29vaeMqby3hzCf82nABUoHp5UDk8OShzQ
27eQqxSPs0ewx7/evk2BopSKx3AGBGJ/4gzNibc/+Wjcm0rzPf4FVgQjy8VC14T5zHaMIetW
KoTdZv7At5Wm6XnGrQkzw/Os6S345mA8dWzn9gHSzeteBgbO1Hcdm/cuhr3vLZTA/bHnDT2L
yOAbrASutVrzEsaOD95HYwbeg+cjKkPXujfdVI5glBZhGAghAYR1Owbj3rBs48ayLf8htRfr
jQQdWSNH6fIR6oyYoE6RwC6jL1xoF22OdjnoZE1nc39/zr4Upe+ZKEDmvWkLBMGbz2aO68PI
cYE1Yv0rhVzp4EBRlI6JPe6RVVRvOwPDhrlnpiB1bk0N9wEpbpteXHY4YG//xvDM/bw1tfz8
IO99nIExHSZIyMrmJPFIwRWCH+vWNO5MwmQT+KDdssAnNlsW9srhOmFfDYQJ+jEBKRVPirKg
Z8so5tmKEHIFQDAm78DARgnF75lt+Ej+CT7+EjQazOb4Gsg7PjLCOTAxZnknBc7N/+S+S9fa
rQvtUm/1m9WMsncGU1QSbAMTc3Jj32G7vVi7bl39ibVjS4rzKMpzfm2iBW+1geq80TLNS6VH
01wCEVG8fHhSqkQUR5NyCHv4t1hkRE/BvWMNQdepsyA+e05TeSYFf6Aa7u+CRtX+2AwVnKuf
Kanfb3NzbsLufmrvhTVCZQWJsAiE8OWQM6fYxJwigQEhS61YZ+QxlvbGqHpAxowGHTj4MLNM
tJ7UBhRhSkN4oNygYkbvj2Ee4/NG5vFWG5jHGzGjXjcHUC5C8YiYVyhA8fjw+DHMEyDizCse
n1TKEfMK2QLyLls6LhPv9vZ3U3uwCwJDfGSvzLC+Y4Z1talU73FVgp8Yx7TJzDbDVSqEU537
Y8c9icFzRj4pXBbFYZBnrYJP10ezOoU6qj2kvSF+veXmPj9wJplYU8+ZuwO5Ohyy5sweXFwG
fDblpJHDgTnE3tjyEJ6os4KJeGDAYGy4xsBHGy9EVRgW6hS8wMx17q2h6XFoBtACA84I7tAy
mAMfBq5p+CauJLbpo7DfM9gfx9ZgzEQzkH5kuzX1HQSAQuhyYN7MwEFxgFvXmIhRqdamdUAU
k2xPYWBMxUABqmSpcBzLHwtYnI8zx7YGD8ECbeOoiI/lmvYDDs+A81EXCRSMho8j1zRDgp3C
gzNnw7vmEMnsWjdzRAIVHXHcxxUP3QprhMB9Dmw+HeIQpI9I1olHhKKXy1YfLs0pEsKG6/kN
4ggNnMWU9BcHpxJvjMjePFBzDuqC8AiZeuEgaCZ9p2DirHEUUgwS1FIwigCZBcQrbfiEuqC0
M6OeGUT6AXCtiDrLdLjSutBtX/TeVzsq4PN1p/1Oq6t1+Oc/q10sePUKqq06/vsA6s/XHbXb
hXYHtOZ1Q1PrHAZ27VRbPU3tovy3ao1+XWtdZuG834NWuwcNran1EGCvncXh1KCv1A3aFxxS
U+3UrrCseq41tN4HNvKF1mvRqBc4bBWuq52eVus3qh247neu210VCPG61q01qlpTrQvt01o4
Nqjv1FYPulfVRoMNXe33rhDMuYpIVc8bKgeKU6trHbXWI/TFUwClhrRAfBpZ6F6rNY0e1J9V
nEG18yFLlEAr3VV/6mMjrIR6tVm9xAmlIzpwSEnEQFLX+h21STi2L6DbP+/2tF6/p8Jlu11n
dO6qnXdaTe2eQqPd7XJQ2LTfVbM4Vq/KUEA4SCRsQ1PrdzVGLq3VUzud/nVPa7cycNV+j7RA
bKvYlbgpWNdusekjbdqdDwSZ6MJon4X3VyqWd4iUOMlep0oE6vY6Wq0nN2t3hCS1Oz1p3tBS
LxvapdqqqYRXm0C917pqBvmldamBxsd+X8WB+4wC2IbDQiT5uyScWcZN0C6gWn+n0Sx4D0Ah
6GpCYBgZa1eCD5Kcf0CF9sbO3B7CmAIDF5dMixxYNIhoXB+jsrYzveXAyABh88iCnAIu2VPH
z8JH10JLgSaPoK1SZr5MCMnAiBkdG8+D6j0qcc2Y3LjW8BYfm1UolIrl4yySo8qmQk4A+hDT
gT0fmvCD4U3258YAl3svP34j17Allbs9SRUeRhKJFWjX5raZWBWYjqQ6tGMrBppZU4wO7pIH
s7wBt+uJ1aPkSaGtt1lFwmi03vMqtNlzXKaYa4VrAUYk5K6JUkJXH5vGkD2dRhW8OfMA2F+s
+nRK4Bpat6dfqdV6mjWh1ZAByJzywZCrA7hD/1kfGIOxqfuwGw3Ny+SWAVl0MSSDRwVyo/nU
s26nfAWVMPN0FgpiHFeQW380LF9njiZDLIBM1NKpLjb8Ihl2B3PXFchSgdw4HN2Z4ZKcFn0t
Wolhl31lA4As1Nqlv0SXxf64HJvoz30JCMvBQP2xAFC9lBgNB5NhNqIqaTOgOhrSQMskJ/qF
A0qwgRHWN26ohOibSaQZQ1i/NX2dKMwlKwlaHKsZOmgT9KtcbyURkJqegDrz3a3BnDj3phCz
J8Nchpo8b0nJdtmXhBALuYS0xObHYq5EoYqhbAWaqw/Q2MaZIk2HZJn7+16ggLYplZ0xa5F3
PuJCoChnbB3Sm+16v6FmWQWqApWHesFKhYAH5eKVVTH6hj3YGysnKQqL6SUwOHGcI0vJW0rv
HNVSqUTwdqh2h55eJkxrAfaXCHtq749F7ZoY3l1olJTQ7qQ5hJdxa5SFSGcUXDrTCwYo92Zq
/u7Dt2fwcsHgsukqbLA/zyB93W400I/4E+ihU2+1O02CqnxikF3Tn7tThhqZ8pUaunWTwulD
LVCO5za3voqHfgMGSGnsxecxIHuotWu9Bovy9Uu1p6NH2GFu6wlNlHeHs5XmRNA3MGSKcoMB
E812CTi67gL8da+zEnhM754CvNl+p+oM8e4a4JK2rgY+NEcG9o2Dyala6121EW/5KWJymrfM
rGX0l5hiztNAUBKgJZSdJkhBnDBxZr5MgJEPjWSgK+iv6r6jU1ybZiZvNxPhibqWAIQkV/Gs
/zXRz02vnkMmIxQsIGpOvaj2G73MZxH7C9YoQeyllSCdOZU1O13YiMJnL2kJ/I5DSyhL4LfM
tJHrTDjbXiZ0ZjxiK12coStZF+u9iXVLkhdXxgSI+aWV9LHsf5KryOmMq6uOsaOOkZ9ea/db
vdiAhVUjPdWpjAarq6sGWyNUj/VoFtZHJloj27hdEBCxXirL0cou+xLLBkYLLDrQLfc3D4PX
tLQoUnmWw964nJ6tWk4lI9tqq4wcinLrYBSLJAlUnyN2xsMG9pI8TEj2aDpZ1kngh1HSYPaQ
5mYJXrIGuTfidUHOI8pmRO+FIRGfRCSwMaJ+ElBvPg3oh1P1HXcDCdeL+XondR3rk5gJa1BJ
mO0CA09XznAd3BWqtNaV3jSvdSIspFICB2+WQ9pM3HqVzrXLzGcQDdt/HJPGy+PlckLUl6UY
FmL6/EYhVhTWe2jaiX15E2k3gPaW04v7AVlgLwJjZYkauVxkuJ/O4URrFrKadvGFwZL47D/M
ECs6HoBd1mJm+OOggIcbrE18ZZQ5Hj0LvkV1Zws6zTtkJCoZNs4BEuh0eXGtV3vtplZjlCVJ
kgGfQavfaCwtfq12Uw1jAUVraT092sV5GQHIvQnZKhdKrhebNE4gehE2e0p2bLmTRDvpkbnJ
zerP+nW1dwU5KK4YMuzy30s9fkUkXv1SeLV+eIlTWYi9PBYFqdNaJGTNXJRFIYRMUYzhEKNH
y14me3ZpQYowknRhb+90UQ9WjPfRuDP1+UxHqTZddz7zLQxa0wvR50oFEYe9kQ8ZHfcmBnQz
F0vuIL0Tnc+la5mVZ3Qnjzt3/GW6s2z3CJPkKS8qDPJH0ip+fpbekWi6k+RRRlAyWSiwFt1G
9Vy/el+r1q5UvdrQLltZpmr8b0hE4TrQngSuIbc4Y/JvF/YpQs0V7X+AgtDYgIY/qp2W/r7a
adHRwE73YTOdTuiE7hVxhA+6dLLJCKnIZiFa0IVlJboymYi2TldIy2OW4kShUn++bnd6evdD
87zdEKYrMsDUjO8soXmqqa2umt65vG6QBGxOpaEJ7+cp/4flxjgbUmmWmq9PpRG76/vy5noC
9KRmy1kBSa2emhaQCGMhjaZwUjpYygt4XVhKCxh/QVoA2ZaRMTCfMwI+PyPgOR/gOR/gOR/g
OR/gOR/gy/IBXlijKaUUMj/9Sq+rF8huZOYLSgqemkvlYQ6irpPHpTZ0XQoMmfsbHrZtL2KM
5TVGIwcZDTKuQayhKEqxdLhUzTRY7324VnUNFa3Tw2arm1Svr9VqR1FKq5vwkwtFKa9ugsZE
AKqsGYrsQU8nc3WpKgdLSQiMdiKIUOKhJNFLWRl0/XqKpAharYgOfw0zFYSP02FuKF9L+BEX
iuCtyTNV2Q5mwEQhR2vONZaC/YQECTFsl2rkIfmmEhuVd2O7MUljxreflo4Xpb2ccNAYK7R2
DclxqdWg8PthWa5edcAG2KcD6XhvCn5gzQFJItjY0RqBXYZaXNVTOjejnu+Xu5YWEIpv+7OZ
hroVV3ei8krn3vL3f0QPaWTdJrraUXWSMx/VPjUZfqmv5Lwfn5SPIuf9uEQZ2fi3+JqnwQPc
zC17SJczDLgzUb5tcT8B/V7b3sfoboD+OXpodx55P+T5BC4h2mZ0dh4YFNuaWNwRpZR3x33I
pyC1J2ghkrJvHMemMPQRAcEONh+b9gy/YE0IYZGrPTFRjaeWN0HX2HQDP9ZbcJEZJO4Finlm
ceqBjz2MO7Fwb/H0WuDixY7puQfM4IRDennh5o4QypwNSG1x8KlQTp6ojksfG4iQJh+cufQs
ARqhkcfPKc/9fo+0/Ib8d9NDEIiccO4FcsQffKXZGPEUeQZOTpMf0YnXR8e9A29OUYMHGOzd
EyOJDmtutwT98iwCRx4gwgOfL8jBXFE9yIdnl4DY9R4GGyOqmUXxAVvBWaZ9cPGFXZ2jcIcm
7YpOj0SE3AAiDiEEQq4a7Uv9vH+hd6+0ix6KIRm1nR85KW3nFvlLsTg7ANkhbOvqef9SrJQs
r5+diWOcTJVVdIv1bvm4wK8uFF7TrahiqYAKwy+MsOixWIazNwCv4cfzqKzEyiqsLJVLoXhM
5wJFtXmu1tHVp0sDTPw73HoHqsZJ6UGamGpObszhEEnHmepldrAbU4MVFse2bvZFsJh4uSBW
v2xzYtXLRufgaJ3RWe4s3QMpnRReS/dAiuweSFFcMFvKMcTgb3pLWYZLVVHyZEIvY0WCpEhZ
hBSwux0osbS1x2LNG1Msn1L4+pHiYHHbZBTc6kARQ4jYdWCbBi2Y81kKcDVGTUQfFGiXnC3F
KF/mdEBxq2faI4Q/olME2vD02D0hy7BR+oZ5WjaIFIcVEqvDA0GKT4RlKhe/w3LV7l03+pfM
rRQGaJiO12Xgzz8Xq9idohRIZ1C0zIbejW6b01t/HGxO3nnouezS33ApDLYdmN/JbuNwleId
4QyKp3wROaQ5HB9lj8WtHmXm6kPzZn6b3vneOyE1p9avvvde/TLdyer6Rb9VoxhJ17NUR1do
PgUrLC0TydOHYG1HFb9QO3pX+4eqFAulCl3ZEXHGDVlcZ347FqsOs43MM5res8s7AYxWv6mr
rXfXSrlE3dHC3KBlQMtLDWcO29vm133kE0kijz52/JmNc0ON9nzhiBsDHmMsE1NcfKrwm09H
2XIhYDSfrxLdQhITZaPGT0LZuCTHaZynKzy1xNH26I5aMv/C7fVFEQj8YynAAH7icyoFM/EL
VYswsEOSdEGaSxTD4FTux7bQxXnUYi9+HsXtcrir/W3YKhMenZu/s6xbOu8mGqSlAKnwe6GQ
XZoqgzaybDvCVEYxdpqU1Dc4C5BjNcEMuScCzL2hgvwUlyvekXClw/I7dlQZTSYWty3dRwt2
u8VON7bZJbujCN7yaDInmRbhM+RZq7fU7EQRcmCxa3Kez3ajSCxLR6Xsa9grHR9ni4XgGuQn
EEe73/rOjE0Up0LUffkSopKZ4fKddeyCsqzQbVvi0ro+nCxCfXRn5jFGPr0XM0SKElPGHWM4
3MkudJPkTjRnOpQc5K7rTDOkf+LkwXRdx2VGi6hYLr4mKpYrRxEVn0xEMvy5z6Pg5xIwTj++
DK4l4WoK8hBrTV+2ril8QRWx1dBy06IeMA7FtfoueP+7L/wvfJh7Q398VJ6/6BdAHv/7H/T7
L0ffFIql8uHh8+9/fI1PnP/BQ36wzTHY739UKqv4XykdhL//cVAo0++/VMoHla/8+x//ofzf
xyWXH2lyvuNb6rGHmj3sAdXZzLYG/IYz77v5NPPxh5lrzzL5cI/LnQgGTm3zsG57Z3VbPKrb
cFIXkODLzum2dky3tVO6rRzSbe2MbntHdFs8odveAd0Wz+e2ejwnhHtbh3PbPJt7ytEchUep
aKvH84eWQ7s8UtGDt09HPd5ycbBXFC9lW//x4tFgulgU31QKy1n2F23K5sc7qRS/rYUBFz/o
Q4d79fFOLOWNvYyG+DAa6uTKu3TTdDT0TlMpRTo/fDmi48OE2xtA1zcU2vZIn56ygZWLuv4P
tdPGTgEwakLFXRXFczTMglyTEgljGFbs0MLv066sx/Z7edqcfPGIbwMjDNiDogRHTmMLk9kk
wENnanK5iUOW8tfOziBX5DNQZizkIoRY6xPgrRUKqiFdZC+f8B8u1YqCYnTtOnRlG2XUFnky
vByFRlGGDge65pYQ0ipIHVMWkSoInKLJ8IMKlsL6/TDIm+GvHouB+BbY9x5tf8Fi2mtQEssj
XUhU5XjQDMPIUkYIaz+lPv2rxU3/Xz7L/j/T86/q/x9Qnfj9v6PDAvP/D4+e/f+v8Yn8f873
p/j/clJjP8i4W/jRo785JHgOB57Dgedw4DkceA4HthgO/BAdYq8IERbvBpLTn1rIEmQXz0ci
fuCN0F3lV393gh8m/Q19yrbeqb/vMOd9l7UJQcZuS3ySRnj0Pds/FiKUp17PT0WOdvBLEBy5
7Mq0seQL9uTm8put4aHb6sv8G+65ppbvq8jESbx1ukCIx80rlrcWRkIbh19/T3QtSx5xgx67
r7+LHl7FE9mAj52rlGkXMieeS7di7n+3j7fus8L///If/ZY+G/z/8mFp2f8/Kj37/1/js+D/
j7/c/w9vN/3buP7buNW0vUtNW7zT9FlXmp6Doueg6Dkoeg6K/g2CIvnyEtKnI11Uku92LFSt
CkROPyOAON3gV58+3vHFpiJL9Guu/3H/L/jPBbY7Bvl/Qf5P0v//VD6K/v+fQrFM+T+lyuHz
///yNT4v5PyJwer8CeGrvUi9CD26Dc7ai1SqdtGoXnbpd6EGkLtNNerh+20qZdj2SSB4qVTw
dBL5ok6UluKklO/StVoGvksLIBnIRfUr+qRYPvsJxmQTyI1gV6r9v/a+tLuN42j3fmWf+yMm
kGMCCgBuWmzR8glFQhJeU6QCkFb0RjnMABiAYwIYZAYgxSz3t996qqp7erCIsqUoG+YkFjFL
r9W1L//SMtmXvPj8I5altl3f+Uf6/31s/bdHj4Avdncfr+u/fYmruP+9pJt9fiDw/T8/sP8P
Hu5t7z5+APl/Z+fBuv7fF7mW7D8xKel1HN18tj5A/x882F61/48ZNrD/uw8ePNqF/yeBwZr+
f5HLvIk2ifsfJFNm/GeTIX6Ew0wiLwkwnhizUwl6t+NwRMx/Gk2GYZeVJPwGFPVmt+KUD/QS
CQV7JNG8boLtl/ICQTzu09+dBEGoGj1eCObMjGlPhvF0qlGSmR0F60WyCOlMSY7IZh0NF5RR
cRBm7c7BIVBF35wf5jDusOc+PQsRDkUSSYocSJ001AgrmQHGpR9jLulIVGDJWFQThUuGWDfm
HP3X+JIfJCkNhxKYl02ScYbsYtyJ/ObQZJrvVtaJx1savoA+NOJVddkkf0+lJRXaWLjS0XF1
r8IYWU4ThZC8s5lJ+F/Qi6mBKQKYSb50w+vCsQgtYtkutNn+bNzVKNtkZPSptyhuZ6wwGE6L
gxj33GjDYDaO/zyLTL4bWNVAVOeFsbCOi16lvZAhTy9TDoHDCOzeGaxgNom6cZ+AYMkupcQd
0lSl2pzEJmswLiCENWbU2FVkRuFP2HEaK82N/pLQORrRqcQ9kqic8XfxCEG+4bgwySrDo5FF
FJ1cKD1IqkEbrycjrAZhr+fvnArJLqrcSMZ0hFPrkdGzUuURZiQsQsbGpBUYRWTPZgyx/Zm6
hxm7ZmFwVHt23qbmuVIhT4tuao4FbLvMwMKWS73A50iTWHq3LWgQRBRHHvDI82Eaf5h1/ygg
zpBEBgwd6Gc0wid6qiUwHMPCzqGTwrmom/wU8PbOjcEiBSQI50JgspzYhKsomjAEpGH3yngL
XMRJMoHQYQN6kRaSYCfK5jADwN0UOyqAMcJou9B5CAosXSY3pULsPmOoqrRjcYTFeqoc9lZc
j547c4wRNjMviD40WEyHOewXQMqaF2BFUxp+j/mZwgnPaN+MUUyqSE0Q23NsDbpjvcYkSkBD
WKc0CpFFebE3mhdvOW80jlQnisZmMmNtL082ppaSm3FQcgMrqRqczlUm2RCmKEt4FYniiRrp
D6P3QKiGleQEIQPecKiSk4xRrdXdL586q4h1glXeN6ML6pOG2No3HIHEQBhn9uV7yS+BOcbd
2TBMFc0BIFQPzrhRm6laoAt79CV06SFh5IyV64z+YyYxcWqwHqOIZO+egF9hGrQ7b6LghvV5
apSgQdiofzvV7iURxzovQj9O6dzRq9MEngMmLvhtgRWgljLcxXG+ivKo8ZxscK1TySehWL+I
0y3RqBZQuEWDy5GtnDrDiH+YJFfBbIL2Qxur7Lc/Cid8jjlBt6VYigbdqmOyC9+6r2Se3NFP
xAoyGXAQjxq2svzBMVwhNJMBnbRC/dkCHT3tXMfJLBveVgUw4ww5JkMzAEEI5la5E3VDnDbG
0zOCodvgJtrsySjs+hSXxwhaVOxG2y4QvWSfFXJoFziDxU2u66XFjPgAslUojnCWzCBxxJU+
TFIG1YSahs0GqtS5BQ4cWOdnyiygE+nVZg6ahx9tSabER882BLCQb7E+PI1kOExu0LpP2v2h
Ejh4A9vMGFsJo3gcdqKhcKE1Wd32YbtJG3l+3jwCi/hsllkT5wkvNJjDs2QiBXypI3rBPKgE
mnHjBOtQC44kRz4xr8vPcGEC85sknyAVBnDBJI2zCFh7MmPuJBpfx2kyFqQqDRXQASETzsoZ
DvHXn5FXsgeTXj+msZcxrYrbXt0jwglhEXHO40IPi/IpXI5FLcwtJyCya5Ym5zQyP/y6xd42
fpClXWRXLWQD6xrmDBgPM++QMZ+m2apGnKDCA5cCQCvm5MWxlK3AyA4BMuLf5FEAj5b6JIB6
rn/gMM63JgfQYshMWQ1BVGYRUVXVbKxrlAG/0ypsRdMuQGjrOkyZQDueOKfPZ5wpiNMHjSNl
goXZogUpimlLeGfqhBusf3DTMXrsyKy4hNwfeBcFN7NIQIhs4GMhEIv9AzLG1FbYY0Y4mdxC
cOOEJVkSRCEtiURb0LIwbuNMJcRZx2k1oMWpE331BEvOjzIgUpD0dSyAocxWGXWCpmX5mFZz
4xmM29NkorCIA5QxfJkM1rA6p27S9jrEVjJfB9Tv4CbspolbYyJzWWIpBGG7hK3XytwUxBS3
VcxNz0uoBXbE8CouF1XrgVmm9C7qf66o2e5nVwD+Av3fHt1a6/++wLVs/z+3FVD0fw9W7//e
nur/dncesv/X7uPdLx3/8V96ORvZb6PuZRKUIMfwrdLaRPbfcBXP/+Hp67fNkxefuY8P2/8f
7O3s7cyd/x2khFif/y9wSVo/9vJpnDRaB8fB6/Nnx83DQKsJGM37FwQ/Ws+6KpLfRcHOt9/u
GDOXfmHn22++rfKjO5x95lTm7nr4bXAWQUgOXg9ZO9KewYFob2+7GjxLsim+f3UQwBVoZ6dG
fMJjuEYdGDijprdgBeGFBAZ/qskk2ZuJ81Dmjor0bocGA7XVJIb3JguiYA7Vt6mn8r3mzbwM
xwOWPDnXHbR5yO51E/XqiCjmFXpN/NoI2icjwpa2JBLPKIGTgl2LkBN3anJayx2HN+GtOCfC
07KXsCYuu+T3afA8BIg2xGg+Uz/OEAVQljtpGeukxan5ptG4J10NZsTf0u9Ikpt+qCs8M3bM
tZoVGrOZalpzr1l1DmW5AkIOCaxwxrD5Qs0q/zFkDolEHE1EB7zgJGZyuNn0HHVZ3EjYdVMY
Z+uoenOZoGX2UMmYcWZh0Ej6TV69cjuBDoM/WwWjhcl1YRBlN1RjF/tYue8VM4tFYqlXxM0O
qjxM9lYkU8NLryPOkFgqqQNq3kDldRPBkhFesXDou9xW8Qgj4jyMqVqKdAOrgEkzSUUfc0rN
Lx9ZtgB7/p6Kd6wRMeoy8qHDOztyZBbGF5QVdtKByCJ8njKYkrsufepNnF1Wqq4rJ+yLN7fk
oYTsQwsG8T2eGvshm1qm3qfs+CyQWoBGzRdLY+zKKGPW4Y2jGxmvXfd9lVm1uatxcuPa7SVq
g6Q5jAcZ785ZwspSeHXz/jHOy3hXrJTLa4niWrQPItRz87QYnbhHMh6jJ9ZAjPmoayfSEuep
JZDOruRRgl1JI+c5LW+xFJ7N90JHOoMLM6O7KJ2GbExTC2NM0m+seAgty4qapTvqrySrw3X5
nTs3L8Vz6Kzeh8DSVfvG0uYkD69dcqgwIhw7M0AAAc9YdBH9iBrifqCCHVj1D0FHTE2xO76a
JHWt2E6CDwCrdTll/O0cONMnt3zAqg7UPPBihUQOedTOAYGEG0d2SSBB74wsMLDvOkvt0a0A
jCjm7dbgDEfLoES14ze0p9Nokj1BVgemS0I4i6sOvVt5t0Lrh3y+AiYeZRI1ENYo44fDaEDH
nClelqmKC01X/R0ueuX7/fGoD4YZrRBn5YVCRdAn25N4KtZ+SxMSgOfTaAFeAc7wgkeWCrPL
P2srMrcVgk7HCX2fggpZi6gSEEdsoPPpL9AYHnws4QAZoXD0Eg0zIQZqiAB3cBMZxRaZD0E0
XN0yaHQscIjOSGk6ekxoS+JxOIR6RqYEIkMLQaR9xLQ0TXqzrgyDiUiWm/gINXPKEPEKcG0Z
pUebcFCYiepfwOU5HsNUgE589MRq2ku2IQNRczpWmhSREJ69EscJHrNDAGw/hFsZg3BWVVaf
AjuqvcmL0wBlZHsrL7qjnKKf7MXXcU8sEUmHEYl04viZKjSCEcFml0+bGtJdM/QvkaGIeGoY
QxhpisM0tpmBx1kGQQ0hauoIaQl0QnL8Oo6HEpWlBa1NZTeA5WEWSab5eyEzZnXLg02w/+7k
Mn2Ck4VgTVayiT6xmqMvhXUj0KaGdTE91M3/NXeyy/T0rNF61eYAjcPTk6MmQg0kRkOlqypi
Ms5azWfneMQvvjo9aj5vHh7gBga/XZf4myWskoIjLzbNQPgYThoumAGcIW1bZkJ2DkAYERhp
G0XjoZ3LZAjikoW3ytqOiAPtRB4q75mlkTs0sOXshdoZSq9lfCXiniNauKphnsUNn8mCNweM
3traSzwVmNF79hjZ1swoIjpnA328JwGbyaA9TuNr2rHrSBZEBp9PeBjePJEzLUYQmjl1K+/q
slm/EL/lAK4e6l9BLIjJI41EhsAMgN99kMksynW0WQ3bquk1QzqbM3HCKL8kzEiIoE9LXHUf
aMp/tRhIhnn4DnDxAauaN3ZngpLfewmcZwOoXE+GqP97PWIK+JhkQYloR4kOygGh92thEBJd
VzBWq85FYZLiuUCMZ84hC3QoOOwLimWubDYVkwVh4oxat6ASAlv2TTobLyy9ImXL6cA9wloZ
qDXCo7njiX5iPGY9GYPd7nOH2Fs1oxEajadMEYMFQDO25zKhwWgC1mvMUglhLAwOTgqCuGie
S0ZcqZs3wuAEDshS1JPgtjL0YumOm2QviYQS7NSFiQlvP0ZgtbyaNrOZ+XwMttdnrsE2w4JO
J2REVGBGjJh6COT8r8HSTOLujE3XchYngssJdumORuNhEswj6CD9t0x+0hTz6CS6wzAeSQZy
S/n32QcHRwIQoNydkc8yS7H6YtadFjChSH6YfNjJOB09aBnNzTXNtmNmInP50GMEiktXCHfK
+zG505z/Nm2V2yWRdJh5dS4Nk8vbjA7HUOFaDrMV16QnYfButRUNSNRgROX5HHvk8V8guu+t
ZG6ZZoac3RxylL/jFmVW6XKAsRhTMZsRzEZvzJguqgvLSlRcVVoqcOozmozai4hQEfyyINC2
Tm7HhJ0E4V4LcEmgQQz3KIoESGQWWeTR8SeGVUlhJRcCxKeCXUwszyhFMNlRJ015YWEBHltI
zbgNNr6qN5fIgrzegnOkBYuBepC2FPDkrbqMo7MwDoZNLIBr1lsvWhw9WVXrF8TN3BBx5qfM
gKVTR9b5XiakzrrFLW4st8HfMdud9KvqY5FzSjAHSy8hVsHCM0gUn8Y47blWAECrOAFL+mX6
3Ypl3d3SW0I/hiUSfCXMs5l19hP1FAKtaT7DW508IVpCsJ5MKEsJGOWHnLqP2rZYmB1ACfT4
c69BcQcY64CgY0p7UhX1JmTBMOA8d1g12hRilADQAk/jcTIbqy+xEGE+FAWMFyzFeCE3oDdW
yz5l8LRDRCYrB+bgQ0+BjMN9UMkVFqxd4xNfCL9mDKSrzdvFLcwfGCWj0XBo6RdHf7OwmwRw
/J/DidxKzuGVG++7EaOrJyCwBZIthUHiwqZCg8pNgNYxSXeQIIsvWoJxYcmrgsQKGMjOZpFD
UO9et51zjdUrxLlbvQm/qzH+rJNTauLglfvMjwcLoyZW3xr2hckiVbzwAkGc5E+EGVp5NKtM
l1xhFhj6qbVbcYHtMdPi8x3iO6vuCOggU35vRGt8DTlsKrVc8jMoOwuOh49oFXos1lXn80wy
+Cvo8PkozSEk1neE2VzXUDrPpu4DMwd0GbyhXLNwFVIHT4tiRDRhF5R8S808UWHE6jOcSrSk
DSsU6lcWC5niCogCOFeHiJwnTIBlhkmGeA+VuG69kUwI0o1lMmdMLUQdQjdY+JRppdEgTHtD
uMuAobmkIw0yLcqxM/qw6pkJpuySPFVGUlWiXeuKxIyRp/9jRjWbGl91RK+JdJfCojHO0zZ0
mNDvB7RLlyw45F2xeGOi91Eq4q9VnIluiDNALF1sT4BKUmLnhtBmWHEqW8oK0JybY4gWsdh2
RsB04WCAVbLNWu8WngdWZVlDZp7XYgTJNz/AiVTwOwyuk+GMHRMNXKiSlAQrxen5/IT3zbFQ
J7X4zxudoE2GaUgpS6nc3odZ9fkpzI8eIqQQU8v+7FbYjVFThqgOnHavO3Mu66Ml9Ne07Ynb
4THsBsxFrWKiCBlAZaZnynlT5vzTQRfeh2BX4mnO+eIeZy/pJqkXpTKik0EcVA3EHIM0eVIW
noL1V7On1lMqfIATFFpTnA5vsG5el1pLRmEaE/zPrGIoVxKC6Ag3tk9LWHUc2eLMQneemOWu
BtfhMFbXOBSBCrMp699kXrdRmLKhJhcrmEFihHBbtR51wkGNE3E7ZEFaso2AMVILl5UQQP2i
1PLaunA+vFbF8YvXnluYX/FCmobi5hT2gRk/IcAftwer119m8gv2oLsKunxPQ09mZf5UCTNv
kND+OTvUiimDR2HtWTiksYwFnykbo2ZbUQ+wv34y5tAFwpQkti2oO6waAUQP37vx+bzW3YdX
kkFbBjV0UAexnNYltQUEZx1LHTqy+sS6sN+lL973c6QiGjEZC5sFZTtGjnLiJRjjVFNblMw4
zqIu9hzUcMwHLRo5d/Sld/G6lC6tPWZhXHRf6thlrN5VqaUK3+WMJZMwy5JubBVi6rvIyTpi
0bVCztL3BQ+n8UQsyiDYxtIvKb2YB5dpEc9CJFQ+I5rlS9r4ayw6eDvD4WK045FlZqsL8/GP
C5v4QDVUHwdrHhsHnarHMbX+Z2WI7aIu1JZpjTosgSBojciXOwni7Y9ZJWNJEKLFJWnEtoYn
84RA4xUb5EA0KhWh1bqTjxXxFucPSYlWdTZmvoXH7LoyyraHekJZ0VxcPSLy/QVuwWsdLJZ3
AmCtUT0ZAzpcdtXD2DpkMHccqimaoWEi/h7M1dqvArDrhJoxyrkGFqDPstvMjHJjUiwYDKlZ
xlYWsCSnsoCGlWMLLW6PbXgWKzlHk4hj0ZYMYU5d5C0GrAZB8CDnGTgWjBVBoq6pwl966GWp
Ws5LGIFUQG/0HnFJGQtQSuotOvdYFVgzoWAiqJhMDfM4N8wNJiu7X9078CfsSgKDbCsKZyAD
UyVm4lMPgcFnXpcMy7hzaBcYLHQxBZHorHgxrJmdtxcUwnJonk7Q2d+s50Kc5u43bmB8dHib
IN4AF9sBkDwIQxf9rz8bCmYZxuG4K+zeQ9k6K9750iZAcjKdk8GyGEpJa5xm0LF1qKc+GgJT
zCAOG+YAIr6obYumXFXpEQpfsTHQB02zeduHhnxkrGEXqSxlI91l3OHaxR0kPbtx1nsVFBfn
I+2kXOqzChcYGRAGXmCw55T3ZVUwrlSyV0S5A4Nj10GN9B+qUrewx1NmYGGmhsbRuhn9HMOe
jNgN38wt4pyIo64Oj+piR5nGo0gZlA+x+nfMeOo7NcwdIAX+jONNZc4WpRlrSNYn4ikih7io
S/QM/HZcdLoZF01hzo5WGEOtC4WiJ0Q3q+ayP0vZXlVwOFEZLFeqbwZO2FTkqgiA4ZqW4pJN
XHVTPEnFGPgIvGAX+5SfQDUpeeiY5zEnkT2uB82+EHZWp9ARdZYBEAGS2n+a9QasyxMmxZNO
xeaMaCRQnMi+1Nf9LARmlMXaLOW/oW4KVd7OZlFWqRoPCjWfZKKAANgpq/8LJiWj4tA1GjiJ
y7bjHFNXLJ2Gqx8dk6ly+q6LuTNSFXObnGWQCyg/0a8jjau/FZcL9X/C575OP1FuPIPXDoFX
Fo9mQzqmkRiLxIBBNGSgfGWO9Y1vtvG89SIUXuH55p8p6V/YRLDeFjBXnD01+y96JoV2d533
DAenoSnxEQ3S5JbEhNsauxR4h9vjE2wvhPyE7U3YDSdxBjY1sUhU0/BW1Pbulw2qpHnIFBnz
sGChLp822FaXt0OLpKk0izjwxpYBpjNAGDkF0XLqIN7kDwxfeDjP6LOgkKI/L6MhOGkRhuFJ
N5ZDKUXhhfRyEy64OejGaXc2yhhrC4brhMMchUd+854nqhGlpLWn2Jc8s8Sc56o6UI4FhIzf
LSyozYLKbTJLGYMt0bnRzsyUPvMvOfWe90mWu1VA0U+geqvaM1bXWUc91dWJ4iCe3qo1yLA2
W97cL3Zuc0dkmJ03QmvlU08aTHqQaotTdcPMBezCFtvAdatfzaO4hcRPxD3DQv+EVfJdDgh9
xfs4F6xvBvDroGMtWEe7caL4DUz4Kdsg4d23MKSoZ/L8HKFLp8DeiIrPObSccz4wCcyLB1pl
upGP9lWJOps4cy87UW31knGigcld9ijoB+xqFWSXDDNgBpm8F5QFbqwuF4ZDRl4EY5j7Syga
VEooiPgyibsS/Vo8NT6YamBtwr1Au88OTjcqJHZoGaJrOQCdaJFaCVXNpgvomYWIb+rWuDav
p9hSr9c5jBVnnvsEzAfWOZQFoxRIS6XTzm3gQX/nNrds+XK64OicHVnwJQJWZNErK4xjUQxg
jI78J6x3ABDEKOGO1yeXbEEvTNFzeiG6JrY4I4jYTUUDKsNp8dNCOICoc8bMBIwSDiS1CyGo
Y5ZpByhjHzTHYpzqhkJdPVxMTH5CJxgmkowRujdEOucElVbBqObHTtJb8DJg5uVbSVGw0hUd
K2W9L9LoOmbrrWw5nJo1aXFmbMLW5S7pwgOAi8VxikccsIq5+W1I0gukHqHJALkj+HcSpxJQ
rWomToihX0h4BEZIfCdcF2JkHCEQGzKKF4cj7sJ5UIqZgwCRXSCZubY5m2lhoF+FvhFbSHs8
o0kDL9o3XD6eZgHQjSb/Ye65+O6CIKHZt3OHOqW0JSDvQh7oUjWX4phkWx8NLxVBrkAtMtTW
ScxaCO2gktR6DRS6Wkh2zeBgloDDwtxzg4Yswu2yJZgzkt06H5bE8vn2k4izmi8bzbKYDHFd
2q5b5tH6oHqng3mFBf8T9oUT/Ot7oWZqvyuc4DmmWiCNbcSF5MJCH4z60IN9zyVpZQ0dFXD2
SB/N3bHyH5nLeJ9DOJJRhEOWGaYHTsmYOY9nDdMAEeN1t0l/COR7+VjgMs550AzzCRGHUyjY
CVtAKGcm7rz0fa4E4Fs2wqcQNyMtJaPEyeyI/BHfBqRtUDLiPhkIPhne5qFOJ6c2Qflb3v+d
evCswTm0Jfl06/RF6+AVEqarV+xR8LzV4PTVhy8PWi8anOxcUqr7bcFH1muA3jrl343fnyEX
+OtG61XzDFnCn70NDl6/psY5VfnxwRtazcbvDxuvz5Cf+8S4xNpB++wAHzRPgjet5hkybKNB
OOK2mi9engUvT4+PGi321t2yGbklk3qjbTTde2FSJU78XgreNM9eIkO3HTwmh8zdPzRPjqpB
o8kNaVL4xpHJ08J/Qh74X5IDHvobLCE1QgvearZ/CA7aRhf2d+cHriFaXWrj1QHnJn8+v5GY
bvD29BxUg+Z9fMR5ye0LWKgGkqE0Ds+aP9L20pvUTfv8VUPXu825zJFt/qRxSOM9aL3VJO6c
Cr7VeH3QbEna+BbSzDdPTwS37NYLGevPT44x21bjd+c0nyWQgDYOXhC0YTG9fTdvmtQ5dmh+
8zlZPB7km/+WwOg0eHXwVhyz3yp40DCd53YRKggocug8eHaKNchz6dNAsCDYIs2DXzV5Tnh0
rc7kXjL9PMP+6mT6mjTe5JniJUs8stNbGKG+58+ll49+Dv4AF0ioj9aQRz/gEdO/zxp4u9U4
ofXi43RweHjeoqOFN/AFjaZ9TocNCdZpUwzmy6e52Tqy54nXOXh+0Dw+by3AGPV8SkuIJhnW
3IZYIGtX8mz3nM9edi8onNq3wUvaimcNeq2YEd+szojfZsTGwac0P35/iQM/fP/xyktxkzpg
aVQ0rGdM/+nmWyDcE2J2lMplgGCljD0irMNkwjlYbvKIqFADjjRiRb30lFhyyij4g9jMO5JK
SDkx5u9U4obIAGUC66QvIWIEmlrEySTx1BRpgdBAF7CzUMzDCwV1xmKrPrQRcVYlO52GanLK
WSPnzGs5R1vMRET1LOxjahix+3pkX2b/PrYx4YnaWCTLlwaLSgSK+AwSg3Ad3arNipj3TNm0
3NmYXXjQFLfhlz2w1n7m4UuOHSgRPz9WtVUwSVgCYlcc9uTjic7E6MDRjaDrtEjqBPkd1pO/
tx4D3gJsZpJES5rukOzRl8RM7EwUMhSwV/j33FYxvPo7eCJ8Tz3YPFzC9Hwv/X6Oki3iQTn9
9JItzlvvk0q2cCvlopf00pItSxfAN8WqGHYJr56prrNluuhY0XZWxV2EBBpL3KUUhxD4fReB
oaZCKRfEHoPWpZMYbTQxT6dpcT+CTLcjSZHkAoxWCHK8VRzFCzkr06l/cjkPdY/wzJg/r5wH
f79Q0uMXx/Mbg6BEVhHM5dtVR1V2LZAwS3DLXDo7TcY0IYkHJOYfVcqHovcsuGsU3FOrFj3a
qJIQ65g6j15OFse6bPZ+jKeCnDIJqSg4utIJitSd6sWYOOxrYe0tfD/6tjp3nHGag+JRXvi6
S6KEBpAePGufHhPrcfzWZ5v3NacaQ4NU5v4Th67ebNbzUzGPDnLSw7QgGqIfSZ5VwA7cggZS
OeWRlcf2/e66m/5ANEnc5e0EUh4buXKXbzs+HoP7WsHXht0WQksKQuTK4LPTPttV1BSS98d2
4wwqzluTp5RlIY3VC17k09KhaSCTqOn5+HciM0qoyVqXRnDFWo1RNJ7RgkWjrFYDImdJOpvF
YtZ1Af8aQqKTZc88xCLzKzgoyS19VrZh784XWb8eRWklkEDu1GSQ34di6BiLOzsszYiiyzVz
efxNKQ9TsexH3DdjxMlnEq750iWKy9iGsi8uVPwNwFSCLd4mt0nvdhzZIw6S2Ll1HYlzUD4A
PiFgUBQDa+fU0J88ON+EdYwdBjmxGsfzZoG6qcALJqs4jRp19j8YTfAy7F5FKWPA78SPBJHf
BCVnt3TSkvH31WCHWLU0HnJiEvAs8qCKdB1ZbAO8fkQ6QlHrrsC6TsmiZqNcwQH48feXVRvG
C4N1GQecjS31UVEIC62mFbZZ3ZyGxljncA7PBNYXUsW2RxkJ8Rns2uX36KnVM+eUYrRxq0ES
pHBjfURtTHeP+DkbPrMk1YVZnupiUbP5z05ss74+6prL/8T8/nEy+Kx93FX/iah+nv9vB/Vf
dh4/2lvnf/oSF+16UAsOej1mFTsx48NeIbuxcnutxsHRqwbTxbPTo1Nx1Kyb7fo2WmD3zRCp
SSFORevj/29yFc//P6P+G2r9PLL13x7tbnP+t0cP1/Vfvsh1L7B7Ltx7jATzXF+Ba70V5RXa
nO0q/WcneJFGg+CHNAkvay+JNSc2O/gOMT+/vcI9FID7nr//LCqJe59HIXHvDnXEKj1EfelM
fq5u4d6nahbu/TK9gqoVsFDUxEcrFTDlT9cp3PskjcK9X65P8NQJ0CbcM9RYW5PQe9bbJPgT
UjRsOi0pPNI7Nud5ZxYPe7QUwXEUWo0q8nbjsz5JbpFIvBPOCMSkknOAHzWenb8InnLyh5X9
brp+LbO9us728+bzU4NCpq7R1unpWfB0Y4PrzfzYaLWRSObpBqFw0zxpnx0cH18cNVt0Z2uW
pVvDhCTerU48Nq3GceOg3bg4OSBK/nTjqzIaqtS+KmsbFWP40I/EGXGmvsBWl8kLosEsc8Iz
n65QoJf7y03e/YDTCpt7Pxw3nx16C6OqcU5qp4HcBFmcJDuPfbC2aiuf8AZAHXOPf7lhaKp3
kTXZ9Zc1N6UwHdWGKN5QQwWRppN15HvtJ7jOgtkhRqlh+Bqm24Mml1W+hExuIqQWOmzBQPI0
uMdLG+9980ibn3U5eTLuokoNP5F7NXOIaX9V5m8rg27X0AnNb4SpgVXptXcLuGXCm8HBDcgQ
KaWXdJiLlRlsCZsw7V5S84cvgyfU3F8J+REekuKZtd5sNNEwsuBvARxJaoSNN7dq9ftbW5v4
sZltxfVvHvHo3Z1sQo3SK/wv3X1nNuQBrS3dpv9uDey7o0ffXNE9/OO+n0y6W5PkJkrp38Hm
33/OrGitXNL8XpyaF4eHzZNDwPbi7Dj2u5ZFWIEavZzZOVJbJZqXBAg9Cd6V6/ffVbbe7WjD
W4NJ6WcNiu7SuOohs8DQi2BYFwTcPKjykkHJFzW8X2N9XwX94eRv1k6zTVZsj+K/aFqffhBe
ExaWGkocHoA3a6e75vT1WfNV8385T5S/AvSJ9neaBbU2aqOiZtPWGEaK2vuu9+v7/M/d77/e
2cdubrDnrSSAphZK+9KrvbFbCvZprrRGRLJOmicv2ui79gZ6ntqb7DLsJTf4gx3Naq6kTBYw
9oNeccy5EWhfYng6QknjynX5U89M3I/+HJS/KjP805zO4C5wdgF4rlSqBGkVs+Evwm+e1vra
bziMQ2T5NFJE+cMtAb4XmxphiE/xrPgo+M2ypR65mLsaQVb3qtZhapXePt1dugdY6A/sg78H
H2i6JFvxMeOjFRmMa67ExNNtd+8nQgT8+xOHeWcPdrRSCZiWeBJPIgPoWrjHuwZerx8IBSXC
EyFFghTGktyoGqgim5qkFnqihe3mJmijQWsqtq+AF6psoZjWaBDUjqS32tEFMTIX7dPz1mHD
bNhaxb8BoA+rNWJIxjUpxGA2GFsfvjoihM24ntM81doI/Lm4iS6IoF0IG8Hg6E12YQBflf19
pAH1k1E8rfWJRYpq1u74gaFlHx7dV2X+UeEXa1K6raaeq0/rY6QtWLytpbxWnCPwIQvriqEc
4Um+jUTcNWGt5N6F2nOeJcj31aZQFQ4DOgboNTkK515waiMiRDM5YKzs3pGSKeKhND9Y5jjy
0fJPcEYbT5Un2RBfiAbfZOzt3qls2VjPjXuMuzycxSE1mdkANgHivzh99j/EFGzg7GwU2iDw
IPaKsc4WG47qyR1v8cDqoaGNzhv+qqwkpiL3D/leoXsujm3/LuzMmPjiHk0mqDW/KnsTrvAN
R1IrOWjRRzWtmVWTz2lQ0hBNgTU/CtfK0hX6m2/UTSOoDbtLO7Fgw/SZp8G1vpk7NWZhok9Q
DvzVwQ8NmsGh7qTRlQJLTGuMRR4mfALrCXBaXiKc2arLKIQ8qVmdCpFY4vEGZ/YXjZOLl40D
9hCTli+swfkSjbQ4ztmzSUrRR2ZcbCOFnkyxDVd24d09joCOAtqZHy8sQ/+ulDPm70rB98FX
vzVYDV4WrJM3PkYlsvPLKqXrR/YlH1SC+eVFCxaHeLtgC0UQF0NHr05sFABiGtTYBtgL3lFH
OJR8HzzO5v3/t4m+7a/6H5Iw++Mmv8jf9JU9wvYQr/Y+TAdZILXaqRv5owu2Ph+9P+NFIJDK
FcbAS+t587jRDnJ+bH7UMqi6DEeG8Td43EyC2nVw+GPb+1V6Vyewf1cf/KVUuLv1ru7fUNVn
5t16Fk9/iCKYovN77cPDNvF/GKPlY8u+XFYxWdol9pXGXjfaJjbbTaqi07ynwOM/IoDihUv7
eluO4G9HV2ixcKvWvRwlveDx48fF+xBpWR8UjwtN7xPx3eBztYG0T7Do1XrBV1/hXWEL9GkQ
bMx3t6Wv8XMgjo0NfXmjS4sy0WZWfdGP9+0HkMhokNDZ1bre+1jgvxDOr32Lc1JcUOwebR59
tmxphJd5RoRnuuLD/+RSKEX9r+j4P3cfd9h/dvd2bP2fRw8fiP1nZ3tt//kil9Fiu6EklZsg
bcJckUpODHXdz4x5btWEiyWwNZOD5qggfqtrbfFW7QeWqRpk6uUkhFcVp1x23quiacwZ68We
GFMLGr1Y9GdM2dWFT3zVJctDUbd2HaacpU0N39fhcMbpHVmtI+nhncqTbfES/0WEzdLg9tv2
8/YFq9j4Km3RK6X8OdPo/DE9vyQZdwvq7y1WBfF52vK+wAdAooH7gl7wnr/64eT0KMivEksV
o6tx0itpKmuOXOLJiP+jRu4V6t7ZGiESfOWGSS3YReEY6Sat96xjCzBI0dHQVZfmatiZLb7M
DA0ruEfw6MNEvep9TyrYoNZsrGFvln9XNw/seB1vvHJZ+aV4HmdznyFIkR+/hpwTbNEXXSz1
lqQ7cfXPNWUutIp+XCsDruRSkcDBgAM6ZMSStkAr6EJJGHTo+ytXczkeV/MwT1FWsPOefS5K
QGHn0I8DV6mFiNwaARHmW+t125M0tXAhtMp8OClehmnP5q/3VL1ZN4tFQtRkOR7zeB2nqARL
DeEtr/hyLXgTThG6JNsr2wTXIbtJciYgy2FZzVuehnh5hHajJfhRav92Z3Qem5wV3xaQBmgh
Khe7hwCSvuFYLc4JEaoymKuZdG212iS9yn0Xc8OwJikaSm1vI3U0gmHUty7OoONIP438qSJv
bv15Bs1tMs62bIAYbR+4H/qOjm4kIzWopDsIrmqXpmhw+g8m0v/Aq0j/rcTU/ax93En/Hz+Y
r/+3vfNgTf+/xLV13wT3A7fv9AO/28wC2NtelVrfOKK2k56UruKIPs1pU9dmFqzHOzX6z95H
WY+5hY3PYT9mL9b7G59sQBbv7PsbqwubrbYg02Ism87PNCJLKt37G5/in35/45Pc09mOTI18
tCFZZ/7JtmSxJKOpX2RMXjQlo6lHjx8Sc5JlwQEcwQ/DUSeNe4PImpD3vq3CfKzgvGXMPWuL
+i6b9sJ0UL/83r93m9GJKdwrCdNawqd94vZEtW2M6r3A9+ghu4AHFcn82/vuKRdywe0LexDL
uFUxfzUbBCVjuhuUuYdSNdiuBsenLy6ODhqvTk8q+077Zdvd2Td/N2brvj3vFyO4/Q5QxTzj
8gRI8ih3dP3c6Q+7qCF1y0ugI3Zfl/kGgpuqUl6B02AG90U+qAb1ep3Hex1egBnYgI6HZggV
QvlX/hAr0Ct4cy1jDvSVhAKV8R0n2qRW+YksdlDWvm1/eE+/RIbfsv2dRiSPjHUV7om68Z+N
e/8VriL9Z2j9vMT//9zp/7X3cO+B9f96vI06wTs7e3tr+v9FLqH/su9Ktc+dIkDE/hW0/GPJ
OIl3qTAPS5p4hSieHwkxhDmm/i7rkbz429E1bv+7MgNrXuC/ihcYxp05XmCKnArz93pxUrzV
746nw+Kt2ZgAoVe8F6XpeO5L0TQBfeP+Eo6jeCc3OvlPnFEMHApYlDF4FDbkKg8i1HwQTS8k
kWTOgcgTuQuKLn8Rp0EvR+PrcumAw/hLHvW1LxMJXmxfNB15+/4L8uwPuw8f/nHf9oy8pugX
/3q9HjV+fH1w9pK7BZMhj58GJ+fHx+AxdCj4uY9O0u7ktiztVz3VX0UfhlP3EC1V0KM2Ifcx
G+UniLsCfActrQgiYWyc2HdrFI8194vVs8GZcJpI2YdAfIk0Mg1tlMDV5Qon3IIaUDO65N+G
2RM823j1ajTiP+gvqwHknuXmaORuYiByEw2KSpFDIoPL6D139FYSPWkyLU7dI5UqRL94ozb7
QcLx5kEnHgw42NLNE41wmjAvXaxVUkJw1LI6oVUrIR0RHyqPLQZIcJMXsnRl2XValio/v88P
7d94JYdK65dVABg4Mf5hd9v9xnb+YQ8/0US/p3/Q5tKaKCO+QTuKEFRRcF+7EHTJwWXVoFKq
I5JyY1w2U5Ik0YQAQ2NAmB1SNeAZZPFfoqTv7lYU3MaAt/xVqzde/n6/R6OEHOB9cXrROjo9
OX5roZ/e+S7YrgS0Mhu9zqBcOgzHm1P+Kvh1RmKDa3E/Pxu1xskpdU13/i5LoMVSC6CMybm1
Qk566qvKi+xGix8VOxJ9tzgafBcQcsPR0AHR8vBYBgnqb7yPpzoM3q7tP1JnvJG8j3xvx93b
cfd2cW/7/Tbt4YYACv2GqALHymkyLH+tzVUZEVSDnUeV/cVOdpd0sreiE16Uj+qEZ875AgI7
tF/T0tkWft2jVbDQrZCtWMcBJtblCcHxMMkiWncPxcpbKuvhHHJMp2SOHOC0djmHZWJjOiHg
9SIkQ5P6BrrTbB33Kr3i9KI1V7BVkJjWhZFE+jdVKGoJ/n9CzQciJOFsOJWkCRoNi5ZFuc/5
+O/zYGwaIkWLoSqZGGlwkTjOzJAM4Qp3O4xKdtSThDiCWx9t5LQEw59HGB6+yNGF/yVjDBJV
VpIY2ta0e5mWucnNrc2PJjGMAeSAfq3g5A6JPc4KF7zwtL58FvRgus39moeIAbrtPRiE8djH
1kOudjBe3N+lCDbp2XWS4X3MmhFCKOywSyGC6PEbF2R8k6TD3q8snsDwtx/hrLihozJsnEjF
uSsNrs5NLrkpCnwsjBEpV7Qi3j1jOxIDsoafzs9NmrkYz0+Py01dxP0LmHyWT1H/pC9X0xPw
U2wvczQjo4XARi2ie2eG+1ikL/9d8q7ZwKiCvz3NpyBjAdopCyr57rvgm0rwm8CijQ0ZGr3B
1sTA62fEee8F3botKsv7FW+b3kQSpW5RATufIC8nl3K9HcEJz55Z4BrPZuhvQ2V+j3oRakvM
79HKRf9Hry2fvtnYhlMvEEddIHmj7D35e0GbR9yC5WTdWWLusQB6HgONVhSMeAvt39hA+zct
0Tx3Ums0T348OC4QhjmWyTGuXyuMf+2gIifIjhgH5dI8y9UPod4vLSXHjKekS0a2ti/tqtCT
vKv4ca4/fuZ35M3QciELnfM5eJpjMMdYrRwCf+HzHna6XDpiefe6wIvdKyj40K2AlaMWfxBy
1gBlSrcXabUHQWLCXQZEy6GmyLCu2pdt+t8/bD+cQJSfaEu6Vs4YQ4fFP8qyC6kQXha3kQBC
qd66z//wvAvnx1LoSTi9dPgBU4PINpqU+bPa9zJ53ZESewCUKpj5Nsi0a40m175oPn92/AO1
K26tCw8PX7aoD8Ip7CpIPaFravTXGWOKXHCUUiLU+VXS+ekCb9ll1/v8jzb9lGXtC85td3H2
9nXjonnSbrTOZFes1JyjFOk0RyNYf4nV+BldtBqvTn9sFLoowpwdtLe1227PuFSGL6XP7xn/
d44w5iJWv3eBCC4w/hf9HkwBVusglpGN7CaGl0OZmYJyhYeJ/LtBbecJnAcJnoLyDoNmh1q5
2tfH23hKFGtjA3zlJQeq2SyfSE2SjMeRVJFOZ2OnMgL48SdbXnvK2OTdbRe6y+V9dioWA0v5
a2HD+Q7kv+kFIrImU5JcWViDCLu/L6v+/OjifxutU/rIrgN3QLfbjbOABSn/iaFNSG9p3ZDj
6AnvmhJ1ucVi3m+CHe8rK3Lk/+UeLPCWOLBNAvm4iXdjOe1CGKR1OvI7wddfB6x8wk/CiGct
mYGgAH9c+FpgcUkz+tFERL1ySacSSKeFTQXQuX18LTvEGWUYrmSzZLt6ibSarwbWfqArrzjl
a8Eg3E1xVEoLsCgFLOR/YbeTT4cMgMe5gYd/5xkTkA2jYrsMIzSPf7Zu/2OuJfafy8/dx13+
H493Hov9Z+/B4wePOf6f/lrbf77E5dl/Lv8x9p+15WZtuflXs9wIx8Hi40tT8Ot9aeZcNZa6
d+gXkBk9xwP4OmzoxaEKwV83NrwbGwXHCfbW4NBDZiOJGKoTA/2+uHh+fsLmk4sL+nkPAWiD
CgdDOIpDPOw9IbcfGA4cU/8aFL8R3gXGiuNEkuqx4wYXIJOyHZe20AxbJuhpPx5o6lRNbM7r
yC3kTrni28uOvXi86E69oZ7U+PANR9WzD692p6ofKWaWq3+qwTQlGIRMvsVhggRtXutOBUCN
j6Mb+jLbkh60ERvKIqNzFZVQlbKgzxbLClSYYW9VZ1Yfv6EO3OjmGTyQY+syzBOCZiqzFcum
s37fb4N9vTc2Ci7eBnISapVah6Cf5V4DucTu6s/G/0X6j6iez09j7sz/9XhX/T8f7Ow+eMjx
H7vba/r/Ja57v2JAzC4JhN6jMlQgZtunJHWa4h1hg+1NtbM+3VIP9a1JN97e2t5+sv1tfXtr
lnV2tnZq/H/A1fT2vP3ssTF1hrWAfv9bcMf/+Vfx/MN///P3cdf5f7D7yOX/e/RoF+8/3tlZ
n/8vcdUkMS7oUHm3wqZshMdKbV/7YKdiamwHv7IJUTjrPMf6qPTM9S9tJuUozGLJl95LKmpW
REALCiRHrgByTd63jDTnuuWcPRJKFmThLReRVv6gzPXYpZwMV08N3LAuk+RKKgNDUXBUe3be
Fi8F5Nofa0Via5dAUVmJkqGvh8oBaSkwEGsiqf9FuKl4/p0/0Gf1AcX5f/TAnff5fx88fOD8
P3d3kQtwZ49+feHznybJB1mfu57/m14i/+f7rtK+75e5Mi9ZgxVmv5tFs4iVBkNgj2YheFSb
O+Dc5k+WuXuKHIeX7NWesux7BORQnvcFrfhvSmEI7+mCrmKlk6l2yq19Pu1E8OlpClU9EXxa
3QRXM4Gb+kDdBLsEL5vtoH36/OzNgdRl0tpHR8Gf/sQVjzY3uSAKdBVa1SjIaxpxE3mtok8o
cYSGfkmZowDDPmq2D48Pmq8aRwJPfuGg9ksUH0LHB+dnL6mVvDzPc63/c9RE5SEMXv/SRmwh
Hq86T+P3DRr+QettdXV1nrzMjjS0bCFolQ/PW41XGCFXpXnWPmueobrQi9PTI15iqZLUaO9z
nR1uid48bzeqXJqHB0DN0ALRK5jXebvJS9U8OWu0WuevJbHQy9M3tBA0VpTpwj7Kpp2e8NRp
XU5bXBgHa8LLXkUpLS6sQ8tIMzxrHWBxkBjk8Mx/7bQlEHTaOvNLC500Xhw3XzS4nJSW6EFF
roqtWoRmRfNF/boCRtwUFzF6XoTJvPhPsbBPsLqwjwPuz6e1Cn5ZJsulaqsg+Hi91by78bwb
MaKmOYp58TYsy4t346Q773e8xBW56GP8QefmoiuxZ85mCwpMf8b9EoMZO272e2yF0ZfUnzEo
s36FOy6JT+ObFjtp3Od3XJPOa2W74uyTy4xAdxqWnZ1S3+TlmWtlyT3xvlDrEz8HweLB0T6f
Hp4dX7DxFYnn6Jy3GBVVg6+XNAWj0SgadQkcxYq7/LW6PhMXliUzq6z05nGLM2eddKbcoifT
x8yLyIDO7PVZy5kZ7+y+YE2Lrcn4gmux3rElxY+X3GNHgMXbda8LmpP36+PnCqu52NHbbnMK
naya+z+bx/vQtYL//6w2wDv4/71Hux7//3iP+f/Hu2v+/0tcc/z/5afz/7ZY9L8P6+9K4rnE
N4iGhaI97IJZVktCLyWmIZXMIvoDTMB13IvYmZmDOPoJZzeUDIGqc9gSxyj1YLAViKm/SBdT
amxzfhBh2MX8mpfMQ48zu8JWUuHciRBMljnNgk+RpmT7xFtayronXP6IxhKnkdTDRtvS6Voo
WgtFa6FoLRT9WwhFfsAirU/r4uXFUeM5atDm1ufFR6sEkf1fIEDs38FX738847u/zkuwvtbX
+lpf62t9ra/1tb7W1/paX+trfa2v9bW+1tf6Wl/ra32tr/W1vtbX+lpf62t9ra/1tb7W1/pa
X+trfa2v9bW+7rz+P81D18MAaAEA
--=_courier-23405-1055445208-0001-2--