Subject: scan_ffs from OpenBSD ported and improved.
To: None <tech-userlevel@netbsd.org>
From: Juan RP <juan@xtrarom.org>
List: tech-userlevel
Date: 06/06/2005 13:44:01
This is a multi-part message in MIME format.

--Multipart=_Mon__6_Jun_2005_13_44_01_+0200_hmEPe4=MspT6ruDy
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit


Hi, finally I've fixed all problems I had reported in my previous email
"Porting scan_ffs from OpenBSD", the following is the example of
this utility to find FFSv2 partitions with different blocksizes:

disklabel output:

6 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:     20480         0     4.2BSD    512  4096  5120  # (Cyl.      0 -      9)
 b:   1208320     20480     4.2BSD   1024  8192 46480  # (Cyl.     10 -    599)
 c:   2097152   1228800     4.2BSD   2048 16384 21848  # (Cyl.    600 -   1623)
 d:   8388608         0     unused      0     0        # (Cyl.      0 -   4095)
 e:   2097152   3325952     4.2BSD   4096 32768     0  # (Cyl.   1624 -   2647)
 f:   2965504   5423104     4.2BSD   8192 65536 46336  # (Cyl.   2648 -   4095)


scanffs output (scanffs -l sd0):

Disk: mydisk
Total sectors on disk: 8388608

#        size    offset fstype [fsize bsize cpg]
X:      20480         0 4.2BSD    512  4096   0 # /mnt/scsia [FFSv2]
X:    1208320     20480 4.2BSD   1024  8192   0 # /mnt/scsib [FFSv2]
X:    2097152   1228800 4.2BSD   2048 16384   0 # /mnt/scsic [FFSv2]
X:    2097152   3325952 4.2BSD   4096 32768   0 # /mnt/scsie [FFSv2]
X:    2965504   5423104 4.2BSD   8192 65536   0 # /mnt/scsif [FFSv2]

Please test and review, I'd want to commit this on the next days if there isn't
any objection.

Thanks.


--Multipart=_Mon__6_Jun_2005_13_44_01_+0200_hmEPe4=MspT6ruDy
Content-Type: application/octet-stream;
 name="scanffs.c"
Content-Disposition: attachment;
 filename="scanffs.c"
Content-Transfer-Encoding: base64

