From owner-freebsd-current Tue May 5 04:47:13 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id EAA24771 for freebsd-current-outgoing; Tue, 5 May 1998 04:47:13 -0700 (PDT) (envelope-from owner-freebsd-current@FreeBSD.ORG) Received: from iclub.nsu.ru (iclub.nsu.ru [193.124.222.66]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id EAA24638 for ; Tue, 5 May 1998 04:45:04 -0700 (PDT) (envelope-from semen@iclub.nsu.ru) Received: from localhost (semen@localhost) by iclub.nsu.ru (8.8.8/8.8.5) with SMTP id SAA13963; Tue, 5 May 1998 18:43:41 +0700 (NSS) Date: Tue, 5 May 1998 18:43:40 +0700 (NSS) From: Ustimenko Semen To: Adam McDougall cc: Andrew , freebsd-current@FreeBSD.ORG, Jaroslav Klaus Subject: Re: ethernet card Problems In-Reply-To: <35495353.62F9852D@ameritech.net> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-1082377860-894368620=:13866" Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-1082377860-894368620=:13866 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello! On Fri, 1 May 1998, Adam McDougall wrote: > Andrew wrote: > > > >Hi, > > > > > >I'm having some ethernet crad problems. The card i'm using is a SMC8216 > > >10/100Mbps > > >I'm running it on 100Mbps. > > >I'm running ipfilter with transproxy and squid on a 14 Gig cache on > > >freebsd3.0-current, divertin all packets comin in on port 80 to transproxy. > > >This is what messages tells me just before the whole thing crashes: > > > At last, i have done something, i added some debug output if any errors occured, fixed epic_stop() to properly stop TX DMA and changed tx queuing policy a little. I don't want to commit it to FreeBSD-current, just would You be so please to try it with EPIC_DEBUG enabled in if_tx.c. Patch is attached. Have You used previous versions? What was the best? Thank you. --0-1082377860-894368620=:13866 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: KioqIGlmX3R4LmMub3JpZwlUdWUgTWF5ICA1IDE4OjIxOjM4IDE5OTgNCi0t LSBpZl90eC5jCVR1ZSBNYXkgIDUgMTg6MjQ6NDIgMTk5OA0KKioqKioqKioq KioqKioqDQoqKiogNTEsNTYgKioqKg0KLS0tIDUxLDY0IC0tLS0NCiAgI2Rl ZmluZQlUWF9GUkFHX0xJU1QJMQkvKiBUcmFuc21pdCBkaXJlY3RseSBmcm9t IG1idWYgZW5zdGVhZCAqLw0KICAJCQkJLyogb2YgY29sbGVjdGluZyBtYnVm J3MgZnJhZ3MgdG8gb25lICovDQogIAkJCQkvKiBzdGF0aWMgYWxsb2NhdGVk IHBsYWNlICovDQorIC8qI2RlZmluZQlFQVJMWV9SWAkxKi8NCisgLyojZGVm aW5lCUVBUkxZX1RYCTEqLw0KKyANCisgI2lmIGRlZmluZWQoRVBJQ19ERUJV RykNCisgI2RlZmluZSBkcHJpbnRmKGEpIHByaW50ZiBhDQorICNlbHNlDQor ICNkZWZpbmUgZHByaW50ZihhKQ0KKyAjZW5kaWYNCiAgDQogICNpbmNsdWRl ICJwY2kuaCINCiAgI2lmIE5QQ0kgPiAwDQoqKioqKioqKioqKioqKioNCioq KiA4NSw5MSAqKioqDQogICAqIEdsb2JhbCB2YXJpYWJsZXMNCiAgICovDQog IHN0YXRpYyB1X2xvbmcgZXBpY19wY2lfY291bnQ7DQotIHN0YXRpYyBlcGlj X3NvZnRjX3QgKiBlcGljc1tFUElDX01BWF9ERVZJQ0VTXTsNCiAgc3RhdGlj IHN0cnVjdCBwY2lfZGV2aWNlIHR4ZGV2aWNlID0geyANCiAgCSJ0eCIsDQog IAllcGljX3BjaV9wcm9iZSwNCi0tLSA5Myw5OCAtLS0tDQoqKioqKioqKioq KioqKioNCioqKiAyMjUsMjMxICoqKioNCiAgCQltMCA9IG07DQogIA0KICAj aWYgZGVmaW5lZChUWF9GUkFHX0xJU1QpDQohIAkJaWYoIGJ1Zi0+bWJ1ZiAp IG1fZnJlZW0oIGJ1Zi0+bWJ1ZiApOw0KICAJCWJ1Zi0+bWJ1ZiA9IG07DQog IAkJZmxpc3QtPm51bWZyYWdzID0gMDsNCiAgDQotLS0gMjMyLDI0MSAtLS0t DQogIAkJbTAgPSBtOw0KICANCiAgI2lmIGRlZmluZWQoVFhfRlJBR19MSVNU KQ0KISAJCWlmKCBidWYtPm1idWYgKSB7DQohIAkJCWRwcmludGYoKCJ0eCVk OiBtYnVmIG5vdCBmcmVlZCBpbiBpZnN0YXJ0XG4iLHNjLT51bml0KSk7DQoh IAkJCW1fZnJlZW0oIGJ1Zi0+bWJ1ZiApOw0KISAJCX0NCiAgCQlidWYtPm1i dWYgPSBtOw0KICAJCWZsaXN0LT5udW1mcmFncyA9IDA7DQogIA0KKioqKioq KioqKioqKioqDQoqKiogMjM4LDI0MyAqKioqDQotLS0gMjQ4LDI1NCAtLS0t DQogIAkJfQ0KICANCiAgCQlpZiggTlVMTCAhPSBtMCApew0KKyAJCQlkcHJp bnRmKCgidHglZDogbWJ1ZiB0b28gZnJhZ21lbnRlZFxuIixzYy0+dW5pdCkp Ow0KICAJCQkvKiBDb3B5IHBhY2tldCB0byBuZXcgYWxsb2NhdGVkIG1idWYg Ki8NCiAgCQkJTUdFVEhEUihtMCxNX0RPTlRXQUlULE1UX0RBVEEpOw0KICAJ CQlpZiggTlVMTCA9PSBtMCApIHsNCioqKioqKioqKioqKioqKg0KKioqIDI1 NSwyODIgKioqKg0KICAJCQkJY29udGludWU7DQogIAkJCX0NCiAgDQohIAkJ CWZvciAobGVuID0gMDsgbSAhPSAwOyBtID0gbS0+bV9uZXh0KSB7DQohIAkJ CQliY29weSggbXRvZChtLCBjYWRkcl90KSwgbXRvZChtMCwgY2FkZHJfdCkg KyBsZW4sIG0tPm1fbGVuKTsNCiEgCQkJCWxlbiArPSBtLT5tX2xlbjsNCiEg CQkJfQ0KISAJCQkNCiEgCQkJbV9mcmVlbShidWYtPm1idWYpOw0KISAJCQli dWYtPm1idWYgPSBtMDsNCiAgCQkJZmxpc3QtPm51bWZyYWdzID0gMTsNCiAg CQkJZmxpc3QtPmZyYWdbMF0uZnJhZ2xlbiA9IGxlbjsNCiAgCQkJZmxpc3Qt PmZyYWdbMF0uZnJhZ2FkZHIgPSB2dG9waHlzKCBtdG9kKG0wLCBjYWRkcl90 KSApOw0KICAJCX0NCiAgDQogIAkJLyogRG9lcyBub3QgZ2VuZXJhdGUgVFhD IHVubGVzcyByaW5nIGlzIGZ1bGwgbW9yZSB0aGVuIGEgaGFsZiAqLw0KISAJ CWRlc2MtPmNvbnRyb2wgPSAoc2MtPnBlbmRpbmdfdHhzPlRYX1JJTkdfU0la RS8yKT8weDA1OjB4MDE7DQogICNlbHNlDQohIAkJZm9yIChsZW4gPSAwOyBt MCAhPSAwOyBtMCA9IG0wLT5tX25leHQpIHsNCiEgCQkJYmNvcHkobXRvZCht MCwgY2FkZHJfdCksIGJ1Zi0+ZGF0YSArIGxlbiwgbTAtPm1fbGVuKTsNCiEg CQkJbGVuICs9IG0wLT5tX2xlbjsNCiEgCQl9DQogIA0KICAJCS8qIERvZXMg bm90IGdlbmVyYXRlIFRYQyB1bmxlc3MgcmluZyBpcyBmdWxsIG1vcmUgdGhl biBhIGhhbGYgKi8NCiEgCQlkZXNjLT5jb250cm9sID0gKHNjLT5wZW5kaW5n X3R4cz5UWF9SSU5HX1NJWkUvMik/MHgxNDoweDEwOw0KICAjZW5kaWYNCiAg DQogIAkJLyogUGFja2V0IHNob3VsZCBiZSBhdCBsZWFzdCBFVEhFUl9NSU5f TEVOICovDQotLS0gMjY2LDI5NCAtLS0tDQogIAkJCQljb250aW51ZTsNCiAg CQkJfQ0KICANCiEgCQkJbGVuID0gbS0+bV9wa3RoZHIubGVuOw0KISAJCQlt X2NvcHlkYXRhKCBtLCAwLCBsZW4sIG10b2QobTAsY2FkZHJfdCkgKTsNCiEg CQkJbTAtPm1fcGt0aGRyLmxlbiA9IGxlbjsNCiEgCQkJbTAtPm1fcGt0aGRy LnJjdmlmID0gJnNjLT5lcGljX2lmOw0KISAJCQltMC0+bV9sZW4gPSBsZW47 DQohIA0KISAJCQltX2ZyZWVtKG0pOw0KISAJCQlidWYtPm1idWYgPSBtID0g bTA7DQogIAkJCWZsaXN0LT5udW1mcmFncyA9IDE7DQogIAkJCWZsaXN0LT5m cmFnWzBdLmZyYWdsZW4gPSBsZW47DQogIAkJCWZsaXN0LT5mcmFnWzBdLmZy YWdhZGRyID0gdnRvcGh5cyggbXRvZChtMCwgY2FkZHJfdCkgKTsNCiAgCQl9 DQogIA0KICAJCS8qIERvZXMgbm90IGdlbmVyYXRlIFRYQyB1bmxlc3Mgcmlu ZyBpcyBmdWxsIG1vcmUgdGhlbiBhIGhhbGYgKi8NCiEgCQkvKmRlc2MtPmNv bnRyb2wgPSAoc2MtPnBlbmRpbmdfdHhzPlRYX1JJTkdfU0laRS8yKT8weDA1 OjB4MDE7ICovDQohIAkJZGVzYy0+Y29udHJvbCA9IDB4MDE7DQogICNlbHNl DQohIAkJbGVuID0gbS0+bV9wa3RoZHIubGVuOw0KISAJCW1fY29weWRhdGEo IG0sIDAsIGxlbiwgYnVmLT5kYXRhICk7DQogIA0KICAJCS8qIERvZXMgbm90 IGdlbmVyYXRlIFRYQyB1bmxlc3MgcmluZyBpcyBmdWxsIG1vcmUgdGhlbiBh IGhhbGYgKi8NCiEgCQkvKmRlc2MtPmNvbnRyb2wgPSAoc2MtPnBlbmRpbmdf dHhzPlRYX1JJTkdfU0laRS8yKT8weDE0OjB4MTA7Ki8NCiEgCQlkZXNjLT5j b250cm9sID0gMHgxMDsNCiAgI2VuZGlmDQogIA0KICAJCS8qIFBhY2tldCBz aG91bGQgYmUgYXQgbGVhc3QgRVRIRVJfTUlOX0xFTiAqLw0KKioqKioqKioq KioqKioqDQoqKiogMjg1LDI5MCAqKioqDQotLS0gMjk3LDMwNSAtLS0tDQog IAkJLyogUGFzcyBvd25lcnNoaXAgdG8gdGhlIGNoaXAgKi8NCiAgCQlkZXNj LT5zdGF0dXMgPSAweDgwMDA7DQogIA0KKyAJCS8qIFRyaWdnZXIgYW4gaW1t ZWRpYXRlIHRyYW5zbWl0IGRlbWFuZC4gKi8NCisgCQlDU1JfV1JJVEVfNCgg c2MsIENPTU1BTkQsIENPTU1BTkRfVFhRVUVVRUQgKTsNCisgDQogIAkJLyog U2V0IHdhdGNoZG9nIHRpbWVyICovDQogIAkJaWZwLT5pZl90aW1lciA9IDI7 DQogIA0KKioqKioqKioqKioqKioqDQoqKiogMjk2LDMwMyAqKioqDQogIAkJ LyogV2UgZG9uJ3QgbmVlZCBtYnVmIGFueXdheSAqLw0KICAJCW1fZnJlZW0o IG0gKTsNCiAgI2VuZGlmDQotIAkJLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUg dHJhbnNtaXQgZGVtYW5kLiAqLw0KLSAJCUNTUl9XUklURV80KCBzYywgQ09N TUFORCwgQ09NTUFORF9UWFFVRVVFRCApOw0KICANCiAgCQkvKiBQYWNrZXQg cXVldWVkIHN1Y2Nlc3NmdWwgKi8NCiAgCQlzYy0+cGVuZGluZ190eHMrKzsN Ci0tLSAzMTEsMzE2IC0tLS0NCioqKioqKioqKioqKioqKg0KKioqIDMxMywz MTkgKioqKg0KICB9DQogIA0KICAvKg0KISAgKiAgSUZXQVRDSERPRyBmdW5j dGlvbg0KICAgKg0KICAgKiBzcGxpbXAoKSBpbnZva2VkIGhlcmUNCiAgICov DQotLS0gMzI2LDMzMyAtLS0tDQogIH0NCiAgDQogIC8qDQohICAqIFN5bm9w c2lzOiBUaGlzIG9uZSBpcyBjYWxsZWQgaWYgcGFja2V0cyB3YXNuJ3QgdHJh bnNtaXR0ZWQNCiEgICogZHVyaW5nIHRpbWVvdXQuDQogICAqDQogICAqIHNw bGltcCgpIGludm9rZWQgaGVyZQ0KICAgKi8NCioqKioqKioqKioqKioqKg0K KioqIDMzMCwzMzUgKioqKg0KLS0tIDM0NCwzNTcgLS0tLQ0KICAJcHJpbnRm KCJ0eCVkOiBkZXZpY2UgdGltZW91dCAlZCBwYWNrZXRzXG4iLA0KICAJCQlz Yy0+dW5pdCxzYy0+cGVuZGluZ190eHMpOw0KICANCisgI2lmIGRlZmluZWQo RVBJQ19ERUJVRykNCisgCXByaW50ZigidHglZDogZGlydHlfdHg6ICVkLCBj dXJfdHg6ICVkXG4iLHNjLT51bml0LHNjLT5kaXJ0eV90eCxzYy0+Y3VyX3R4 KTsNCisgCXByaW50ZigidHglZDogbm90IHRyYW5zbWl0dGVkIGRlc2NzOiAi LHNjLT51bml0KTsNCisgCWZvcihpPTA7aTxUWF9SSU5HX1NJWkU7aSsrKQ0K KyAJCWlmKCBzYy0+dHhfZGVzY1tpXS5zdGF0dXMgJiAweDgwMDAgKSBwcmlu dGYoIiVkICIsaSk7CQ0KKyAJcHJpbnRmKCJcbiIpOw0KKyAjZW5kaWYNCisg DQogIAlpZnAtPmlmX29lcnJvcnMrPXNjLT5wZW5kaW5nX3R4czsNCiAgDQog IAllcGljX3N0b3Aoc2MpOw0KKioqKioqKioqKioqKioqDQoqKiogMzcwLDM3 NSAqKioqDQotLS0gMzkyLDM5OCAtLS0tDQogIA0KICAJCS8qIENoZWNrIGZv ciBlcnJvcnMgKi8NCiAgCQlpZiggIShkZXNjLT5zdGF0dXMgJiAxKSApIHsN CisgCQkJZHByaW50ZigoInR4JWQ6IHJlY2VpdmUgZXJyb3IsIHN0YXR1czog JXhcbiIsc2MtPnVuaXQsZGVzYy0+c3RhdHVzKSk7DQogIAkJCXNjLT5lcGlj X2lmLmlmX2llcnJvcnMrKzsNCiAgCQkJZ290byByeGVycm9yOw0KICAJCX0N CioqKioqKioqKioqKioqKg0KKioqIDQ3Nyw0ODMgKioqKg0KICAJaW50IGNv bGw7DQogIAl1X2ludDE2X3Qgc3R0Ow0KICANCiEgCXdoaWxlKCBpKysgPCBU WF9SSU5HX1NJWkUgKXsNCiAgCQlzdHJ1Y3QgZXBpY190eF9idWZmZXIgKmJ1 ZiA9IHNjLT50eF9idWZmZXIgKyBzYy0+ZGlydHlfdHg7DQogIAkJc3RydWN0 IGVwaWNfdHhfZGVzYyAqZGVzYyA9IHNjLT50eF9kZXNjICsgc2MtPmRpcnR5 X3R4Ow0KICAjaWYgZGVmaW5lZChUWF9GUkFHX0xJU1QpDQotLS0gNTAwLDUw NiAtLS0tDQogIAlpbnQgY29sbDsNCiAgCXVfaW50MTZfdCBzdHQ7DQogIA0K ISAJd2hpbGUoIHNjLT5wZW5kaW5nX3R4cyA+IDAgKXsNCiAgCQlzdHJ1Y3Qg ZXBpY190eF9idWZmZXIgKmJ1ZiA9IHNjLT50eF9idWZmZXIgKyBzYy0+ZGly dHlfdHg7DQogIAkJc3RydWN0IGVwaWNfdHhfZGVzYyAqZGVzYyA9IHNjLT50 eF9kZXNjICsgc2MtPmRpcnR5X3R4Ow0KICAjaWYgZGVmaW5lZChUWF9GUkFH X0xJU1QpDQoqKioqKioqKioqKioqKioNCioqKiA1NjYsNjAwICoqKioNCiAg CWVwaWNfc29mdGNfdCAqIHNjID0gKGVwaWNfc29mdGNfdCAqKSBhcmc7DQog ICAgICAgICAgaW50IHN0YXR1czsNCiAgDQohIAlzdGF0dXMgPSBDU1JfUkVB RF80KCBzYywgSU5UU1RBVCk7DQogIAlDU1JfV1JJVEVfNCggc2MsIElOVFNU QVQsIHN0YXR1cyAmICgNCiEgCQlJTlRTVEFUX1JRRXxJTlRTVEFUX0hDQ3xJ TlRTVEFUX1JDQ3wNCiAgCQlJTlRTVEFUX1RYQ3xJTlRTVEFUX1RDQ3xJTlRT VEFUX1RRRXwNCiAgCQlJTlRTVEFUX0ZBVEFMfElOVFNUQVRfR1AyfA0KICAJ CUlOVFNUQVRfQ05UfElOVFNUQVRfVFhVfElOVFNUQVRfT1ZXfElOVFNUQVRf UlhFICkgKTsNCiAgDQohIAlpZiggc3RhdHVzICYgKElOVFNUQVRfUlFFfElO VFNUQVRfSENDfElOVFNUQVRfUkNDKSApIHsNCiAgCQllcGljX3J4X2RvbmUo IHNjICk7DQohIAkJaWYoIHN0YXR1cyAmIElOVFNUQVRfUlFFICkgDQogIAkJ CUNTUl9XUklURV80KCBzYywgQ09NTUFORCwgQ09NTUFORF9SWFFVRVVFRCAp Ow0KICAJfQ0KICANCiAgCWlmKCBzdGF0dXMgJiAoSU5UU1RBVF9UWEN8SU5U U1RBVF9UQ0N8SU5UU1RBVF9UUUUpICkNCiAgCQllcGljX3R4X2RvbmUoIHNj ICk7DQogIA0KLSAJaWYoIChzdGF0dXMgJiBJTlRTVEFUX1RRRSkgJiYgIShz Yy0+ZXBpY19pZi5pZl9mbGFncyAmIElGRl9PQUNUSVZFKSApDQotIAkJZXBp Y19pZnN0YXJ0KCAmc2MtPmVwaWNfaWYgKTsNCi0gDQogIAlpZiggKHN0YXR1 cyAmIElOVFNUQVRfR1AyKSAmJiAoUVM2NjEyX09VSSA9PSBzYy0+cGh5aWQp ICkgew0KICAJCXVfaW50MzJfdCBzdGF0dXM7DQogIA0KICAJCXN0YXR1cyA9 IGVwaWNfcmVhZF9waHlfcmVnaXN0ZXIoIHNjLCBRUzY2MTJfSU5UU1RBVCAp Ow0KICANCiEgCQlpZiggKHN0YXR1cyAmIElOVFNUQVRfQU5fQ09NUExFVEUp ICYmIA0KISAJCSAgICAoZXBpY19hdXRvbmVnKHNjKSA9PSBFUElDX0ZVTExf RFVQTEVYKSApIHsNCiAgCQkJc3RhdHVzID0gQk1DUl9GVUxMX0RVUExFWCB8 IGVwaWNfcmVhZF9waHlfcmVnaXN0ZXIoIHNjLCBEUDgzODQwX0JNQ1IgKTsN CiEgCQkJQ1NSX1dSSVRFXzQoIHNjLCBUWENPTiwNCiEgCQkJCVRYQ09OX0xP T1BCQUNLX01PREVfRlVMTF9EVVBMRVh8VFhDT05fREVGQVVMVCApOw0KICAJ CX0gZWxzZSB7DQogIAkJCXN0YXR1cyA9IH5CTUNSX0ZVTExfRFVQTEVYICYg ZXBpY19yZWFkX3BoeV9yZWdpc3Rlciggc2MsIERQODM4NDBfQk1DUiApOw0K ICAJCQlDU1JfV1JJVEVfNCggc2MsIFRYQ09OLCBUWENPTl9ERUZBVUxUICk7 DQotLS0gNTg5LDYzNiAtLS0tDQogIAllcGljX3NvZnRjX3QgKiBzYyA9IChl cGljX3NvZnRjX3QgKikgYXJnOw0KICAgICAgICAgIGludCBzdGF0dXM7DQog IA0KISBpbnRsb29wOg0KISAJc3RhdHVzID0gQ1NSX1JFQURfNCggc2MsIElO VFNUQVQgKTsNCiEgDQohICNpZiBkZWZpbmVkKEVQSUNfREVCVUcpDQohIAlp ZiggKHN0YXR1cyAmIElOVFNUQVRfVFFFKSAmJiAoc2MtPmVwaWNfaWYuaWZf ZmxhZ3MgJiBJRkZfREVCVUcpICl7DQohIAkJcHJpbnRmKCJ0eCVkOiBUUUUg b2NjdXJlZCwgZm9yY2VkIGVwaWNfc3RvcCgpIC0gZXBpY19pbml0KClcbiIs c2MtPnVuaXQpOw0KISAJCWVwaWNfc3RvcCggc2MgKTsNCiEgCQllcGljX2lu aXQoIHNjICk7DQohIAl9DQohICNlbmRpZg0KISANCiAgCUNTUl9XUklURV80 KCBzYywgSU5UU1RBVCwgc3RhdHVzICYgKA0KISAJCUlOVFNUQVRfUlFFfElO VFNUQVRfUkNDfA0KICAJCUlOVFNUQVRfVFhDfElOVFNUQVRfVENDfElOVFNU QVRfVFFFfA0KICAJCUlOVFNUQVRfRkFUQUx8SU5UU1RBVF9HUDJ8DQogIAkJ SU5UU1RBVF9DTlR8SU5UU1RBVF9UWFV8SU5UU1RBVF9PVld8SU5UU1RBVF9S WEUgKSApOw0KICANCiEgCWlmKCBzdGF0dXMgJiAoSU5UU1RBVF9SUUV8SU5U U1RBVF9SQ0N8SU5UU1RBVF9PVlcpICkgew0KICAJCWVwaWNfcnhfZG9uZSgg c2MgKTsNCiEgCQlpZiggc3RhdHVzICYgSU5UU1RBVF9SUUUgKSB7DQohIAkJ CWRwcmludGYoKCJ0eCVkOiBSeCBGSUZPIG92ZXJmbG93ZWQsIHJlc3RhcnRp bmcgcmVjZWl2ZXJcbiIsc2MtPnVuaXQpKTsNCiAgCQkJQ1NSX1dSSVRFXzQo IHNjLCBDT01NQU5ELCBDT01NQU5EX1JYUVVFVUVEICk7DQorIAkJCXNjLT5l cGljX2lmLmlmX2llcnJvcnMrKzsNCisgCQl9DQorIAkJaWYoIHN0YXR1cyAm IElOVFNUQVRfT1ZXICkgew0KKyAJCQlkcHJpbnRmKCgidHglZDogb25jaGlw IFJ4IGJ1ZmZlciBvdmVyZmxvd2VkLCByZXN0YXJ0aW5nIHJlY2VpdmVyXG4i LHNjLT51bml0KSk7DQorIAkJCUNTUl9XUklURV80KCBzYywgQ09NTUFORCwg Q09NTUFORF9SWFFVRVVFRCApOw0KKyAJCQlzYy0+ZXBpY19pZi5pZl9pZXJy b3JzKys7DQorIAkJfQ0KICAJfQ0KICANCiAgCWlmKCBzdGF0dXMgJiAoSU5U U1RBVF9UWEN8SU5UU1RBVF9UQ0N8SU5UU1RBVF9UUUUpICkNCiAgCQllcGlj X3R4X2RvbmUoIHNjICk7DQogIA0KICAJaWYoIChzdGF0dXMgJiBJTlRTVEFU X0dQMikgJiYgKFFTNjYxMl9PVUkgPT0gc2MtPnBoeWlkKSApIHsNCiAgCQl1 X2ludDMyX3Qgc3RhdHVzOw0KICANCiAgCQlzdGF0dXMgPSBlcGljX3JlYWRf cGh5X3JlZ2lzdGVyKCBzYywgUVM2NjEyX0lOVFNUQVQgKTsNCiAgDQohIAkJ aWYoIChzdGF0dXMgJiBJTlRTVEFUX0FOX0NPTVBMRVRFKSAmJiAoZXBpY19h dXRvbmVnKHNjKSA9PSBFUElDX0ZVTExfRFVQTEVYKSApIHsNCiAgCQkJc3Rh dHVzID0gQk1DUl9GVUxMX0RVUExFWCB8IGVwaWNfcmVhZF9waHlfcmVnaXN0 ZXIoIHNjLCBEUDgzODQwX0JNQ1IgKTsNCiEgCQkJQ1NSX1dSSVRFXzQoIHNj LCBUWENPTiwgVFhDT05fRlVMTF9EVVBMRVggfCBUWENPTl9ERUZBVUxUICk7 DQogIAkJfSBlbHNlIHsNCiAgCQkJc3RhdHVzID0gfkJNQ1JfRlVMTF9EVVBM RVggJiBlcGljX3JlYWRfcGh5X3JlZ2lzdGVyKCBzYywgRFA4Mzg0MF9CTUNS ICk7DQogIAkJCUNTUl9XUklURV80KCBzYywgVFhDT04sIFRYQ09OX0RFRkFV TFQgKTsNCioqKioqKioqKioqKioqKg0KKioqIDYwMyw2MTcgKioqKg0KICAJ CS8qIFRoZXJlIGlzIGFwcGFyZW50bHkgUVM2NjEyIGNoaXAgYnVnOiAqLw0K ICAJCS8qIEJNQ1JfRlVMTF9EVVBMRVggZmxhZyBpcyBub3QgdXBkYXRlZCBi eSAqLw0KICAJCS8qIGF1dG9uZWdvdGlhdGlvbiBwcm9jZXNzLCBzbyB1cGRh dGUgaXQgYnkgaGFuZHMgKi8NCiEgCQllcGljX3dyaXRlX3BoeV9yZWdpc3Rl ciggc2MsIERQODM4NDBfQk1DUiwgc3RhdHVzKTsNCiAgDQogIAkJLyogV2Ug c2hvdWxkIGNsZWFyIEdQMiBpbnQgYWdhaW4gYWZ0ZXIgd2UgY2xlYXIgaXQg b24gUEhZICovDQogIAkJQ1NSX1dSSVRFXzQoIHNjLCBJTlRTVEFULCBJTlRT VEFUX0dQMiApOyANCiAgCX0NCiAgDQogIAlpZiggc3RhdHVzICYgKElOVFNU QVRfRkFUQUx8SU5UU1RBVF9QTUF8SU5UU1RBVF9QVEF8SU5UU1RBVF9BUEV8 SU5UU1RBVF9EUEUpICl7DQogIAkJaW50IGo7DQohIAkJc3RydWN0IGVwaWNf dHhfZGVzYyAqZGVzYzsNCiAgDQogIAkJcHJpbnRmKCJ0eCVkOiBQQ0kgZmF0 YWwgZXJyb3Igb2NjdXJlZCAoJXMlcyVzJXMpXG4iLA0KICAJCQlzYy0+dW5p dCwNCi0tLSA2MzksNjU2IC0tLS0NCiAgCQkvKiBUaGVyZSBpcyBhcHBhcmVu dGx5IFFTNjYxMiBjaGlwIGJ1ZzogKi8NCiAgCQkvKiBCTUNSX0ZVTExfRFVQ TEVYIGZsYWcgaXMgbm90IHVwZGF0ZWQgYnkgKi8NCiAgCQkvKiBhdXRvbmVn b3RpYXRpb24gcHJvY2Vzcywgc28gdXBkYXRlIGl0IGJ5IGhhbmRzICovDQoh IAkJZXBpY193cml0ZV9waHlfcmVnaXN0ZXIoc2MsIERQODM4NDBfQk1DUiwg c3RhdHVzKTsNCiAgDQogIAkJLyogV2Ugc2hvdWxkIGNsZWFyIEdQMiBpbnQg YWdhaW4gYWZ0ZXIgd2UgY2xlYXIgaXQgb24gUEhZICovDQogIAkJQ1NSX1dS SVRFXzQoIHNjLCBJTlRTVEFULCBJTlRTVEFUX0dQMiApOyANCiAgCX0NCiAg DQogIAlpZiggc3RhdHVzICYgKElOVFNUQVRfRkFUQUx8SU5UU1RBVF9QTUF8 SU5UU1RBVF9QVEF8SU5UU1RBVF9BUEV8SU5UU1RBVF9EUEUpICl7DQorICNp ZiBkZWZpbmVkKEVQSUNfREVCVUcpDQogIAkJaW50IGo7DQohIAkJc3RydWN0 IGVwaWNfdHhfZGVzYyAqdGRlc2M7DQohIAkJc3RydWN0IGVwaWNfcnhfZGVz YyAqcmRlc2M7DQohICNlbmRpZg0KICANCiAgCQlwcmludGYoInR4JWQ6IFBD SSBmYXRhbCBlcnJvciBvY2N1cmVkICglcyVzJXMlcylcbiIsDQogIAkJCXNj LT51bml0LA0KKioqKioqKioqKioqKioqDQoqKiogNjIxLDYzNSAqKioqDQog IAkJCShzdGF0dXMmSU5UU1RBVF9EUEUpPyIgRFBFIjoiIik7DQogIA0KICAj aWYgZGVmaW5lZChFUElDX0RFQlVHKQ0KISAJCXByaW50ZigidHglZDogZHVt cGluZyBkZXNjcmlwdG9yc1xuIixzYy0+dW5pdCk7DQogIAkJZm9yKGo9MDtq PFRYX1JJTkdfU0laRTtqKyspew0KISAJCQlkZXNjID0gc2MtPnR4X2Rlc2Mg KyBqOw0KISAJCQlwcmludGYoImRlc2MlZDogJWQgJTA0eCwgJTA4eCwgJTA0 eCAlZCwgJTA4eFxuIiwNCiAgCQkJCWosDQohIAkJCQlkZXNjLT50eGxlbmd0 aCxkZXNjLT5zdGF0dXMsDQohIAkJCQlkZXNjLT5idWZhZGRyLA0KISAJCQkJ ZGVzYy0+Y29udHJvbCxkZXNjLT5idWZsZW5ndGgsDQohIAkJCQlkZXNjLT5u ZXh0DQogIAkJCSk7DQogIAkJfQ0KICAjZW5kaWYNCi0tLSA2NjAsNjg2IC0t LS0NCiAgCQkJKHN0YXR1cyZJTlRTVEFUX0RQRSk/IiBEUEUiOiIiKTsNCiAg DQogICNpZiBkZWZpbmVkKEVQSUNfREVCVUcpDQohIAkJcHJpbnRmKCJ0eCVk OiBQUkNEQVI6IDB4JTA4eCwgUFRDREFSOiAweCUwOHhcbiIsc2MtPnVuaXQs Q1NSX1JFQURfNChzYyxQUkNEQVIpLENTUl9SRUFEXzQoc2MsUFRDREFSKSk7 DQohIAkJcHJpbnRmKCJ0eCVkOiBkdW1waW5nIHR4IGRlc2NyaXB0b3JzXG4i LHNjLT51bml0KTsNCiAgCQlmb3Ioaj0wO2o8VFhfUklOR19TSVpFO2orKyl7 DQohIAkJCXRkZXNjID0gc2MtPnR4X2Rlc2MgKyBqOw0KISAJCQlwcmludGYo ImRlc2MlZDogJTRkIDB4JTA0eCwgMHglMDh4LCAweCUwNHggJTRkLCAweCUw OHhcbiIsDQogIAkJCQlqLA0KISAJCQkJdGRlc2MtPnR4bGVuZ3RoLHRkZXNj LT5zdGF0dXMsDQohIAkJCQl0ZGVzYy0+YnVmYWRkciwNCiEgCQkJCXRkZXNj LT5jb250cm9sLHRkZXNjLT5idWZsZW5ndGgsDQohIAkJCQl0ZGVzYy0+bmV4 dA0KISAJCQkpOw0KISAJCX0NCiEgCQlwcmludGYoInR4JWQ6IGR1bXBpbmcg cnggZGVzY3JpcHRvcnNcbiIsc2MtPnVuaXQpOw0KISAJCWZvcihqPTA7ajxS WF9SSU5HX1NJWkU7aisrKXsNCiEgCQkJcmRlc2MgPSBzYy0+cnhfZGVzYyAr IGo7DQohIAkJCXByaW50ZigiZGVzYyVkOiAlNGQgMHglMDR4LCAweCUwOHgs ICU0ZCwgMHglMDh4XG4iLA0KISAJCQkJaiwNCiEgCQkJCXJkZXNjLT5yeGxl bmd0aCxyZGVzYy0+c3RhdHVzLA0KISAJCQkJcmRlc2MtPmJ1ZmFkZHIsDQoh IAkJCQlyZGVzYy0+YnVmbGVuZ3RoLA0KISAJCQkJcmRlc2MtPm5leHQNCiAg CQkJKTsNCiAgCQl9DQogICNlbmRpZg0KKioqKioqKioqKioqKioqDQoqKiog NjQwLDY2NyAqKioqDQogIAl9DQogIA0KICAgICAgICAgIC8qIFVQREFURSBz dGF0aXN0aWNzICovDQohIAlpZiAoc3RhdHVzICYgKElOVFNUQVRfQ05UIHwg SU5UU1RBVF9UWFUgfCBJTlRTVEFUX09WVyB8IElOVFNUQVRfUlhFKSkgew0K ICANCiAgCQkvKiB1cGRhdGUgZG90MyBSeCBzdGF0aXN0aWNzICovDQohIAkJ c2MtPmRvdDNzdGF0cy5kb3QzU3RhdHNNaXNzZWRGcmFtZXMgKz0gQ1NSX1JF QURfMSggc2MsIE1QQ05UKTsNCiEgCQlzYy0+ZG90M3N0YXRzLmRvdDNTdGF0 c0ZyYW1lVG9vTG9uZ3MgKz0gQ1NSX1JFQURfMSggc2MsIEFMSUNOVCk7DQoh IAkJc2MtPmRvdDNzdGF0cy5kb3QzU3RhdHNGQ1NFcnJvcnMgKz0gQ1NSX1JF QURfMSggc2MsIENSQ0NOVCk7DQogIA0KICAJCS8qIFVwZGF0ZSBpZiBSeCBz dGF0aXN0aWNzICovDQohIAkJaWYgKHN0YXR1cyAmIChJTlRTVEFUX09WVyB8 IElOVFNUQVRfUlhFKSkNCiAgCQkJc2MtPmVwaWNfaWYuaWZfaWVycm9ycysr Ow0KICANCiAgCQkvKiBUeCBGSUZPIHVuZGVyZmxvdy4gKi8NCiAgCQlpZiAo c3RhdHVzICYgSU5UU1RBVF9UWFUpIHsNCiAgCQkJLyogSW5jLiBjb3VudGVy cyAqLw0KICAJCQlzYy0+ZG90M3N0YXRzLmRvdDNTdGF0c0ludGVybmFsTWFj VHJhbnNtaXRFcnJvcnMrKzsNCiAgCQkJc2MtPmVwaWNfaWYuaWZfb2Vycm9y cysrOw0KICANCiAgCQkJLyogUmVzdGFydCB0aGUgdHJhbnNtaXQgcHJvY2Vz cy4gKi8NCiEgCQkJQ1NSX1dSSVRFXzQoc2MsIENPTU1BTkQsIENPTU1BTkRf VFhVR08pOw0KICAJCX0NCiAgCX0NCiAgDQogIAkvKiBJZiBubyBwYWNrZXRz IGFyZSBwZW5kaW5nLCB0aHVzIG5vIHRpbWVvdXRzICovDQogIAlpZiggc2Mt PnBlbmRpbmdfdHhzID09IDAgKQ0KICAJCXNjLT5lcGljX2lmLmlmX3RpbWVy ID0gMDsNCi0tLSA2OTEsNzIzIC0tLS0NCiAgCX0NCiAgDQogICAgICAgICAg LyogVVBEQVRFIHN0YXRpc3RpY3MgKi8NCiEgCWlmIChzdGF0dXMgJiAoSU5U U1RBVF9DTlQgfCBJTlRTVEFUX1RYVSB8IElOVFNUQVRfUlhFKSkgew0KICAN CiAgCQkvKiB1cGRhdGUgZG90MyBSeCBzdGF0aXN0aWNzICovDQohIAkJc2Mt PmRvdDNzdGF0cy5kb3QzU3RhdHNNaXNzZWRGcmFtZXMgKz0gQ1NSX1JFQURf MShzYywgTVBDTlQpOw0KISAJCXNjLT5kb3Qzc3RhdHMuZG90M1N0YXRzRnJh bWVUb29Mb25ncyArPSBDU1JfUkVBRF8xKHNjLCBBTElDTlQpOw0KISAJCXNj LT5kb3Qzc3RhdHMuZG90M1N0YXRzRkNTRXJyb3JzICs9IENTUl9SRUFEXzEo c2MsIENSQ0NOVCk7DQogIA0KICAJCS8qIFVwZGF0ZSBpZiBSeCBzdGF0aXN0 aWNzICovDQohIAkJaWYgKHN0YXR1cyAmIElOVFNUQVRfUlhFKSB7DQohIAkJ CWRwcmludGYoKCJ0eCVkOiBDUkMvQWxpZ25tZW50IGVycm9yXG4iLHNjLT51 bml0KSk7DQogIAkJCXNjLT5lcGljX2lmLmlmX2llcnJvcnMrKzsNCisgCQl9 DQogIA0KICAJCS8qIFR4IEZJRk8gdW5kZXJmbG93LiAqLw0KICAJCWlmIChz dGF0dXMgJiBJTlRTVEFUX1RYVSkgew0KKyAJCQlkcHJpbnRmKCgidHglZDog VHggdW5kZXJydW4gZXJyb3IsIHJlc3RhcnRpbmcgdHJhbmNpZXZlclxuIixz Yy0+dW5pdCkpOw0KICAJCQkvKiBJbmMuIGNvdW50ZXJzICovDQogIAkJCXNj LT5kb3Qzc3RhdHMuZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9y cysrOw0KICAJCQlzYy0+ZXBpY19pZi5pZl9vZXJyb3JzKys7DQogIA0KICAJ CQkvKiBSZXN0YXJ0IHRoZSB0cmFuc21pdCBwcm9jZXNzLiAqLw0KISAJCQlD U1JfV1JJVEVfNChzYywgQ09NTUFORCwgQ09NTUFORF9UWFVHTyB8IENPTU1B TkRfVFhRVUVVRUQpOw0KICAJCX0NCiAgCX0NCiAgDQorIAlpZiggQ1NSX1JF QURfNCggc2MsIElOVFNUQVQgKSAmIElOVFNUQVRfSU5UX0FDVFYgKSBnb3Rv IGludGxvb3A7DQorIA0KICAJLyogSWYgbm8gcGFja2V0cyBhcmUgcGVuZGlu ZywgdGh1cyBubyB0aW1lb3V0cyAqLw0KICAJaWYoIHNjLT5wZW5kaW5nX3R4 cyA9PSAwICkNCiAgCQlzYy0+ZXBpY19pZi5pZl90aW1lciA9IDA7DQoqKioq KioqKioqKioqKioNCioqKiA3MjQsNzQxICoqKioNCiAgDQogIAkvKiBQcmVp bml0aWFsaXplIHNvZnRjIHN0cnVjdHVyZSAqLw0KICAgICAgCWJ6ZXJvKHNj LCBzaXplb2YoZXBpY19zb2Z0Y190KSk7CQkNCi0gCWVwaWNzWyB1bml0IF0g PSBzYzsNCiAgCXNjLT51bml0ID0gdW5pdDsNCiAgDQogIAkvKiBHZXQgaW9i YXNlIG9yIG1lbWJhc2UgKi8NCiAgI2lmIGRlZmluZWQoRVBJQ19VU0VJT1NQ QUNFKQ0KICAJaWYgKCFwY2lfbWFwX3BvcnQoY29uZmlnX2lkLCBQQ0lfQ0JJ TywodV9zaG9ydCAqKSAmKHNjLT5pb2Jhc2UpKSkgew0KICAJCXByaW50Zigi dHglZDogY2Fubm90IG1hcCBwb3J0XG4iLHVuaXQpOw0KICAJCXJldHVybjsN CiAgCX0NCiAgI2Vsc2UNCiAgCWlmICghcGNpX21hcF9tZW0oY29uZmlnX2lk LCBQQ0lfQ0JNQSwodm1fb2Zmc2V0X3QgKikgJihzYy0+Y3NyKSwodm1fb2Zm c2V0X3QgKikgJnBtZW1iYXNlKSkgew0KICAJCXByaW50ZigidHglZDogY2Fu bm90IG1hcCBtZW1vcnlcbiIsdW5pdCk7IA0KICAJCXJldHVybjsNCiAgCX0N CiAgI2VuZGlmDQotLS0gNzgwLDc5OCAtLS0tDQogIA0KICAJLyogUHJlaW5p dGlhbGl6ZSBzb2Z0YyBzdHJ1Y3R1cmUgKi8NCiAgICAgIAliemVybyhzYywg c2l6ZW9mKGVwaWNfc29mdGNfdCkpOwkJDQogIAlzYy0+dW5pdCA9IHVuaXQ7 DQogIA0KICAJLyogR2V0IGlvYmFzZSBvciBtZW1iYXNlICovDQogICNpZiBk ZWZpbmVkKEVQSUNfVVNFSU9TUEFDRSkNCiAgCWlmICghcGNpX21hcF9wb3J0 KGNvbmZpZ19pZCwgUENJX0NCSU8sKHVfc2hvcnQgKikgJihzYy0+aW9iYXNl KSkpIHsNCiAgCQlwcmludGYoInR4JWQ6IGNhbm5vdCBtYXAgcG9ydFxuIix1 bml0KTsNCisgCQlmcmVlKHNjLCBNX0RFVkJVRik7DQogIAkJcmV0dXJuOw0K ICAJfQ0KICAjZWxzZQ0KICAJaWYgKCFwY2lfbWFwX21lbShjb25maWdfaWQs IFBDSV9DQk1BLCh2bV9vZmZzZXRfdCAqKSAmKHNjLT5jc3IpLCh2bV9vZmZz ZXRfdCAqKSAmcG1lbWJhc2UpKSB7DQogIAkJcHJpbnRmKCJ0eCVkOiBjYW5u b3QgbWFwIG1lbW9yeVxuIix1bml0KTsgDQorIAkJZnJlZShzYywgTV9ERVZC VUYpOw0KICAJCXJldHVybjsNCiAgCX0NCiAgI2VuZGlmDQoqKioqKioqKioq KioqKioNCioqKiA3NjQsNzc2ICoqKioNCiAgCQlzYy0+ZXBpY19tYWNhZGRy WzBdLHNjLT5lcGljX21hY2FkZHJbMV0sc2MtPmVwaWNfbWFjYWRkclsyXSwN CiAgCQlzYy0+ZXBpY19tYWNhZGRyWzNdLHNjLT5lcGljX21hY2FkZHJbNF0s c2MtPmVwaWNfbWFjYWRkcls1XSk7DQogIA0KLSANCiAgCXMgPSBzcGxpbXAo KTsNCiAgDQogIAkvKiBNYXAgaW50ZXJydXB0ICovDQogIAlpZiggIXBjaV9t YXBfaW50KGNvbmZpZ19pZCwgZXBpY19pbnRyX25vcm1hbCwgKHZvaWQqKXNj LCAmbmV0X2ltYXNrKSApIHsNCiAgCQlwcmludGYoInR4JWQ6IGNvdWxkbid0 IG1hcCBpbnRlcnJ1cHRcbiIsdW5pdCk7DQotIAkJZXBpY3NbIHVuaXQgXSA9 IE5VTEw7DQogIAkJZnJlZShzYywgTV9ERVZCVUYpOw0KICAJCXJldHVybjsN CiAgCX0NCi0tLSA4MjEsODMxIC0tLS0NCioqKioqKioqKioqKioqKg0KKioq IDg2Nyw4NzYgKioqKg0KLS0tIDkyMiw5MzQgLS0tLQ0KICAJLyogaW5pdCBp Zm1lZGlhIGludGVyZmFjZSAqLw0KICAJaWZtZWRpYV9pbml0KCZzYy0+aWZt ZWRpYSwwLGVwaWNfaWZtZWRpYV9jaGFuZ2UsZXBpY19pZm1lZGlhX3N0YXR1 cyk7DQogIAlpZm1lZGlhX2FkZCgmc2MtPmlmbWVkaWEsSUZNX0VUSEVSfElG TV8xMF9ULDAsTlVMTCk7DQorIAlpZm1lZGlhX2FkZCgmc2MtPmlmbWVkaWEs SUZNX0VUSEVSfElGTV8xMF9UfElGTV9MT09QLDAsTlVMTCk7DQogIAlpZm1l ZGlhX2FkZCgmc2MtPmlmbWVkaWEsSUZNX0VUSEVSfElGTV8xMF9UfElGTV9G RFgsMCxOVUxMKTsNCiAgCWlmbWVkaWFfYWRkKCZzYy0+aWZtZWRpYSxJRk1f RVRIRVJ8SUZNXzEwMF9UWCwwLE5VTEwpOw0KKyAJaWZtZWRpYV9hZGQoJnNj LT5pZm1lZGlhLElGTV9FVEhFUnxJRk1fMTAwX1RYfElGTV9MT09QLDAsTlVM TCk7DQogIAlpZm1lZGlhX2FkZCgmc2MtPmlmbWVkaWEsSUZNX0VUSEVSfElG TV8xMDBfVFh8SUZNX0ZEWCwwLE5VTEwpOw0KICAJaWZtZWRpYV9hZGQoJnNj LT5pZm1lZGlhLElGTV9FVEhFUnxJRk1fQVVUTywwLE5VTEwpOw0KKyAJaWZt ZWRpYV9hZGQoJnNjLT5pZm1lZGlhLElGTV9FVEhFUnxJRk1fTE9PUCwwLE5V TEwpOw0KICAJaWZtZWRpYV9zZXQoJnNjLT5pZm1lZGlhLCBtZWRpYSk7DQog ICNlbmRpZg0KICANCioqKioqKioqKioqKioqKg0KKioqIDg4NCw4OTIgKioq Kg0KICAJLyogU2V0IHNodXQgZG93biByb3V0aW5lIHRvIHN0b3AgRE1BIHBy b2Nlc3NlcyBvbiByZWJvb3QgKi8NCiAgCWF0X3NodXRkb3duKGVwaWNfc2h1 dGRvd24sIHNjLCBTSFVURE9XTl9QT1NUX1NZTkMpOw0KICANCiEgCS8qDQoh IAkgKiAgQXR0YWNoIHRvIGlmIG1hbmFnZXINCiEgCSAqLw0KICAJaWZfYXR0 YWNoKGlmcCk7DQogIAlldGhlcl9pZmF0dGFjaChpZnApOw0KICANCi0tLSA5 NDIsOTQ4IC0tLS0NCiAgCS8qIFNldCBzaHV0IGRvd24gcm91dGluZSB0byBz dG9wIERNQSBwcm9jZXNzZXMgb24gcmVib290ICovDQogIAlhdF9zaHV0ZG93 bihlcGljX3NodXRkb3duLCBzYywgU0hVVERPV05fUE9TVF9TWU5DKTsNCiAg DQohIAkvKiAgQXR0YWNoIHRvIGlmIG1hbmFnZXIgKi8NCiAgCWlmX2F0dGFj aChpZnApOw0KICAJZXRoZXJfaWZhdHRhY2goaWZwKTsNCiAgDQoqKioqKioq KioqKioqKioNCioqKiA5MzcsOTQ3ICoqKioNCiAgCWlmbXItPmlmbV9zdGF0 dXMgfD0gSUZNX0FDVElWRTsNCiAgCWlmbXItPmlmbV9hY3RpdmUgfD0gKGJt Y3ImQk1DUl8xMDBNQlBTKT9JRk1fMTAwX1RYOklGTV8xMF9UOw0KICAJaWZt ci0+aWZtX2FjdGl2ZSB8PSAoYm1jciZCTUNSX0ZVTExfRFVQTEVYKT9JRk1f RkRYOjA7DQogIH0NCiAgI2VuZGlmDQogIA0KICAvKg0KISAgKiBJRklOSVQg ZnVuY3Rpb24NCiAgICogDQogICAqIHNwbGltcCgpIGludm9rZWQgaGVyZQ0K ICAgKi8NCi0tLSA5OTMsMTAwNCAtLS0tDQogIAlpZm1yLT5pZm1fc3RhdHVz IHw9IElGTV9BQ1RJVkU7DQogIAlpZm1yLT5pZm1fYWN0aXZlIHw9IChibWNy JkJNQ1JfMTAwTUJQUyk/SUZNXzEwMF9UWDpJRk1fMTBfVDsNCiAgCWlmbXIt PmlmbV9hY3RpdmUgfD0gKGJtY3ImQk1DUl9GVUxMX0RVUExFWCk/SUZNX0ZE WDowOw0KKyAJaWZtci0+aWZtX2FjdGl2ZSB8PSAoKENTUl9SRUFEXzQoc2Ms VFhDT04pJlRYQ09OX0xPT1BCQUNLX01PREUpPT1UWENPTl9MT09QQkFDS19N T0RFX0lOVCk/SUZNX0xPT1A6MDsNCiAgfQ0KICAjZW5kaWYNCiAgDQogIC8q DQohICAqIFJlc2V0IGNoaXAsIFBIWSwgYWxsb2NhdGUgcmluZ3MNCiAgICog DQogICAqIHNwbGltcCgpIGludm9rZWQgaGVyZQ0KICAgKi8NCioqKioqKioq KioqKioqKg0KKioqIDk3OSw5ODYgKioqKg0KICAgICAgICAgIENTUl9XUklU RV80KCBzYywgTEFOMSwgKCh1X2ludDE2X3QgKilzYy0+ZXBpY19tYWNhZGRy KVsxXSApOw0KICAJQ1NSX1dSSVRFXzQoIHNjLCBMQU4yLCAoKHVfaW50MTZf dCAqKXNjLT5lcGljX21hY2FkZHIpWzJdICk7DQogIA0KICAJLyogU2V0IHRy YW5zbWl0IHRocmVzaG9sZCAqLw0KISAJQ1NSX1dSSVRFXzQoIHNjLCBFVFhU SFIsIDB4NDAgKTsNCiAgDQogIAkvKiBDb21wdXRlIGFuZCBzZXQgUlhDT04u ICovDQogIAllcGljX3NldF9yeF9tb2RlKCBzYyApOw0KLS0tIDEwMzYsMTA0 NSAtLS0tDQogICAgICAgICAgQ1NSX1dSSVRFXzQoIHNjLCBMQU4xLCAoKHVf aW50MTZfdCAqKXNjLT5lcGljX21hY2FkZHIpWzFdICk7DQogIAlDU1JfV1JJ VEVfNCggc2MsIExBTjIsICgodV9pbnQxNl90ICopc2MtPmVwaWNfbWFjYWRk cilbMl0gKTsNCiAgDQorICNpZiBkZWZpbmVkKEVBUkxZX1RYKQ0KICAJLyog U2V0IHRyYW5zbWl0IHRocmVzaG9sZCAqLw0KISAJQ1NSX1dSSVRFXzQoIHNj LCBFVFhUSFIsIFRSQU5TTUlUX1RIUkVTSE9MRCApOw0KISAjZW5kaWYNCiAg DQogIAkvKiBDb21wdXRlIGFuZCBzZXQgUlhDT04uICovDQogIAllcGljX3Nl dF9yeF9tb2RlKCBzYyApOw0KKioqKioqKioqKioqKioqDQoqKiogOTkzLDEw MTEgKioqKg0KICAJZXBpY19zZXRfbWNfdGFibGUoIHNjICk7DQogIA0KICAJ LyogRW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0 IG1hc2suICovDQohIAlpZiggUVM2NjEyX09VSSA9PSBzYy0+cGh5aWQgKSB7 DQohIAkJQ1NSX1dSSVRFXzQoIHNjLCBJTlRNQVNLLA0KISAJCQlJTlRTVEFU X1JDQyB8IElOVFNUQVRfUlFFIHwgSU5UU1RBVF9PVlcgfCBJTlRTVEFUX1JY RSB8DQohIAkJCUlOVFNUQVRfVFhDIHwgSU5UU1RBVF9UQ0MgfCBJTlRTVEFU X1RRRSB8IElOVFNUQVRfVFhVIHwNCiEgCQkJSU5UU1RBVF9DTlQgfCBJTlRT VEFUX0dQMiB8IElOVFNUQVRfRkFUQUwgfA0KISAJCQlJTlRTVEFUX1BUQSB8 IElOVFNUQVRfUE1BIHwgSU5UU1RBVF9BUEUgfCBJTlRTVEFUX0RQRSApOw0K ISAJfSBlbHNlIHsNCiEgCQlDU1JfV1JJVEVfNCggc2MsIElOVE1BU0ssDQoh IAkJCUlOVFNUQVRfUkNDIHwgSU5UU1RBVF9SUUUgfCBJTlRTVEFUX09WVyB8 IElOVFNUQVRfUlhFIHwNCiEgCQkJSU5UU1RBVF9UWEMgfCBJTlRTVEFUX1RD QyB8IElOVFNUQVRfVFFFIHwgSU5UU1RBVF9UWFUgfA0KISAJCQlJTlRTVEFU X0NOVCB8IElOVFNUQVRfRkFUQUwgfA0KISAJCQlJTlRTVEFUX1BUQSB8IElO VFNUQVRfUE1BIHwgSU5UU1RBVF9BUEUgfCBJTlRTVEFUX0RQRSApOw0KISAJ fQ0KICANCiAgCS8qIEVuYWJsZSBpbnRlcnJ1cHRzLCAgc2V0IGZvciBQQ0kg cmVhZCBtdWx0aXBsZSBhbmQgZXRjICovDQogIAlDU1JfV1JJVEVfNCggc2Ms IEdFTkNUTCwNCi0tLSAxMDUyLDEwNjIgLS0tLQ0KICAJZXBpY19zZXRfbWNf dGFibGUoIHNjICk7DQogIA0KICAJLyogRW5hYmxlIGludGVycnVwdHMgYnkg c2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2suICovDQohIAlDU1JfV1JJVEVf NCggc2MsIElOVE1BU0ssDQohIAkJSU5UU1RBVF9SQ0MgfCBJTlRTVEFUX1JR RSB8IElOVFNUQVRfT1ZXIHwgSU5UU1RBVF9SWEUgfA0KISAJCUlOVFNUQVRf VFhDIHwgSU5UU1RBVF9UQ0MgfCBJTlRTVEFUX1RRRSB8IElOVFNUQVRfVFhV IHwNCiEgCQlJTlRTVEFUX0NOVCB8IElOVFNUQVRfRkFUQUwgfA0KISAJCSgo UVM2NjEyX09VSSA9PSBzYy0+cGh5aWQpP0lOVFNUQVRfR1AyOjApICk7DQog IA0KICAJLyogRW5hYmxlIGludGVycnVwdHMsICBzZXQgZm9yIFBDSSByZWFk IG11bHRpcGxlIGFuZCBldGMgKi8NCiAgCUNTUl9XUklURV80KCBzYywgR0VO Q1RMLA0KKioqKioqKioqKioqKioqDQoqKiogMTAyNywxMDU3ICoqKioNCiAg fQ0KICANCiAgLyoNCiEgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgc2V0IEVQ SUMncyByZWdpc3RlcnMgYWNjb3JkaW5nIElGRl8qIGZsYWdzDQogICAqLw0K ICBzdGF0aWMgdm9pZA0KICBlcGljX3NldF9yeF9tb2RlKA0KICAgICAgZXBp Y19zb2Z0Y190ICogc2MpDQogIHsNCiEgCXN0cnVjdCBpZm5ldCAqaWZwID0g JnNjLT5lcGljX2lmOw0KISAgICAgICAgIHVfaW50MTZfdCByeGNvbiA9IDA7 DQogIA0KISAjaWYgTkJQRklMVEVSID4gMA0KISAJaWYoIHNjLT5lcGljX2lm LmlmX2ZsYWdzICYgSUZGX1BST01JU0MgKQ0KISAJCXJ4Y29uIHw9IFJYQ09O X1BST01JU0NVT1VTX01PREU7DQohICNlbmRpZg0KISANCiEgCWlmKCBzYy0+ ZXBpY19pZi5pZl9mbGFncyAmIElGRl9CUk9BRENBU1QgKQ0KISAJCXJ4Y29u IHw9IFJYQ09OX1JFQ0VJVkVfQlJPQURDQVNUX0ZSQU1FUzsNCiEgDQohIAlp Ziggc2MtPmVwaWNfaWYuaWZfZmxhZ3MgJiBJRkZfTVVMVElDQVNUICkNCiEg CQlyeGNvbiB8PSBSWENPTl9SRUNFSVZFX01VTFRJQ0FTVF9GUkFNRVM7DQog IA0KICAJQ1NSX1dSSVRFXzQoIHNjLCBSWENPTiwgcnhjb24gKTsNCiAgDQog IAlyZXR1cm47DQogIH0NCiAgDQogIHN0YXRpYyB2b2lkDQogIGVwaWNfaW5p dF9waHkgX19QKCgNCiAgICAgIGVwaWNfc29mdGNfdCAqIHNjKSkNCi0tLSAx MDc4LDExMDIgLS0tLQ0KICB9DQogIA0KICAvKg0KISAgKiBTeW5vcHNpczog Y2FsY3VsYXRlIGFuZCBzZXQgUnggbW9kZQ0KICAgKi8NCiAgc3RhdGljIHZv aWQNCiAgZXBpY19zZXRfcnhfbW9kZSgNCiAgICAgIGVwaWNfc29mdGNfdCAq IHNjKQ0KICB7DQohIAl1X2ludDMyX3QgZmxhZ3MgPSBzYy0+ZXBpY19pZi5p Zl9mbGFnczsNCiEgICAgICAgICB1X2ludDMyX3Qgcnhjb24gPSBSWENPTl9E RUZBVUxUIHwgUlhDT05fUkVDRUlWRV9NVUxUSUNBU1RfRlJBTUVTIHwgUlhD T05fUkVDRUlWRV9CUk9BRENBU1RfRlJBTUVTOw0KICANCiEgCXJ4Y29uIHw9 IChmbGFncyAmIElGRl9QUk9NSVNDKT9SWENPTl9QUk9NSVNDVU9VU19NT0RF OjA7DQogIA0KICAJQ1NSX1dSSVRFXzQoIHNjLCBSWENPTiwgcnhjb24gKTsN CiAgDQogIAlyZXR1cm47DQogIH0NCiAgDQorIC8qDQorICAqIFN5bm9wc2lz OiBSZXNldCBQSFkgYW5kIGRvIFBIWS1zcGVjaWFsIGluaXRpYWxpemF0aW9u Og0KKyAgKi8NCiAgc3RhdGljIHZvaWQNCiAgZXBpY19pbml0X3BoeSBfX1Ao KA0KICAgICAgZXBpY19zb2Z0Y190ICogc2MpKQ0KKioqKioqKioqKioqKioq DQoqKiogMTA3MywxMDc5ICoqKioNCiAgCQlDU1JfV1JJVEVfNCggc2MsIE5W Q1RMLCBOVkNUTF9HUDFfT1VUUFVUX0VOQUJMRSApOw0KICAJCWVwaWNfcmVh ZF9waHlfcmVnaXN0ZXIoIHNjLCBRUzY2MTJfSU5UU1RBVCApOw0KICAJCWVw aWNfd3JpdGVfcGh5X3JlZ2lzdGVyKCBzYywgUVM2NjEyX0lOVE1BU0ssDQoh IAkJCUlOVE1BU0tfVEhVTkRFUkxBTnxJTlRTVEFUX0FOX0NPTVBMRVRFICk7 DQogIAkJYnJlYWs7DQogIAlkZWZhdWx0Og0KICAJCWJyZWFrOw0KLS0tIDEx MTgsMTEyOCAtLS0tDQogIAkJQ1NSX1dSSVRFXzQoIHNjLCBOVkNUTCwgTlZD VExfR1AxX09VVFBVVF9FTkFCTEUgKTsNCiAgCQllcGljX3JlYWRfcGh5X3Jl Z2lzdGVyKCBzYywgUVM2NjEyX0lOVFNUQVQgKTsNCiAgCQllcGljX3dyaXRl X3BoeV9yZWdpc3Rlciggc2MsIFFTNjYxMl9JTlRNQVNLLA0KISAJCQlJTlRN QVNLX1RIVU5ERVJMQU4gfCBJTlRTVEFUX0FOX0NPTVBMRVRFICk7DQohIA0K ISAJCS8qIEVuYWJsZSBRUzY2MTIgZXh0ZW5kZWQgY2FibGUgbGVuZ3RoIGNh cGFiaWxpdGVzICovDQohIAkJZXBpY193cml0ZV9waHlfcmVnaXN0ZXIoIHNj LCBRUzY2MTJfTUNUTCwgZXBpY19yZWFkX3BoeV9yZWdpc3Rlciggc2MsUVM2 NjEyX01DVEwgKSB8IE1DVExfQlRFWFQgKTsNCiEgDQogIAkJYnJlYWs7DQog IAlkZWZhdWx0Og0KICAJCWJyZWFrOw0KKioqKioqKioqKioqKioqDQoqKiog MTA4MSwxMDg3ICoqKioNCiAgfQ0KICANCiAgLyoNCiEgICogVGhpcyBmdW5j dGlvbiBzaG91bGQgc2V0IE1JSSB0byBtb2RlIHNwZWNpZmllZCBieSBJRkZf TElOSyogZmxhZ3Mgb3INCiAgICogaWZtZWRpYSBzdHJ1Y3R1cmUuDQogICAq Lw0KICBzdGF0aWMgdm9pZA0KLS0tIDExMzAsMTEzNiAtLS0tDQogIH0NCiAg DQogIC8qDQohICAqIFN5bm9wc2lzOiBTZXQgUEhZIHRvIG1lZGlhIHR5cGUg c3BlY2lmaWVkIGJ5IElGRl9MSU5LKiBmbGFncyBvcg0KICAgKiBpZm1lZGlh IHN0cnVjdHVyZS4NCiAgICovDQogIHN0YXRpYyB2b2lkDQoqKioqKioqKioq KioqKioNCioqKiAxMTA4LDExMTQgKioqKg0KICANCiAgCQllcGljX3dyaXRl X3BoeV9yZWdpc3Rlciggc2MsIERQODM4NDBfQk1DUiwgbWVkaWEgKTsNCiAg DQohIAkJQ1NSX1dSSVRFXzQoIHNjLCBUWENPTiwodGd0bWVkaWEmSUZNX0ZE WCk/VFhDT05fTE9PUEJBQ0tfTU9ERV9GVUxMX0RVUExFWHxUWENPTl9ERUZB VUxUOlRYQ09OX0RFRkFVTFQgKTsNCiAgCX0NCiAgI2Vsc2UNCiAgCWlmKCBp ZnAtPmlmX2ZsYWdzICYgSUZGX0xJTkswICkgew0KLS0tIDExNTcsMTE2NyAt LS0tDQogIA0KICAJCWVwaWNfd3JpdGVfcGh5X3JlZ2lzdGVyKCBzYywgRFA4 Mzg0MF9CTUNSLCBtZWRpYSApOw0KICANCiEgCQltZWRpYSA9IFRYQ09OX0RF RkFVTFQ7DQohIAkJaWYoIHRndG1lZGlhICYgSUZNX0ZEWCApIG1lZGlhIHw9 IFRYQ09OX0ZVTExfRFVQTEVYOw0KISAJCWVsc2UgaWYoIHRndG1lZGlhICYg SUZNX0xPT1AgKSBtZWRpYSB8PSBUWENPTl9MT09QQkFDS19NT0RFX0lOVDsN CiEgCQkNCiEgCQlDU1JfV1JJVEVfNCggc2MsIFRYQ09OLCBtZWRpYSApOw0K ICAJfQ0KICAjZWxzZQ0KICAJaWYoIGlmcC0+aWZfZmxhZ3MgJiBJRkZfTElO SzAgKSB7DQoqKioqKioqKioqKioqKioNCioqKiAxMTIxLDExMjcgKioqKg0K ICANCiAgCQllcGljX3dyaXRlX3BoeV9yZWdpc3Rlciggc2MsIERQODM4NDBf Qk1DUiwgbWVkaWEgKTsNCiAgDQohIAkJQ1NSX1dSSVRFXzQoIHNjLCBUWENP TiwgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfTElOSzIpID8gVFhDT05fTE9PUEJB Q0tfTU9ERV9GVUxMX0RVUExFWHxUWENPTl9ERUZBVUxUIDogVFhDT05fREVG QVVMVCApOw0KICAJfQ0KICAjZW5kaWYNCiAgCSAgZWxzZSB7DQotLS0gMTE3 NCwxMTgzIC0tLS0NCiAgDQogIAkJZXBpY193cml0ZV9waHlfcmVnaXN0ZXIo IHNjLCBEUDgzODQwX0JNQ1IsIG1lZGlhICk7DQogIA0KISAJCW1lZGlhID0g VFhDT05fREVGQVVMVDsNCiEgCQltZWRpYSB8PSAoaWZwLT5pZl9mbGFncyZJ RkZfTElOSzIpP1RYQ09OX0ZVTExfRFVQTEVYOjA7DQohICANCiEgCQlDU1Jf V1JJVEVfNCggc2MsIFRYQ09OLCBtZWRpYSApOw0KICAJfQ0KICAjZW5kaWYN CiAgCSAgZWxzZSB7DQoqKioqKioqKioqKioqKioNCioqKiAxMTQyLDExNDkg KioqKg0KICAgICAgICAgIAkJREVMQVkoMzAwMDAwMCk7DQogIAkJCQ0KICAJ CQlpZiggZXBpY19hdXRvbmVnKHNjKSA9PSBFUElDX0ZVTExfRFVQTEVYICkN CiEgCQkJCUNTUl9XUklURV80KCBzYywgVFhDT04sDQohIAkJCQkJVFhDT05f TE9PUEJBQ0tfTU9ERV9GVUxMX0RVUExFWHxUWENPTl9ERUZBVUxUKTsNCiAg CQl9DQogIAkJLyogRWxzZSBpdCB3aWxsIGJlIGRvbmUgd2hlbiBHUDIgaW50 IG9jY3VyZWQgKi8NCiAgCX0NCi0tLSAxMTk4LDEyMDQgLS0tLQ0KICAgICAg ICAgIAkJREVMQVkoMzAwMDAwMCk7DQogIAkJCQ0KICAJCQlpZiggZXBpY19h dXRvbmVnKHNjKSA9PSBFUElDX0ZVTExfRFVQTEVYICkNCiEgCQkJCUNTUl9X UklURV80KCBzYywgVFhDT04sIFRYQ09OX0ZVTExfRFVQTEVYfFRYQ09OX0RF RkFVTFQpOw0KICAJCX0NCiAgCQkvKiBFbHNlIGl0IHdpbGwgYmUgZG9uZSB3 aGVuIEdQMiBpbnQgb2NjdXJlZCAqLw0KICAJfQ0KKioqKioqKioqKioqKioq DQoqKiogMTI1OCwxMjY0ICoqKioNCiAgfQ0KICANCiAgLyoNCiEgICogIFRo aXMgZnVuY3Rpb24gc2hvdWxkIGNvbXBsZXRlbHkgc3RvcCByeCBhbmQgdHgg cHJvY2Vzc2VzDQogICAqICANCiAgICogIHNwbGltcCgpIGludm9rZWQgaGVy ZQ0KICAgKi8NCi0tLSAxMzEzLDEzMjAgLS0tLQ0KICB9DQogIA0KICAvKg0K ISAgKiAgU3lub3BzaXM6IENvbXBsZXRlbHkgc3RvcCBSeCBhbmQgVHggcHJv Y2Vzc2VzLCBhbmQgZGVhbGxvY2F0ZSByaW5ncy4gSWYNCiEgICogVFFFIGlz IHNldCwgYWRkaXRpb25hbCBwYWNrZXQgbmVlZHMgdG8gYmUgcXVldWVkIHRv IHN0b3AgVHggRE1BLg0KICAgKiAgDQogICAqICBzcGxpbXAoKSBpbnZva2Vk IGhlcmUNCiAgICovDQoqKioqKioqKioqKioqKioNCioqKiAxMjY4LDEzMDUg KioqKg0KICB7DQogIAlpbnQgaSxzOw0KICANCiAgCXMgPSBzcGxpbXAoKTsN CiAgCXNjLT5lcGljX2lmLmlmX3RpbWVyID0gMDsNCiAgDQohIAkvKiBEaXNh YmxlIGludGVycnVwdHMsIHN0b3AgcHJvY2Vzc2VzICovDQogIAlDU1JfV1JJ VEVfNCggc2MsIElOVE1BU0ssIDAgKTsNCiAgCUNTUl9XUklURV80KCBzYywg R0VOQ1RMLCAwICk7DQotIAlDU1JfV1JJVEVfNCggc2MsIENPTU1BTkQsDQot IAkJQ09NTUFORF9TVE9QX1JYIHwgQ09NTUFORF9TVE9QX1JETUEgfCBDT01N QU5EX1NUT1BfVERNQSApOw0KICANCiEgCS8qIFdhaXQgUlggYW5kIFRYIERN QSB0byBzdG9wICovDQohIAlmb3IoaT0wO2k8MHgxMDAwMDA7aSsrKXsNCiEg CQlpZiggKENTUl9SRUFEXzQoc2MsSU5UU1RBVCkmKElOVFNUQVRfUlhJRExF fElOVFNUQVRfVFhJRExFKSkgPT0NCiEgCQkJKElOVFNUQVRfUlhJRExFfElO VFNUQVRfVFhJRExFKSApIGJyZWFrOw0KISAJfQ0KISAJDQohIAlpZiggIShD U1JfUkVBRF80KHNjLElOVFNUQVQpJklOVFNUQVRfUlhJRExFKSApDQogIAkJ cHJpbnRmKCJ0eCVkOiBjYW4ndCBzdG9wIFJYIERNQVxuIixzYy0+dW5pdCk7 DQogIA0KISAJaWYoICEoQ1NSX1JFQURfNChzYyxJTlRTVEFUKSZJTlRTVEFU X1RYSURMRSkgKQ0KISAJCXByaW50ZigidHglZDogY2FuJ3Qgc3RvcCBUWCBE TUFcbiIsc2MtPnVuaXQpOw0KICANCiEgCS8qIFJlc2V0IGNoaXAgYW5kIHBo eSAqLw0KICAJQ1NSX1dSSVRFXzQoIHNjLCBHRU5DVEwsIEdFTkNUTF9TT0ZU X1JFU0VUICk7DQogIA0KICAJLyogTmVlZCB0byB3YWl0IGZvciAxNSBwY2kg dGlja3MgdG8gcGFzcyBiZWZvcmUgYWNjZXNzaW5nIGFnYWluKi8NCiAgCURF TEFZKDEpOw0KICANCiAgCS8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3Ig cmluZ3MgKi8NCiAgCWVwaWNfZnJlZV9yaW5ncyggc2MgKTsNCiAgDQogIAlz cGx4KHMpOw0KICANCiAgfQ0KICANCiAgLyoNCi0tLSAxMzI0LDEzOTIgLS0t LQ0KICB7DQogIAlpbnQgaSxzOw0KICANCisgCWRwcmludGYoKCJ0eCVkOiBl cGljX3N0b3AoKTogZW50ZXJcbiIsc2MtPnVuaXQpKTsNCisgDQogIAlzID0g c3BsaW1wKCk7DQogIAlzYy0+ZXBpY19pZi5pZl90aW1lciA9IDA7DQogIA0K ISAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovDQogIAlDU1JfV1JJVEVfNCgg c2MsIElOVE1BU0ssIDAgKTsNCiAgCUNTUl9XUklURV80KCBzYywgR0VOQ1RM LCAwICk7DQogIA0KISAJLyogU3RvcCBUeCBhbmQgUnggRE1BICovDQohIAlD U1JfV1JJVEVfNCggc2MsIENPTU1BTkQsIENPTU1BTkRfU1RPUF9SWCB8IENP TU1BTkRfU1RPUF9SRE1BIHwgQ09NTUFORF9TVE9QX1RETUEpOw0KISANCiEg CWRwcmludGYoKCJ0eCVkOiB3YWl0aW5nIFJ4IERNQSB0byBzdG9wXG4iLHNj LT51bml0KSk7DQohIAkvKiBXYWl0IG9ubHkgUnggRE1BICovDQohIAlmb3Io aT0wO2k8MHgxMDAwMDA7aSsrKQ0KISAJCWlmKCAoQ1NSX1JFQURfNChzYyxJ TlRTVEFUKSZJTlRTVEFUX1JYSURMRSkgPT0gSU5UU1RBVF9SWElETEUgKSBi cmVhazsNCiEgDQohIAlpZiggIShDU1JfUkVBRF80KHNjLElOVFNUQVQpJklO VFNUQVRfUlhJRExFKSApIA0KICAJCXByaW50ZigidHglZDogY2FuJ3Qgc3Rv cCBSWCBETUFcbiIsc2MtPnVuaXQpOw0KKyAJZWxzZQ0KKyAJCWRwcmludGYo KCJ0eCVkOiBSeCBETUEgc3RvcGVkXG4iLHNjLT51bml0KSk7DQorIA0KKyAJ LyogTWF5IG5lZWQgdG8gcXVldWUgb25lIG1vcmUgcGFja2V0IGlmIFRRRSAq Lw0KKyAJaWYoIChDU1JfUkVBRF80KCBzYywgSU5UU1RBVCApICYgSU5UU1RB VF9UUUUpICYmDQorIAkgICAgIShDU1JfUkVBRF80KCBzYywgSU5UU1RBVCAp ICYgSU5UU1RBVF9UWElETEUpICl7DQorIAkJZHByaW50ZigoInR4JWQ6IGVw aWNfc3RvcCgpOiBxdWV1ZSBsYXN0IHBhY2tldFxuIixzYy0+dW5pdCkpOw0K KyANCisgCQkvKiBUdXJuIGl0IHRvIGxvb3BiYWNrIG1vZGUgKi8JDQorIAkJ Q1NSX1dSSVRFXzQoIHNjLCBUWENPTiwgVFhDT05fREVGQVVMVCB8IFRYQ09O X0xPT1BCQUNLX01PREVfSU5UICk7DQorIA0KKyAJCXNjLT50eF9kZXNjW3Nj LT5jdXJfdHhdLmJ1ZmFkZHIgPSB2dG9waHlzKCBzYyApOw0KKyAJCXNjLT50 eF9kZXNjW3NjLT5jdXJfdHhdLmJ1Zmxlbmd0aCA9IEVUSEVSX01JTl9MRU4t RVRIRVJfQ1JDX0xFTjsNCisgCQlzYy0+dHhfZGVzY1tzYy0+Y3VyX3R4XS5j b250cm9sID0gMHgxNDsNCisgCQlzYy0+dHhfZGVzY1tzYy0+Y3VyX3R4XS50 eGxlbmd0aCA9IEVUSEVSX01JTl9MRU4tRVRIRVJfQ1JDX0xFTjsNCisgCQlz Yy0+dHhfZGVzY1tzYy0+Y3VyX3R4XS5zdGF0dXMgPSAweDgwMDA7DQorIA0K KyAJCUNTUl9XUklURV80KCBzYywgQ09NTUFORCwgQ09NTUFORF9UWFFVRVVF RCApOw0KICANCiEgCQlkcHJpbnRmKCgidHglZDogd2FpdGluZyBUeCBETUEg dG8gc3RvcFxuIixzYy0+dW5pdCkpOw0KISAJCS8qIFdhaXQgVFggRE1BIHRv IHN0b3AgKi8NCiEgCQlmb3IoaT0wO2k8MHgxMDAwMDA7aSsrKQ0KISAJCQlp ZiggKENTUl9SRUFEXzQoc2MsSU5UU1RBVCkmSU5UU1RBVF9UWElETEUpID09 IElOVFNUQVRfVFhJRExFICkgYnJlYWs7DQogIA0KISAJCWlmKCAhKENTUl9S RUFEXzQoc2MsSU5UU1RBVCkmSU5UU1RBVF9UWElETEUpICkNCiEgCQkJcHJp bnRmKCJ0eCVkOiBjYW4ndCBzdG9wIFRYIERNQVxuIixzYy0+dW5pdCk7DQoh IAkJZWxzZQ0KISAJCQlkcHJpbnRmKCgidHglZDogVHggRE1BIHN0b3BlZFxu IixzYy0+dW5pdCkpOw0KISAJfSBlbHNlDQohIAkJZHByaW50ZigoInR4JWQ6 IFR4IERNQSBzdG9wZWRcbiIsc2MtPnVuaXQpKTsNCiEgDQohIAkvKiBSZXNl dCBjaGlwICovDQogIAlDU1JfV1JJVEVfNCggc2MsIEdFTkNUTCwgR0VOQ1RM X1NPRlRfUkVTRVQgKTsNCiAgDQogIAkvKiBOZWVkIHRvIHdhaXQgZm9yIDE1 IHBjaSB0aWNrcyB0byBwYXNzIGJlZm9yZSBhY2Nlc3NpbmcgYWdhaW4qLw0K ICAJREVMQVkoMSk7DQogIA0KKyAJZHByaW50ZigoInR4JWQ6IGRlYWxsb2Nh dGUgcmluZ3NcbiIsc2MtPnVuaXQpKTsNCiAgCS8qIEZyZWUgbWVtb3J5IGFs bG9jYXRlZCBmb3IgcmluZ3MgKi8NCiAgCWVwaWNfZnJlZV9yaW5ncyggc2Mg KTsNCiAgDQogIAlzcGx4KHMpOw0KICANCisgCWRwcmludGYoKCJ0eCVkOiBl cGljX3N0b3AoKTogZG9uZVxuIixzYy0+dW5pdCkpOw0KICB9DQogIA0KICAv Kg0KKioqKioqKioqKioqKioqDQoqKiogMTMxMiwxMzE3ICoqKioNCi0tLSAx Mzk5LDE0MDYgLS0tLQ0KICBlcGljX2ZyZWVfcmluZ3MoZXBpY19zb2Z0Y190 ICogc2Mpew0KICAJaW50IGk7DQogIA0KKyAJZHByaW50ZigoInR4JWQ6IGVw aWNfZnJlZV9yaW5ncygpOiBlbnRlclxuIixzYy0+dW5pdCkpOw0KKyANCiAg CWZvcihpPTA7aTxSWF9SSU5HX1NJWkU7aSsrKXsNCiAgCQlzdHJ1Y3QgZXBp Y19yeF9idWZmZXIgKmJ1ZiA9IHNjLT5yeF9idWZmZXIgKyBpOw0KICAJCXN0 cnVjdCBlcGljX3J4X2Rlc2MgKmRlc2MgPSBzYy0+cnhfZGVzYyArIGk7DQoq KioqKioqKioqKioqKioNCioqKiAxMzQ1LDEzNTAgKioqKg0KLS0tIDE0MzQs MTQ0MSAtLS0tDQogIAkJYnVmLT5kYXRhID0gTlVMTDsNCiAgI2VuZGlmDQog IAl9DQorIA0KKyAJZHByaW50ZigoInR4JWQ6IGVwaWNfZnJlZV9yaW5ncygp OiBkb25lXG4iLHNjLT51bml0KSk7DQogIH0NCiAgDQogIC8qDQoqKioqKioq KioqKioqKioNCioqKiAxMzgyLDEzODggKioqKg0KICAJCWlmKCBOVUxMID09 IChidWYtPm1idWYtPm1fZmxhZ3MgJiBNX0VYVCkgKSByZXR1cm4gLTE7DQog IAkJZGVzYy0+YnVmYWRkciA9IHZ0b3BoeXMoIG10b2QoYnVmLT5tYnVmLGNh ZGRyX3QpICk7DQogICNlbHNlDQohIAkJYnVmLT5kYXRhID0gbWFsbG9jKEVU SEVSX01BWF9GUkFNRV9MRU4sIE1fREVWQlVGLCBNX05PV0FJVCk7DQogIAkJ aWYoIGJ1Zi0+ZGF0YSA9PSBOVUxMICkgcmV0dXJuIC0xOw0KICAJCWRlc2Mt PmJ1ZmFkZHIgPSB2dG9waHlzKCBidWYtPmRhdGEgKTsNCiAgI2VuZGlmDQot LS0gMTQ3MywxNDc5IC0tLS0NCiAgCQlpZiggTlVMTCA9PSAoYnVmLT5tYnVm LT5tX2ZsYWdzICYgTV9FWFQpICkgcmV0dXJuIC0xOw0KICAJCWRlc2MtPmJ1 ZmFkZHIgPSB2dG9waHlzKCBtdG9kKGJ1Zi0+bWJ1ZixjYWRkcl90KSApOw0K ICAjZWxzZQ0KISAJCWJ1Zi0+ZGF0YSA9IG1hbGxvYyggRVRIRVJfTUFYX0ZS QU1FX0xFTiwgTV9ERVZCVUYsIE1fTk9XQUlUKTsNCiAgCQlpZiggYnVmLT5k YXRhID09IE5VTEwgKSByZXR1cm4gLTE7DQogIAkJZGVzYy0+YnVmYWRkciA9 IHZ0b3BoeXMoIGJ1Zi0+ZGF0YSApOw0KICAjZW5kaWYNCioqKiBzbWM4M2Mx NzAuaC5vcmlnCVR1ZSBNYXkgIDUgMTg6MjE6MzAgMTk5OA0KLS0tIHNtYzgz YzE3MC5oCVR1ZSBNYXkgIDUgMTg6MTA6NDMgMTk5OA0KKioqKioqKioqKioq KioqDQoqKiogMTgwLDE5MCAqKioqDQogICNkZWZpbmUgVFhDT05fTE9PUEJB Q0tfRElTQUJMRQkJMHgwMDAwMDAwMA0KICAjZGVmaW5lIFRYQ09OX0xPT1BC QUNLX01PREVfSU5UCQkweDAwMDAwMDAyDQogICNkZWZpbmUgVFhDT05fTE9P UEJBQ0tfTU9ERV9QSFkJCTB4MDAwMDAwMDQNCiEgI2RlZmluZSBUWENPTl9M T09QQkFDS19NT0RFX0ZVTExfRFVQTEVYCTB4MDAwMDAwMDYNCiAgI2RlZmlu ZSBUWENPTl9TTE9UX1RJTUUJCQkweDAwMDAwMDc4DQogIA0KISAjZGVmaW5l IFRYQ09OX0RFRkFVTFQJKFRYQ09OX1NMT1RfVElNRXxUWENPTl9FQVJMWV9U UkFOU01JVF9FTkFCTEUpDQohIA0KICAvKg0KICAgKiBOYXRpb25hbCBTZW1p Y29uZHVjdG9yJ3MgRFA4Mzg0MEEgUmVnaXN0ZXJzIGFuZCBiaXRzDQogICAq Lw0KLS0tIDE4MCwyMDAgLS0tLQ0KICAjZGVmaW5lIFRYQ09OX0xPT1BCQUNL X0RJU0FCTEUJCTB4MDAwMDAwMDANCiAgI2RlZmluZSBUWENPTl9MT09QQkFD S19NT0RFX0lOVAkJMHgwMDAwMDAwMg0KICAjZGVmaW5lIFRYQ09OX0xPT1BC QUNLX01PREVfUEhZCQkweDAwMDAwMDA0DQohICNkZWZpbmUgVFhDT05fTE9P UEJBQ0tfTU9ERQkJMHgwMDAwMDAwNg0KISAjZGVmaW5lIFRYQ09OX0ZVTExf RFVQTEVYCQkweDAwMDAwMDA2DQogICNkZWZpbmUgVFhDT05fU0xPVF9USU1F CQkJMHgwMDAwMDA3OA0KICANCiEgI2lmIGRlZmluZWQoRUFSTFlfVFgpDQoh ICAjZGVmaW5lIFRYQ09OX0RFRkFVTFQJCShUWENPTl9TTE9UX1RJTUUgfCBU WENPTl9FQVJMWV9UUkFOU01JVF9FTkFCTEUpDQohICAjZGVmaW5lIFRSQU5T TUlUX1RIUkVTSE9MRAkweDQwDQohICNlbHNlDQohICAjZGVmaW5lIFRYQ09O X0RFRkFVTFQJCShUWENPTl9TTE9UX1RJTUUpDQohICNlbmRpZg0KISAjaWYg ZGVmaW5lZChFQVJMWV9SWCkNCiEgICNkZWZpbmUgUlhDT05fREVGQVVMVAkJ KFJYQ09OX0VBUkxZX1JFQ0VJVkVfRU5BQkxFIHwgUlhDT05fU0FWRV9FUlJP UkVEX1BBQ0tFVFMpDQohICNlbHNlDQohICAjZGVmaW5lIFJYQ09OX0RFRkFV TFQJCSgwKQ0KISAjZW5kaWYNCiAgLyoNCiAgICogTmF0aW9uYWwgU2VtaWNv bmR1Y3RvcidzIERQODM4NDBBIFJlZ2lzdGVycyBhbmQgYml0cw0KICAgKi8N CioqKioqKioqKioqKioqKg0KKioqIDIyOCwyMzYgKioqKg0KLS0tIDIzOCwy NTIgLS0tLQ0KICAgKiBRdWFsaXR5IFNlbWljb25kdWN0b3IncyBRUzY2MTIg cmVnaXN0ZXJzIGFuZCBiaXRzDQogICAqLw0KICAjZGVmaW5lCVFTNjYxMl9P VUkJCTB4MDA2MDUxDQorICNkZWZpbmUJUVM2NjEyX01DVEwJCTE3DQogICNk ZWZpbmUJUVM2NjEyX0lOVFNUQVQJCTI5DQogICNkZWZpbmUJUVM2NjEyX0lO VE1BU0sJCTMwDQogIA0KKyAjZGVmaW5lCU1DVExfVDRfUFJFU0VOVAkJMHgx MDAwCS8qIEV4dGVybmFsIFQ0IEVuYWJsZWQsIGlnbm9yZWQgKi8NCisgCQkJ CQkvKiBpZiBBdXRvTmVnIGlzIGVuYWJsZWQgKi8NCisgI2RlZmluZQlNQ1RM X0JURVhUCQkweDA4MDAJLyogUmVkdWNlcyAxMGJhc2V0IHNxdWVsY2ggbGV2 ZWwgKi8NCisgCQkJCQkvKiBmb3IgZXh0ZW5kZWQgY2FibGUgbGVuZ3RoICov DQorIA0KICAjZGVmaW5lCUlOVFNUQVRfQU5fQ09NUExFVEUJMHg0MAkvKiBB dXRvbmVnb3RpYXRpb24gY29tcGxldGUgKi8NCiAgI2RlZmluZQlJTlRTVEFU X1JGX0RFVEVDVEVECTB4MjAJLyogUmVtb3RlIEZhdWx0IGRldGVjdGVkICov DQogICNkZWZpbmUJSU5UU1RBVF9MSU5LX1NUQVRVUwkweDEwCS8qIExpbmsg c3RhdHVzIGNoYW5nZWQgKi8NCg== --0-1082377860-894368620=:13866-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message