[kaffe] java.lang.reflect.Method virtual method call bug (CVS)
Helmer Krämer
hkraemer@freenet.de
Sat, 28 Dec 2002 00:28:45 +0100
This is a multi-part message in MIME format.
--Multipart_Sat__28_Dec_2002_00:28:45_+0100_09388348
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
On Fri, 27 Dec 2002 14:32:09 +0100
Benja Fallenstein <b.fallenstein@gmx.de> wrote:
Hi Benja,
> a few months ago, Vesa Kaihlavirta wrote you about a problem with Kaffe
> and Jython (in both the CVS and 1.0.7 versions). Unfortunately, nobody
> was able to work out what the bug really was. It still exists in the
> current CVS version (updated today). Fortunately, I think I may have
> succeeded in making it shallow.
>
> Vesa's original mail is at:
> http://www.kaffe.org/pipermail/kaffe/2002-September/008910.html
thanks that you took the time to have a look
at this.
> It seems that the bug is with kaffe's handling of reflected virtual
> methods. The following code:
>
>
> import java.lang.reflect.Method;
>
> interface KaffeBugInterface {
> void sayHi();
> }
>
> public class KaffeBug implements KaffeBugInterface {
> public void sayHi() {
> System.out.println("Hi");
> }
>
> public static void main(String[] argv) throws Exception {
> KaffeBug kb = new KaffeBug();
> kb.sayHi();
>
> Method m = KaffeBugInterface.class.getMethod("sayHi",
> new Class[0]);
> m.invoke(kb, new Object[0]);
> }
> }
>
> gives the expected output on IBM's Java 1.3.1,
>
> benja@joy:~/gzz/bug$ /home/benja/IBMJava2-131/bin/java KaffeBug
> Hi
> Hi
>
> but fails with Kaffe:
>
> benja@joy:~/gzz/bug$ /usr/local/kaffe/bin/kaffe KaffeBug
> Hi
> java.lang.reflect.InvocationTargetException:
> java.lang.CloneNotSupportedException: KaffeBug
> at java.lang.Object.clone(Object.java:native)
> at java.lang.reflect.Method.invoke0(Method.java:native)
> at java.lang.reflect.Method.invoke(Method.java:256)
> at KaffeBug.main(KaffeBug.java:18)
>
> It seems like Kaffe calls the wrong method in cases like this, here
> 'clone()' instead of 'sayHi()'. It doesn't always seem to be 'clone()',
> though; using the Jython interpreter, it seems that calling 'length()'
> on a java.lang.String object invokes 'equals()' instead:
With that nice test case of yours, I was able to
track this bug down and hopefully also fix it.
The problem was that kaffe did not choose the
correct entry in the dispatch table of the object
when calling interface methods via reflection
or jni.
With the attached patch applied to kaffe CVS, your
test case works fine, but would you be so kind to
check whether it fixes your problems with jython,
too?
Greetings,
Helmer
--Multipart_Sat__28_Dec_2002_00:28:45_+0100_09388348
Content-Type: application/octet-stream;
name="interface-call-patch"
Content-Disposition: attachment;
filename="interface-call-patch"
Content-Transfer-Encoding: base64
SW5kZXg6IGthZmZlL2thZmZldm0vY2xhc3NNZXRob2QuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL2thZmZlL2thZmZlL2thZmZlL2thZmZldm0vY2xhc3NNZXRob2QuYyx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS45MwpkaWZmIC13IC11IC1wIC1yMS45MyBjbGFzc01ldGhvZC5jCi0tLSBrYWZm
ZS9rYWZmZXZtL2NsYXNzTWV0aG9kLmMJMTggT2N0IDIwMDIgMTM6NTQ6MTQgLTAwMDAJMS45Mwor
Kysga2FmZmUva2FmZmV2bS9jbGFzc01ldGhvZC5jCTI3IERlYyAyMDAyIDIyOjIxOjE0IC0wMDAw
CkBAIC00ODUsNyArNDg1LDcgQEAgREJHKFNUQVRJQ0lOSVQsCiBEQkcoU1RBVElDSU5JVCwKIAkJ
CWRwcmludGYoInVzaW5nIGNhbGxNZXRob2RBXG4iKTsKICAgICApCi0JCQljYWxsTWV0aG9kQSht
ZXRoLCBNRVRIT0RfSU5ESVJFQ1RNRVRIT0QobWV0aCksIDAsIDAsIDAsIDEpOworCQkJY2FsbE1l
dGhvZEEobWV0aCwgMCwgMCwgMCwgMSk7CiAJCX0KIAogCQlsb2NrQ2xhc3MoY2xhc3MpOwpJbmRl
eDoga2FmZmUva2FmZmV2bS9qbmkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2thZmZlL2th
ZmZlL2thZmZlL2thZmZldm0vam5pLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODAKZGlmZiAt
dyAtdSAtcCAtcjEuODAgam5pLmMKLS0tIGthZmZlL2thZmZldm0vam5pLmMJMTggT2N0IDIwMDIg
MTM6NTQ6MTQgLTAwMDAJMS44MAorKysga2FmZmUva2FmZmV2bS9qbmkuYwkyNyBEZWMgMjAwMiAy
MjoyMToxNSAtMDAwMApAQCAtNDc1LDcgKzQ3NSw3IEBAIEthZmZlX05ld09iamVjdFYoSk5JRW52
KiBlbnYsIGpjbGFzcyBjbHMKIAl9CiAJb2JqID0gbmV3T2JqZWN0KGNsYXp6KTsKIAotCWNhbGxN
ZXRob2RWKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgb2JqLCBhcmdzLCAmcmV0dmFsKTsKKwljYWxs
TWV0aG9kVihtLCBvYmosIGFyZ3MsICZyZXR2YWwpOwogCiAJQUREX1JFRihvYmopOwogCUVORF9F
WENFUFRJT05fSEFORExJTkcoKTsKQEAgLTUxNSw3ICs1MTUsNyBAQCBLYWZmZV9OZXdPYmplY3RB
KEpOSUVudiogZW52LCBqY2xhc3MgY2xzCiAJfQogCW9iaiA9IG5ld09iamVjdChjbGF6eik7CiAK
LQljYWxsTWV0aG9kQShtLCBKTklfTUVUSE9EX0NPREUobSksIG9iaiwgYXJncywgJnJldHZhbCwg
MCk7CisJY2FsbE1ldGhvZEEobSwgb2JqLCBhcmdzLCAmcmV0dmFsLCAwKTsKIAogCUFERF9SRUYo
b2JqKTsKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CkBAIC01ODcsOCArNTg3LDcgQEAgS2Fm
ZmVfQ2FsbE9iamVjdE1ldGhvZFYoSk5JRW52KiBlbnYsIGpvYgogCQl0aHJvd0V4Y2VwdGlvbihO
b1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwg
KG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+aWR4XQotCQkJOiBKTklfTUVUSE9E
X0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG0sIG9iaiwgYXJn
cywgJnJldHZhbCk7CiAKIAlBRERfUkVGKHJldHZhbC5sKTsKIAlFTkRfRVhDRVBUSU9OX0hBTkRM
SU5HKCk7CkBAIC02MjQsOCArNjIzLDcgQEAgS2FmZmVfQ2FsbE9iamVjdE1ldGhvZEEoSk5JRW52
KiBlbnYsIGpvYgogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5k
YXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5t
ZXRob2RbbS0+aWR4XQotCQkJOiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2
YWwsIDApOworCWNhbGxNZXRob2RBKG0sIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRf
RVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuIChyZXR2YWwubCk7CkBAIC02NDQsOCArNjQy
LDcgQEAgS2FmZmVfQ2FsbEJvb2xlYW5NZXRob2RWKEpOSUVudiogZW52LCBqbwogCQl0aHJvd0V4
Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1l
dGhvZFYobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+aWR4XQotCQkJOiBK
TklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG0s
IG9iaiwgYXJncywgJnJldHZhbCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0
dXJuICgoamJvb2xlYW4pIHJldHZhbC5pKTsKQEAgLTY4MCw4ICs2NzcsNyBAQCBLYWZmZV9DYWxs
Qm9vbGVhbk1ldGhvZEEoSk5JRW52KiBlbnYsIGpvCiAJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1l
dGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kQShtLCAobS0+aWR4
ID49IDAgPyBvLT5kdGFibGUtPm1ldGhvZFttLT5pZHhdCi0JCQk6IEpOSV9NRVRIT0RfQ09ERSht
KSksIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CisJY2FsbE1ldGhvZEEobSwgb2JqLCBhcmdzLCAm
cmV0dmFsLCAwKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKChqYm9v
bGVhbikgcmV0dmFsLmkpOwpAQCAtNzAwLDggKzY5Niw3IEBAIEthZmZlX0NhbGxCeXRlTWV0aG9k
VihKTklFbnYqIGVudiwgam9iamUKIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3Io
bS0+bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RWKG0sIChtLT5pZHggPj0gMCA/IG8t
PmR0YWJsZS0+bWV0aG9kW20tPmlkeF0KLQkJCTogSk5JX01FVEhPRF9DT0RFKG0pKSwgb2JqLCBh
cmdzLCAmcmV0dmFsKTsKKwljYWxsTWV0aG9kVihtLCBvYmosIGFyZ3MsICZyZXR2YWwpOwogCiAJ
RU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAoKGpieXRlKSByZXR2YWwuaSk7CkBA
IC03MzYsOCArNzMxLDcgQEAgS2FmZmVfQ2FsbEJ5dGVNZXRob2RBKEpOSUVudiogZW52LCBqb2Jq
ZQogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJ
fQogCi0JY2FsbE1ldGhvZEEobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+
aWR4XQotCQkJOiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOwor
CWNhbGxNZXRob2RBKG0sIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhDRVBUSU9O
X0hBTkRMSU5HKCk7CiAJcmV0dXJuICgoamJ5dGUpIHJldHZhbC5pKTsKQEAgLTc1Niw4ICs3NTAs
NyBAQCBLYWZmZV9DYWxsQ2hhck1ldGhvZFYoSk5JRW52KiBlbnYsIGpvYmplCiAJCXRocm93RXhj
ZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0
aG9kVihtLCAobS0+aWR4ID49IDAgPyBvLT5kdGFibGUtPm1ldGhvZFttLT5pZHhdCi0JCQk6IEpO
SV9NRVRIT0RfQ09ERShtKSksIG9iaiwgYXJncywgJnJldHZhbCk7CisJY2FsbE1ldGhvZFYobSwg
b2JqLCBhcmdzLCAmcmV0dmFsKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1
cm4gKChqY2hhcikgcmV0dmFsLmkpOwpAQCAtNzkyLDggKzc4NSw3IEBAIEthZmZlX0NhbGxDaGFy
TWV0aG9kQShKTklFbnYqIGVudiwgam9iamUKIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9k
RXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RBKG0sIChtLT5pZHggPj0g
MCA/IG8tPmR0YWJsZS0+bWV0aG9kW20tPmlkeF0KLQkJCTogSk5JX01FVEhPRF9DT0RFKG0pKSwg
b2JqLCBhcmdzLCAmcmV0dmFsLCAwKTsKKwljYWxsTWV0aG9kQShtLCBvYmosIGFyZ3MsICZyZXR2
YWwsIDApOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAoKGpjaGFyKSBy
ZXR2YWwuaSk7CkBAIC04MTIsOCArODA0LDcgQEAgS2FmZmVfQ2FsbFNob3J0TWV0aG9kVihKTklF
bnYqIGVudiwgam9iagogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1l
LT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxl
LT5tZXRob2RbbS0+aWR4XQotCQkJOiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZy
ZXR2YWwpOworCWNhbGxNZXRob2RWKG0sIG9iaiwgYXJncywgJnJldHZhbCk7CiAKIAlFTkRfRVhD
RVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuICgoanNob3J0KSByZXR2YWwuaSk7CkBAIC04NDgs
OCArODM5LDcgQEAgS2FmZmVfQ2FsbFNob3J0TWV0aG9kQShKTklFbnYqIGVudiwgam9iagogCQl0
aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0J
Y2FsbE1ldGhvZEEobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+aWR4XQot
CQkJOiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOworCWNhbGxN
ZXRob2RBKG0sIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRM
SU5HKCk7CiAJcmV0dXJuICgoanNob3J0KSByZXR2YWwuaSk7CkBAIC04NjgsOCArODU4LDcgQEAg
S2FmZmVfQ2FsbEludE1ldGhvZFYoSk5JRW52KiBlbnYsIGpvYmplYwogCQl0aHJvd0V4Y2VwdGlv
bihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYo
bSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+aWR4XQotCQkJOiBKTklfTUVU
SE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG0sIG9iaiwg
YXJncywgJnJldHZhbCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuIChy
ZXR2YWwuaSk7CkBAIC05MDQsOCArODkzLDcgQEAgS2FmZmVfQ2FsbEludE1ldGhvZEEoSk5JRW52
KiBlbnYsIGpvYmplYwogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1l
LT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxl
LT5tZXRob2RbbS0+aWR4XQotCQkJOiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZy
ZXR2YWwsIDApOworCWNhbGxNZXRob2RBKG0sIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlF
TkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuIChyZXR2YWwuaSk7CkBAIC05MjQsOCAr
OTEyLDcgQEAgS2FmZmVfQ2FsbExvbmdNZXRob2RWKEpOSUVudiogZW52LCBqb2JqZQogCQl0aHJv
d0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2Fs
bE1ldGhvZFYobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+aWR4XQotCQkJ
OiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwpOworCWNhbGxNZXRob2RW
KG0sIG9iaiwgYXJncywgJnJldHZhbCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJ
cmV0dXJuIChyZXR2YWwuaik7CkBAIC05NjAsOCArOTQ3LDcgQEAgS2FmZmVfQ2FsbExvbmdNZXRo
b2RBKEpOSUVudiogZW52LCBqb2JqZQogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJv
cihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgKG0tPmlkeCA+PSAwID8g
by0+ZHRhYmxlLT5tZXRob2RbbS0+aWR4XQotCQkJOiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmos
IGFyZ3MsICZyZXR2YWwsIDApOworCWNhbGxNZXRob2RBKG0sIG9iaiwgYXJncywgJnJldHZhbCwg
MCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuIChyZXR2YWwuaik7CkBA
IC05ODAsOCArOTY2LDcgQEAgS2FmZmVfQ2FsbEZsb2F0TWV0aG9kVihKTklFbnYqIGVudiwgam9i
agogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJ
fQogCi0JY2FsbE1ldGhvZFYobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+
aWR4XQotCQkJOiBKTklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwpOworCWNh
bGxNZXRob2RWKG0sIG9iaiwgYXJncywgJnJldHZhbCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRM
SU5HKCk7CiAJcmV0dXJuIChyZXR2YWwuZik7CkBAIC0xMDE2LDggKzEwMDEsNyBAQCBLYWZmZV9D
YWxsRmxvYXRNZXRob2RBKEpOSUVudiogZW52LCBqb2JqCiAJCXRocm93RXhjZXB0aW9uKE5vU3Vj
aE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kQShtLCAobS0+
aWR4ID49IDAgPyBvLT5kdGFibGUtPm1ldGhvZFttLT5pZHhdCi0JCQk6IEpOSV9NRVRIT0RfQ09E
RShtKSksIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CisJY2FsbE1ldGhvZEEobSwgb2JqLCBhcmdz
LCAmcmV0dmFsLCAwKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKHJl
dHZhbC5mKTsKQEAgLTEwMzYsOCArMTAyMCw3IEBAIEthZmZlX0NhbGxEb3VibGVNZXRob2RWKEpO
SUVudiogZW52LCBqb2IKIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFt
ZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RWKG0sIChtLT5pZHggPj0gMCA/IG8tPmR0YWJs
ZS0+bWV0aG9kW20tPmlkeF0KLQkJCTogSk5JX01FVEhPRF9DT0RFKG0pKSwgb2JqLCBhcmdzLCAm
cmV0dmFsKTsKKwljYWxsTWV0aG9kVihtLCBvYmosIGFyZ3MsICZyZXR2YWwpOwogCiAJRU5EX0VY
Q0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAocmV0dmFsLmQpOwpAQCAtMTA3Miw4ICsxMDU1
LDcgQEAgS2FmZmVfQ2FsbERvdWJsZU1ldGhvZEEoSk5JRW52KiBlbnYsIGpvYgogCQl0aHJvd0V4
Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1l
dGhvZEEobSwgKG0tPmlkeCA+PSAwID8gby0+ZHRhYmxlLT5tZXRob2RbbS0+aWR4XQotCQkJOiBK
TklfTUVUSE9EX0NPREUobSkpLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOworCWNhbGxNZXRob2RB
KG0sIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7
CiAJcmV0dXJuIChyZXR2YWwuZCk7CkBAIC0xMDkxLDggKzEwNzMsNyBAQCBLYWZmZV9DYWxsVm9p
ZE1ldGhvZFYoSk5JRW52KiBlbnYsIGpvYmplCiAJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhv
ZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kVihtLCAobS0+aWR4ID49
IDAgPyBvLT5kdGFibGUtPm1ldGhvZFttLT5pZHhdCi0JCQk6IEpOSV9NRVRIT0RfQ09ERShtKSks
IG9iaiwgYXJncywgMCk7CisJY2FsbE1ldGhvZFYobSwgb2JqLCBhcmdzLCAwKTsKIAogCUVORF9F
WENFUFRJT05fSEFORExJTkcoKTsKIH0KQEAgLTExMjMsOCArMTEwNCw3IEBAIEthZmZlX0NhbGxW
b2lkTWV0aG9kQShKTklFbnYqIGVudiwgam9iamUKIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0
aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RBKG0sIChtLT5pZHgg
Pj0gMCA/IG8tPmR0YWJsZS0+bWV0aG9kW20tPmlkeF0KLQkJCTogSk5JX01FVEhPRF9DT0RFKG0p
KSwgb2JqLCBhcmdzLCAwLCAwKTsKKwljYWxsTWV0aG9kQShtLCBvYmosIGFyZ3MsIDAsIDApOwog
CiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogfQpAQCAtMTE0MSw3ICsxMTIxLDcgQEAgS2Fm
ZmVfQ2FsbE5vbnZpcnR1YWxPYmplY3RNZXRob2RWKEpOSUVudgogCQl0aHJvd0V4Y2VwdGlvbihO
b1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwg
Sk5JX01FVEhPRF9DT0RFKG0pLCBvYmosIGFyZ3MsICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG0s
IG9iaiwgYXJncywgJnJldHZhbCk7CiAKIAlBRERfUkVGKHJldHZhbC5sKTsKIAlFTkRfRVhDRVBU
SU9OX0hBTkRMSU5HKCk7CkBAIC0xMTc2LDcgKzExNTYsNyBAQCBLYWZmZV9DYWxsTm9udmlydHVh
bE9iamVjdE1ldGhvZEEoSk5JRW52CiAJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9y
KG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kQShtLCBKTklfTUVUSE9EX0NPREUo
bSksIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CisJY2FsbE1ldGhvZEEobSwgb2JqLCBhcmdzLCAm
cmV0dmFsLCAwKTsKIAogCUFERF9SRUYocmV0dmFsLmwpOwogCUVORF9FWENFUFRJT05fSEFORExJ
TkcoKTsKQEAgLTExOTUsNyArMTE3NSw3IEBAIEthZmZlX0NhbGxOb252aXJ0dWFsQm9vbGVhbk1l
dGhvZFYoSk5JRW4KIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+
ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RWKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgb2JqLCBh
cmdzLCAmcmV0dmFsKTsKKwljYWxsTWV0aG9kVihtLCBvYmosIGFyZ3MsICZyZXR2YWwpOwogCiAJ
RU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAoKGpib29sZWFuKSByZXR2YWwuaSk7
CkBAIC0xMjI5LDcgKzEyMDksNyBAQCBLYWZmZV9DYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RB
KEpOSUVuCiAJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEp
KTsKIAl9CiAKLQljYWxsTWV0aG9kQShtLCBKTklfTUVUSE9EX0NPREUobSksIG9iaiwgYXJncywg
JnJldHZhbCwgMCk7CisJY2FsbE1ldGhvZEEobSwgb2JqLCBhcmdzLCAmcmV0dmFsLCAwKTsKIAog
CUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKChqYm9vbGVhbikgcmV0dmFsLmkp
OwpAQCAtMTI0Nyw3ICsxMjI3LDcgQEAgS2FmZmVfQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kVihK
TklFbnYqIAogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRh
KSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwgSk5JX01FVEhPRF9DT0RFKG0pLCBvYmosIGFyZ3Ms
ICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG0sIG9iaiwgYXJncywgJnJldHZhbCk7CiAKIAlFTkRf
RVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuICgoamJ5dGUpIHJldHZhbC5pKTsKQEAgLTEy
ODEsNyArMTI2MSw3IEBAIEthZmZlX0NhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZEEoSk5JRW52KiAK
IAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0K
IAotCWNhbGxNZXRob2RBKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgb2JqLCBhcmdzLCAmcmV0dmFs
LCAwKTsKKwljYWxsTWV0aG9kQShtLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOwogCiAJRU5EX0VY
Q0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAoKGpieXRlKSByZXR2YWwuaSk7CkBAIC0xMjk5
LDcgKzEyNzksNyBAQCBLYWZmZV9DYWxsTm9udmlydHVhbENoYXJNZXRob2RWKEpOSUVudiogCiAJ
CXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAK
LQljYWxsTWV0aG9kVihtLCBKTklfTUVUSE9EX0NPREUobSksIG9iaiwgYXJncywgJnJldHZhbCk7
CisJY2FsbE1ldGhvZFYobSwgb2JqLCBhcmdzLCAmcmV0dmFsKTsKIAogCUVORF9FWENFUFRJT05f
SEFORExJTkcoKTsKIAlyZXR1cm4gKChqY2hhcikgcmV0dmFsLmkpOwpAQCAtMTMzMyw3ICsxMzEz
LDcgQEAgS2FmZmVfQ2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kQShKTklFbnYqIAogCQl0aHJvd0V4
Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1l
dGhvZEEobSwgSk5JX01FVEhPRF9DT0RFKG0pLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOworCWNh
bGxNZXRob2RBKG0sIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hB
TkRMSU5HKCk7CiAJcmV0dXJuICgoamNoYXIpIHJldHZhbC5pKTsKQEAgLTEzNTEsNyArMTMzMSw3
IEBAIEthZmZlX0NhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RWKEpOSUVudioKIAkJdGhyb3dFeGNl
cHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRo
b2RWKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgb2JqLCBhcmdzLCAmcmV0dmFsKTsKKwljYWxsTWV0
aG9kVihtLCBvYmosIGFyZ3MsICZyZXR2YWwpOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygp
OwogCXJldHVybiAoKGpzaG9ydCkgcmV0dmFsLmkpOwpAQCAtMTM4NSw3ICsxMzY1LDcgQEAgS2Fm
ZmVfQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZEEoSk5JRW52KgogCQl0aHJvd0V4Y2VwdGlvbihO
b1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwg
Sk5JX01FVEhPRF9DT0RFKG0pLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOworCWNhbGxNZXRob2RB
KG0sIG9iaiwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7
CiAJcmV0dXJuICgoanNob3J0KSByZXR2YWwuaSk7CkBAIC0xNDAzLDcgKzEzODMsNyBAQCBLYWZm
ZV9DYWxsTm9udmlydHVhbEludE1ldGhvZFYoSk5JRW52KiBlCiAJCXRocm93RXhjZXB0aW9uKE5v
U3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kVihtLCBK
TklfTUVUSE9EX0NPREUobSksIG9iaiwgYXJncywgJnJldHZhbCk7CisJY2FsbE1ldGhvZFYobSwg
b2JqLCBhcmdzLCAmcmV0dmFsKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1
cm4gKHJldHZhbC5pKTsKQEAgLTE0MzcsNyArMTQxNyw3IEBAIEthZmZlX0NhbGxOb252aXJ0dWFs
SW50TWV0aG9kQShKTklFbnYqIGUKIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3Io
bS0+bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RBKG0sIEpOSV9NRVRIT0RfQ09ERSht
KSwgb2JqLCBhcmdzLCAmcmV0dmFsLCAwKTsKKwljYWxsTWV0aG9kQShtLCBvYmosIGFyZ3MsICZy
ZXR2YWwsIDApOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAocmV0dmFs
LmkpOwpAQCAtMTQ1NSw3ICsxNDM1LDcgQEAgS2FmZmVfQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9k
VihKTklFbnYqIAogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5k
YXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwgSk5JX01FVEhPRF9DT0RFKG0pLCBvYmosIGFy
Z3MsICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG0sIG9iaiwgYXJncywgJnJldHZhbCk7CiAKIAlF
TkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuIChyZXR2YWwuaik7CkBAIC0xNDg5LDcg
KzE0NjksNyBAQCBLYWZmZV9DYWxsTm9udmlydHVhbExvbmdNZXRob2RBKEpOSUVudiogCiAJCXRo
cm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQlj
YWxsTWV0aG9kQShtLCBKTklfTUVUSE9EX0NPREUobSksIG9iaiwgYXJncywgJnJldHZhbCwgMCk7
CisJY2FsbE1ldGhvZEEobSwgb2JqLCBhcmdzLCAmcmV0dmFsLCAwKTsKIAogCUVORF9FWENFUFRJ
T05fSEFORExJTkcoKTsKIAlyZXR1cm4gKHJldHZhbC5qKTsKQEAgLTE1MDcsNyArMTQ4Nyw3IEBA
IEthZmZlX0NhbGxOb252aXJ0dWFsRmxvYXRNZXRob2RWKEpOSUVudioKIAkJdGhyb3dFeGNlcHRp
b24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RW
KG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgb2JqLCBhcmdzLCAmcmV0dmFsKTsKKwljYWxsTWV0aG9k
VihtLCBvYmosIGFyZ3MsICZyZXR2YWwpOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwog
CXJldHVybiAocmV0dmFsLmYpOwpAQCAtMTU0MSw3ICsxNTIxLDcgQEAgS2FmZmVfQ2FsbE5vbnZp
cnR1YWxGbG9hdE1ldGhvZEEoSk5JRW52KgogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RF
cnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgSk5JX01FVEhPRF9D
T0RFKG0pLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOworCWNhbGxNZXRob2RBKG0sIG9iaiwgYXJn
cywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuIChy
ZXR2YWwuZik7CkBAIC0xNTU5LDcgKzE1MzksNyBAQCBLYWZmZV9DYWxsTm9udmlydHVhbERvdWJs
ZU1ldGhvZFYoSk5JRW52CiAJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5h
bWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kVihtLCBKTklfTUVUSE9EX0NPREUobSksIG9i
aiwgYXJncywgJnJldHZhbCk7CisJY2FsbE1ldGhvZFYobSwgb2JqLCBhcmdzLCAmcmV0dmFsKTsK
IAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKHJldHZhbC5kKTsKQEAgLTE1
OTMsNyArMTU3Myw3IEBAIEthZmZlX0NhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kQShKTklFbnYK
IAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0K
IAotCWNhbGxNZXRob2RBKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgb2JqLCBhcmdzLCAmcmV0dmFs
LCAwKTsKKwljYWxsTWV0aG9kQShtLCBvYmosIGFyZ3MsICZyZXR2YWwsIDApOwogCiAJRU5EX0VY
Q0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAocmV0dmFsLmQpOwpAQCAtMTYxMCw3ICsxNTkw
LDcgQEAgS2FmZmVfQ2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kVihKTklFbnYqIAogCQl0aHJvd0V4
Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1l
dGhvZFYobSwgSk5JX01FVEhPRF9DT0RFKG0pLCBvYmosIGFyZ3MsIDApOworCWNhbGxNZXRob2RW
KG0sIG9iaiwgYXJncywgMCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiB9CkBAIC0x
NjQwLDcgKzE2MjAsNyBAQCBLYWZmZV9DYWxsTm9udmlydHVhbFZvaWRNZXRob2RBKEpOSUVudiog
CiAJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9
CiAKLQljYWxsTWV0aG9kQShtLCBKTklfTUVUSE9EX0NPREUobSksIG9iaiwgYXJncywgMCwgMCk7
CisJY2FsbE1ldGhvZEEobSwgb2JqLCBhcmdzLCAwLCAwKTsKIAogCUVORF9FWENFUFRJT05fSEFO
RExJTkcoKTsKIH0KQEAgLTE4OTYsNyArMTg3Niw3IEBAIEthZmZlX0NhbGxTdGF0aWNPYmplY3RN
ZXRob2RWKEpOSUVudiogZW4KIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+
bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RWKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwg
MCwgYXJncywgJnJldHZhbCk7CisJY2FsbE1ldGhvZFYobSwgMCwgYXJncywgJnJldHZhbCk7CiAK
IAlBRERfUkVGKHJldHZhbC5sKTsKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CkBAIC0xOTMx
LDcgKzE5MTEsNyBAQCBLYWZmZV9DYWxsU3RhdGljT2JqZWN0TWV0aG9kQShKTklFbnYqIGVuCiAJ
CXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAK
LQljYWxsTWV0aG9kQShtLCBKTklfTUVUSE9EX0NPREUobSksIDAsIGFyZ3MsICZyZXR2YWwsIDAp
OworCWNhbGxNZXRob2RBKG0sIDAsIGFyZ3MsICZyZXR2YWwsIDApOwogCiAJQUREX1JFRihyZXR2
YWwubCk7CiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwpAQCAtMTk1MCw3ICsxOTMwLDcgQEAg
S2FmZmVfQ2FsbFN0YXRpY0Jvb2xlYW5NZXRob2RWKEpOSUVudiogZQogCQl0aHJvd0V4Y2VwdGlv
bihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYo
bSwgSk5JX01FVEhPRF9DT0RFKG0pLCAwLCBhcmdzLCAmcmV0dmFsKTsKKwljYWxsTWV0aG9kViht
LCAwLCBhcmdzLCAmcmV0dmFsKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1
cm4gKChqYm9vbGVhbikgcmV0dmFsLmkpOwpAQCAtMTk4NCw3ICsxOTY0LDcgQEAgS2FmZmVfQ2Fs
bFN0YXRpY0Jvb2xlYW5NZXRob2RBKEpOSUVudiogZQogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hN
ZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgSk5JX01F
VEhPRF9DT0RFKG0pLCAwLCBhcmdzLCAmcmV0dmFsLCAwKTsKKwljYWxsTWV0aG9kQShtLCAwLCBh
cmdzLCAmcmV0dmFsLCAwKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4g
KChqYm9vbGVhbikgcmV0dmFsLmkpOwpAQCAtMjAwMiw3ICsxOTgyLDcgQEAgS2FmZmVfQ2FsbFN0
YXRpY0J5dGVNZXRob2RWKEpOSUVudiogZW52LAogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRo
b2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwgSk5JX01FVEhP
RF9DT0RFKG0pLCAwLCBhcmdzLCAmcmV0dmFsKTsKKwljYWxsTWV0aG9kVihtLCAwLCBhcmdzLCAm
cmV0dmFsKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKChqYnl0ZSkg
cmV0dmFsLmkpOwpAQCAtMjAzNiw3ICsyMDE2LDcgQEAgS2FmZmVfQ2FsbFN0YXRpY0J5dGVNZXRo
b2RBKEpOSUVudiogZW52LAogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5u
YW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgSk5JX01FVEhPRF9DT0RFKG0pLCAw
LCBhcmdzLCAmcmV0dmFsLCAwKTsKKwljYWxsTWV0aG9kQShtLCAwLCBhcmdzLCAmcmV0dmFsLCAw
KTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKChqYnl0ZSkgcmV0dmFs
LmkpOwpAQCAtMjA1NCw3ICsyMDM0LDcgQEAgS2FmZmVfQ2FsbFN0YXRpY0NoYXJNZXRob2RWKEpO
SUVudiogZW52LAogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5k
YXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwgSk5JX01FVEhPRF9DT0RFKG0pLCAwLCBhcmdz
LCAmcmV0dmFsKTsKKwljYWxsTWV0aG9kVihtLCAwLCBhcmdzLCAmcmV0dmFsKTsKIAogCUVORF9F
WENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKChqY2hhcikgcmV0dmFsLmkpOwpAQCAtMjA4
OCw3ICsyMDY4LDcgQEAgS2FmZmVfQ2FsbFN0YXRpY0NoYXJNZXRob2RBKEpOSUVudiogZW52LAog
CQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQog
Ci0JY2FsbE1ldGhvZEEobSwgSk5JX01FVEhPRF9DT0RFKG0pLCAwLCBhcmdzLCAmcmV0dmFsLCAw
KTsKKwljYWxsTWV0aG9kQShtLCAwLCBhcmdzLCAmcmV0dmFsLCAwKTsKIAogCUVORF9FWENFUFRJ
T05fSEFORExJTkcoKTsKIAlyZXR1cm4gKChqY2hhcikgcmV0dmFsLmkpOwpAQCAtMjEwNiw3ICsy
MDg2LDcgQEAgS2FmZmVfQ2FsbFN0YXRpY1Nob3J0TWV0aG9kVihKTklFbnYqIGVudgogCQl0aHJv
d0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2Fs
bE1ldGhvZFYobSwgSk5JX01FVEhPRF9DT0RFKG0pLCAwLCBhcmdzLCAmcmV0dmFsKTsKKwljYWxs
TWV0aG9kVihtLCAwLCBhcmdzLCAmcmV0dmFsKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkco
KTsKIAlyZXR1cm4gKChqc2hvcnQpIHJldHZhbC5pKTsKQEAgLTIxNDAsNyArMjEyMCw3IEBAIEth
ZmZlX0NhbGxTdGF0aWNTaG9ydE1ldGhvZEEoSk5JRW52KiBlbnYKIAkJdGhyb3dFeGNlcHRpb24o
Tm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RBKG0s
IEpOSV9NRVRIT0RfQ09ERShtKSwgMCwgYXJncywgJnJldHZhbCwgMCk7CisJY2FsbE1ldGhvZEEo
bSwgMCwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hBTkRMSU5HKCk7CiAJ
cmV0dXJuICgoanNob3J0KSByZXR2YWwuaSk7CkBAIC0yMTU4LDcgKzIxMzgsNyBAQCBLYWZmZV9D
YWxsU3RhdGljSW50TWV0aG9kVihKTklFbnYqIGVudiwgCiAJCXRocm93RXhjZXB0aW9uKE5vU3Vj
aE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kVihtLCBKTklf
TUVUSE9EX0NPREUobSksIDAsIGFyZ3MsICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG0sIDAsIGFy
Z3MsICZyZXR2YWwpOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogCXJldHVybiAocmV0
dmFsLmkpOwpAQCAtMjE5Miw3ICsyMTcyLDcgQEAgS2FmZmVfQ2FsbFN0YXRpY0ludE1ldGhvZEEo
Sk5JRW52KiBlbnYsIAogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtLT5uYW1l
LT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgSk5JX01FVEhPRF9DT0RFKG0pLCAwLCBh
cmdzLCAmcmV0dmFsLCAwKTsKKwljYWxsTWV0aG9kQShtLCAwLCBhcmdzLCAmcmV0dmFsLCAwKTsK
IAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKHJldHZhbC5pKTsKQEAgLTIy
MTAsNyArMjE5MCw3IEBAIEthZmZlX0NhbGxTdGF0aWNMb25nTWV0aG9kVihKTklFbnYqIGVudiwK
IAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwogCX0K
IAotCWNhbGxNZXRob2RWKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgMCwgYXJncywgJnJldHZhbCk7
CisJY2FsbE1ldGhvZFYobSwgMCwgYXJncywgJnJldHZhbCk7CiAKIAlFTkRfRVhDRVBUSU9OX0hB
TkRMSU5HKCk7CiAJcmV0dXJuIChyZXR2YWwuaik7CkBAIC0yMjQ0LDcgKzIyMjQsNyBAQCBLYWZm
ZV9DYWxsU3RhdGljTG9uZ01ldGhvZEEoSk5JRW52KiBlbnYsCiAJCXRocm93RXhjZXB0aW9uKE5v
U3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kQShtLCBK
TklfTUVUSE9EX0NPREUobSksIDAsIGFyZ3MsICZyZXR2YWwsIDApOworCWNhbGxNZXRob2RBKG0s
IDAsIGFyZ3MsICZyZXR2YWwsIDApOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogCXJl
dHVybiAocmV0dmFsLmopOwpAQCAtMjI2Miw3ICsyMjQyLDcgQEAgS2FmZmVfQ2FsbFN0YXRpY0Zs
b2F0TWV0aG9kVihKTklFbnYqIGVudgogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJv
cihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZFYobSwgSk5JX01FVEhPRF9DT0RF
KG0pLCAwLCBhcmdzLCAmcmV0dmFsKTsKKwljYWxsTWV0aG9kVihtLCAwLCBhcmdzLCAmcmV0dmFs
KTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKHJldHZhbC5mKTsKQEAg
LTIyOTYsNyArMjI3Niw3IEBAIEthZmZlX0NhbGxTdGF0aWNGbG9hdE1ldGhvZEEoSk5JRW52KiBl
bnYKIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+ZGF0YSkpOwog
CX0KIAotCWNhbGxNZXRob2RBKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgMCwgYXJncywgJnJldHZh
bCwgMCk7CisJY2FsbE1ldGhvZEEobSwgMCwgYXJncywgJnJldHZhbCwgMCk7CiAKIAlFTkRfRVhD
RVBUSU9OX0hBTkRMSU5HKCk7CiAJcmV0dXJuIChyZXR2YWwuZik7CkBAIC0yMzE0LDcgKzIyOTQs
NyBAQCBLYWZmZV9DYWxsU3RhdGljRG91YmxlTWV0aG9kVihKTklFbnYqIGVuCiAJCXRocm93RXhj
ZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0
aG9kVihtLCBKTklfTUVUSE9EX0NPREUobSksIDAsIGFyZ3MsICZyZXR2YWwpOworCWNhbGxNZXRo
b2RWKG0sIDAsIGFyZ3MsICZyZXR2YWwpOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwog
CXJldHVybiAocmV0dmFsLmQpOwpAQCAtMjM0OCw3ICsyMzI4LDcgQEAgS2FmZmVfQ2FsbFN0YXRp
Y0RvdWJsZU1ldGhvZEEoSk5JRW52KiBlbgogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RF
cnJvcihtLT5uYW1lLT5kYXRhKSk7CiAJfQogCi0JY2FsbE1ldGhvZEEobSwgSk5JX01FVEhPRF9D
T0RFKG0pLCAwLCBhcmdzLCAmcmV0dmFsLCAwKTsKKwljYWxsTWV0aG9kQShtLCAwLCBhcmdzLCAm
cmV0dmFsLCAwKTsKIAogCUVORF9FWENFUFRJT05fSEFORExJTkcoKTsKIAlyZXR1cm4gKHJldHZh
bC5kKTsKQEAgLTIzNjYsNyArMjM0Niw3IEBAIEthZmZlX0NhbGxTdGF0aWNWb2lkTWV0aG9kVihK
TklFbnYqIGVudiwKIAkJdGhyb3dFeGNlcHRpb24oTm9TdWNoTWV0aG9kRXJyb3IobS0+bmFtZS0+
ZGF0YSkpOwogCX0KIAotCWNhbGxNZXRob2RWKG0sIEpOSV9NRVRIT0RfQ09ERShtKSwgMCwgYXJn
cywgJnJldHZhbCk7CisJY2FsbE1ldGhvZFYobSwgMCwgYXJncywgJnJldHZhbCk7CiAKIAlFTkRf
RVhDRVBUSU9OX0hBTkRMSU5HKCk7CiB9CkBAIC0yMzk2LDcgKzIzNzYsNyBAQCBLYWZmZV9DYWxs
U3RhdGljVm9pZE1ldGhvZEEoSk5JRW52KiBlbnYsCiAJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1l
dGhvZEVycm9yKG0tPm5hbWUtPmRhdGEpKTsKIAl9CiAKLQljYWxsTWV0aG9kQShtLCBKTklfTUVU
SE9EX0NPREUobSksIDAsIGFyZ3MsIDAsIDApOworCWNhbGxNZXRob2RBKG0sIDAsIGFyZ3MsIDAs
IDApOwogCiAJRU5EX0VYQ0VQVElPTl9IQU5ETElORygpOwogfQpJbmRleDoga2FmZmUva2FmZmV2
bS9zdXBwb3J0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9rYWZmZS9r
YWZmZXZtL3N1cHBvcnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41NQpkaWZmIC13IC11IC1w
IC1yMS41NSBzdXBwb3J0LmMKLS0tIGthZmZlL2thZmZldm0vc3VwcG9ydC5jCTE5IE9jdCAyMDAy
IDEwOjEyOjAyIC0wMDAwCTEuNTUKKysrIGthZmZlL2thZmZldm0vc3VwcG9ydC5jCTI3IERlYyAy
MDAyIDIyOjIxOjE2IC0wMDAwCkBAIC0xNDYsNyArMTQ2LDcgQEAgZG9fZXhlY3V0ZV9qYXZhX21l
dGhvZF92KHZvaWQqIG9iaiwgY29ucwogCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJv
cihtZXRob2RfbmFtZSkpOwogCX0KIAotCWNhbGxNZXRob2RWKG1iLCBNRVRIT0RfSU5ESVJFQ1RN
RVRIT0QobWIpLCBvYmosIGFyZ3B0ciwgJnJldHZhbCk7CisJY2FsbE1ldGhvZFYobWIsIG9iaiwg
YXJncHRyLCAmcmV0dmFsKTsKIAogCXJldHVybiAocmV0dmFsKTsKIH0KQEAgLTIwMCw3ICsyMDAs
NyBAQCBkb19leGVjdXRlX2phdmFfY2xhc3NfbWV0aG9kX3YoY29uc3QgY2hhCiAJfQogCiAJLyog
TWFrZSB0aGUgY2FsbCAqLwotCWNhbGxNZXRob2RWKG1iLCBNRVRIT0RfSU5ESVJFQ1RNRVRIT0Qo
bWIpLCAwLCBhcmdwdHIsICZyZXR2YWwpOworCWNhbGxNZXRob2RWKG1iLCAwLCBhcmdwdHIsICZy
ZXR2YWwpOwogCiAJcmV0dXJuIChyZXR2YWwpOwogfQpAQCAtMjY3LDcgKzI2Nyw3IEBAIGV4ZWN1
dGVfamF2YV9jb25zdHJ1Y3Rvcl92KGNvbnN0IGNoYXIqIGMKIAlhc3NlcnQob2JqICE9IDApOwog
CiAJLyogTWFrZSB0aGUgY2FsbCAqLwotCWNhbGxNZXRob2RWKG1iLCBNRVRIT0RfSU5ESVJFQ1RN
RVRIT0QobWIpLCBvYmosIGFyZ3B0ciwgJnJldHZhbCk7CisJY2FsbE1ldGhvZFYobWIsIG9iaiwg
YXJncHRyLCAmcmV0dmFsKTsKIAogCXJldHVybiAob2JqKTsKIH0KQEAgLTM0OCwxMCArMzQ4LDMz
IEBAIGV4ZWN1dGVfamF2YV9jb25zdHJ1Y3Rvcihjb25zdCBjaGFyKiBjbmEKICNlbmRpZgogCiAv
KgorICogUmV0dXJucyB0aGUgZnVuY3Rpb24gdGhhdCdzIHRvIGJlIGV4ZWN1dGVkIHdoZW4gbWV0
aCBpcyBpbnZva2VkIG9uIG9iai4gCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitmaW5kTWV0
aG9kRnVuYyAoTWV0aG9kICptZXRoLCBIamF2YV9sYW5nX09iamVjdCAqb2JqKQoreworCXNob3J0
ICppbXBsZW1lbnRvcnM7CisJSGphdmFfbGFuZ19DbGFzcyAqY2xheno7CisKKwlpZiAob2JqICYm
IENMQVNTX0lTX0lOVEVSRkFDRSAobWV0aC0+Y2xhc3MpKSB7CisJCWFzc2VydCAobWV0aC0+aWR4
ID49IDApOworCisJCWltcGxlbWVudG9ycyA9IG1ldGgtPmNsYXNzLT5pbXBsZW1lbnRvcnM7CisJ
CWNsYXp6ID0gT0JKRUNUX0NMQVNTKG9iaik7CisKKwkJYXNzZXJ0IChpbXBsZW1lbnRvcnMgIT0g
TlVMTCAmJiBjbGF6ei0+aW1wbF9pbmRleCA8PSBpbXBsZW1lbnRvcnNbMF0pOworCQkKKwkJcmV0
dXJuIGNsYXp6LT5pdGFibGUyZHRhYmxlW2ltcGxlbWVudG9yc1tjbGF6ei0+aW1wbF9pbmRleF0g
KyBtZXRoLT5pZHggKyAxXTsgCQorCX0gZWxzZSB7CisJCXJldHVybiBNRVRIT0RfSU5ESVJFQ1RN
RVRIT0QgKG1ldGgpOworCX0KK30KKworLyoKICAqIEdlbmVyaWMgcm91dGluZSB0byBjYWxsIGEg
bmF0aXZlIG9yIEphdmEgbWV0aG9kIChhcnJheSBzdHlsZSkuCiAgKi8KIHZvaWQKLWNhbGxNZXRo
b2RBKE1ldGhvZCogbWV0aCwgdm9pZCogZnVuYywgdm9pZCogb2JqLCBqdmFsdWUqIGFyZ3MsIGp2
YWx1ZSogcmV0LAorY2FsbE1ldGhvZEEoTWV0aG9kKiBtZXRoLCB2b2lkKiBvYmosIGp2YWx1ZSog
YXJncywganZhbHVlKiByZXQsCiAJICAgIGludCBwcm9tb3RlZCkKIHsKIAlpbnQgaTsKQEAgLTM3
Niw3ICszOTksNyBAQCBjYWxsTWV0aG9kQShNZXRob2QqIG1ldGgsIHZvaWQqIGZ1bmMsIHZvCiAJ
ICogdXBvbiByZXR1cm4gZnJvbSBuYXRpdmUgYW5kIHdlIHdpbGwgYWRkIGFkZGl0aW9uYWwgcGFy
YW1ldGVycyAKIAkgKiBhY2NvcmRpbmcgdG8gdGhlIEpOSSBjYWxsaW5nIGNvbnZlbnRpb24uCiAJ
ICovCi0JbWV0aCA9IChNZXRob2QqKWZ1bmM7CisJbWV0aCA9IChNZXRob2QqKWZpbmRNZXRob2RG
dW5jIChtZXRoLCAoSGphdmFfbGFuZ19PYmplY3QgKilvYmopOwogCWlmIChtZXRoLT5hY2NmbGFn
cyAmIEFDQ19OQVRJVkUpIHsKIAkJaWYgKCFNRVRIT0RfVFJBTlNMQVRFRChtZXRoKSkgewogCQkJ
ZXJyb3JJbmZvIGluZm87CkBAIC01MjQsNyArNTQ3LDcgQEAgY2FsbE1ldGhvZEEoTWV0aG9kKiBt
ZXRoLCB2b2lkKiBmdW5jLCB2bwogCiAKICNpZiBkZWZpbmVkKFRSQU5TTEFUT1IpCi0JY2FsbC5m
dW5jdGlvbiA9IGZ1bmM7CisJY2FsbC5mdW5jdGlvbiA9IGZpbmRNZXRob2RGdW5jIChtZXRoLCAo
SGphdmFfbGFuZ19PYmplY3QgKilvYmopOwogCiAJLyogR0NESUFHIHdpcGVzIGZyZWUgbWVtb3J5
IHdpdGggMHhmNC4uLiAqLwogCWFzc2VydChjYWxsLmZ1bmN0aW9uKTsKQEAgLTU5Miw3ICs2MTUs
NyBAQCBjYWxsTWV0aG9kQShNZXRob2QqIG1ldGgsIHZvaWQqIGZ1bmMsIHZvCiAgKiBHZW5lcmlj
IHJvdXRpbmUgdG8gY2FsbCBhIG5hdGl2ZSBvciBKYXZhIG1ldGhvZCAodmFyYXJncyBzdHlsZSku
CiAgKi8KIHZvaWQKLWNhbGxNZXRob2RWKE1ldGhvZCogbWV0aCwgdm9pZCogZnVuYywgdm9pZCog
b2JqLCB2YV9saXN0IGFyZ3MsIGp2YWx1ZSogcmV0KQorY2FsbE1ldGhvZFYoTWV0aG9kKiBtZXRo
LCB2b2lkKiBvYmosIHZhX2xpc3QgYXJncywganZhbHVlKiByZXQpCiB7CiAgIC8qIGNvbnN0IGNo
YXIqIHNpZzsgRklYTUUgKi8KIAlpbnQgaTsKQEAgLTYxMSw3ICs2MzQsNyBAQCBjYWxsTWV0aG9k
VihNZXRob2QqIG1ldGgsIHZvaWQqIGZ1bmMsIHZvCiAJcyA9IDA7CiAKICNpZiBkZWZpbmVkKElO
VEVSUFJFVEVSKQotCW1ldGggPSAoTWV0aG9kKilmdW5jOworCW1ldGggPSAoTWV0aG9kKilmaW5k
TWV0aG9kRnVuYyAobWV0aCwgKEhqYXZhX2xhbmdfT2JqZWN0ICopb2JqKTsKIAlpZiAobWV0aC0+
YWNjZmxhZ3MgJiBBQ0NfTkFUSVZFKSB7CiAgICAgICAgICAgICAgICAgaWYgKE1FVEhPRF9OQVRJ
VkVDT0RFKG1ldGgpID09IDApIHsKIAkJCWVycm9ySW5mbyBpbmZvOwpAQCAtNzM4LDkgKzc2MSw3
IEBAIGNhbGxNZXRob2RWKE1ldGhvZCogbWV0aCwgdm9pZCogZnVuYywgdm8KIAljYWxsLnJldCA9
IHJldDsKIAogI2lmIGRlZmluZWQoVFJBTlNMQVRPUikKLQlhc3NlcnQoKGZ1bmMgPT0gKE1FVEhP
RF9OQVRJVkVDT0RFKG1ldGgpKSkKLQkgICAgICAgfHwgKGZ1bmMgPT0gKCgoSGphdmFfbGFuZ19P
YmplY3QqKW9iaiktPmR0YWJsZS0+bWV0aG9kW21ldGgtPmlkeF0pKSk7Ci0JY2FsbC5mdW5jdGlv
biA9IGZ1bmM7CisJY2FsbC5mdW5jdGlvbiA9IGZpbmRNZXRob2RGdW5jIChtZXRoLCAoSGphdmFf
bGFuZ19PYmplY3QgKilvYmopOwogCiAJLyogR0NESUFHIHdpcGVzIGZyZWUgbWVtb3J5IHdpdGgg
MHhmNC4uLiAqLwogCWFzc2VydChjYWxsLmZ1bmN0aW9uKTsKSW5kZXg6IGthZmZlL2thZmZldm0v
c3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMva2FmZmUva2FmZmUva2FmZmUva2Fm
ZmV2bS9zdXBwb3J0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtdyAtdSAtcCAt
cjEuMjEgc3VwcG9ydC5oCi0tLSBrYWZmZS9rYWZmZXZtL3N1cHBvcnQuaAkxOCBEZWMgMTk5OSAw
Nzo0MDoyNSAtMDAwMAkxLjIxCisrKyBrYWZmZS9rYWZmZXZtL3N1cHBvcnQuaAkyNyBEZWMgMjAw
MiAyMjoyMToxNiAtMDAwMApAQCAtMTE5LDggKzExOSw4IEBAIGV4dGVybiBzdHJ1Y3QgSGphdmFf
bGFuZ19PYmplY3QqIGV4ZWN1dGUKIGV4dGVybiBqbG9uZwkJY3VycmVudFRpbWUodm9pZCk7CiBl
eHRlcm4gdm9pZAkJYWRkTmF0aXZlTWV0aG9kKGNvbnN0IGNoYXIqLCB2b2lkKik7CiAKLWV4dGVy
biB2b2lkCWNhbGxNZXRob2RBKHN0cnVjdCBfbWV0aG9kcyosIHZvaWQqLCB2b2lkKiwganZhbHVl
KiwganZhbHVlKiwgaW50KTsKLWV4dGVybiB2b2lkCWNhbGxNZXRob2RWKHN0cnVjdCBfbWV0aG9k
cyosIHZvaWQqLCB2b2lkKiwgdmFfbGlzdCwganZhbHVlKik7CitleHRlcm4gdm9pZAljYWxsTWV0
aG9kQShzdHJ1Y3QgX21ldGhvZHMqLCB2b2lkKiwganZhbHVlKiwganZhbHVlKiwgaW50KTsKK2V4
dGVybiB2b2lkCWNhbGxNZXRob2RWKHN0cnVjdCBfbWV0aG9kcyosIHZvaWQqLCB2YV9saXN0LCBq
dmFsdWUqKTsKIGV4dGVybiBzdHJ1Y3QgX21ldGhvZHMqCWxvb2t1cENsYXNzTWV0aG9kKHN0cnVj
dCBIamF2YV9sYW5nX0NsYXNzKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBzdHJ1Y3QgX2Vy
cm9ySW5mbyopOwogZXh0ZXJuIHN0cnVjdCBfbWV0aG9kcyoJbG9va3VwT2JqZWN0TWV0aG9kKHN0
cnVjdCBIamF2YV9sYW5nX09iamVjdCosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc3RydWN0
IF9lcnJvckluZm8qKTsKIAo=
--Multipart_Sat__28_Dec_2002_00:28:45_+0100_09388348--