More fixes

Andrei Nigmatulin anight@monamour.ru
Fri, 23 Jul 2004 15:55:19 +0400


--=-fTt7Y+9jtBQiKXCHIMq6
Content-Type: multipart/mixed; boundary="=-SqbMbXHfcdvGgJzugnVX"


--=-SqbMbXHfcdvGgJzugnVX
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Hello,

This is my two cents for memcached ;-)

- Fixed unsafe realloc usage
- Fixed some format string types
- Fixed off-by-one overflow
- Fixed possible memory leaks
- Some optimizations and trivial fixes

--=20
Andrei Nigmatulin
GPG PUB KEY 6449830D


--=-SqbMbXHfcdvGgJzugnVX
Content-Disposition: attachment; filename=memcached-1.1.11.diff
Content-Type: text/x-patch; name=memcached-1.1.11.diff; charset=KOI8-R
Content-Transfer-Encoding: base64

ZGlmZiAtdXJwIG1lbWNhY2hlZC0xLjEuMTEvaXRlbXMuYyBtZW1jYWNoZWQtMS4xLjExLm5ldzIv
aXRlbXMuYw0KLS0tIG1lbWNhY2hlZC0xLjEuMTEvaXRlbXMuYwkyMDA0LTA0LTI3IDAxOjI2OjQ4
LjAwMDAwMDAwMCArMDQwMA0KKysrIG1lbWNhY2hlZC0xLjEuMTEubmV3Mi9pdGVtcy5jCTIwMDQt
MDctMjMgMTU6MzQ6MTQuMDk5MTM4MzM2ICswNDAwDQpAQCAtMjIzLDE0ICsyMjMsOSBAQCBjaGFy
ICppdGVtX2NhY2hlZHVtcCh1bnNpZ25lZCBpbnQgc2xhYnNfDQogICAgIGlmIChidWZmZXIgPT0g
MCkgcmV0dXJuIDA7DQogICAgIGJ1ZmN1cnIgPSAwOw0KIA0KLSAgICB3aGlsZSgxKSB7DQotICAg
ICAgICBpZihsaW1pdCAmJiBzaG93biA+PWxpbWl0KQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAg
ICAgICAgaWYgKCFpdCkNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIHNwcmludGYodGVt
cCwgIklURU0gJXMgWyV1IGI7ICVsdSBzXVxyXG4iLCBJVEVNX2tleShpdCksIGl0LT5uYnl0ZXMg
LSAyLCBpdC0+dGltZSk7DQotICAgICAgICBsZW4gPSBzdHJsZW4odGVtcCk7DQotICAgICAgICBp
ZiAoYnVmY3VyciArIGxlbiArNSA+IG1lbWxpbWl0KSAgLyogNSBpcyBFTkRcclxuICovDQorICAg
IHdoaWxlIChpdCAmJiAoIWxpbWl0IHx8IHNob3duIDwgbGltaXQpKSB7DQorICAgICAgICBsZW4g
PSBzcHJpbnRmKHRlbXAsICJJVEVNICVzIFsldSBiOyAlbHUgc11cclxuIiwgSVRFTV9rZXkoaXQp
LCBpdC0+bmJ5dGVzIC0gMiwgaXQtPnRpbWUpOw0KKyAgICAgICAgaWYgKGJ1ZmN1cnIgKyBsZW4g
KzUgKzEgPiBtZW1saW1pdCkgIC8qIDUgaXMgRU5EXHJcbiArMSB6ZXJvIGJ5dGUgKi8NCiAgICAg
ICAgICAgICBicmVhazsNCiAgICAgICAgIHN0cmNweShidWZmZXIgKyBidWZjdXJyLCB0ZW1wKTsN
CiAgICAgICAgIGJ1ZmN1cnIrPWxlbjsNCkBAIC0yNzgsNyArMjczLDcgQEAgY2hhciogaXRlbV9z
dGF0c19zaXplcyhpbnQgKmJ5dGVzKSB7DQogICAgIH0NCiANCiAgICAgLyogYnVpbGQgdGhlIGhp
c3RvZ3JhbSAqLw0KLSAgICBtZW1zZXQoYnVmLCAwLCBudW1fYnVja2V0cyAqIHNpemVvZihpbnQp
KTsNCisgICAgbWVtc2V0KGhpc3RvZ3JhbSwgMCwgbnVtX2J1Y2tldHMgKiBzaXplb2YoaW50KSk7
DQogICAgIGZvciAoaT0wOyBpPExBUkdFU1RfSUQ7IGkrKykgew0KICAgICAgICAgaXRlbSAqaXRl
ciA9IGhlYWRzW2ldOw0KICAgICAgICAgd2hpbGUgKGl0ZXIpIHsNCmRpZmYgLXVycCBtZW1jYWNo
ZWQtMS4xLjExL21lbWNhY2hlZC5jIG1lbWNhY2hlZC0xLjEuMTEubmV3Mi9tZW1jYWNoZWQuYw0K
LS0tIG1lbWNhY2hlZC0xLjEuMTEvbWVtY2FjaGVkLmMJMjAwNC0wNC0yNyAwMToyNjo0OC4wMDAw
MDAwMDAgKzA0MDANCisrKyBtZW1jYWNoZWQtMS4xLjExLm5ldzIvbWVtY2FjaGVkLmMJMjAwNC0w
Ny0yMyAxNTo0NDowOC42NTU3NTE5OTIgKzA0MDANCkBAIC0xNzMsNyArMTczLDE1IEBAIGNvbm4g
KmNvbm5fbmV3KGludCBzZmQsIGludCBpbml0X3N0YXRlLCANCiAgICAgYy0+ZXZfZmxhZ3MgPSBl
dmVudF9mbGFnczsNCiANCiAgICAgaWYgKGV2ZW50X2FkZCgmYy0+ZXZlbnQsIDApID09IC0xKSB7
DQotICAgICAgICBmcmVlKGMpOw0KKyAgICAgICAgaWYgKGZyZWVjdXJyIDwgZnJlZXRvdGFsKSB7
DQorICAgICAgICAgICAgZnJlZWNvbm5zW2ZyZWVjdXJyKytdID0gYzsNCisgICAgICAgIH0NCisg
ICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgIGZyZWUoYy0+cmJ1Zik7DQorICAgICAgICAgICAg
ZnJlZShjLT53YnVmKTsNCisgICAgICAgICAgICBmcmVlKGMtPmlsaXN0KTsNCisgICAgICAgICAg
ICBmcmVlKGMpOw0KKyAgICAgICAgfQ0KICAgICAgICAgcmV0dXJuIDA7DQogICAgIH0NCiANCkBA
IC0zMjEsMTAgKzMyOSwxMCBAQCB2b2lkIHByb2Nlc3Nfc3RhdChjb25uICpjLCBjaGFyICpjb21t
YW5kDQogDQogICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIHBpZCAldVxyXG4iLCBw
aWQpOw0KICAgICAgICAgcG9zICs9IHNwcmludGYocG9zLCAiU1RBVCB1cHRpbWUgJWx1XHJcbiIs
IG5vdyAtIHN0YXRzLnN0YXJ0ZWQpOw0KLSAgICAgICAgcG9zICs9IHNwcmludGYocG9zLCAiU1RB
VCB0aW1lICV1XHJcbiIsIG5vdyk7DQorICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFU
IHRpbWUgJWxkXHJcbiIsIG5vdyk7DQogICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFU
IHZlcnNpb24gIiBWRVJTSU9OICJcclxuIik7DQotICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3Ms
ICJTVEFUIHJ1c2FnZV91c2VyICV1OiV1XHJcbiIsIHVzYWdlLnJ1X3V0aW1lLnR2X3NlYywgdXNh
Z2UucnVfdXRpbWUudHZfdXNlYyk7DQotICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFU
IHJ1c2FnZV9zeXN0ZW0gJXU6JXVcclxuIiwgdXNhZ2UucnVfc3RpbWUudHZfc2VjLCB1c2FnZS5y
dV9zdGltZS50dl91c2VjKTsNCisgICAgICAgIHBvcyArPSBzcHJpbnRmKHBvcywgIlNUQVQgcnVz
YWdlX3VzZXIgJWxkLiUwNmx1XHJcbiIsIHVzYWdlLnJ1X3V0aW1lLnR2X3NlYywgdXNhZ2UucnVf
dXRpbWUudHZfdXNlYyk7DQorICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIHJ1c2Fn
ZV9zeXN0ZW0gJWxkLiUwNmx1XHJcbiIsIHVzYWdlLnJ1X3N0aW1lLnR2X3NlYywgdXNhZ2UucnVf
c3RpbWUudHZfdXNlYyk7DQogICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIGN1cnJf
aXRlbXMgJXVcclxuIiwgc3RhdHMuY3Vycl9pdGVtcyk7DQogICAgICAgICBwb3MgKz0gc3ByaW50
Zihwb3MsICJTVEFUIHRvdGFsX2l0ZW1zICV1XHJcbiIsIHN0YXRzLnRvdGFsX2l0ZW1zKTsNCiAg
ICAgICAgIHBvcyArPSBzcHJpbnRmKHBvcywgIlNUQVQgYnl0ZXMgJWxsdVxyXG4iLCBzdGF0cy5j
dXJyX2J5dGVzKTsNCkBAIC0zNTcsMTYgKzM2NSwxNiBAQCB2b2lkIHByb2Nlc3Nfc3RhdChjb25u
ICpjLCBjaGFyICpjb21tYW5kDQogICAgICAgICBjaGFyICpwb3MgPSB0ZW1wOw0KIA0KICAgICAg
ICAgaW5mbyA9IG1hbGxpbmZvKCk7DQotICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFU
IGFyZW5hX3NpemUgJWRcclxuIiwgaW5mby5hcmVuYSk7DQotICAgICAgICBwb3MgKz0gc3ByaW50
Zihwb3MsICJTVEFUIGZyZWVfY2h1bmtzICVkXHJcbiIsIGluZm8ub3JkYmxrcyk7DQotICAgICAg
ICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIGZhc3RiaW5fYmxvY2tzICVkXHJcbiIsIGluZm8u
c21ibGtzKTsNCi0gICAgICAgIHBvcyArPSBzcHJpbnRmKHBvcywgIlNUQVQgbW1hcHBlZF9yZWdp
b25zICVkXHJcbiIsIGluZm8uaGJsa3MpOw0KLSAgICAgICAgcG9zICs9IHNwcmludGYocG9zLCAi
U1RBVCBtbWFwcGVkX3NwYWNlICVkXHJcbiIsIGluZm8uaGJsa2hkKTsNCi0gICAgICAgIHBvcyAr
PSBzcHJpbnRmKHBvcywgIlNUQVQgbWF4X3RvdGFsX2FsbG9jICVkXHJcbiIsIGluZm8udXNtYmxr
cyk7DQotICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIGZhc3RiaW5fc3BhY2UgJWRc
clxuIiwgaW5mby5mc21ibGtzKTsNCi0gICAgICAgIHBvcyArPSBzcHJpbnRmKHBvcywgIlNUQVQg
dG90YWxfYWxsb2MgJWRcclxuIiwgaW5mby51b3JkYmxrcyk7DQotICAgICAgICBwb3MgKz0gc3By
aW50Zihwb3MsICJTVEFUIHRvdGFsX2ZyZWUgJWRcclxuIiwgaW5mby5mb3JkYmxrcyk7DQotICAg
ICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIHJlbGVhc2FibGVfc3BhY2UgJWRcclxuRU5E
IiwgaW5mby5rZWVwY29zdCk7DQorICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIGFy
ZW5hX3NpemUgJXVcclxuIiwgKHVuc2lnbmVkIGludCkgaW5mby5hcmVuYSk7DQorICAgICAgICBw
b3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIGZyZWVfY2h1bmtzICV1XHJcbiIsICh1bnNpZ25lZCBp
bnQpIGluZm8ub3JkYmxrcyk7DQorICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIGZh
c3RiaW5fYmxvY2tzICV1XHJcbiIsICh1bnNpZ25lZCBpbnQpIGluZm8uc21ibGtzKTsNCisgICAg
ICAgIHBvcyArPSBzcHJpbnRmKHBvcywgIlNUQVQgbW1hcHBlZF9yZWdpb25zICV1XHJcbiIsICh1
bnNpZ25lZCBpbnQpIGluZm8uaGJsa3MpOw0KKyAgICAgICAgcG9zICs9IHNwcmludGYocG9zLCAi
U1RBVCBtbWFwcGVkX3NwYWNlICV1XHJcbiIsICh1bnNpZ25lZCBpbnQpIGluZm8uaGJsa2hkKTsN
CisgICAgICAgIHBvcyArPSBzcHJpbnRmKHBvcywgIlNUQVQgbWF4X3RvdGFsX2FsbG9jICV1XHJc
biIsICh1bnNpZ25lZCBpbnQpIGluZm8udXNtYmxrcyk7DQorICAgICAgICBwb3MgKz0gc3ByaW50
Zihwb3MsICJTVEFUIGZhc3RiaW5fc3BhY2UgJXVcclxuIiwgKHVuc2lnbmVkIGludCkgaW5mby5m
c21ibGtzKTsNCisgICAgICAgIHBvcyArPSBzcHJpbnRmKHBvcywgIlNUQVQgdG90YWxfYWxsb2Mg
JXVcclxuIiwgKHVuc2lnbmVkIGludCkgaW5mby51b3JkYmxrcyk7DQorICAgICAgICBwb3MgKz0g
c3ByaW50Zihwb3MsICJTVEFUIHRvdGFsX2ZyZWUgJXVcclxuIiwgKHVuc2lnbmVkIGludCkgaW5m
by5mb3JkYmxrcyk7DQorICAgICAgICBwb3MgKz0gc3ByaW50Zihwb3MsICJTVEFUIHJlbGVhc2Fi
bGVfc3BhY2UgJXVcclxuRU5EIiwgKHVuc2lnbmVkIGludCkgaW5mby5rZWVwY29zdCk7DQogICAg
ICAgICBvdXRfc3RyaW5nKGMsIHRlbXApOw0KICAgICAgICAgcmV0dXJuOw0KICAgICB9DQpAQCAt
NjE2LDE1ICs2MjQsMTkgQEAgdm9pZCBwcm9jZXNzX2NvbW1hbmQoY29ubiAqYywgY2hhciAqY29t
bQ0KICAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICBpZiAoaXQpIHsNCisgICAgICAgICAg
ICAgICAgaWYgKGkgPT0gYy0+aXNpemUpIHsNCisgICAgICAgICAgICAgICAgICAgIGl0ZW0gKipu
ZXdfaWxpc3QgPSByZWFsbG9jKGMtPmlsaXN0LCBzaXplb2YoaXRlbSAqKSAqIDIgKiBjLT5pc2l6
ZSk7DQorICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2lsaXN0KSB7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgYy0+aXNpemUgKj0gMjsNCisgICAgICAgICAgICAgICAgICAgICAgICBjLT5p
bGlzdCA9IG5ld19pbGlzdDsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg
c3RhdHMuZ2V0X2hpdHMrKzsNCiAgICAgICAgICAgICAgICAgaXQtPnJlZmNvdW50Kys7DQogICAg
ICAgICAgICAgICAgIGl0ZW1fdXBkYXRlKGl0KTsNCiAgICAgICAgICAgICAgICAgKihjLT5pbGlz
dCArIGkpID0gaXQ7DQogICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICAgICAgaWYg
KGkgPiBjLT5pc2l6ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgYy0+aXNpemUgKj0gMjsNCi0g
ICAgICAgICAgICAgICAgICAgIGMtPmlsaXN0ID0gcmVhbGxvYyhjLT5pbGlzdCwgc2l6ZW9mKGl0
ZW0gKikqYy0+aXNpemUpOw0KLSAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfSBlbHNl
IHN0YXRzLmdldF9taXNzZXMrKzsNCiAgICAgICAgIH0NCiAgICAgICAgIGMtPmljdXJyID0gYy0+
aWxpc3Q7DQpAQCAtNjQ2LDEzICs2NTgsMjUgQEAgdm9pZCBwcm9jZXNzX2NvbW1hbmQoY29ubiAq
YywgY2hhciAqY29tbQ0KICAgICAgICAgaW50IHJlczsNCiAgICAgICAgIHRpbWVfdCBleHB0aW1l
ID0gMDsNCiANCi0gICAgICAgIHJlcyA9IHNzY2FuZihjb21tYW5kLCAiJSpzICUyNTBzICVkIiwg
a2V5LCAmZXhwdGltZSk7DQorICAgICAgICByZXMgPSBzc2NhbmYoY29tbWFuZCwgIiUqcyAlMjUw
cyAlbGQiLCBrZXksICZleHB0aW1lKTsNCiAgICAgICAgIGl0ID0gYXNzb2NfZmluZChrZXkpOw0K
ICAgICAgICAgaWYgKCFpdCkgew0KICAgICAgICAgICAgIG91dF9zdHJpbmcoYywgIk5PVF9GT1VO
RCIpOw0KICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgIH0NCiANCisgICAgICAgIGlmIChk
ZWxjdXJyID09IGRlbHRvdGFsKSB7DQorCQkJaXRlbSAqKm5ld190b2RlbGV0ZSA9IHJlYWxsb2Mo
dG9kZWxldGUsIHNpemVvZihpdGVtICopICogMiAqIGRlbHRvdGFsKTsNCisJCQlpZiAobmV3X3Rv
ZGVsZXRlKSB7DQorCQkJCWRlbHRvdGFsICo9IDI7DQorCQkJCXRvZGVsZXRlID0gbmV3X3RvZGVs
ZXRlOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJLyogRklYTUU6IGNhbiB3ZSBzYWZlbHkgZGVs
ZXRlIGl0ZW0gaGVyZSA/ICovDQorCQkgICAgICAgIG91dF9zdHJpbmcoYywgIlNFUlZFUl9FUlJP
UiBvdXQgb2YgbWVtb3J5Iik7DQorICAgICAgCQkgICAgcmV0dXJuOw0KKwkJCX0NCisgICAgICAg
IH0NCiAgICAgICAgIGV4cHRpbWUgPSByZWFsdGltZShleHB0aW1lKTsNCiANCiAgICAgICAgIGl0
LT5yZWZjb3VudCsrOw0KQEAgLTY2MCwxMCArNjg0LDYgQEAgdm9pZCBwcm9jZXNzX2NvbW1hbmQo
Y29ubiAqYywgY2hhciAqY29tbQ0KICAgICAgICAgaXQtPmV4cHRpbWUgPSBleHB0aW1lOw0KICAg
ICAgICAgaXQtPml0X2ZsYWdzIHw9IElURU1fREVMRVRFRDsNCiAgICAgICAgIHRvZGVsZXRlW2Rl
bGN1cnIrK10gPSBpdDsNCi0gICAgICAgIGlmIChkZWxjdXJyID49IGRlbHRvdGFsKSB7DQotICAg
ICAgICAgICAgZGVsdG90YWwgKj0gMjsNCi0gICAgICAgICAgICB0b2RlbGV0ZSA9IHJlYWxsb2Mo
dG9kZWxldGUsIHNpemVvZihpdGVtICopKmRlbHRvdGFsKTsNCi0gICAgICAgIH0NCiAgICAgICAg
IG91dF9zdHJpbmcoYywgIkRFTEVURUQiKTsNCiAgICAgICAgIHJldHVybjsNCiAgICAgfQ0KQEAg
LTEwMzUsMTEgKzEwNTUsMTAgQEAgdm9pZCBkcml2ZV9tYWNoaW5lKGNvbm4gKmMpIHsNCiAgICAg
ICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgaXQgPSAqKGMtPmljdXJy
KTsNCiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgoaXQtPml0X2ZsYWdzICYgSVRFTV9TTEFC
QkVEKSA9PSAwKTsNCi0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoYy0+aWJ1ZiwgIlZBTFVF
ICVzICV1ICV1XHJcbiIsIElURU1fa2V5KGl0KSwgaXQtPmZsYWdzLCBpdC0+bmJ5dGVzIC0gMik7
DQorICAgICAgICAgICAgICAgICAgICBjLT5pYnl0ZXMgPSBzcHJpbnRmKGMtPmlidWYsICJWQUxV
RSAlcyAldSAldVxyXG4iLCBJVEVNX2tleShpdCksIGl0LT5mbGFncywgaXQtPm5ieXRlcyAtIDIp
Ow0KICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnZlcmJvc2UgPiAxKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPiVkIHNlbmRpbmcga2V5ICVzXG4i
LCBjLT5zZmQsIElURU1fa2V5KGl0KSk7DQogICAgICAgICAgICAgICAgICAgICBjLT5pcHRyID0g
Yy0+aWJ1ZjsNCi0gICAgICAgICAgICAgICAgICAgIGMtPmlieXRlcyA9IHN0cmxlbihjLT5pcHRy
KTsNCiAgICAgICAgICAgICAgICAgICAgIGMtPmlwYXJ0ID0gMTsNCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICBjYXNlIDM6DQpAQCAtMTM2Myw3ICsxMzgyLDcg
QEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikgew0KICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJmYWlsZWQgdG8gZ2V0cmxpbWl0IG51bWJlciBvZiBmaWxlc1xuIik7DQogICAgICAg
ICBleGl0KDEpOw0KICAgICB9IGVsc2Ugew0KLSAgICAgICAgaW50IG1heGZpbGVzID0gc2V0dGlu
Z3MubWF4Y29ubnM7DQorICAgICAgICB1bnNpZ25lZCBpbnQgbWF4ZmlsZXMgPSBzZXR0aW5ncy5t
YXhjb25uczsNCiAgICAgICAgIGlmIChybGltLnJsaW1fY3VyIDwgbWF4ZmlsZXMpIA0KICAgICAg
ICAgICAgIHJsaW0ucmxpbV9jdXIgPSBtYXhmaWxlcyArIDM7DQogICAgICAgICBpZiAocmxpbS5y
bGltX21heCA8IHJsaW0ucmxpbV9jdXIpDQo=

--=-SqbMbXHfcdvGgJzugnVX--

--=-fTt7Y+9jtBQiKXCHIMq6
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: =?koi8-r?Q?=FC=D4=C1?= =?koi8-r?Q?_=DE=C1=D3=D4=D8?=
	=?koi8-r?Q?_=D3=CF=CF=C2=DD=C5=CE=C9=D1?=
	=?koi8-r?Q?_=D0=CF=C4=D0=C9=D3=C1=CE=C1?=
	=?koi8-r?Q?_=C3=C9=C6=D2=CF=D7=CF=CA?=
	=?koi8-r?Q?_=D0=CF=C4=D0=C9=D3=D8=C0?=

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQBBAPyntpDBPmRJgw0RApY4AKCl/UzIlJ4ZoahVwLZL9ETy0OuV3gCgj+gr
lCxfyrNzeH8tGUAEjoDx9VY=
=uhVw
-----END PGP SIGNATURE-----

--=-fTt7Y+9jtBQiKXCHIMq6--