LyogICAgICBPcGVuQlNEOiBzY2FuX2Zmcy5jLHYgMS4xMSAyMDA0LzAyLzE2IDE5OjEzOjAzIGRl
cmFhZHQgRXhwCSovCi8qCSROZXRCU0QkCSovCgovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDUgSnVh
biBSb21lcm8gUGFyZGluZXMKICogQ29weXJpZ2h0IChjKSAxOTk4IE5pa2xhcyBIYWxscXZpc3Qs
IFRvYmlhcyBXZWluZ2FydG5lcgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCiAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCiAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwoKLyoKICogQ3VycmVu
dGx5IGl0IGNhbiBkZXRlY3Q6CiAqIAlvIEZGU3YxIHdpdGggZnJhZ3NpemUvYmxvY2tzaXplOiA1
MTIvNDA5NiwgMTAyNC84MTkyLCAyMDQ4LzE2Mzg0LgogKglvIEZGU3YyIHdpdGggZnJhZ3NpemUv
YmxvY2tzaXplOiA1MTIvNDA5NiwgMTAyNC84MTkyLCAyMDQ4LzE2Mzg0LAogKgkgIAkJCQkgNDA5
Ni8zMjc2OCwgODE5Mi82NTUzNi4KICogVE9ETzoKICoJbyBEZXRlY3QgRkZTdjEgcGFydGl0aW9u
cyB3aXRoIGZzaXplL2JzaXplID4gMjA0OC8xNjM4NC4KICoJbyBEZXRlY3QgRkZTdjIgcGFydGl0
aW9ucyB3aXRoIGZzaXplL2JzaXplID4gODE5Mi82NTUzNi4KICovCiAKI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPgojaWZuZGVmIGxpbnQKX19SQ1NJRCgiJE5ldEJTRCQiKTsKI2VuZGlmIC8qIG5vdCBs
aW50ICovCgojaW5jbHVkZSA8c3lzL2Rpc2tsYWJlbC5oPgojaW5jbHVkZSA8c3lzL2RraW8uaD4K
I2luY2x1ZGUgPHN5cy9pb2N0bC5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KI2luY2x1ZGUgPHN5cy9mY250bC5oPgojaW5jbHVkZSA8dWZzL2Zmcy9mcy5o
PgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0ZGlv
Lmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPGVyci5o
PgojaW5jbHVkZSA8dXRpbC5oPgoKI2RlZmluZSBWRVJCT1NFCTEKI2RlZmluZSBMQUJFTFMJMgoj
ZGVmaW5lIFNCQ09VTlQJNjQgLyogWFhYIHNob3VsZCBiZSBjb25maWd1cmFibGUgKi8KCnZvaWQJ
cHJpbnRwYXJ0KGludCwgaW50KTsKdm9pZAl1ZnNtYWdpYyh2b2lkKTsKdm9pZAl1c2FnZSh2b2lk
KTsKaW50CWNoZWNrZnN0eXBlKHZvaWQpOwppbnQJdWZzc2NhbihpbnQsIGRhZGRyX3QsIGRhZGRy
X3QsIGludCk7CgpjaGFyCWxhc3Rtb3VudFtNQVhNTlRMRU5dOwpjaGFyCWRldmljZVtNQVhQQVRI
TEVOXTsKY29uc3QJY2hhciAqZnN0eXBlID0gTlVMTDsKCmludCAJZWZsYWcgPSAwOwppbnQJZmxh
Z3MgPSAwOwppbnQJZnNpemU7CmludAlmc3J2ID0gMDsKaW50CW47CgpkYWRkcl90CWJsaywgbGFz
dGJsazsKCnN0cnVjdCBmcyAqc2I7CgppbnQgY2hlY2tmc3R5cGUodm9pZCkKewoJaW50IHJ2YWw7
CgoJc3dpdGNoIChzYi0+ZnNfbWFnaWMpIHsKCQljYXNlIEZTX1VGUzFfTUFHSUM6CgkJY2FzZSBG
U19VRlMxX01BR0lDX1NXQVBQRUQ6CgkJCXNiLT5mc19zaXplID0gc2ItPmZzX29sZF9zaXplOwoJ
CQlydmFsID0gMTsKCQkJZnN0eXBlID0gIkZGU3YxIjsKCQkJYnJlYWs7CgkJY2FzZSBGU19VRlMy
X01BR0lDOgoJCWNhc2UgRlNfVUZTMl9NQUdJQ19TV0FQUEVEOgoJCQlydmFsID0gMjsKCQkJZnN0
eXBlID0gIkZGU3YyIjsKCQkJYnJlYWs7CgkJZGVmYXVsdDoKCQkJcnZhbCA9IC0xOwoJCQkvKiBO
T1RSRUFDSEVEICovCgl9CglyZXR1cm4gcnZhbDsKfQoKdm9pZApwcmludHBhcnQoaW50IGZsYWcs
IGludCBmZnNpemUpCnsKCglpZiAoZmxhZyA9PSBWRVJCT1NFKSB7CgkJcHJpbnRmKCJibG9jazog
JSIgUFJJdTY0IiAiCgkJCSJpZCAleCwleCBzaXplICUiIFBSSXU2NCJcbiIsCgkJCWJsaysobi81
MTIpLCBzYi0+ZnNfaWRbMF0sCgkJCXNiLT5mc19pZFsxXSwgc2ItPmZzX3NpemUpOwoJfSBlbHNl
IGlmIChmbGFnID09IExBQkVMUykgewoJCXByaW50ZigiWDogICU5IiBQUkl1NjQgIiIsCgkJCShk
YWRkcl90KSgob2ZmX3Qpc2ItPmZzX3NpemUqc2ItPmZzX2ZzaXplLzUxMikpOwoJCWlmIChmc3J2
ID09IDEpCS8qIEZGU3YxICovCgkJCXByaW50ZigiICU5IiBQUkl1NjQgIiIsCgkJCQlibGsrKG4v
NTEyKS0oMipTQkxPQ0tTSVpFLzUxMikpOwoJCWVsc2UgaWYgKGZzcnYgPT0gMikJLyogRkZTdjIg
Ki8KCQkJcHJpbnRmKCIgJTkiIFBSSXU2NCAiIiwKCQkJCWJsaysobi81MTIpLShmZnNpemUqU0JM
T0NLU0laRS81MTIrMTI4KSk7CgkJcHJpbnRmKCIgNC4yQlNEICU2ZCAlNWQlNGQgIyAlcyBbJXNd
XG4iLAoJCQlzYi0+ZnNfZnNpemUsIHNiLT5mc19ic2l6ZSwKCQkJc2ItPmZzX29sZF9jcGcsIGxh
c3Rtb3VudCwgZnN0eXBlKTsKCX0gZWxzZSB7CgkJcHJpbnRmKCIlcyAiLCBmc3R5cGUpOwoJCWlm
IChmc3J2ID09IDEpCS8qIEZGU3YxICovCgkJCXByaW50ZigiYXQgJSIgUFJJdTY0ICIiLAoJCQkJ
YmxrKyhuLzUxMiktKDIqU0JMT0NLU0laRS81MTIpKTsKCQllbHNlIGlmIChmc3J2ID09IDIpCS8q
IEZGU3YyICovCgkJCXByaW50ZigiYXQgJSIgUFJJdTY0ICIiLAoJCQkJYmxrKyhuLzUxMiktKGZm
c2l6ZSpTQkxPQ0tTSVpFLzUxMisxMjgpKTsKCQlwcmludGYoIiBzaXplICUiIFBSSXU2NCAiLCBs
YXN0IG1vdW50ZWQgb24gJXNcbiIsCgkJCShkYWRkcl90KSgob2ZmX3Qpc2ItPmZzX3NpemUqc2It
PmZzX2ZzaXplLzUxMiksCgkJCWxhc3Rtb3VudCk7Cgl9Cn0KCnZvaWQKdWZzbWFnaWModm9pZCkK
ewoJLyogCgkgKiBGSVhNRToKCSAqIEl0IGNhbm5vdCBmaW5kIEZGU3YxIHBhcnRpdGlvbnMgd2l0
aCBmc2l6ZS9ic2l6ZSA+IDIwNDgvMTYzODQsCgkgKiBzYW1lIHByb2JsZW0gZm91bmQgaW4gdGhl
IG9yaWdpbmFsIHByb2dyYW0gdGhhdCBjb21lcyBmcm9tCgkgKiBPcGVuQlNEIChzY2FuX2Zmcygx
KSkuCgkgKi8KCWlmIChmbGFncyAmIFZFUkJPU0UpCgkJcHJpbnRwYXJ0KFZFUkJPU0UsIDApOwoJ
aWYgKGZzcnYgPT0gMSkgewkvKiBGRlN2MSAqLwoJCWlmICgoKGJsaysobi81MTIpKS1sYXN0Ymxr
KSA9PSAoU0JMT0NLU0laRS81MTIpKSB7CgkJCWlmIChmbGFncyAmIExBQkVMUykKCQkJCXByaW50
cGFydChMQUJFTFMsIDApOwoJCQllbHNlCgkJCQlwcmludHBhcnQoMCwgMCk7CgkJfQoJfSBlbHNl
IGlmIChmc3J2ID09IDIpIHsJLyogRkZTdjIgKi8KCS8qCgkgKiBUaGF0IGNoZWNrcyBmb3IgRkZT
djIgcGFydGl0aW9ucyB3aXRoIGZyYWdzaXplL2Jsb2Nrc2l6ZToKCSAqIDUxMi80MDk2LCAxMDI0
LzgxOTIsIDIwNDgvMTYzODQsIDQwOTYvMzI3NjggYW5kIDgxOTIvNjU1MzYuCgkgKiBSZWFsbHkg
ZW5vdWdoIGZvciBub3cuCgkgKi8KCQlpZiAoKChibGsrKG4vNTEyKSktbGFzdGJsaykgPT0gKDEq
U0JMT0NLU0laRS81MTIpKSB7CgkJCWlmIChmbGFncyAmIExBQkVMUykKCQkJCXByaW50cGFydChM
QUJFTFMsIDEpOwoJCQllbHNlCgkJCQlwcmludHBhcnQoMCwgMSk7CgkJfSBlbHNlIGlmICgoKGJs
aysobi81MTIpKS1sYXN0YmxrKSA9PSAoMipTQkxPQ0tTSVpFLzUxMikpIHsKCQkJaWYgKGZsYWdz
ICYgTEFCRUxTKQoJCQkJcHJpbnRwYXJ0KExBQkVMUywgMik7CgkJCWVsc2UKCQkJCXByaW50cGFy
dCgwLCAyKTsKCQl9IGVsc2UgaWYgKCgoYmxrKyhuLzUxMikpLWxhc3RibGspID09ICg0KlNCTE9D
S1NJWkUvNTEyKSkgewoJCQlpZiAoZmxhZ3MgJiBMQUJFTFMpCgkJCQlwcmludHBhcnQoTEFCRUxT
LCA0KTsKCQkJZWxzZQoJCQkJcHJpbnRwYXJ0KDAsIDQpOwoJCX0gZWxzZSBpZiAoKChibGsrKG4v
NTEyKSktbGFzdGJsaykgPT0gKDgqU0JMT0NLU0laRS81MTIpKSB7CgkJCWlmIChmbGFncyAmIExB
QkVMUykKCQkJCXByaW50cGFydChMQUJFTFMsIDgpOwoJCQllbHNlCgkJCQlwcmludHBhcnQoMCwg
OCk7CgkJfQoJfQp9CgppbnQKdWZzc2NhbihpbnQgZmQsIGRhZGRyX3QgYmVnLCBkYWRkcl90IGVu
ZCwgaW50IGZmbGFncykKewoJdV9pbnQ4X3QgYnVmW1NCTE9DS1NJWkUgKiBTQkNPVU5UXTsKCWxh
c3RibGsgPSAtMTsKCW1lbXNldChsYXN0bW91bnQsIDAsIE1BWE1OVExFTik7CgoJaWYgKGZmbGFn
cyAmIExBQkVMUykKCQlwcmludGYoIiMgICAgICAgIHNpemUgICAgb2Zmc2V0IGZzdHlwZSBbZnNp
emUgYnNpemUgY3BnXVxuIik7CgogICAgICAgIGZvciAoYmxrID0gYmVnOyBibGsgPD0gKChlbmQg
PCAwKSA/IGJsazogZW5kKTsKCSAgICAgYmxrICs9IChTQkNPVU5UKlNCTE9DS1NJWkUvNTEyKSkg
ewoJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKCgkJaWYgKGxzZWVrKGZkLCAob2ZmX3Qp
YmxrKjUxMiwgU0VFS19TRVQpIDwgMCkKCQkJZXJyKDEsICJsc2VlayIpOwoKCQlpZiAocmVhZChm
ZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwKQoJCQllcnIoMSwgInJlYWQiKTsKCgkJZm9yIChuID0g
MDsgbiA8IChTQkxPQ0tTSVpFKlNCQ09VTlQpOyBuICs9IDUxMikgewoJCQlzYiA9IChzdHJ1Y3Qg
ZnMqKSgmYnVmW25dKTsKCQkJZnNydiA9IGNoZWNrZnN0eXBlKCk7CgkJCWlmIChmc3J2ID49IDEp
IHsgLyogZm91bmQhICovCgkJCQl1ZnNtYWdpYygpOwoJCQkJLyogVXBkYXRlIGxhc3QgcG90ZW50
aWFsIEZTIFNCcyBzZWVuICovCgkJCQlsYXN0YmxrID0gYmxrICsgKG4vNTEyKTsKCQkJCW1lbWNw
eShsYXN0bW91bnQsIHNiLT5mc19mc21udCwgTUFYTU5UTEVOKTsKCQkJfQoJCX0KCX0KCXJldHVy
biAwOwp9CgoKdm9pZAp1c2FnZSh2b2lkKQp7CiAgICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIs
InVzYWdlOiAlcyBbLWxodl0iLCBnZXRwcm9nbmFtZSgpKTsKCSh2b2lkKWZwcmludGYoc3RkZXJy
LCIgWy1zIHN0YXJ0XSBbLWUgZW5kXSBkZXZpY2VcbiIpOwogICAgICAgIGV4aXQoMSk7Cn0KCgpp
bnQKbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCXN0cnVjdCBkaXNrbGFiZWwgZGw7Cgog
ICAgICAgIGludCBjaCwgZmQ7CiAgICAgICAgZGFkZHJfdCBlbmQsIGJlZyA9IDA7CgoJc2V0cHJv
Z25hbWUoYXJndlswXSk7CgogICAgICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwg
Imx2czplOmgiKSkgIT0gLTEpCiAgICAgICAgICAgICAgICBzd2l0Y2goY2gpIHsKICAgICAgICAg
ICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgICAgICAgICBiZWcgPSBhdG9pKG9wdGFy
Zyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn
ZSc6CgkJCWVmbGFnID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gYXRvaShvcHRh
cmcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J3YnOgogICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBWRVJCT1NFOwogICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2wnOgogICAgICAgICAg
ICAgICAgICAgICAgICBmbGFncyB8PSBMQUJFTFM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwoJCWNhc2UgJ2gnOgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgICAgdXNhZ2UoKTsKCQkJLyogTk9UUkVBQ0hFRCAqLwogICAgICAgIH0KICAgICAgICBh
cmdjIC09IG9wdGluZDsKICAgICAgICBhcmd2ICs9IG9wdGluZDsKCiAgICAgICAgaWYgKGFyZ2Mg
IT0gMSkKICAgICAgICAgICAgICAgIHVzYWdlKCk7CgogICAgICAgIGZkID0gb3BlbmRpc2soYXJn
dlswXSwgT19SRE9OTFksIGRldmljZSwgc2l6ZW9mKGRldmljZSksIDApOwoKICAgICAgICBpZiAo
ZmQgPCAwKQogICAgICAgICAgICAgICAgZXJyKDEsICIlcyIsIGRldmljZSk7CgoJaWYgKGlvY3Rs
KGZkLCBESU9DR0RJTkZPLCAmZGwpID09IC0xKSB7CgkJd2FybngoImNvdWxkbid0IHJldHJpZXZl
IGRpc2tsYWJlbC5cbiIpOwoJCWVuZCA9IC0xOwoJfSBlbHNlIHsKCQlwcmludGYoIkRpc2s6ICVz
XG4iLCBkbC5kX3R5cGVuYW1lKTsKCQlwcmludGYoIlRvdGFsIHNlY3RvcnMgb24gZGlzazogJSIg
UFJJdTMyICJcblxuIiwKCQkJZGwuZF9zZWNwZXJ1bml0KTsKCX0KCQoJaWYgKCFlZmxhZykKCQll
bmQgPSBkbC5kX3NlY3BlcnVuaXQ7IC8qIGRlZmF1bHQgdG8gbWF4IHNlY3RvcnMgKi8KCiAgICAg
ICAgcmV0dXJuICh1ZnNzY2FuKGZkLCBiZWcsIGVuZCwgZmxhZ3MpKTsKfQo=

--Multipart=_Mon__6_Jun_2005_13_44_01_+0200_hmEPe4=MspT6ruDy--