From owner-freebsd-i386@FreeBSD.ORG Mon May 10 07:50:18 2004 Return-Path: Delivered-To: freebsd-i386@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 09DE216A4CE for ; Mon, 10 May 2004 07:50:18 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7BFF843D49 for ; Mon, 10 May 2004 07:50:17 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) i4AEoHl5070832 for ; Mon, 10 May 2004 07:50:17 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i4AEoHq2070831; Mon, 10 May 2004 07:50:17 -0700 (PDT) (envelope-from gnats) Date: Mon, 10 May 2004 07:50:17 -0700 (PDT) Message-Id: <200405101450.i4AEoHq2070831@freefall.freebsd.org> To: freebsd-i386@FreeBSD.org From: Jianqin Qu Subject: Re: i386/64656: Bugs with Ethernet driver "bfe"[patch] X-BeenThere: freebsd-i386@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Jianqin Qu List-Id: I386-specific issues for FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 May 2004 14:50:18 -0000 The following reply was made to PR i386/64656; it has been noted by GNATS. From: Jianqin Qu To: freebsd-gnats-submit@freebsd.org Cc: Subject: Re: i386/64656: Bugs with Ethernet driver "bfe"[patch] Date: Mon, 10 May 2004 10:44:16 -0400 (EDT) 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. ---559023410-851401618-1084200166=:27340 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Sorry, the wrong files were ataached to last message. The correct files for patches are attached to this message. Jianqin ---559023410-851401618-1084200166=:27340 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="bfe521.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="bfe521.patch" LS0tIC91c3Ivc3JjL3N5cy9kZXYvYmZlL2lmX2JmZS5jCVNhdCBOb3YgMTUg MDM6MDA6MzAgMjAwMw0KKysrIGlmX2JmZS5jCVR1ZSBNYXkgIDYgMTU6Mjc6 MjcgMjAwMw0KQEAgLTczMyw3ICs3MzMsMTIgQEANCiAJCURFTEFZKDEwMCk7 DQogCX0NCiANCi0JQkZFX09SKHNjLCBCRkVfTUFDX0NUUkwsIEJGRV9DVFJM X0NSQzMyX0VOQUIpOw0KKwkvKiBFbmFibGUgQ1JDMzIgZ2VuZXJhdGlvbiBh bmQgc2V0IHByb3BlciBMRUQgbW9kZXMgKi8NCisJQkZFX09SKHNjLCBCRkVf TUFDX0NUUkwsIEJGRV9DVFJMX0NSQzMyX0VOQUIgfCBCRkVfQ1RSTF9MRUQp Ow0KKw0KKwkvKiBSZXNldC9DbGVhciBwb3dlcmRvd24gYml0ICAqLw0KKwlC RkVfQU5EKHNjLCBCRkVfTUFDX0NUUkwsIH5CRkVfQ1RSTF9QRE9XTik7DQor DQogCUNTUl9XUklURV80KHNjLCBCRkVfUkNWX0xBWlksICgoMSA8PCBCRkVf TEFaWV9GQ19TSElGVCkgJiANCiAJCQkJQkZFX0xBWllfRkNfTUFTSykpOw0K IA0KQEAgLTgzNSw3ICs4NDAsNyBAQA0KIAkJCSgoKHVfaW50MzJfdCkgZGF0 YVsxXSkpKTsNCiAJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fREFUQV9ISSwg dmFsKTsNCiAJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fQ1RSTCwgKEJGRV9D QU1fV1JJVEUgfA0KLQkJCQkoaW5kZXggPDwgQkZFX0NBTV9JTkRFWF9TSElG VCkpKTsNCisJCQkJKCh1X2ludDMyX3QpIGluZGV4IDw8IEJGRV9DQU1fSU5E RVhfU0hJRlQpKSk7DQogCWJmZV93YWl0X2JpdChzYywgQkZFX0NBTV9DVFJM LCBCRkVfQ0FNX0JVU1ksIDEwMDAwLCAxKTsNCiB9DQogDQo= ---559023410-851401618-1084200166=:27340 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="if_bfe.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="if_bfe.c" LyoNCiAqIENvcHlyaWdodCAoYykgMjAwMyBTdHVhcnQgV2Fsc2g8c3R1QGlw bmcub3JnLnVrPg0KICogYW5kIER1bmNhbiBCYXJjbGF5PGRtbGJAZG1sYi5v cmc+DQogKi8NCg0KLyoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0KICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICoNCiAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg Q09OVFJJQlVUT1JTICdBUyBJUycgQU5EDQogKiBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUNCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQog KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICogRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTDQogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUDQogKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZDQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQogKiBT VUNIIERBTUFHRS4NCiAqLw0KDQoNCiNpbmNsdWRlIDxzeXMvY2RlZnMuaD4N Cl9fRkJTRElEKCIkRnJlZUJTRDogc3JjL3N5cy9kZXYvYmZlL2lmX2JmZS5j LHYgMS40IDIwMDMvMTEvMTQgMTk6MDA6MzAgc2FtIEV4cCAkIik7DQoNCiNp bmNsdWRlIDxzeXMvcGFyYW0uaD4NCiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4N CiNpbmNsdWRlIDxzeXMvc29ja2lvLmg+DQojaW5jbHVkZSA8c3lzL21idWYu aD4NCiNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+DQojaW5jbHVkZSA8c3lzL2tl cm5lbC5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxz eXMvcXVldWUuaD4NCg0KI2luY2x1ZGUgPG5ldC9pZi5oPg0KI2luY2x1ZGUg PG5ldC9pZl9hcnAuaD4NCiNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4NCiNp bmNsdWRlIDxuZXQvaWZfZGwuaD4NCiNpbmNsdWRlIDxuZXQvaWZfbWVkaWEu aD4NCg0KI2luY2x1ZGUgPG5ldC9icGYuaD4NCg0KI2luY2x1ZGUgPG5ldC9p Zl90eXBlcy5oPg0KI2luY2x1ZGUgPG5ldC9pZl92bGFuX3Zhci5oPg0KDQoj aW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPg0KI2luY2x1ZGUgPG5ldGlu ZXQvaW4uaD4NCiNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+DQoNCiNpbmNsdWRl IDxtYWNoaW5lL2Nsb2NrLmg+ICAgICAgLyogZm9yIERFTEFZICovDQojaW5j bHVkZSA8bWFjaGluZS9idXNfbWVtaW8uaD4NCiNpbmNsdWRlIDxtYWNoaW5l L2J1cy5oPg0KI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4NCiNpbmNs dWRlIDxzeXMvYnVzLmg+DQojaW5jbHVkZSA8c3lzL3JtYW4uaD4NCg0KI2lu Y2x1ZGUgPGRldi9taWkvbWlpLmg+DQojaW5jbHVkZSA8ZGV2L21paS9taWl2 YXIuaD4NCiNpbmNsdWRlICJtaWlkZXZzLmgiDQoNCiNpbmNsdWRlIDxkZXYv cGNpL3BjaXJlZy5oPg0KI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+DQoN CiNpbmNsdWRlIDxkZXYvYmZlL2lmX2JmZXJlZy5oPg0KDQpNT0RVTEVfREVQ RU5EKGJmZSwgcGNpLCAxLCAxLCAxKTsNCk1PRFVMRV9ERVBFTkQoYmZlLCBl dGhlciwgMSwgMSwgMSk7DQpNT0RVTEVfREVQRU5EKGJmZSwgbWlpYnVzLCAx LCAxLCAxKTsNCg0KLyogImNvbnRyb2xsZXIgbWlpYnVzMCIgcmVxdWlyZWQu ICBTZWUgR0VORVJJQyBpZiB5b3UgZ2V0IGVycm9ycyBoZXJlLiAqLw0KI2lu Y2x1ZGUgIm1paWJ1c19pZi5oIg0KDQojZGVmaW5lIEJGRV9ERVZERVNDX01B WAkJNjQJLyogTWF4aW11bSBkZXZpY2UgZGVzY3JpcHRpb24gbGVuZ3RoICov DQoNCnN0YXRpYyBzdHJ1Y3QgYmZlX3R5cGUgYmZlX2RldnNbXSA9IHsNCgl7 IEJDT01fVkVORE9SSUQsIEJDT01fREVWSUNFSURfQkNNNDQwMSwNCgkJIkJy b2FkY29tIEJDTTQ0MDEgRmFzdCBFdGhlcm5ldCIgfSwNCgkJeyAwLCAwLCBO VUxMIH0NCn07DQoNCnN0YXRpYyBpbnQgIGJmZV9wcm9iZQkJCQkoZGV2aWNl X3QpOw0Kc3RhdGljIGludCAgYmZlX2F0dGFjaAkJCQkoZGV2aWNlX3QpOw0K c3RhdGljIGludCAgYmZlX2RldGFjaAkJCQkoZGV2aWNlX3QpOw0Kc3RhdGlj IHZvaWQgYmZlX3JlbGVhc2VfcmVzb3VyY2VzCShzdHJ1Y3QgYmZlX3NvZnRj ICopOw0Kc3RhdGljIHZvaWQgYmZlX2ludHIJCQkJKHZvaWQgKik7DQpzdGF0 aWMgdm9pZCBiZmVfc3RhcnQJCQkJKHN0cnVjdCBpZm5ldCAqKTsNCnN0YXRp YyBpbnQgIGJmZV9pb2N0bAkJCQkoc3RydWN0IGlmbmV0ICosIHVfbG9uZywg Y2FkZHJfdCk7DQpzdGF0aWMgdm9pZCBiZmVfaW5pdAkJCQkodm9pZCAqKTsN CnN0YXRpYyB2b2lkIGJmZV9zdG9wCQkJCShzdHJ1Y3QgYmZlX3NvZnRjICop Ow0Kc3RhdGljIHZvaWQgYmZlX3dhdGNoZG9nCQkJKHN0cnVjdCBpZm5ldCAq KTsNCnN0YXRpYyB2b2lkIGJmZV9zaHV0ZG93bgkJCShkZXZpY2VfdCk7DQpz dGF0aWMgdm9pZCBiZmVfdGljawkJCQkodm9pZCAqKTsNCnN0YXRpYyB2b2lk IGJmZV90eGVvZgkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsNCnN0YXRpYyB2 b2lkIGJmZV9yeGVvZgkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsNCnN0YXRp YyB2b2lkIGJmZV9zZXRfcnhfbW9kZQkJCShzdHJ1Y3QgYmZlX3NvZnRjICop Ow0Kc3RhdGljIGludCAgYmZlX2xpc3RfcnhfaW5pdAkJKHN0cnVjdCBiZmVf c29mdGMgKik7DQpzdGF0aWMgaW50ICBiZmVfbGlzdF9uZXdidWYJCQkoc3Ry dWN0IGJmZV9zb2Z0YyAqLCBpbnQsIHN0cnVjdCBtYnVmKik7DQpzdGF0aWMg dm9pZCBiZmVfcnhfcmluZ19mcmVlCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsN Cg0Kc3RhdGljIHZvaWQgYmZlX3BjaV9zZXR1cAkJCShzdHJ1Y3QgYmZlX3Nv ZnRjICosIHVfaW50MzJfdCk7DQpzdGF0aWMgaW50ICBiZmVfaWZtZWRpYV91 cGQJCQkoc3RydWN0IGlmbmV0ICopOw0Kc3RhdGljIHZvaWQgYmZlX2lmbWVk aWFfc3RzCQkJKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgaWZtZWRpYXJlcSAq KTsNCnN0YXRpYyBpbnQgIGJmZV9taWlidXNfcmVhZHJlZwkJKGRldmljZV90 LCBpbnQsIGludCk7DQpzdGF0aWMgaW50ICBiZmVfbWlpYnVzX3dyaXRlcmVn CQkoZGV2aWNlX3QsIGludCwgaW50LCBpbnQpOw0Kc3RhdGljIHZvaWQgYmZl X21paWJ1c19zdGF0Y2hnCQkoZGV2aWNlX3QpOw0Kc3RhdGljIGludCAgYmZl X3dhaXRfYml0CQkJKHN0cnVjdCBiZmVfc29mdGMgKiwgdV9pbnQzMl90LCB1 X2ludDMyX3QsIA0KCQl1X2xvbmcsIGNvbnN0IGludCk7DQpzdGF0aWMgdm9p ZCBiZmVfZ2V0X2NvbmZpZwkJCShzdHJ1Y3QgYmZlX3NvZnRjICpzYyk7DQpz dGF0aWMgdm9pZCBiZmVfcmVhZF9lZXByb20JCQkoc3RydWN0IGJmZV9zb2Z0 YyAqLCB1X2ludDhfdCAqKTsNCnN0YXRpYyB2b2lkIGJmZV9zdGF0c191cGRh dGUJCShzdHJ1Y3QgYmZlX3NvZnRjICopOw0Kc3RhdGljIHZvaWQgYmZlX2Ns ZWFyX3N0YXRzCQkJKHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMgaW50 ICBiZmVfcmVhZHBoeQkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqLCB1X2ludDMy X3QsIHVfaW50MzJfdCopOw0Kc3RhdGljIGludCAgYmZlX3dyaXRlcGh5CQkJ KHN0cnVjdCBiZmVfc29mdGMgKiwgdV9pbnQzMl90LCB1X2ludDMyX3QpOw0K c3RhdGljIGludCAgYmZlX3Jlc2V0cGh5CQkJKHN0cnVjdCBiZmVfc29mdGMg Kik7DQpzdGF0aWMgaW50ICBiZmVfc2V0dXBwaHkJCQkoc3RydWN0IGJmZV9z b2Z0YyAqKTsNCnN0YXRpYyB2b2lkIGJmZV9jaGlwX3Jlc2V0CQkJKHN0cnVj dCBiZmVfc29mdGMgKik7DQpzdGF0aWMgdm9pZCBiZmVfY2hpcF9oYWx0CQkJ KHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMgdm9pZCBiZmVfY29yZV9y ZXNldAkJCShzdHJ1Y3QgYmZlX3NvZnRjICopOw0Kc3RhdGljIHZvaWQgYmZl X2NvcmVfZGlzYWJsZQkJKHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMg aW50ICBiZmVfZG1hX2FsbG9jCQkJKGRldmljZV90KTsNCnN0YXRpYyB2b2lk IGJmZV9kbWFfbWFwX2Rlc2MJCSh2b2lkICosIGJ1c19kbWFfc2VnbWVudF90 ICosIGludCwgaW50KTsNCnN0YXRpYyB2b2lkIGJmZV9kbWFfbWFwCQkJCSh2 b2lkICosIGJ1c19kbWFfc2VnbWVudF90ICosIGludCwgaW50KTsNCnN0YXRp YyB2b2lkIGJmZV9jYW1fd3JpdGUJCQkoc3RydWN0IGJmZV9zb2Z0YyAqLCB1 X2NoYXIgKiwgaW50KTsNCg0Kc3RhdGljIGRldmljZV9tZXRob2RfdCBiZmVf bWV0aG9kc1tdID0gew0KCS8qIERldmljZSBpbnRlcmZhY2UgKi8NCglERVZN RVRIT0QoZGV2aWNlX3Byb2JlLAkJYmZlX3Byb2JlKSwNCglERVZNRVRIT0Qo ZGV2aWNlX2F0dGFjaCwJYmZlX2F0dGFjaCksDQoJREVWTUVUSE9EKGRldmlj ZV9kZXRhY2gsCWJmZV9kZXRhY2gpLA0KCURFVk1FVEhPRChkZXZpY2Vfc2h1 dGRvd24sCWJmZV9zaHV0ZG93biksDQoNCgkvKiBidXMgaW50ZXJmYWNlICov DQoJREVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwJYnVzX2dlbmVyaWNfcHJp bnRfY2hpbGQpLA0KCURFVk1FVEhPRChidXNfZHJpdmVyX2FkZGVkLAlidXNf Z2VuZXJpY19kcml2ZXJfYWRkZWQpLA0KDQoJLyogTUlJIGludGVyZmFjZSAq Lw0KCURFVk1FVEhPRChtaWlidXNfcmVhZHJlZywJYmZlX21paWJ1c19yZWFk cmVnKSwNCglERVZNRVRIT0QobWlpYnVzX3dyaXRlcmVnLAliZmVfbWlpYnVz X3dyaXRlcmVnKSwNCglERVZNRVRIT0QobWlpYnVzX3N0YXRjaGcsCWJmZV9t aWlidXNfc3RhdGNoZyksDQoNCgl7IDAsIDAgfQ0KfTsNCg0Kc3RhdGljIGRy aXZlcl90IGJmZV9kcml2ZXIgPSB7DQoJImJmZSIsDQoJYmZlX21ldGhvZHMs DQoJc2l6ZW9mKHN0cnVjdCBiZmVfc29mdGMpDQp9Ow0KDQpzdGF0aWMgZGV2 Y2xhc3NfdCBiZmVfZGV2Y2xhc3M7DQoNCkRSSVZFUl9NT0RVTEUoYmZlLCBw Y2ksIGJmZV9kcml2ZXIsIGJmZV9kZXZjbGFzcywgMCwgMCk7DQpEUklWRVJf TU9EVUxFKG1paWJ1cywgYmZlLCBtaWlidXNfZHJpdmVyLCBtaWlidXNfZGV2 Y2xhc3MsIDAsIDApOw0KDQovKg0KICogUHJvYmUgZm9yIGEgQnJvYWRjb20g NDQwMSBjaGlwLiANCiAqLw0Kc3RhdGljIGludA0KYmZlX3Byb2JlKGRldmlj ZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3R5cGUgKnQ7DQoJc3RydWN0IGJm ZV9zb2Z0YyAqc2M7DQoNCgl0ID0gYmZlX2RldnM7DQoNCglzYyA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsNCgliemVybyhzYywgc2l6ZW9mKHN0cnVjdCBi ZmVfc29mdGMpKTsNCglzYy0+YmZlX3VuaXQgPSBkZXZpY2VfZ2V0X3VuaXQo ZGV2KTsNCglzYy0+YmZlX2RldiA9IGRldjsNCg0KCXdoaWxlKHQtPmJmZV9u YW1lICE9IE5VTEwpIHsNCgkJaWYgKChwY2lfZ2V0X3ZlbmRvcihkZXYpID09 IHQtPmJmZV92aWQpICYmDQoJCQkJKHBjaV9nZXRfZGV2aWNlKGRldikgPT0g dC0+YmZlX2RpZCkpIHsNCgkJCWRldmljZV9zZXRfZGVzY19jb3B5KGRldiwg dC0+YmZlX25hbWUpOw0KCQkJcmV0dXJuKDApOw0KCQl9DQoJCXQrKzsNCgl9 DQoNCglyZXR1cm4oRU5YSU8pOw0KfQ0KDQpzdGF0aWMgaW50DQpiZmVfZG1h X2FsbG9jKGRldmljZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpz YzsNCglpbnQgZXJyb3IsIGk7DQoNCglzYyA9IGRldmljZV9nZXRfc29mdGMo ZGV2KTsNCg0KCS8qIHBhcmVudCB0YWcgKi8NCgllcnJvciA9IGJ1c19kbWFf dGFnX2NyZWF0ZShOVUxMLCAgLyogcGFyZW50ICovDQoJCQlQQUdFX1NJWkUs IDAsICAgICAgICAgICAgIC8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8NCgkJ CUJVU19TUEFDRV9NQVhBRERSLCAgICAgICAgLyogbG93YWRkciAqLyAgICAg IA0KCQkJQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsICAvKiBoaWdoYWRkciAq Lw0KCQkJTlVMTCwgTlVMTCwgICAgICAgICAgICAgICAvKiBmaWx0ZXIsIGZp bHRlcmFyZyAqLw0KCQkJTUFYQlNJWkUsICAgICAgICAgICAgICAgICAvKiBt YXhzaXplICovDQoJCQlCVVNfU1BBQ0VfVU5SRVNUUklDVEVELCAgIC8qIG51 bSBvZiBzZWdtZW50cyAqLw0KCQkJQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQs ICAvKiBtYXggc2VnbWVudCBzaXplICovDQoJCQlCVVNfRE1BX0FMTE9DTk9X LCAgICAgICAgIC8qIGZsYWdzICovDQoJCQlOVUxMLCBOVUxMLCAgICAgICAg ICAgICAgIC8qIGxvY2tmdW5jLCBsb2NrYXJnICovDQoJCQkmc2MtPmJmZV9w YXJlbnRfdGFnKTsNCg0KCS8qIHRhZyBmb3IgVFggcmluZyAqLw0KCWVycm9y ID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5iZmVfcGFyZW50X3RhZywgQkZF X1RYX0xJU1RfU0laRSwgDQoJCQlCRkVfVFhfTElTVF9TSVpFLCBCVVNfU1BB Q0VfTUFYQUREUiwgIEJVU19TUEFDRV9NQVhBRERSLCANCgkJCU5VTEwsIE5V TEwsIEJGRV9UWF9MSVNUX1NJWkUsIDEsICBCVVNfU1BBQ0VfTUFYU0laRV8z MkJJVCwNCgkJCTAsIE5VTEwsIE5VTEwsICZzYy0+YmZlX3R4X3RhZyk7DQoN CglpZiAoZXJyb3IpIHsNCgkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBu b3QgYWxsb2NhdGUgZG1hIHRhZ1xuIik7DQoJCXJldHVybihFTk9NRU0pOw0K CX0NCg0KCS8qIHRhZyBmb3IgUlggcmluZyAqLw0KCWVycm9yID0gYnVzX2Rt YV90YWdfY3JlYXRlKHNjLT5iZmVfcGFyZW50X3RhZywgQkZFX1JYX0xJU1Rf U0laRSwgDQoJCQlCRkVfUlhfTElTVF9TSVpFLCBCVVNfU1BBQ0VfTUFYQURE UiwgQlVTX1NQQUNFX01BWEFERFIsIA0KCQkJTlVMTCwgTlVMTCwgQkZFX1JY X0xJU1RfU0laRSwgMSwgQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsIA0KCQkJ MCwgTlVMTCwgTlVMTCwgJnNjLT5iZmVfcnhfdGFnKTsNCg0KCWlmIChlcnJv cikgew0KCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBhbGxvY2F0 ZSBkbWEgdGFnXG4iKTsNCgkJcmV0dXJuKEVOT01FTSk7DQoJfQ0KDQoJLyog dGFnIGZvciBtYnVmcyAqLw0KCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRl KHNjLT5iZmVfcGFyZW50X3RhZywgRVRIRVJfQUxJR04sIDAsDQoJCQlCVVNf U1BBQ0VfTUFYQUREUiwgQlVTX1NQQUNFX01BWEFERFIsIE5VTEwsIE5VTEws IE1DTEJZVEVTLCANCgkJCTEsIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULCAw LCBOVUxMLCBOVUxMLCAmc2MtPmJmZV90YWcpOw0KDQoJaWYgKGVycm9yKSB7 DQoJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGRt YSB0YWdcbiIpOw0KCQlyZXR1cm4oRU5PTUVNKTsNCgl9DQoNCgkvKiBwcmUg YWxsb2NhdGUgZG1hbWFwcyBmb3IgUlggbGlzdCAqLw0KCWZvciAoaSA9IDA7 IGkgPCBCRkVfUlhfTElTVF9DTlQ7IGkrKykgew0KCQllcnJvciA9IGJ1c19k bWFtYXBfY3JlYXRlKHNjLT5iZmVfdGFnLCAwLCAmc2MtPmJmZV9yeF9yaW5n W2ldLmJmZV9tYXApOw0KCQlpZiAoZXJyb3IpIHsNCgkJCWRldmljZV9wcmlu dGYoZGV2LCAiY2Fubm90IGNyZWF0ZSBETUEgbWFwIGZvciBSWFxuIik7DQoJ CQlyZXR1cm4oRU5PTUVNKTsNCgkJfQ0KCX0NCg0KCS8qIHByZSBhbGxvY2F0 ZSBkbWFtYXBzIGZvciBUWCBsaXN0ICovDQoJZm9yIChpID0gMDsgaSA8IEJG RV9UWF9MSVNUX0NOVDsgaSsrKSB7DQoJCWVycm9yID0gYnVzX2RtYW1hcF9j cmVhdGUoc2MtPmJmZV90YWcsIDAsICZzYy0+YmZlX3R4X3JpbmdbaV0uYmZl X21hcCk7DQoJCWlmIChlcnJvcikgew0KCQkJZGV2aWNlX3ByaW50ZihkZXYs ICJjYW5ub3QgY3JlYXRlIERNQSBtYXAgZm9yIFRYXG4iKTsNCgkJCXJldHVy bihFTk9NRU0pOw0KCQl9DQoJfQ0KDQoJLyogQWxsb2MgZG1hIGZvciByeCBy aW5nICovDQoJZXJyb3IgPSBidXNfZG1hbWVtX2FsbG9jKHNjLT5iZmVfcnhf dGFnLCAodm9pZCAqKSZzYy0+YmZlX3J4X2xpc3QsDQoJCQlCVVNfRE1BX05P V0FJVCwgJnNjLT5iZmVfcnhfbWFwKTsNCg0KCWlmKGVycm9yKQ0KCQlyZXR1 cm4oRU5PTUVNKTsNCg0KCWJ6ZXJvKHNjLT5iZmVfcnhfbGlzdCwgQkZFX1JY X0xJU1RfU0laRSk7DQoJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmJm ZV9yeF90YWcsIHNjLT5iZmVfcnhfbWFwLA0KCQkJc2MtPmJmZV9yeF9saXN0 LCBzaXplb2Yoc3RydWN0IGJmZV9kZXNjKSwNCgkJCWJmZV9kbWFfbWFwLCAm c2MtPmJmZV9yeF9kbWEsIDApOw0KDQoJaWYoZXJyb3IpDQoJCXJldHVybihF Tk9NRU0pOw0KDQoJYnVzX2RtYW1hcF9zeW5jKHNjLT5iZmVfcnhfdGFnLCBz Yy0+YmZlX3J4X21hcCwgQlVTX0RNQVNZTkNfUFJFUkVBRCk7DQoNCgllcnJv ciA9IGJ1c19kbWFtZW1fYWxsb2Moc2MtPmJmZV90eF90YWcsICh2b2lkICop JnNjLT5iZmVfdHhfbGlzdCwgDQoJCQlCVVNfRE1BX05PV0FJVCwgJnNjLT5i ZmVfdHhfbWFwKTsNCglpZiAoZXJyb3IpIA0KCQlyZXR1cm4oRU5PTUVNKTsN Cg0KDQoJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmJmZV90eF90YWcs IHNjLT5iZmVfdHhfbWFwLCANCgkJCXNjLT5iZmVfdHhfbGlzdCwgc2l6ZW9m KHN0cnVjdCBiZmVfZGVzYyksIA0KCQkJYmZlX2RtYV9tYXAsICZzYy0+YmZl X3R4X2RtYSwgMCk7DQoJaWYoZXJyb3IpDQoJCXJldHVybihFTk9NRU0pOw0K DQoJYnplcm8oc2MtPmJmZV90eF9saXN0LCBCRkVfVFhfTElTVF9TSVpFKTsN CglidXNfZG1hbWFwX3N5bmMoc2MtPmJmZV90eF90YWcsIHNjLT5iZmVfdHhf bWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsNCg0KCXJldHVybigwKTsNCn0N Cg0Kc3RhdGljIGludA0KYmZlX2F0dGFjaChkZXZpY2VfdCBkZXYpDQp7DQoJ c3RydWN0IGlmbmV0ICppZnA7DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7DQoJ aW50IHVuaXQsIGVycm9yID0gMCwgcmlkOw0KDQoJc2MgPSBkZXZpY2VfZ2V0 X3NvZnRjKGRldik7DQoJbXR4X2luaXQoJnNjLT5iZmVfbXR4LCBkZXZpY2Vf Z2V0X25hbWV1bml0KGRldiksIE1UWF9ORVRXT1JLX0xPQ0ssDQoJCQlNVFhf REVGIHwgTVRYX1JFQ1VSU0UpOw0KDQoJdW5pdCA9IGRldmljZV9nZXRfdW5p dChkZXYpOw0KCXNjLT5iZmVfZGV2ID0gZGV2Ow0KCXNjLT5iZmVfdW5pdCA9 IHVuaXQ7DQoNCgkvKg0KCSAqIEhhbmRsZSBwb3dlciBtYW5hZ2VtZW50IG5v bnNlbnNlLg0KCSAqLw0KCWlmIChwY2lfZ2V0X3Bvd2Vyc3RhdGUoZGV2KSAh PSBQQ0lfUE9XRVJTVEFURV9EMCkgew0KCQl1X2ludDMyX3QgbWVtYmFzZSwg aXJxOw0KDQoJCS8qIFNhdmUgaW1wb3J0YW50IFBDSSBjb25maWcgZGF0YS4g Ki8NCgkJbWVtYmFzZSA9IHBjaV9yZWFkX2NvbmZpZyhkZXYsIEJGRV9QQ0lf TUVNTE8sIDQpOw0KCQlpcnEgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBCRkVf UENJX0lOVExJTkUsIDQpOw0KDQoJCS8qIFJlc2V0IHRoZSBwb3dlciBzdGF0 ZS4gKi8NCgkJcHJpbnRmKCJiZmUlZDogY2hpcCBpcyBpcyBpbiBEJWQgcG93 ZXIgbW9kZSAtLSBzZXR0aW5nIHRvIEQwXG4iLCANCgkJCQlzYy0+YmZlX3Vu aXQsIHBjaV9nZXRfcG93ZXJzdGF0ZShkZXYpKTsNCg0KCQlwY2lfc2V0X3Bv d2Vyc3RhdGUoZGV2LCBQQ0lfUE9XRVJTVEFURV9EMCk7DQoNCgkJLyogUmVz dG9yZSBQQ0kgY29uZmlnIGRhdGEuICovDQoJCXBjaV93cml0ZV9jb25maWco ZGV2LCBCRkVfUENJX01FTUxPLCBtZW1iYXNlLCA0KTsNCgkJcGNpX3dyaXRl X2NvbmZpZyhkZXYsIEJGRV9QQ0lfSU5UTElORSwgaXJxLCA0KTsNCgl9DQoN CgkvKg0KCSAqIE1hcCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMuDQoJICov DQoJcGNpX2VuYWJsZV9idXNtYXN0ZXIoZGV2KTsNCg0KCXJpZCA9IEJGRV9Q Q0lfTUVNTE87DQoJc2MtPmJmZV9yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2Uo ZGV2LCBTWVNfUkVTX01FTU9SWSwgJnJpZCwgMCwgfjAsIDEsIA0KCQkJUkZf QUNUSVZFKTsNCglpZiAoc2MtPmJmZV9yZXMgPT0gTlVMTCkgew0KCQlwcmlu dGYgKCJiZmUlZDogY291bGRuJ3QgbWFwIG1lbW9yeVxuIiwgdW5pdCk7DQoJ CWVycm9yID0gRU5YSU87DQoJCWdvdG8gZmFpbDsNCgl9DQoNCglzYy0+YmZl X2J0YWcgPSBybWFuX2dldF9idXN0YWcoc2MtPmJmZV9yZXMpOw0KCXNjLT5i ZmVfYmhhbmRsZSA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+YmZlX3Jlcyk7 DQoJc2MtPmJmZV92aGFuZGxlID0gKHZtX29mZnNldF90KXJtYW5fZ2V0X3Zp cnR1YWwoc2MtPmJmZV9yZXMpOw0KDQoJLyogQWxsb2NhdGUgaW50ZXJydXB0 ICovDQoJcmlkID0gMDsNCg0KCXNjLT5iZmVfaXJxID0gYnVzX2FsbG9jX3Jl c291cmNlKGRldiwgU1lTX1JFU19JUlEsICZyaWQsIDAsIH4wLCAxLA0KCQkJ UkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsNCglpZiAoc2MtPmJmZV9pcnEg PT0gTlVMTCkgew0KCQlwcmludGYoImJmZSVkOiBjb3VsZG4ndCBtYXAgaW50 ZXJydXB0XG4iLCB1bml0KTsNCgkJZXJyb3IgPSBFTlhJTzsNCgkJZ290byBm YWlsOw0KCX0NCg0KCWlmIChiZmVfZG1hX2FsbG9jKGRldikpIHsNCgkJcHJp bnRmKCJiZmUlZDogZmFpbGVkIHRvIGFsbG9jYXRlIERNQSByZXNvdXJjZXNc biIsIHNjLT5iZmVfdW5pdCk7DQoJCWJmZV9yZWxlYXNlX3Jlc291cmNlcyhz Yyk7DQoJCWVycm9yID0gRU5YSU87DQoJCWdvdG8gZmFpbDsNCgl9DQoNCgkv KiBTZXQgdXAgaWZuZXQgc3RydWN0dXJlICovDQoJaWZwID0gJnNjLT5hcnBj b20uYWNfaWY7DQoJaWZwLT5pZl9zb2Z0YyA9IHNjOw0KCWlmX2luaXRuYW1l KGlmcCwgZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmljZV9nZXRfdW5pdChk ZXYpKTsNCglpZnAtPmlmX2ZsYWdzID0gSUZGX0JST0FEQ0FTVCB8IElGRl9T SU1QTEVYIHwgSUZGX01VTFRJQ0FTVDsNCglpZnAtPmlmX2lvY3RsID0gYmZl X2lvY3RsOw0KCWlmcC0+aWZfb3V0cHV0ID0gZXRoZXJfb3V0cHV0Ow0KCWlm cC0+aWZfc3RhcnQgPSBiZmVfc3RhcnQ7DQoJaWZwLT5pZl93YXRjaGRvZyA9 IGJmZV93YXRjaGRvZzsNCglpZnAtPmlmX2luaXQgPSBiZmVfaW5pdDsNCglp ZnAtPmlmX210dSA9IEVUSEVSTVRVOw0KCWlmcC0+aWZfYmF1ZHJhdGUgPSAx MDAwMDAwMDsNCglpZnAtPmlmX3NuZC5pZnFfbWF4bGVuID0gQkZFX1RYX1FM RU47DQoNCgliZmVfZ2V0X2NvbmZpZyhzYyk7DQoNCglwcmludGYoImJmZSVk OiBFdGhlcm5ldCBhZGRyZXNzOiAlNkRcbiIsIHVuaXQsIHNjLT5hcnBjb20u YWNfZW5hZGRyLCAiOiIpOw0KDQoJLyogUmVzZXQgdGhlIGNoaXAgYW5kIHR1 cm4gb24gdGhlIFBIWSAqLw0KCWJmZV9jaGlwX3Jlc2V0KHNjKTsNCg0KCWlm IChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5iZmVfbWlpYnVzLA0KCQkJCWJm ZV9pZm1lZGlhX3VwZCwgYmZlX2lmbWVkaWFfc3RzKSkgew0KCQlwcmludGYo ImJmZSVkOiBNSUkgd2l0aG91dCBhbnkgUEhZIVxuIiwgc2MtPmJmZV91bml0 KTsNCgkJZXJyb3IgPSBFTlhJTzsNCgkJZ290byBmYWlsOw0KCX0NCg0KCWV0 aGVyX2lmYXR0YWNoKGlmcCwgc2MtPmFycGNvbS5hY19lbmFkZHIpOw0KCWNh bGxvdXRfaGFuZGxlX2luaXQoJnNjLT5iZmVfc3RhdF9jaCk7DQoNCgkvKg0K CSAqIEhvb2sgaW50ZXJydXB0IGxhc3QgdG8gYXZvaWQgaGF2aW5nIHRvIGxv Y2sgc29mdGMNCgkgKi8NCgllcnJvciA9IGJ1c19zZXR1cF9pbnRyKGRldiwg c2MtPmJmZV9pcnEsIElOVFJfVFlQRV9ORVQsDQoJCQliZmVfaW50ciwgc2Ms ICZzYy0+YmZlX2ludHJoYW5kKTsNCg0KCWlmIChlcnJvcikgew0KCQliZmVf cmVsZWFzZV9yZXNvdXJjZXMoc2MpOw0KCQlwcmludGYoImJmZSVkOiBjb3Vs ZG4ndCBzZXQgdXAgaXJxXG4iLCB1bml0KTsNCgkJZ290byBmYWlsOw0KCX0N CmZhaWw6DQoJaWYoZXJyb3IpDQoJCWJmZV9yZWxlYXNlX3Jlc291cmNlcyhz Yyk7DQoJcmV0dXJuKGVycm9yKTsNCn0NCg0Kc3RhdGljIGludA0KYmZlX2Rl dGFjaChkZXZpY2VfdCBkZXYpDQp7DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7 DQoJc3RydWN0IGlmbmV0ICppZnA7DQoNCglzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsNCg0KCUtBU1NFUlQobXR4X2luaXRpYWxpemVkKCZzYy0+YmZl X210eCksICgiYmZlIG11dGV4IG5vdCBpbml0aWFsaXplZCIpKTsNCglCRkVf TE9DSyhzY3ApOw0KDQoJaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7DQoNCglp ZiAoZGV2aWNlX2lzX2F0dGFjaGVkKGRldikpIHsNCgkJYmZlX3N0b3Aoc2Mp Ow0KCQlldGhlcl9pZmRldGFjaChpZnApOw0KCX0NCg0KCWJmZV9jaGlwX3Jl c2V0KHNjKTsNCg0KCWJ1c19nZW5lcmljX2RldGFjaChkZXYpOw0KCWlmKHNj LT5iZmVfbWlpYnVzICE9IE5VTEwpDQoJCWRldmljZV9kZWxldGVfY2hpbGQo ZGV2LCBzYy0+YmZlX21paWJ1cyk7DQoNCgliZmVfcmVsZWFzZV9yZXNvdXJj ZXMoc2MpOw0KCUJGRV9VTkxPQ0soc2MpOw0KCW10eF9kZXN0cm95KCZzYy0+ YmZlX210eCk7DQoNCglyZXR1cm4oMCk7DQp9DQoNCi8qDQogKiBTdG9wIGFs bCBjaGlwIEkvTyBzbyB0aGF0IHRoZSBrZXJuZWwncyBwcm9iZSByb3V0aW5l cyBkb24ndA0KICogZ2V0IGNvbmZ1c2VkIGJ5IGVycmFudCBETUFzIHdoZW4g cmVib290aW5nLg0KICovDQpzdGF0aWMgdm9pZA0KYmZlX3NodXRkb3duKGRl dmljZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYzsNCg0KCXNj ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOw0KCUJGRV9MT0NLKHNjKTsNCgli ZmVfc3RvcChzYyk7IA0KDQoJQkZFX1VOTE9DSyhzYyk7DQoJcmV0dXJuOw0K fQ0KDQpzdGF0aWMgaW50DQpiZmVfbWlpYnVzX3JlYWRyZWcoZGV2aWNlX3Qg ZGV2LCBpbnQgcGh5LCBpbnQgcmVnKQ0Kew0KCXN0cnVjdCBiZmVfc29mdGMg KnNjOw0KCXVfaW50MzJfdCByZXQ7DQoNCglzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsNCglpZihwaHkgIT0gc2MtPmJmZV9waHlhZGRyKQ0KCQlyZXR1 cm4oMCk7DQoJYmZlX3JlYWRwaHkoc2MsIHJlZywgJnJldCk7DQoNCglyZXR1 cm4ocmV0KTsNCn0NCg0Kc3RhdGljIGludA0KYmZlX21paWJ1c193cml0ZXJl ZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcsIGludCB2YWwpDQp7 DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7DQoNCglzYyA9IGRldmljZV9nZXRf c29mdGMoZGV2KTsNCglpZihwaHkgIT0gc2MtPmJmZV9waHlhZGRyKQ0KCQly ZXR1cm4oMCk7DQoJYmZlX3dyaXRlcGh5KHNjLCByZWcsIHZhbCk7IA0KDQoJ cmV0dXJuKDApOw0KfQ0KDQpzdGF0aWMgdm9pZA0KYmZlX21paWJ1c19zdGF0 Y2hnKGRldmljZV90IGRldikNCnsNCglyZXR1cm47DQp9DQoNCnN0YXRpYyB2 b2lkDQpiZmVfdHhfcmluZ19mcmVlKHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0K ew0KICAgIGludCBpOw0KICAgIA0KICAgIGZvcihpID0gMDsgaSA8IEJGRV9U WF9MSVNUX0NOVDsgaSsrKSB7DQogICAgICAgIGlmKHNjLT5iZmVfdHhfcmlu Z1tpXS5iZmVfbWJ1ZiAhPSBOVUxMKSB7DQogICAgICAgICAgICBtX2ZyZWVt KHNjLT5iZmVfdHhfcmluZ1tpXS5iZmVfbWJ1Zik7DQogICAgICAgICAgICBz Yy0+YmZlX3R4X3JpbmdbaV0uYmZlX21idWYgPSBOVUxMOw0KICAgICAgICAg ICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmJmZV90YWcsDQogICAgICAgICAg ICAgICAgICAgIHNjLT5iZmVfdHhfcmluZ1tpXS5iZmVfbWFwKTsNCiAgICAg ICAgICAgIGJ1c19kbWFtYXBfZGVzdHJveShzYy0+YmZlX3RhZywNCiAgICAg ICAgICAgICAgICAgICAgc2MtPmJmZV90eF9yaW5nW2ldLmJmZV9tYXApOw0K ICAgICAgICB9DQogICAgfQ0KICAgIGJ6ZXJvKHNjLT5iZmVfdHhfbGlzdCwg QkZFX1RYX0xJU1RfU0laRSk7DQogICAgYnVzX2RtYW1hcF9zeW5jKHNjLT5i ZmVfdHhfdGFnLCBzYy0+YmZlX3R4X21hcCwgQlVTX0RNQVNZTkNfUFJFUkVB RCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcnhfcmluZ19mcmVlKHN0cnVj dCBiZmVfc29mdGMgKnNjKQ0Kew0KCWludCBpOw0KDQoJZm9yIChpID0gMDsg aSA8IEJGRV9SWF9MSVNUX0NOVDsgaSsrKSB7DQoJCWlmIChzYy0+YmZlX3J4 X3JpbmdbaV0uYmZlX21idWYgIT0gTlVMTCkgew0KCQkJbV9mcmVlbShzYy0+ YmZlX3J4X3JpbmdbaV0uYmZlX21idWYpOw0KCQkJc2MtPmJmZV9yeF9yaW5n W2ldLmJmZV9tYnVmID0gTlVMTDsNCgkJCWJ1c19kbWFtYXBfdW5sb2FkKHNj LT5iZmVfdGFnLA0KCQkJCQlzYy0+YmZlX3J4X3JpbmdbaV0uYmZlX21hcCk7 DQoJCQlidXNfZG1hbWFwX2Rlc3Ryb3koc2MtPmJmZV90YWcsDQoJCQkJCXNj LT5iZmVfcnhfcmluZ1tpXS5iZmVfbWFwKTsNCgkJfQ0KCX0NCgliemVybyhz Yy0+YmZlX3J4X2xpc3QsIEJGRV9SWF9MSVNUX1NJWkUpOw0KCWJ1c19kbWFt YXBfc3luYyhzYy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9tYXAsIEJVU19E TUFTWU5DX1BSRVJFQUQpOw0KfQ0KDQoNCnN0YXRpYyBpbnQgDQpiZmVfbGlz dF9yeF9pbml0KHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCWludCBpOw0K DQoJZm9yKGkgPSAwOyBpIDwgQkZFX1JYX0xJU1RfQ05UOyBpKyspIHsNCgkJ aWYoYmZlX2xpc3RfbmV3YnVmKHNjLCBpLCBOVUxMKSA9PSBFTk9CVUZTKSAN CgkJCXJldHVybiBFTk9CVUZTOw0KCX0NCg0KCWJ1c19kbWFtYXBfc3luYyhz Yy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9tYXAsIEJVU19ETUFTWU5DX1BS RVJFQUQpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhfUFRSLCAoaSAq IHNpemVvZihzdHJ1Y3QgYmZlX2Rlc2MpKSk7DQoNCglzYy0+YmZlX3J4X2Nv bnMgPSAwOw0KDQoJcmV0dXJuKDApOw0KfQ0KDQpzdGF0aWMgaW50DQpiZmVf bGlzdF9uZXdidWYoc3RydWN0IGJmZV9zb2Z0YyAqc2MsIGludCBjLCBzdHJ1 Y3QgbWJ1ZiAqbSkNCnsNCglzdHJ1Y3QgYmZlX3J4aGVhZGVyICpyeF9oZWFk ZXI7DQoJc3RydWN0IGJmZV9kZXNjICpkOw0KCXN0cnVjdCBiZmVfZGF0YSAq cjsNCgl1X2ludDMyX3QgY3RybDsNCg0KCWlmICgoYyA8IDApIHx8IChjID49 IEJGRV9SWF9MSVNUX0NOVCkpDQoJCXJldHVybihFSU5WQUwpOw0KDQoJaWYo bSA9PSBOVUxMKSB7DQoJCW0gPSBtX2dldGNsKE1fRE9OVFdBSVQsIE1UX0RB VEEsIE1fUEtUSERSKTsNCgkJaWYobSA9PSBOVUxMKQ0KCQkJcmV0dXJuKEVO T0JVRlMpOw0KCQltLT5tX2xlbiA9IG0tPm1fcGt0aGRyLmxlbiA9IE1DTEJZ VEVTOw0KCX0NCgllbHNlDQoJCW0tPm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9i dWY7DQoNCglyeF9oZWFkZXIgPSBtdG9kKG0sIHN0cnVjdCBiZmVfcnhoZWFk ZXIgKik7DQoJcnhfaGVhZGVyLT5sZW4gPSAwOw0KCXJ4X2hlYWRlci0+Zmxh Z3MgPSAwOw0KDQoJLyogTWFwIHRoZSBtYnVmIGludG8gRE1BICovDQoJc2Mt PmJmZV9yeF9jbnQgPSBjOw0KCWQgPSAmc2MtPmJmZV9yeF9saXN0W2NdOw0K CXIgPSAmc2MtPmJmZV9yeF9yaW5nW2NdOw0KCWJ1c19kbWFtYXBfbG9hZChz Yy0+YmZlX3RhZywgci0+YmZlX21hcCwgbXRvZChtLCB2b2lkICopLCANCgkJ CU1DTEJZVEVTLCBiZmVfZG1hX21hcF9kZXNjLCBkLCAwKTsNCglidXNfZG1h bWFwX3N5bmMoc2MtPmJmZV90YWcsIHItPmJmZV9tYXAsIEJVU19ETUFTWU5D X1BSRVdSSVRFKTsNCg0KCWN0cmwgPSBFVEhFUl9NQVhfTEVOICsgMzI7DQoN CglpZihjID09IEJGRV9SWF9MSVNUX0NOVCAtIDEpDQoJCWN0cmwgfD0gQkZF X0RFU0NfRU9UOw0KDQoJZC0+YmZlX2N0cmwgPSBjdHJsOw0KCXItPmJmZV9t YnVmID0gbTsNCglidXNfZG1hbWFwX3N5bmMoc2MtPmJmZV9yeF90YWcsIHNj LT5iZmVfcnhfbWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsNCglyZXR1cm4o MCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfZ2V0X2NvbmZpZyhzdHJ1Y3Qg YmZlX3NvZnRjICpzYykNCnsNCgl1X2ludDhfdCBlZXByb21bMTI4XTsNCg0K CWJmZV9yZWFkX2VlcHJvbShzYywgZWVwcm9tKTsNCg0KCXNjLT5hcnBjb20u YWNfZW5hZGRyWzBdID0gZWVwcm9tWzc5XTsNCglzYy0+YXJwY29tLmFjX2Vu YWRkclsxXSA9IGVlcHJvbVs3OF07DQoJc2MtPmFycGNvbS5hY19lbmFkZHJb Ml0gPSBlZXByb21bODFdOw0KCXNjLT5hcnBjb20uYWNfZW5hZGRyWzNdID0g ZWVwcm9tWzgwXTsNCglzYy0+YXJwY29tLmFjX2VuYWRkcls0XSA9IGVlcHJv bVs4M107DQoJc2MtPmFycGNvbS5hY19lbmFkZHJbNV0gPSBlZXByb21bODJd Ow0KDQoJc2MtPmJmZV9waHlhZGRyID0gZWVwcm9tWzkwXSAmIDB4MWY7DQoJ c2MtPmJmZV9tZGNfcG9ydCA9IChlZXByb21bOTBdID4+IDE0KSAmIDB4MTsN Cg0KCXNjLT5iZmVfY29yZV91bml0ID0gMDsgDQoJc2MtPmJmZV9kbWFfb2Zm c2V0ID0gQkZFX1BDSV9ETUE7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcGNp X3NldHVwKHN0cnVjdCBiZmVfc29mdGMgKnNjLCB1X2ludDMyX3QgY29yZXMp DQp7DQoJdV9pbnQzMl90IGJhcl9vcmlnLCBwY2lfcmV2LCB2YWw7DQoNCgli YXJfb3JpZyA9IHBjaV9yZWFkX2NvbmZpZyhzYy0+YmZlX2RldiwgQkZFX0JB UjBfV0lOLCA0KTsNCglwY2lfd3JpdGVfY29uZmlnKHNjLT5iZmVfZGV2LCBC RkVfQkFSMF9XSU4sIEJGRV9SRUdfUENJLCA0KTsNCglwY2lfcmV2ID0gQ1NS X1JFQURfNChzYywgQkZFX1NCSURISUdIKSAmIEJGRV9SQ19NQVNLOw0KDQoJ dmFsID0gQ1NSX1JFQURfNChzYywgQkZFX1NCSU5UVkVDKTsNCgl2YWwgfD0g Y29yZXM7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9TQklOVFZFQywgdmFsKTsN Cg0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJGRV9TU0JfUENJX1RSQU5TXzIp Ow0KCXZhbCB8PSBCRkVfU1NCX1BDSV9QUkVGIHwgQkZFX1NTQl9QQ0lfQlVS U1Q7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9TU0JfUENJX1RSQU5TXzIsIHZh bCk7DQoNCglwY2lfd3JpdGVfY29uZmlnKHNjLT5iZmVfZGV2LCBCRkVfQkFS MF9XSU4sIGJhcl9vcmlnLCA0KTsNCn0NCg0Kc3RhdGljIHZvaWQgDQpiZmVf Y2xlYXJfc3RhdHMoc3RydWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJdV9sb25n IHJlZzsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCUNTUl9XUklURV80KHNjLCBC RkVfTUlCX0NUUkwsIEJGRV9NSUJfQ0xSX09OX1JFQUQpOw0KCWZvciAocmVn ID0gQkZFX1RYX0dPT0RfTzsgcmVnIDw9IEJGRV9UWF9QQVVTRTsgcmVnICs9 IDQpDQoJCUNTUl9SRUFEXzQoc2MsIHJlZyk7DQoJZm9yIChyZWcgPSBCRkVf UlhfR09PRF9POyByZWcgPD0gQkZFX1JYX05QQVVTRTsgcmVnICs9IDQpDQoJ CUNTUl9SRUFEXzQoc2MsIHJlZyk7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0N Cg0Kc3RhdGljIGludCANCmJmZV9yZXNldHBoeShzdHJ1Y3QgYmZlX3NvZnRj ICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KDQoJQkZFX0xPQ0soc2MpOw0K CWJmZV93cml0ZXBoeShzYywgMCwgQk1DUl9SRVNFVCk7DQoJREVMQVkoMTAw KTsNCgliZmVfcmVhZHBoeShzYywgMCwgJnZhbCk7DQoJaWYgKHZhbCAmIEJN Q1JfUkVTRVQpIHsNCgkJcHJpbnRmKCJiZmUlZDogUEhZIFJlc2V0IHdvdWxk IG5vdCBjb21wbGV0ZS5cbiIsIHNjLT5iZmVfdW5pdCk7DQoJCUJGRV9VTkxP Q0soc2MpOw0KCQlyZXR1cm4gRU5YSU87DQoJfQ0KCUJGRV9VTkxPQ0soc2Mp Ow0KCXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgdm9pZA0KYmZlX2NoaXBfaGFs dChzdHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglCRkVfTE9DSyhzYyk7DQoJ LyogZGlzYWJsZSBpbnRlcnJ1cHRzIC0gbm90IHRoYXQgaXQgYWN0dWFsbHkg ZG9lcy4uKi8NCglDU1JfV1JJVEVfNChzYywgQkZFX0lNQVNLLCAwKTsNCglD U1JfUkVBRF80KHNjLCBCRkVfSU1BU0spOw0KDQoJQ1NSX1dSSVRFXzQoc2Ms IEJGRV9FTkVUX0NUUkwsIEJGRV9FTkVUX0RJU0FCTEUpOw0KCWJmZV93YWl0 X2JpdChzYywgQkZFX0VORVRfQ1RSTCwgQkZFX0VORVRfRElTQUJMRSwgMjAw LCAxKTsNCg0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhfQ1RSTCwgMCk7 DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9ETUFUWF9DVFJMLCAwKTsNCglERUxB WSgxMCk7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQN CmJmZV9jaGlwX3Jlc2V0KHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCXVf aW50MzJfdCB2YWw7ICAgIA0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJLyogU2V0 IHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciB0aGUgZW5ldCBjb3JlICovDQoJ YmZlX3BjaV9zZXR1cChzYywgQkZFX0lOVFZFQ19FTkVUMCk7DQoNCgkvKiBp cyBjb3JlIHVwPyAqLw0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJGRV9TQlRN U0xPVykgJiAoQkZFX1JFU0VUIHwgQkZFX1JFSkVDVCB8IEJGRV9DTE9DSyk7 DQoJaWYgKHZhbCA9PSBCRkVfQ0xPQ0spIHsNCgkJLyogSXQgaXMsIHNvIHNo dXQgaXQgZG93biAqLw0KCQlDU1JfV1JJVEVfNChzYywgQkZFX1JDVl9MQVpZ LCAwKTsNCgkJQ1NSX1dSSVRFXzQoc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9F TkVUX0RJU0FCTEUpOw0KCQliZmVfd2FpdF9iaXQoc2MsIEJGRV9FTkVUX0NU UkwsIEJGRV9FTkVUX0RJU0FCTEUsIDEwMCwgMSk7DQoJCUNTUl9XUklURV80 KHNjLCBCRkVfRE1BVFhfQ1RSTCwgMCk7DQoJCXNjLT5iZmVfdHhfY250ID0g c2MtPmJmZV90eF9wcm9kID0gc2MtPmJmZV90eF9jb25zID0gMDsNCgkJaWYg KENTUl9SRUFEXzQoc2MsIEJGRV9ETUFSWF9TVEFUKSAmIEJGRV9TVEFUX0VN QVNLKSANCgkJCWJmZV93YWl0X2JpdChzYywgQkZFX0RNQVJYX1NUQVQsIEJG RV9TVEFUX1NJRExFLCAxMDAsIDApOw0KCQlDU1JfV1JJVEVfNChzYywgQkZF X0RNQVJYX0NUUkwsIDApOw0KCQlzYy0+YmZlX3J4X3Byb2QgPSBzYy0+YmZl X3J4X2NvbnMgPSAwOw0KCX0NCg0KCWJmZV9jb3JlX3Jlc2V0KHNjKTsNCgli ZmVfY2xlYXJfc3RhdHMoc2MpOw0KDQoJLyoNCgkgKiBXZSB3YW50IHRoZSBw aHkgcmVnaXN0ZXJzIHRvIGJlIGFjY2Vzc2libGUgZXZlbiB3aGVuDQoJICog dGhlIGRyaXZlciBpcyAiZG93bmVkIiBzbyBpbml0aWFsaXplIE1EQyBwcmVh bWJsZSwgZnJlcXVlbmN5LA0KCSAqIGFuZCB3aGV0aGVyIGludGVybmFsIG9y IGV4dGVybmFsIHBoeSBoZXJlLg0KCSAqLw0KDQoJLyogNDQwMiBoYXMgNjIu NU1oeiBTQiBjbG9jayBhbmQgaW50ZXJuYWwgcGh5ICovDQoJQ1NSX1dSSVRF XzQoc2MsIEJGRV9NRElPX0NUUkwsIDB4OGQpOw0KDQoJLyogSW50ZXJuYWwg b3IgZXh0ZXJuYWwgUEhZPyAqLw0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJG RV9ERVZDVFJMKTsNCglpZighKHZhbCAmIEJGRV9JUFApKSANCgkJQ1NSX1dS SVRFXzQoc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9FTkVUX0VQU0VMKTsNCgll bHNlIGlmKENTUl9SRUFEXzQoc2MsIEJGRV9ERVZDVFJMKSAmIEJGRV9FUFIp IHsNCgkJQkZFX0FORChzYywgQkZFX0RFVkNUUkwsIH5CRkVfRVBSKTsNCgkJ REVMQVkoMTAwKTsNCgl9DQoNCgkvKiBFbmFibGUgQ1JDMzIgZ2VuZXJhdGlv biBhbmQgc2V0IHByb3BlciBMRUQgbW9kZXMgKi8NCglCRkVfT1Ioc2MsIEJG RV9NQUNfQ1RSTCwgQkZFX0NUUkxfQ1JDMzJfRU5BQiB8IEJGRV9DVFJMX0xF RCk7DQoNCgkvKiBSZXNldC9DbGVhciBwb3dlcmRvd24gYml0ICAqLw0KCUJG RV9BTkQoc2MsIEJGRV9NQUNfQ1RSTCwgfkJGRV9DVFJMX1BET1dOKTsNCg0K CUNTUl9XUklURV80KHNjLCBCRkVfUkNWX0xBWlksICgoMSA8PCBCRkVfTEFa WV9GQ19TSElGVCkgJiANCgkJCQlCRkVfTEFaWV9GQ19NQVNLKSk7DQoNCgkv KiANCgkgKiBXZSBkb24ndCB3YW50IGxhenkgaW50ZXJydXB0cywgc28ganVz dCBzZW5kIHRoZW0gYXQgdGhlIGVuZCBvZiBhIGZyYW1lLA0KCSAqIHBsZWFz ZSANCgkgKi8NCglCRkVfT1Ioc2MsIEJGRV9SQ1ZfTEFaWSwgMCk7DQoNCgkv KiBTZXQgbWF4IGxlbmd0aHMsIGFjY291bnRpbmcgZm9yIFZMQU4gdGFncyAq Lw0KCUNTUl9XUklURV80KHNjLCBCRkVfUlhNQVhMRU4sIEVUSEVSX01BWF9M RU4rMzIpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfVFhNQVhMRU4sIEVUSEVS X01BWF9MRU4rMzIpOw0KDQoJLyogU2V0IHdhdGVybWFyayBYWFggLSBtYWdp YyAqLw0KCUNTUl9XUklURV80KHNjLCBCRkVfVFhfV01BUkssIDU2KTsNCg0K CS8qIA0KCSAqIEluaXRpYWxpc2UgRE1BIGNoYW5uZWxzIC0gbm90IGZvcmdl dHRpbmcgZG1hIGFkZHJlc3NlcyBuZWVkIHRvIGJlIGFkZGVkDQoJICogdG8g QkZFX1BDSV9ETUEgDQoJICovDQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9ETUFU WF9DVFJMLCBCRkVfVFhfQ1RSTF9FTkFCTEUpOw0KCUNTUl9XUklURV80KHNj LCBCRkVfRE1BVFhfQUREUiwgc2MtPmJmZV90eF9kbWEgKyBCRkVfUENJX0RN QSk7DQoNCglDU1JfV1JJVEVfNChzYywgQkZFX0RNQVJYX0NUUkwsIChCRkVf UlhfT0ZGU0VUIDw8IEJGRV9SWF9DVFJMX1JPU0hJRlQpIHwgDQoJCQlCRkVf UlhfQ1RSTF9FTkFCTEUpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhf QUREUiwgc2MtPmJmZV9yeF9kbWEgKyBCRkVfUENJX0RNQSk7DQoNCgliZmVf cmVzZXRwaHkoc2MpOw0KCWJmZV9zZXR1cHBoeShzYyk7DQoNCglCRkVfVU5M T0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9jb3JlX2Rpc2FibGUo c3RydWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJaWYoKENTUl9SRUFEXzQoc2Ms IEJGRV9TQlRNU0xPVykpICYgQkZFX1JFU0VUKQ0KCQlyZXR1cm47DQoNCgkv KiANCgkgKiBTZXQgcmVqZWN0LCB3YWl0IGZvciBpdCBzZXQsIHRoZW4gd2Fp dCBmb3IgdGhlIGNvcmUgdG8gc3RvcCBiZWluZyBidXN5DQoJICogVGhlbiBz ZXQgcmVzZXQgYW5kIHJlamVjdCBhbmQgZW5hYmxlIHRoZSBjbG9ja3MNCgkg Ki8NCglDU1JfV1JJVEVfNChzYywgQkZFX1NCVE1TTE9XLCAoQkZFX1JFSkVD VCB8IEJGRV9DTE9DSykpOw0KCWJmZV93YWl0X2JpdChzYywgQkZFX1NCVE1T TE9XLCBCRkVfUkVKRUNULCAxMDAwLCAwKTsNCgliZmVfd2FpdF9iaXQoc2Ms IEJGRV9TQlRNU0hJR0gsIEJGRV9CVVNZLCAxMDAwLCAxKTsNCglDU1JfV1JJ VEVfNChzYywgQkZFX1NCVE1TTE9XLCAoQkZFX0ZHQyB8IEJGRV9DTE9DSyB8 IEJGRV9SRUpFQ1QgfA0KCQkJCUJGRV9SRVNFVCkpOw0KCUNTUl9SRUFEXzQo c2MsIEJGRV9TQlRNU0xPVyk7DQoJREVMQVkoMTApOw0KCS8qIExlYXZlIHJl c2V0IGFuZCByZWplY3Qgc2V0ICovDQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9T QlRNU0xPVywgKEJGRV9SRUpFQ1QgfCBCRkVfUkVTRVQpKTsNCglERUxBWSgx MCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfY29yZV9yZXNldChzdHJ1Y3Qg YmZlX3NvZnRjICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KDQoJLyogRGlz YWJsZSB0aGUgY29yZSAqLw0KCWJmZV9jb3JlX2Rpc2FibGUoc2MpOw0KDQoJ LyogYW5kIGJyaW5nIGl0IGJhY2sgdXAgKi8NCglDU1JfV1JJVEVfNChzYywg QkZFX1NCVE1TTE9XLCAoQkZFX1JFU0VUIHwgQkZFX0NMT0NLIHwgQkZFX0ZH QykpOw0KCUNTUl9SRUFEXzQoc2MsIEJGRV9TQlRNU0xPVyk7DQoJREVMQVko MTApOw0KDQoJLyogQ2hpcCBidWcsIGNsZWFyIFNFUlIsIElCIGFuZCBUTyBp ZiB0aGV5IGFyZSBzZXQuICovDQoJaWYgKENTUl9SRUFEXzQoc2MsIEJGRV9T QlRNU0hJR0gpICYgQkZFX1NFUlIpDQoJCUNTUl9XUklURV80KHNjLCBCRkVf U0JUTVNISUdILCAwKTsNCgl2YWwgPSBDU1JfUkVBRF80KHNjLCBCRkVfU0JJ TVNUQVRFKTsNCglpZiAodmFsICYgKEJGRV9JQkUgfCBCRkVfVE8pKQ0KCQlD U1JfV1JJVEVfNChzYywgQkZFX1NCSU1TVEFURSwgdmFsICYgfihCRkVfSUJF IHwgQkZFX1RPKSk7DQoNCgkvKiBDbGVhciByZXNldCBhbmQgYWxsb3cgaXQg dG8gbW92ZSB0aHJvdWdoIHRoZSBjb3JlICovDQoJQ1NSX1dSSVRFXzQoc2Ms IEJGRV9TQlRNU0xPVywgKEJGRV9DTE9DSyB8IEJGRV9GR0MpKTsNCglDU1Jf UkVBRF80KHNjLCBCRkVfU0JUTVNMT1cpOw0KCURFTEFZKDEwKTsNCg0KCS8q IExlYXZlIHRoZSBjbG9jayBzZXQgKi8NCglDU1JfV1JJVEVfNChzYywgQkZF X1NCVE1TTE9XLCBCRkVfQ0xPQ0spOw0KCUNTUl9SRUFEXzQoc2MsIEJGRV9T QlRNU0xPVyk7DQoJREVMQVkoMTApOw0KfQ0KDQpzdGF0aWMgdm9pZCANCmJm ZV9jYW1fd3JpdGUoc3RydWN0IGJmZV9zb2Z0YyAqc2MsIHVfY2hhciAqZGF0 YSwgaW50IGluZGV4KQ0Kew0KCXVfaW50MzJfdCB2YWw7DQoNCgl2YWwgID0g KCh1X2ludDMyX3QpIGRhdGFbMl0pIDw8IDI0Ow0KCXZhbCB8PSAoKHVfaW50 MzJfdCkgZGF0YVszXSkgPDwgMTY7DQoJdmFsIHw9ICgodV9pbnQzMl90KSBk YXRhWzRdKSA8PCAgODsNCgl2YWwgfD0gKCh1X2ludDMyX3QpIGRhdGFbNV0p Ow0KCUNTUl9XUklURV80KHNjLCBCRkVfQ0FNX0RBVEFfTE8sIHZhbCk7DQoJ dmFsID0gKEJGRV9DQU1fSElfVkFMSUQgfA0KCQkJKCgodV9pbnQzMl90KSBk YXRhWzBdKSA8PCA4KSB8DQoJCQkoKCh1X2ludDMyX3QpIGRhdGFbMV0pKSk7 DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fREFUQV9ISSwgdmFsKTsNCglD U1JfV1JJVEVfNChzYywgQkZFX0NBTV9DVFJMLCAoQkZFX0NBTV9XUklURSB8 DQoJCQkJKCh1X2ludDMyX3QpIGluZGV4IDw8IEJGRV9DQU1fSU5ERVhfU0hJ RlQpKSk7DQoJYmZlX3dhaXRfYml0KHNjLCBCRkVfQ0FNX0NUUkwsIEJGRV9D QU1fQlVTWSwgMTAwMDAsIDEpOw0KfQ0KDQpzdGF0aWMgdm9pZCANCmJmZV9z ZXRfcnhfbW9kZShzdHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3Qg aWZuZXQgKmlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOw0KCXN0cnVjdCBpZm11 bHRpYWRkciAgKmlmbWE7DQoJdV9pbnQzMl90IHZhbDsNCglpbnQgaSA9IDA7 DQoNCgl2YWwgPSBDU1JfUkVBRF80KHNjLCBCRkVfUlhDT05GKTsNCg0KCWlm IChpZnAtPmlmX2ZsYWdzICYgSUZGX1BST01JU0MpDQoJCXZhbCB8PSBCRkVf UlhDT05GX1BST01JU0M7DQoJZWxzZQ0KCQl2YWwgJj0gfkJGRV9SWENPTkZf UFJPTUlTQzsNCg0KCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0JST0FEQ0FT VCkNCgkJdmFsICY9IH5CRkVfUlhDT05GX0RCQ0FTVDsNCgllbHNlDQoJCXZh bCB8PSBCRkVfUlhDT05GX0RCQ0FTVDsNCg0KDQoJQ1NSX1dSSVRFXzQoc2Ms IEJGRV9DQU1fQ1RSTCwgMCk7DQoJYmZlX2NhbV93cml0ZShzYywgc2MtPmFy cGNvbS5hY19lbmFkZHIsIGkrKyk7DQoNCglpZiAoaWZwLT5pZl9mbGFncyAm IElGRl9BTExNVUxUSSkNCgkJdmFsIHw9IEJGRV9SWENPTkZfQUxMTVVMVEk7 DQoJZWxzZSB7DQoJCXZhbCAmPSB+QkZFX1JYQ09ORl9BTExNVUxUSTsNCgkJ VEFJTFFfRk9SRUFDSChpZm1hLCAmaWZwLT5pZl9tdWx0aWFkZHJzLCBpZm1h X2xpbmspIHsNCgkJCWlmIChpZm1hLT5pZm1hX2FkZHItPnNhX2ZhbWlseSAh PSBBRl9MSU5LKQ0KCQkJCWNvbnRpbnVlOw0KCQkJYmZlX2NhbV93cml0ZShz YywgTExBRERSKChzdHJ1Y3Qgc29ja2FkZHJfZGwgKilpZm1hLT5pZm1hX2Fk ZHIpLA0KCQkJCQlpKyspOw0KCQl9DQoJfQ0KDQoJQ1NSX1dSSVRFXzQoc2Ms IEJGRV9SWENPTkYsIHZhbCk7DQoJQkZFX09SKHNjLCBCRkVfQ0FNX0NUUkws IEJGRV9DQU1fRU5BQkxFKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9kbWFf bWFwKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu c2VnLCBpbnQgZXJyb3IpDQp7DQoJdV9pbnQzMl90ICpwdHI7DQoNCglwdHIg PSBhcmc7DQoJKnB0ciA9IHNlZ3MtPmRzX2FkZHI7DQp9DQoNCnN0YXRpYyB2 b2lkDQpiZmVfZG1hX21hcF9kZXNjKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdt ZW50X3QgKnNlZ3MsIGludCBuc2VnLCBpbnQgZXJyb3IpDQp7DQoJc3RydWN0 IGJmZV9kZXNjICpkOw0KDQoJZCA9IGFyZzsNCgkvKiBUaGUgY2hpcCBuZWVk cyBhbGwgYWRkcmVzc2VzIHRvIGJlIGFkZGVkIHRvIEJGRV9QQ0lfRE1BICov DQoJZC0+YmZlX2FkZHIgPSBzZWdzLT5kc19hZGRyICsgQkZFX1BDSV9ETUE7 DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcmVsZWFzZV9yZXNvdXJjZXMoc3Ry dWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJZGV2aWNlX3QgZGV2Ow0KCWludCBp Ow0KDQoJZGV2ID0gc2MtPmJmZV9kZXY7DQoNCglpZiAoc2MtPmJmZV92cGRf cHJvZG5hbWUgIT0gTlVMTCkNCgkJZnJlZShzYy0+YmZlX3ZwZF9wcm9kbmFt ZSwgTV9ERVZCVUYpOw0KDQoJaWYgKHNjLT5iZmVfdnBkX3JlYWRvbmx5ICE9 IE5VTEwpDQoJCWZyZWUoc2MtPmJmZV92cGRfcmVhZG9ubHksIE1fREVWQlVG KTsNCg0KCWlmIChzYy0+YmZlX2ludHJoYW5kICE9IE5VTEwpDQoJCWJ1c190 ZWFyZG93bl9pbnRyKGRldiwgc2MtPmJmZV9pcnEsIHNjLT5iZmVfaW50cmhh bmQpOw0KDQoJaWYgKHNjLT5iZmVfaXJxICE9IE5VTEwpDQoJCWJ1c19yZWxl YXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsIDAsIHNjLT5iZmVfaXJx KTsNCg0KCWlmIChzYy0+YmZlX3JlcyAhPSBOVUxMKQ0KCQlidXNfcmVsZWFz ZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCAweDEwLCBzYy0+YmZl X3Jlcyk7DQoNCglpZihzYy0+YmZlX3R4X3RhZyAhPSBOVUxMKSB7DQoJCWJ1 c19kbWFtYXBfdW5sb2FkKHNjLT5iZmVfdHhfdGFnLCBzYy0+YmZlX3R4X21h cCk7DQoJCWJ1c19kbWFtZW1fZnJlZShzYy0+YmZlX3R4X3RhZywgc2MtPmJm ZV90eF9saXN0LCBzYy0+YmZlX3R4X21hcCk7DQoJCWJ1c19kbWFfdGFnX2Rl c3Ryb3koc2MtPmJmZV90eF90YWcpOw0KCQlzYy0+YmZlX3R4X3RhZyA9IE5V TEw7DQoJfQ0KDQoJaWYoc2MtPmJmZV9yeF90YWcgIT0gTlVMTCkgew0KCQli dXNfZG1hbWFwX3VubG9hZChzYy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9t YXApOw0KCQlidXNfZG1hbWVtX2ZyZWUoc2MtPmJmZV9yeF90YWcsIHNjLT5i ZmVfcnhfbGlzdCwgc2MtPmJmZV9yeF9tYXApOw0KCQlidXNfZG1hX3RhZ19k ZXN0cm95KHNjLT5iZmVfcnhfdGFnKTsNCgkJc2MtPmJmZV9yeF90YWcgPSBO VUxMOw0KCX0NCg0KCWlmKHNjLT5iZmVfdGFnICE9IE5VTEwpIHsNCgkJZm9y KGkgPSAwOyBpIDwgQkZFX1RYX0xJU1RfQ05UOyBpKyspIHsNCgkJCWJ1c19k bWFtYXBfZGVzdHJveShzYy0+YmZlX3RhZywgc2MtPmJmZV90eF9yaW5nW2ld LmJmZV9tYXApOw0KCQl9DQoJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmJm ZV90YWcpOw0KICAgICAgICBzYy0+YmZlX3RhZyA9IE5VTEw7DQoJfQ0KDQoJ aWYoc2MtPmJmZV9wYXJlbnRfdGFnICE9IE5VTEwpDQoJCWJ1c19kbWFfdGFn X2Rlc3Ryb3koc2MtPmJmZV9wYXJlbnRfdGFnKTsNCg0KCXJldHVybjsNCn0N Cg0Kc3RhdGljIHZvaWQNCmJmZV9yZWFkX2VlcHJvbShzdHJ1Y3QgYmZlX3Nv ZnRjICpzYywgdV9pbnQ4X3QgKmRhdGEpDQp7DQoJbG9uZyBpOw0KCXVfaW50 MTZfdCAqcHRyID0gKHVfaW50MTZfdCAqKWRhdGE7DQoNCglmb3IoaSA9IDA7 IGkgPCAxMjg7IGkgKz0gMikNCgkJcHRyW2kvMl0gPSBDU1JfUkVBRF80KHNj LCA0MDk2ICsgaSk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV93YWl0X2JpdChz dHJ1Y3QgYmZlX3NvZnRjICpzYywgdV9pbnQzMl90IHJlZywgdV9pbnQzMl90 IGJpdCwgDQoJCXVfbG9uZyB0aW1lb3V0LCBjb25zdCBpbnQgY2xlYXIpDQp7 DQoJdV9sb25nIGk7DQoNCglmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsr KSB7DQoJCXVfaW50MzJfdCB2YWwgPSBDU1JfUkVBRF80KHNjLCByZWcpOw0K DQoJCWlmIChjbGVhciAmJiAhKHZhbCAmIGJpdCkpDQoJCQlicmVhazsNCgkJ aWYgKCFjbGVhciAmJiAodmFsICYgYml0KSkNCgkJCWJyZWFrOw0KCQlERUxB WSgxMCk7DQoJfQ0KCWlmIChpID09IHRpbWVvdXQpIHsNCgkJcHJpbnRmKCJi ZmUlZDogQlVHISAgVGltZW91dCB3YWl0aW5nIGZvciBiaXQgJTA4eCBvZiBy ZWdpc3RlciAiDQoJCQkJIiV4IHRvICVzLlxuIiwgc2MtPmJmZV91bml0LCBi aXQsIHJlZywgDQoJCQkJKGNsZWFyID8gImNsZWFyIiA6ICJzZXQiKSk7DQoJ CXJldHVybiAtMTsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbnQN CmJmZV9yZWFkcGh5KHN0cnVjdCBiZmVfc29mdGMgKnNjLCB1X2ludDMyX3Qg cmVnLCB1X2ludDMyX3QgKnZhbCkNCnsNCglpbnQgZXJyOyANCg0KCUJGRV9M T0NLKHNjKTsNCgkvKiBDbGVhciBNSUkgSVNSICovDQoJQ1NSX1dSSVRFXzQo c2MsIEJGRV9FTUFDX0lTVEFULCBCRkVfRU1BQ19JTlRfTUlJKTsNCglDU1Jf V1JJVEVfNChzYywgQkZFX01ESU9fREFUQSwgKEJGRV9NRElPX1NCX1NUQVJU IHwNCgkJCQkoQkZFX01ESU9fT1BfUkVBRCA8PCBCRkVfTURJT19PUF9TSElG VCkgfA0KCQkJCShzYy0+YmZlX3BoeWFkZHIgPDwgQkZFX01ESU9fUE1EX1NI SUZUKSB8DQoJCQkJKHJlZyA8PCBCRkVfTURJT19SQV9TSElGVCkgfA0KCQkJ CShCRkVfTURJT19UQV9WQUxJRCA8PCBCRkVfTURJT19UQV9TSElGVCkpKTsN CgllcnIgPSBiZmVfd2FpdF9iaXQoc2MsIEJGRV9FTUFDX0lTVEFULCBCRkVf RU1BQ19JTlRfTUlJLCAxMDAsIDApOw0KCSp2YWwgPSBDU1JfUkVBRF80KHNj LCBCRkVfTURJT19EQVRBKSAmIEJGRV9NRElPX0RBVEFfREFUQTsNCg0KCUJG RV9VTkxPQ0soc2MpOw0KCXJldHVybiBlcnI7DQp9DQoNCnN0YXRpYyBpbnQN CmJmZV93cml0ZXBoeShzdHJ1Y3QgYmZlX3NvZnRjICpzYywgdV9pbnQzMl90 IHJlZywgdV9pbnQzMl90IHZhbCkNCnsNCglpbnQgc3RhdHVzOw0KDQoJQkZF X0xPQ0soc2MpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRU1BQ19JU1RBVCwg QkZFX0VNQUNfSU5UX01JSSk7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9NRElP X0RBVEEsIChCRkVfTURJT19TQl9TVEFSVCB8DQoJCQkJKEJGRV9NRElPX09Q X1dSSVRFIDw8IEJGRV9NRElPX09QX1NISUZUKSB8DQoJCQkJKHNjLT5iZmVf cGh5YWRkciA8PCBCRkVfTURJT19QTURfU0hJRlQpIHwNCgkJCQkocmVnIDw8 IEJGRV9NRElPX1JBX1NISUZUKSB8DQoJCQkJKEJGRV9NRElPX1RBX1ZBTElE IDw8IEJGRV9NRElPX1RBX1NISUZUKSB8DQoJCQkJKHZhbCAmIEJGRV9NRElP X0RBVEFfREFUQSkpKTsNCglzdGF0dXMgPSBiZmVfd2FpdF9iaXQoc2MsIEJG RV9FTUFDX0lTVEFULCBCRkVfRU1BQ19JTlRfTUlJLCAxMDAsIDApOw0KCUJG RV9VTkxPQ0soc2MpOw0KDQoJcmV0dXJuIHN0YXR1czsNCn0NCg0KLyogDQog KiBYWFggLSBJIHRoaW5rIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgUEhZIGRy aXZlciwgYnV0IGl0IGNhbid0IGh1cnQgdG8gZG8gaXQNCiAqIHR3aWNlDQog Ki8NCnN0YXRpYyBpbnQNCmJmZV9zZXR1cHBoeShzdHJ1Y3QgYmZlX3NvZnRj ICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KCUJGRV9MT0NLKHNjKTsNCg0K CS8qIEVuYWJsZSBhY3Rpdml0eSBMRUQgKi8NCgliZmVfcmVhZHBoeShzYywg MjYsICZ2YWwpOw0KCWJmZV93cml0ZXBoeShzYywgMjYsIHZhbCAmIDB4N2Zm Zik7IA0KCWJmZV9yZWFkcGh5KHNjLCAyNiwgJnZhbCk7DQoNCgkvKiBFbmFi bGUgdHJhZmZpYyBtZXRlciBMRUQgbW9kZSAqLw0KCWJmZV9yZWFkcGh5KHNj LCAyNywgJnZhbCk7DQoJYmZlX3dyaXRlcGh5KHNjLCAyNywgdmFsIHwgKDEg PDwgNikpOw0KDQoJQkZFX1VOTE9DSyhzYyk7DQoJcmV0dXJuIDA7DQp9DQoN CnN0YXRpYyB2b2lkIA0KYmZlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmZlX3Nv ZnRjICpzYykNCnsNCgl1X2xvbmcgcmVnOw0KCXVfaW50MzJfdCAqdmFsOw0K DQoJdmFsID0gJnNjLT5iZmVfaHdzdGF0cy50eF9nb29kX29jdGV0czsNCglm b3IgKHJlZyA9IEJGRV9UWF9HT09EX087IHJlZyA8PSBCRkVfVFhfUEFVU0U7 IHJlZyArPSA0KSB7DQoJCSp2YWwrKyArPSBDU1JfUkVBRF80KHNjLCByZWcp Ow0KCX0NCgl2YWwgPSAmc2MtPmJmZV9od3N0YXRzLnJ4X2dvb2Rfb2N0ZXRz Ow0KCWZvciAocmVnID0gQkZFX1JYX0dPT0RfTzsgcmVnIDw9IEJGRV9SWF9O UEFVU0U7IHJlZyArPSA0KSB7DQoJCSp2YWwrKyArPSBDU1JfUkVBRF80KHNj LCByZWcpOw0KCX0NCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV90eGVvZihzdHJ1 Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3QgaWZuZXQgKmlmcDsNCglp bnQgaSwgY2hpcGlkeDsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCWlmcCA9ICZz Yy0+YXJwY29tLmFjX2lmOw0KDQoJY2hpcGlkeCA9IENTUl9SRUFEXzQoc2Ms IEJGRV9ETUFUWF9TVEFUKSAmIEJGRV9TVEFUX0NETUFTSzsNCgljaGlwaWR4 IC89IHNpemVvZihzdHJ1Y3QgYmZlX2Rlc2MpOw0KDQogICAgaSA9IHNjLT5i ZmVfdHhfY29uczsNCgkvKiBHbyB0aHJvdWdoIHRoZSBtYnVmcyBhbmQgZnJl ZSB0aG9zZSB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLw0KICAgIHdo aWxlKGkgIT0gY2hpcGlkeCkgew0KCQlzdHJ1Y3QgYmZlX2RhdGEgKnIgPSAm c2MtPmJmZV90eF9yaW5nW2ldOw0KCQlpZihyLT5iZmVfbWJ1ZiAhPSBOVUxM KSB7DQoJCQlpZnAtPmlmX29wYWNrZXRzKys7DQoJCQltX2ZyZWVtKHItPmJm ZV9tYnVmKTsNCgkJCXItPmJmZV9tYnVmID0gTlVMTDsNCgkJCWJ1c19kbWFt YXBfdW5sb2FkKHNjLT5iZmVfdGFnLCByLT5iZmVfbWFwKTsNCgkJfQ0KICAg ICAgICBzYy0+YmZlX3R4X2NudC0tOw0KICAgICAgICBCRkVfSU5DKGksIEJG RV9UWF9MSVNUX0NOVCk7DQoJfQ0KDQoJaWYoaSAhPSBzYy0+YmZlX3R4X2Nv bnMpIHsNCgkJLyogd2UgZnJlZWQgdXAgc29tZSBtYnVmcyAqLw0KCQlzYy0+ YmZlX3R4X2NvbnMgPSBpOw0KCQlpZnAtPmlmX2ZsYWdzICY9IH5JRkZfT0FD VElWRTsNCgl9DQoJaWYoc2MtPmJmZV90eF9jbnQgPT0gMCkNCgkJaWZwLT5p Zl90aW1lciA9IDA7DQoJZWxzZQ0KCQlpZnAtPmlmX3RpbWVyID0gNTsNCg0K CUJGRV9VTkxPQ0soc2MpOw0KfQ0KDQovKiBQYXNzIGEgcmVjZWl2ZWQgcGFj a2V0IHVwIHRoZSBzdGFjayAqLw0Kc3RhdGljIHZvaWQNCmJmZV9yeGVvZihz dHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3QgbWJ1ZiAqbTsNCglz dHJ1Y3QgaWZuZXQgKmlmcDsNCglzdHJ1Y3QgYmZlX3J4aGVhZGVyICpyeGhl YWRlcjsNCglzdHJ1Y3QgYmZlX2RhdGEgKnI7DQoJaW50IGNvbnM7DQoJdV9p bnQzMl90IHN0YXR1cywgY3VycmVudCwgbGVuLCBmbGFnczsNCg0KCUJGRV9M T0NLKHNjKTsNCgljb25zID0gc2MtPmJmZV9yeF9jb25zOw0KCXN0YXR1cyA9 IENTUl9SRUFEXzQoc2MsIEJGRV9ETUFSWF9TVEFUKTsNCgljdXJyZW50ID0g KHN0YXR1cyAmIEJGRV9TVEFUX0NETUFTSykgLyBzaXplb2Yoc3RydWN0IGJm ZV9kZXNjKTsNCg0KCWlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOw0KDQoJd2hp bGUoY3VycmVudCAhPSBjb25zKSB7DQoJCXIgPSAmc2MtPmJmZV9yeF9yaW5n W2NvbnNdOw0KCQltID0gci0+YmZlX21idWY7DQoJCXJ4aGVhZGVyID0gbXRv ZChtLCBzdHJ1Y3QgYmZlX3J4aGVhZGVyKik7DQoJCWJ1c19kbWFtYXBfc3lu YyhzYy0+YmZlX3RhZywgci0+YmZlX21hcCwgQlVTX0RNQVNZTkNfUE9TVFdS SVRFKTsNCgkJbGVuID0gcnhoZWFkZXItPmxlbjsNCgkJci0+YmZlX21idWYg PSBOVUxMOw0KDQoJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5iZmVfdGFnLCBy LT5iZmVfbWFwKTsNCgkJZmxhZ3MgPSByeGhlYWRlci0+ZmxhZ3M7DQoNCgkJ bGVuIC09IEVUSEVSX0NSQ19MRU47DQoNCgkJLyogZmxhZyBhbiBlcnJvciBh bmQgdHJ5IGFnYWluICovDQoJCWlmICgobGVuID4gRVRIRVJfTUFYX0xFTisz MikgfHwgKGZsYWdzICYgQkZFX1JYX0ZMQUdfRVJST1JTKSkgew0KCQkJaWZw LT5pZl9pZXJyb3JzKys7DQoJCQlpZiAoZmxhZ3MgJiBCRkVfUlhfRkxBR19T RVJSKQ0KCQkJCWlmcC0+aWZfY29sbGlzaW9ucysrOw0KCQkJYmZlX2xpc3Rf bmV3YnVmKHNjLCBjb25zLCBtKTsNCgkJCWNvbnRpbnVlOw0KCQl9DQoNCgkJ LyogR28gcGFzdCB0aGUgcnggaGVhZGVyICovDQoJCWlmIChiZmVfbGlzdF9u ZXdidWYoc2MsIGNvbnMsIE5VTEwpID09IDApIHsNCgkJCW1fYWRqKG0sIEJG RV9SWF9PRkZTRVQpOw0KCQkJbS0+bV9sZW4gPSBtLT5tX3BrdGhkci5sZW4g PSBsZW47DQoJCX0gZWxzZSB7DQoJCQliZmVfbGlzdF9uZXdidWYoc2MsIGNv bnMsIG0pOw0KCQkJaWZwLT5pZl9pZXJyb3JzKys7DQoJCQljb250aW51ZTsN CgkJfQ0KDQoJCWlmcC0+aWZfaXBhY2tldHMrKzsNCgkJbS0+bV9wa3RoZHIu cmN2aWYgPSBpZnA7DQoJCUJGRV9VTkxPQ0soc2MpOw0KCQkoKmlmcC0+aWZf aW5wdXQpKGlmcCwgbSk7DQoJCUJGRV9MT0NLKHNjKTsNCg0KICAgICAgICBC RkVfSU5DKGNvbnMsIEJGRV9SWF9MSVNUX0NOVCk7DQoJfQ0KCXNjLT5iZmVf cnhfY29ucyA9IGNvbnM7DQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRp YyB2b2lkDQpiZmVfaW50cih2b2lkICp4c2MpDQp7DQoJc3RydWN0IGJmZV9z b2Z0YyAqc2MgPSB4c2M7DQoJc3RydWN0IGlmbmV0ICppZnA7DQoJdV9pbnQz Ml90IGlzdGF0LCBpbWFzaywgZmxhZzsNCg0KCWlmcCA9ICZzYy0+YXJwY29t LmFjX2lmOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJaXN0YXQgPSBDU1JfUkVB RF80KHNjLCBCRkVfSVNUQVQpOw0KCWltYXNrID0gQ1NSX1JFQURfNChzYywg QkZFX0lNQVNLKTsNCg0KCS8qIA0KCSAqIERlZmVyIHVuc29saWNpdGVkIGlu dGVycnVwdHMgLSBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNldHRpbmcg dGhlDQoJICogY2hpcHMgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgdG8gMCBk b2Vzbid0IGFjdHVhbGx5IHN0b3AgdGhlDQoJICogaW50ZXJydXB0cw0KCSAq Lw0KCWlzdGF0ICY9IGltYXNrOw0KCUNTUl9XUklURV80KHNjLCBCRkVfSVNU QVQsIGlzdGF0KTsNCglDU1JfUkVBRF80KHNjLCBCRkVfSVNUQVQpOw0KDQoJ Lyogbm90IGV4cGVjdGluZyB0aGlzIGludGVycnVwdCwgZGlzcmVnYXJkIGl0 ICovDQoJaWYoaXN0YXQgPT0gMCkgew0KCQlCRkVfVU5MT0NLKHNjKTsNCgkJ cmV0dXJuOw0KCX0NCg0KCWlmKGlzdGF0ICYgQkZFX0lTVEFUX0VSUk9SUykg ew0KCQlmbGFnID0gQ1NSX1JFQURfNChzYywgQkZFX0RNQVRYX1NUQVQpOw0K CQlpZihmbGFnICYgQkZFX1NUQVRfRU1BU0spDQoJCQlpZnAtPmlmX29lcnJv cnMrKzsNCg0KCQlmbGFnID0gQ1NSX1JFQURfNChzYywgQkZFX0RNQVJYX1NU QVQpOw0KCQlpZihmbGFnICYgQkZFX1JYX0ZMQUdfRVJST1JTKQ0KCQkJaWZw LT5pZl9pZXJyb3JzKys7DQoNCgkJaWZwLT5pZl9mbGFncyAmPSB+SUZGX1JV Tk5JTkc7DQoJCWJmZV9pbml0KHNjKTsNCgl9DQoNCgkvKiBBIHBhY2tldCB3 YXMgcmVjZWl2ZWQgKi8NCglpZihpc3RhdCAmIEJGRV9JU1RBVF9SWCkNCgkJ YmZlX3J4ZW9mKHNjKTsNCg0KCS8qIEEgcGFja2V0IHdhcyBzZW50ICovDQoJ aWYoaXN0YXQgJiBCRkVfSVNUQVRfVFgpDQoJCWJmZV90eGVvZihzYyk7DQoN CgkvKiBXZSBoYXZlIHBhY2tldHMgcGVuZGluZywgZmlyZSB0aGVtIG91dCAq LyANCglpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9SVU5OSU5HICYmIGlmcC0+ aWZfc25kLmlmcV9oZWFkICE9IE5VTEwpDQoJCWJmZV9zdGFydChpZnApOw0K DQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV9lbmNh cChzdHJ1Y3QgYmZlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm1faGVhZCwg dV9pbnQzMl90ICp0eGlkeCkNCnsNCglzdHJ1Y3QgYmZlX2Rlc2MgKmQgPSBO VUxMOw0KCXN0cnVjdCBiZmVfZGF0YSAqciA9IE5VTEw7DQoJc3RydWN0IG1i dWYgICAgICptOw0KCXVfaW50MzJfdCAgICAgICBmcmFnLCBjdXIsIGNudCA9 IDA7DQoJaW50IGNoYWlubGVuID0gMDsNCg0KCWlmKEJGRV9UWF9MSVNUX0NO VCAtIHNjLT5iZmVfdHhfY250IDwgMikNCgkJcmV0dXJuKEVOT0JVRlMpOw0K DQoJLyoNCgkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGZyYWdzIGluIHRoaXMg Y2hhaW4gdG8gc2VlIGlmDQoJICogd2UgbmVlZCB0byBtX2RlZnJhZy4gIFNp bmNlIHRoZSBkZXNjcmlwdG9yIGxpc3QgaXMgc2hhcmVkDQoJICogYnkgYWxs IHBhY2tldHMsIHdlJ2xsIG1fZGVmcmFnIGxvbmcgY2hhaW5zIHNvIHRoYXQg dGhleQ0KCSAqIGRvIG5vdCB1c2UgdXAgdGhlIGVudGlyZSBsaXN0LCBldmVu IGlmIHRoZXkgd291bGQgZml0Lg0KCSAqLw0KCWZvcihtID0gbV9oZWFkOyBt ICE9IE5VTEw7IG0gPSBtLT5tX25leHQpIA0KCQljaGFpbmxlbisrOw0KDQoN CglpZiAoKGNoYWlubGVuID4gQkZFX1RYX0xJU1RfQ05UIC8gNCkgfHwgDQoJ CQkoKEJGRV9UWF9MSVNUX0NOVCAtIChjaGFpbmxlbiArIHNjLT5iZmVfdHhf Y250KSkgPCAyKSkgew0KCQltID0gbV9kZWZyYWcobV9oZWFkLCBNX0RPTlRX QUlUKTsNCgkJaWYgKG0gPT0gTlVMTCkgDQoJCQlyZXR1cm4oRU5PQlVGUyk7 DQoJCW1faGVhZCA9IG07DQoJfQ0KDQoJLyoNCgkgKiBTdGFydCBwYWNraW5n IHRoZSBtYnVmcyBpbiB0aGlzIGNoYWluIGludG8NCgkgKiB0aGUgZnJhZ21l bnQgcG9pbnRlcnMuIFN0b3Agd2hlbiB3ZSBydW4gb3V0DQoJICogb2YgZnJh Z21lbnRzIG9yIGhpdCB0aGUgZW5kIG9mIHRoZSBtYnVmIGNoYWluLg0KCSAq Lw0KCW0gPSBtX2hlYWQ7DQoJY3VyID0gZnJhZyA9ICp0eGlkeDsNCgljbnQg PSAwOw0KDQoJZm9yKG0gPSBtX2hlYWQ7IG0gIT0gTlVMTDsgbSA9IG0tPm1f bmV4dCkgew0KCQlpZihtLT5tX2xlbiAhPSAwKSB7DQoJCQlpZigoQkZFX1RY X0xJU1RfQ05UIC0gKHNjLT5iZmVfdHhfY250ICsgY250KSkgPCAyKQ0KCQkJ CXJldHVybihFTk9CVUZTKTsNCg0KCQkJZCA9ICZzYy0+YmZlX3R4X2xpc3Rb Y3VyXTsNCgkJCXIgPSAmc2MtPmJmZV90eF9yaW5nW2N1cl07DQoJCQlkLT5i ZmVfY3RybCA9IEJGRV9ERVNDX0xFTiAmIG0tPm1fbGVuOw0KCQkJLyogYWx3 YXlzIGludHRlcnVwdCBvbiBjb21wbGV0aW9uICovDQoJCQlkLT5iZmVfY3Ry bCB8PSBCRkVfREVTQ19JT0M7DQoJCQlpZihjbnQgPT0gMCkNCgkJCQkvKiBT ZXQgc3RhcnQgb2YgZnJhbWUgKi8NCgkJCQlkLT5iZmVfY3RybCB8PSBCRkVf REVTQ19TT0Y7DQoJCQlpZihjdXIgPT0gQkZFX1RYX0xJU1RfQ05UIC0gMSkN CgkJCQkvKiBUZWxsIHRoZSBjaGlwIHRvIHdyYXAgdG8gdGhlIHN0YXJ0IG9m IHRoZSBkZXNjcmlwdG9yIGxpc3QgKi8NCgkJCQlkLT5iZmVfY3RybCB8PSBC RkVfREVTQ19FT1Q7DQoNCgkJCWJ1c19kbWFtYXBfbG9hZChzYy0+YmZlX3Rh Zywgci0+YmZlX21hcCwgbXRvZChtLCB2b2lkKiksIG0tPm1fbGVuLCANCgkJ CQkJYmZlX2RtYV9tYXBfZGVzYywgZCwgMCk7DQoJCQlidXNfZG1hbWFwX3N5 bmMoc2MtPmJmZV90YWcsIHItPmJmZV9tYXAsIEJVU19ETUFTWU5DX1BSRVJF QUQpOw0KDQoJCQlmcmFnID0gY3VyOw0KICAgICAgICAgICAgQkZFX0lOQyhj dXIsIEJGRV9UWF9MSVNUX0NOVCk7DQoJCQljbnQrKzsNCgkJfQ0KCX0NCg0K CWlmIChtICE9IE5VTEwpDQoJCXJldHVybihFTk9CVUZTKTsNCg0KCXNjLT5i ZmVfdHhfbGlzdFtmcmFnXS5iZmVfY3RybCB8PSBCRkVfREVTQ19FT0Y7DQoJ c2MtPmJmZV90eF9yaW5nW2ZyYWddLmJmZV9tYnVmID0gbV9oZWFkOw0KCWJ1 c19kbWFtYXBfc3luYyhzYy0+YmZlX3R4X3RhZywgc2MtPmJmZV90eF9tYXAs IEJVU19ETUFTWU5DX1BSRVJFQUQpOw0KDQoJKnR4aWR4ID0gY3VyOw0KCXNj LT5iZmVfdHhfY250ICs9IGNudDsNCglyZXR1cm4gKDApOw0KfQ0KDQovKg0K ICogU2V0IHVwIHRvIHRyYW5zbWl0IGEgcGFja2V0DQogKi8NCnN0YXRpYyB2 b2lkDQpiZmVfc3RhcnQoc3RydWN0IGlmbmV0ICppZnApDQp7DQoJc3RydWN0 IGJmZV9zb2Z0YyAqc2M7DQoJc3RydWN0IG1idWYgKm1faGVhZCA9IE5VTEw7 DQoJaW50IGlkeDsNCg0KCXNjID0gaWZwLT5pZl9zb2Z0YzsNCglpZHggPSBz Yy0+YmZlX3R4X3Byb2Q7DQoNCglCRkVfTE9DSyhzYyk7DQoNCgkvKiANCgkg KiBub3QgbXVjaCBwb2ludCB0cnlpbmcgdG8gc2VuZCBpZiB0aGUgbGluayBp cyBkb3duIG9yIHdlIGhhdmUgbm90aGluZyB0bw0KCSAqIHNlbmQNCgkgKi8N CglpZiAoIXNjLT5iZmVfbGluayAmJiBpZnAtPmlmX3NuZC5pZnFfbGVuIDwg MTApIHsNCgkJQkZFX1VOTE9DSyhzYyk7DQoJCXJldHVybjsNCgl9DQoNCglp ZiAoaWZwLT5pZl9mbGFncyAmIElGRl9PQUNUSVZFKSB7DQoJCUJGRV9VTkxP Q0soc2MpOw0KCQlyZXR1cm47DQoJfQ0KDQoJd2hpbGUoc2MtPmJmZV90eF9y aW5nW2lkeF0uYmZlX21idWYgPT0gTlVMTCkgew0KCQlJRl9ERVFVRVVFKCZp ZnAtPmlmX3NuZCwgbV9oZWFkKTsNCgkJaWYobV9oZWFkID09IE5VTEwpDQoJ CQlicmVhazsNCg0KCQkvKiANCgkJICogUGFjayB0aGUgZGF0YSBpbnRvIHRo ZSB0eCByaW5nLiAgSWYgd2UgZG9udCBoYXZlIGVub3VnaCByb29tLCBsZXQN CgkJICogdGhlIGNoaXAgZHJhaW4gdGhlIHJpbmcNCgkJICovDQoJCWlmKGJm ZV9lbmNhcChzYywgbV9oZWFkLCAmaWR4KSkgew0KCQkJSUZfUFJFUEVORCgm aWZwLT5pZl9zbmQsIG1faGVhZCk7DQoJCQlpZnAtPmlmX2ZsYWdzIHw9IElG Rl9PQUNUSVZFOw0KCQkJYnJlYWs7DQoJCX0NCg0KCQkvKg0KCQkgKiBJZiB0 aGVyZSdzIGEgQlBGIGxpc3RlbmVyLCBib3VuY2UgYSBjb3B5IG9mIHRoaXMg ZnJhbWUNCgkJICogdG8gaGltLg0KCQkgKi8NCgkJQlBGX01UQVAoaWZwLCBt X2hlYWQpOw0KCX0NCg0KCXNjLT5iZmVfdHhfcHJvZCA9IGlkeDsNCgkvKiBU cmFuc21pdCAtIHR3aWNlIGR1ZSB0byBhcHBhcmVudCBoYXJkd2FyZSBidWcg Ki8NCglDU1JfV1JJVEVfNChzYywgQkZFX0RNQVRYX1BUUiwgaWR4ICogc2l6 ZW9mKHN0cnVjdCBiZmVfZGVzYykpOw0KCUNTUl9XUklURV80KHNjLCBCRkVf RE1BVFhfUFRSLCBpZHggKiBzaXplb2Yoc3RydWN0IGJmZV9kZXNjKSk7DQoN CgkvKg0KCSAqIFNldCBhIHRpbWVvdXQgaW4gY2FzZSB0aGUgY2hpcCBnb2Vz IG91dCB0byBsdW5jaC4NCgkgKi8NCglpZnAtPmlmX3RpbWVyID0gNTsNCglC RkVfVU5MT0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9pbml0KHZv aWQgKnhzYykNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYyA9IChzdHJ1Y3Qg YmZlX3NvZnRjKil4c2M7DQoJc3RydWN0IGlmbmV0ICppZnAgPSAmc2MtPmFy cGNvbS5hY19pZjsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCWlmIChpZnAtPmlm X2ZsYWdzICYgSUZGX1JVTk5JTkcpIHsNCgkJQkZFX1VOTE9DSyhzYyk7DQoJ CXJldHVybjsNCgl9DQoNCgliZmVfc3RvcChzYyk7DQoJYmZlX2NoaXBfcmVz ZXQoc2MpOw0KDQoJaWYgKGJmZV9saXN0X3J4X2luaXQoc2MpID09IEVOT0JV RlMpIHsNCgkJcHJpbnRmKCJiZmUlZDogYmZlX2luaXQgZmFpbGVkLiBOb3Qg ZW5vdWdoIG1lbW9yeSBmb3IgbGlzdCBidWZmZXJzXG4iLA0KCQkJCXNjLT5i ZmVfdW5pdCk7DQoJCWJmZV9zdG9wKHNjKTsNCgkJcmV0dXJuOw0KCX0NCg0K CWJmZV9zZXRfcnhfbW9kZShzYyk7DQoNCgkvKiBFbmFibGUgdGhlIGNoaXAg YW5kIGNvcmUgKi8NCglCRkVfT1Ioc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9F TkVUX0VOQUJMRSk7DQoJLyogRW5hYmxlIGludGVycnVwdHMgKi8NCglDU1Jf V1JJVEVfNChzYywgQkZFX0lNQVNLLCBCRkVfSU1BU0tfREVGKTsNCg0KCWJm ZV9pZm1lZGlhX3VwZChpZnApOw0KCWlmcC0+aWZfZmxhZ3MgfD0gSUZGX1JV Tk5JTkc7DQoJaWZwLT5pZl9mbGFncyAmPSB+SUZGX09BQ1RJVkU7DQoNCglz Yy0+YmZlX3N0YXRfY2ggPSB0aW1lb3V0KGJmZV90aWNrLCBzYywgaHopOw0K CUJGRV9VTkxPQ0soc2MpOw0KfQ0KDQovKg0KICogU2V0IG1lZGlhIG9wdGlv bnMuDQogKi8NCnN0YXRpYyBpbnQNCmJmZV9pZm1lZGlhX3VwZChzdHJ1Y3Qg aWZuZXQgKmlmcCkNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYzsNCglzdHJ1 Y3QgbWlpX2RhdGEgKm1paTsNCg0KCXNjID0gaWZwLT5pZl9zb2Z0YzsNCg0K CUJGRV9MT0NLKHNjKTsNCg0KCW1paSA9IGRldmljZV9nZXRfc29mdGMoc2Mt PmJmZV9taWlidXMpOw0KCXNjLT5iZmVfbGluayA9IDA7DQoJaWYgKG1paS0+ bWlpX2luc3RhbmNlKSB7DQoJCXN0cnVjdCBtaWlfc29mdGMgKm1paXNjOw0K CQlmb3IgKG1paXNjID0gTElTVF9GSVJTVCgmbWlpLT5taWlfcGh5cyk7IG1p aXNjICE9IE5VTEw7DQoJCQkJbWlpc2MgPSBMSVNUX05FWFQobWlpc2MsIG1p aV9saXN0KSkNCgkJCW1paV9waHlfcmVzZXQobWlpc2MpOw0KCX0NCgltaWlf bWVkaWFjaGcobWlpKTsNCg0KCUJGRV9VTkxPQ0soc2MpOw0KCXJldHVybigw KTsNCn0NCg0KLyoNCiAqIFJlcG9ydCBjdXJyZW50IG1lZGlhIHN0YXR1cy4N CiAqLw0Kc3RhdGljIHZvaWQNCmJmZV9pZm1lZGlhX3N0cyhzdHJ1Y3QgaWZu ZXQgKmlmcCwgc3RydWN0IGlmbWVkaWFyZXEgKmlmbXIpDQp7DQoJc3RydWN0 IGJmZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOw0KCXN0cnVjdCBtaWlf ZGF0YSAqbWlpOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJbWlpID0gZGV2aWNl X2dldF9zb2Z0YyhzYy0+YmZlX21paWJ1cyk7DQoJbWlpX3BvbGxzdGF0KG1p aSk7DQoJaWZtci0+aWZtX2FjdGl2ZSA9IG1paS0+bWlpX21lZGlhX2FjdGl2 ZTsNCglpZm1yLT5pZm1fc3RhdHVzID0gbWlpLT5taWlfbWVkaWFfc3RhdHVz Ow0KDQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV9p b2N0bChzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9sb25nIGNvbW1hbmQsIGNhZGRy X3QgZGF0YSkNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYyA9IGlmcC0+aWZf c29mdGM7DQoJc3RydWN0IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICop IGRhdGE7DQoJc3RydWN0IG1paV9kYXRhICptaWk7DQoJaW50IGVycm9yID0g MDsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCXN3aXRjaChjb21tYW5kKSB7DQoJ CWNhc2UgU0lPQ1NJRkZMQUdTOg0KCQkJaWYoaWZwLT5pZl9mbGFncyAmIElG Rl9VUCkNCgkJCQlpZihpZnAtPmlmX2ZsYWdzICYgSUZGX1JVTk5JTkcpDQoJ CQkJCWJmZV9zZXRfcnhfbW9kZShzYyk7DQoJCQkJZWxzZQ0KCQkJCQliZmVf aW5pdChzYyk7DQoJCQllbHNlIGlmKGlmcC0+aWZfZmxhZ3MgJiBJRkZfUlVO TklORykNCgkJCQliZmVfc3RvcChzYyk7DQoJCQlicmVhazsNCgkJY2FzZSBT SU9DQURETVVMVEk6DQoJCWNhc2UgU0lPQ0RFTE1VTFRJOg0KCQkJaWYoaWZw LT5pZl9mbGFncyAmIElGRl9SVU5OSU5HKQ0KCQkJCWJmZV9zZXRfcnhfbW9k ZShzYyk7DQoJCQlicmVhazsNCgkJY2FzZSBTSU9DR0lGTUVESUE6DQoJCWNh c2UgU0lPQ1NJRk1FRElBOg0KCQkJbWlpID0gZGV2aWNlX2dldF9zb2Z0Yyhz Yy0+YmZlX21paWJ1cyk7DQoJCQllcnJvciA9IGlmbWVkaWFfaW9jdGwoaWZw LCBpZnIsICZtaWktPm1paV9tZWRpYSwgY29tbWFuZCk7DQoJCQlicmVhazsN CgkJZGVmYXVsdDoNCgkJCWVycm9yID0gZXRoZXJfaW9jdGwoaWZwLCBjb21t YW5kLCBkYXRhKTsgDQoJCQlicmVhazsNCgl9DQoNCglCRkVfVU5MT0NLKHNj KTsNCglyZXR1cm4gZXJyb3I7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfd2F0 Y2hkb2coc3RydWN0IGlmbmV0ICppZnApDQp7DQoJc3RydWN0IGJmZV9zb2Z0 YyAqc2M7DQoNCglzYyA9IGlmcC0+aWZfc29mdGM7DQoNCglCRkVfTE9DSyhz Yyk7DQoNCglwcmludGYoImJmZSVkOiB3YXRjaGRvZyB0aW1lb3V0IC0tIHJl c2V0dGluZ1xuIiwgc2MtPmJmZV91bml0KTsNCg0KCWlmcC0+aWZfZmxhZ3Mg Jj0gfklGRl9SVU5OSU5HOw0KCWJmZV9pbml0KHNjKTsNCg0KCWlmcC0+aWZf b2Vycm9ycysrOw0KDQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyB2 b2lkDQpiZmVfdGljayh2b2lkICp4c2MpDQp7DQoJc3RydWN0IGJmZV9zb2Z0 YyAqc2MgPSB4c2M7DQoJc3RydWN0IG1paV9kYXRhICptaWk7DQoNCglpZiAo c2MgPT0gTlVMTCkNCgkJcmV0dXJuOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJ bWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+YmZlX21paWJ1cyk7DQoNCgli ZmVfc3RhdHNfdXBkYXRlKHNjKTsNCglzYy0+YmZlX3N0YXRfY2ggPSB0aW1l b3V0KGJmZV90aWNrLCBzYywgaHopOw0KDQoJaWYoc2MtPmJmZV9saW5rKSB7 DQoJCUJGRV9VTkxPQ0soc2MpOw0KCQlyZXR1cm47DQoJfQ0KDQoJbWlpX3Rp Y2sobWlpKTsNCglpZiAoIXNjLT5iZmVfbGluayAmJiBtaWktPm1paV9tZWRp YV9zdGF0dXMgJiBJRk1fQUNUSVZFICYmDQoJCQlJRk1fU1VCVFlQRShtaWkt Pm1paV9tZWRpYV9hY3RpdmUpICE9IElGTV9OT05FKSANCgkJc2MtPmJmZV9s aW5rKys7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg0KLyoNCiAqIFN0b3Ag dGhlIGFkYXB0ZXIgYW5kIGZyZWUgYW55IG1idWZzIGFsbG9jYXRlZCB0byB0 aGUNCiAqIFJYIGFuZCBUWCBsaXN0cy4NCiAqLw0Kc3RhdGljIHZvaWQNCmJm ZV9zdG9wKHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCXN0cnVjdCBpZm5l dCAqaWZwOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJdW50aW1lb3V0KGJmZV90 aWNrLCBzYywgc2MtPmJmZV9zdGF0X2NoKTsNCg0KCWlmcCA9ICZzYy0+YXJw Y29tLmFjX2lmOw0KDQoJYmZlX2NoaXBfaGFsdChzYyk7DQogICAgYmZlX3R4 X3JpbmdfZnJlZShzYyk7DQoJYmZlX3J4X3JpbmdfZnJlZShzYyk7DQoNCglp ZnAtPmlmX2ZsYWdzICY9IH4oSUZGX1JVTk5JTkcgfCBJRkZfT0FDVElWRSk7 DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg== ---559023410-851401618-1084200166=:27340--