From mboxrd@z Thu Jan 1 00:00:00 1970 From: "J. Bruce Fields" Subject: Re: [PATCH 2/2] NFS: handle IPv6 addresses in nfs ctl Date: Wed, 31 Oct 2007 12:20:37 -0400 Message-ID: <20071031162037.GD4569@fieldses.org> References: <4727647A.30706@ext.bull.net> <47278145.8010002@hp.com> <4728458A.4040102@ext.bull.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: netdev ML , Brian Haley , Mailing list NFSv4 To: =?utf-8?B?QXVyw6lsaWVu?= Charbon Return-path: Content-Disposition: inline In-Reply-To: <4728458A.4040102@ext.bull.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: nfsv4-bounces@linux-nfs.org Errors-To: nfsv4-bounces@linux-nfs.org List-Id: netdev.vger.kernel.org T24gV2VkLCBPY3QgMzEsIDIwMDcgYXQgMTA6MDY6MThBTSArMDEwMCwgQXVyw6lsaWVuIENoYXJi b24gd3JvdGU6Cj4gVGhhbmsgeW91IEJyaWFuCj4gU29ycnksIEkgZGlkIG5vdCBzZWUgd2hhdCB5 b3Ugc2VudC4KPgo+IEkgaGF2ZSB0ZXN0ZWQgaXQgd2l0aCBhbiBJUHY0IGNvbmZpZ3VyYXRpb24u IEl0J3MgT0suCj4gU28gTmVpbCwgQnJ1Y2UsIHlvdSBjYW4gdGFrZSB0aGlzIG9uZSBmb3IgcmV2 aWV3LgoKRGlkIHlvdSBtaXNzIE5laWwncyBxdWVzdGlvbiBhYm91dCB0aGUgbmZzY3RsIHN0dWZm PyAgKERvIHdlIHJlYWxseSBuZWVkCnRoYXQsIG9yIHdvdWxkIHRoZSBjaGFuZ2VzIHRvIHRoZSBp cF9tYXAgY2FjaGUgYmUgc3VmZmljaWVudD8pLS1iLgoKPgo+IGZzL25mc2QvZXhwb3J0LmMgICAg ICAgICAgICAgICB8ICAgIDkgKystCj4gZnMvbmZzZC9uZnNjdGwuYyAgICAgICAgICAgICAgIHwg ICA0MiArKysrKysrKysrKystLQo+IGluY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGguaCB8ICAg IDUgKwo+IGluY2x1ZGUvbmV0L2lwdjYuaCAgICAgICAgICAgICB8ICAgMTAgKysrCj4gbmV0L3N1 bnJwYy9zdmNhdXRoX3VuaXguYyAgICAgIHwgIDExOCAKPiArKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLQo+IDUgZmlsZXMgY2hhbmdlZCwgMTM0IGluc2VydGlvbnMoKyks IDUwIGRlbGV0aW9ucygtKQo+Cj4gU2lnbmVkLW9mZi1ieTogQnJpYW4gSGFsZXkgPGJyaWFuLmhh bGV5QGhwLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBdXJlbGllbiBDaGFyYm9uIDxhdXJlbGllbi5j aGFyYm9uQGJ1bGwubmV0Pgo+Cj4gLS0tCj4KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzZC9leHBvcnQu YyBiL2ZzL25mc2QvZXhwb3J0LmMKPiBpbmRleCA2NmQwYWViLi5jNDdiYTc3IDEwMDY0NAo+IC0t LSBhL2ZzL25mc2QvZXhwb3J0LmMKPiArKysgYi9mcy9uZnNkL2V4cG9ydC5jCj4gQEAgLTM1LDYg KzM1LDcgQEAKPiAjaW5jbHVkZSA8bGludXgvbG9ja2QvYmluZC5oPgo+ICNpbmNsdWRlIDxsaW51 eC9zdW5ycGMvbXNnX3Byb3QuaD4KPiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4K PiArI2luY2x1ZGUgPG5ldC9pcHY2Lmg+Cj4gI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZICAgIE5G U0REQkdfRVhQT1JUCj4gQEAgLTE1NTYsNiArMTU1Nyw3IEBAIGV4cF9hZGRjbGllbnQoc3RydWN0 IG5mc2N0bF9jbGllbnQgKm5jcCkKPiB7Cj4gICAgIHN0cnVjdCBhdXRoX2RvbWFpbiAgICAqZG9t Owo+ICAgICBpbnQgICAgICAgICAgICBpLCBlcnI7Cj4gKyAgICBzdHJ1Y3QgaW42X2FkZHIgICAg ICAgIGluNjsKPiAgICAgLyogRmlyc3QsIGNvbnNpc3RlbmN5IGNoZWNrLiAqLwo+ICAgICBlcnIg PSAtRUlOVkFMOwo+IEBAIC0xNTc0LDkgKzE1NzYsMTAgQEAgZXhwX2FkZGNsaWVudChzdHJ1Y3Qg bmZzY3RsX2NsaWVudCAqbmNwKQo+ICAgICAgICAgZ290byBvdXRfdW5sb2NrOwo+ICAgICAvKiBJ bnNlcnQgY2xpZW50IGludG8gaGFzaHRhYmxlLiAqLwo+IC0gICAgZm9yIChpID0gMDsgaSA8IG5j cC0+Y2xfbmFkZHI7IGkrKykKPiAtICAgICAgICBhdXRoX3VuaXhfYWRkX2FkZHIobmNwLT5jbF9h ZGRybGlzdFtpXSwgZG9tKTsKPiAtCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgbmNwLT5jbF9uYWRk cjsgaSsrKSB7Cj4gKyAgICAgICAgaXB2Nl9hZGRyX3NldF92NG1hcHBlZChuY3AtPmNsX2FkZHJs aXN0W2ldLnNfYWRkciwgJmluNik7Cj4gKyAgICAgICAgYXV0aF91bml4X2FkZF9hZGRyKCZpbjYs IGRvbSk7Cj4gKyAgICB9Cj4gICAgIGF1dGhfdW5peF9mb3JnZXRfb2xkKGRvbSk7Cj4gICAgIGF1 dGhfZG9tYWluX3B1dChkb20pOwo+IGRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMv bmZzZC9uZnNjdGwuYwo+IGluZGV4IDc3ZGM5ODkuLjVjYjVmMGQgMTAwNjQ0Cj4gLS0tIGEvZnMv bmZzZC9uZnNjdGwuYwo+ICsrKyBiL2ZzL25mc2QvbmZzY3RsLmMKPiBAQCAtMzcsNiArMzcsNyBA QAo+ICNpbmNsdWRlIDxsaW51eC9uZnNkL3N5c2NhbGwuaD4KPiAjaW5jbHVkZSA8YXNtL3VhY2Nl c3MuaD4KPiArI2luY2x1ZGUgPG5ldC9pcHY2Lmg+Cj4gLyoKPiAgKiAgICBXZSBoYXZlIGEgc2lu Z2xlIGRpcmVjdG9yeSB3aXRoIDkgbm9kZXMgaW4gaXQuCj4gQEAgLTIxOSwyNCArMjIwLDM3IEBA IHN0YXRpYyBzc2l6ZV90IHdyaXRlX2dldGZzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIAo+ICpi dWYsIHNpemVfdCBzaXplKQo+IHsKPiAgICAgc3RydWN0IG5mc2N0bF9mc3Bhcm0gKmRhdGE7Cj4g ICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwo+ICsgICAgc3RydWN0IHNvY2thZGRyX2luNiAq c2luNjsKPiAgICAgc3RydWN0IGF1dGhfZG9tYWluICpjbHA7Cj4gICAgIGludCBlcnIgPSAwOwo+ ICAgICBzdHJ1Y3Qga25mc2RfZmggKnJlczsKPiArICAgIHN0cnVjdCBpbjZfYWRkciBpbjY7Cj4g ICAgIGlmIChzaXplIDwgc2l6ZW9mKCpkYXRhKSkKPiAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ ICAgICBkYXRhID0gKHN0cnVjdCBuZnNjdGxfZnNwYXJtKilidWY7Cj4gICAgIGVyciA9IC1FUFJP VE9OT1NVUFBPUlQ7Cj4gLSAgICBpZiAoZGF0YS0+Z2RfYWRkci5zYV9mYW1pbHkgIT0gQUZfSU5F VCkKPiArICAgIHN3aXRjaCAoZGF0YS0+Z2RfYWRkci5zYV9mYW1pbHkpIHsKPiArICAgIGNhc2Ug QUZfSU5FVDoKPiArICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmRhdGEtPmdk X2FkZHI7Cj4gKyAgICAgICAgaXB2Nl9hZGRyX3NldF92NG1hcHBlZChzaW4tPnNpbl9hZGRyLnNf YWRkciwgJmluNik7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFGX0lORVQ2Ogo+ICsg ICAgICAgIHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZkYXRhLT5nZF9hZGRyOwo+ICsg ICAgICAgIGlwdjZfYWRkcl9jb3B5KCZpbjYsICZzaW42LT5zaW42X2FkZHIpOwo+ICsgICAgICAg IGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiAgICAgICAgIGdvdG8gb3V0Owo+IC0gICAgc2luID0g KHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZkYXRhLT5nZF9hZGRyOwo+ICsgICAgfQo+ICsKPiAgICAg aWYgKGRhdGEtPmdkX21heGxlbiA+IE5GUzNfRkhTSVpFKQo+ICAgICAgICAgZGF0YS0+Z2RfbWF4 bGVuID0gTkZTM19GSFNJWkU7Cj4gICAgIHJlcyA9IChzdHJ1Y3Qga25mc2RfZmgqKWJ1ZjsKPiAg ICAgZXhwX3JlYWRsb2NrKCk7Cj4gLSAgICBpZiAoIShjbHAgPSBhdXRoX3VuaXhfbG9va3VwKHNp bi0+c2luX2FkZHIpKSkKPiArCj4gKyAgICBpZiAoIShjbHAgPSBhdXRoX3VuaXhfbG9va3VwKCZp bjYpKSkKPiAgICAgICAgIGVyciA9IC1FUEVSTTsKPiAgICAgZWxzZSB7Cj4gICAgICAgICBlcnIg PSBleHBfcm9vdGZoKGNscCwgZGF0YS0+Z2RfcGF0aCwgcmVzLCBkYXRhLT5nZF9tYXhsZW4pOwo+ IEBAIC0yNTMsMjUgKzI2Nyw0MSBAQCBzdGF0aWMgc3NpemVfdCB3cml0ZV9nZXRmZChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgY2hhciAKPiAqYnVmLCBzaXplX3Qgc2l6ZSkKPiB7Cj4gICAgIHN0cnVjdCBu ZnNjdGxfZmRwYXJtICpkYXRhOwo+ICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKPiArICAg IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Cj4gICAgIHN0cnVjdCBhdXRoX2RvbWFpbiAqY2xw Owo+ICAgICBpbnQgZXJyID0gMDsKPiAgICAgc3RydWN0IGtuZnNkX2ZoIGZoOwo+ICAgICBjaGFy ICpyZXM7Cj4gKyAgICBzdHJ1Y3QgaW42X2FkZHIgaW42Owo+ICAgICBpZiAoc2l6ZSA8IHNpemVv ZigqZGF0YSkpCj4gICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAgICAgZGF0YSA9IChzdHJ1Y3Qg bmZzY3RsX2ZkcGFybSopYnVmOwo+ICAgICBlcnIgPSAtRVBST1RPTk9TVVBQT1JUOwo+IC0gICAg aWYgKGRhdGEtPmdkX2FkZHIuc2FfZmFtaWx5ICE9IEFGX0lORVQpCj4gKyAgICBpZiAoZGF0YS0+ Z2RfYWRkci5zYV9mYW1pbHkgIT0gQUZfSU5FVCAmJgo+ICsgICAgICAgIGRhdGEtPmdkX2FkZHIu c2FfZmFtaWx5ICE9IEFGX0lORVQ2KQo+ICAgICAgICAgZ290byBvdXQ7Cj4gICAgIGVyciA9IC1F SU5WQUw7Cj4gICAgIGlmIChkYXRhLT5nZF92ZXJzaW9uIDwgMiB8fCBkYXRhLT5nZF92ZXJzaW9u ID4gTkZTU1ZDX01BWFZFUlMpCj4gICAgICAgICBnb3RvIG91dDsKPiAgICAgcmVzID0gYnVmOwo+ IC0gICAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZkYXRhLT5nZF9hZGRyOwo+ICAgICBl eHBfcmVhZGxvY2soKTsKPiAtICAgIGlmICghKGNscCA9IGF1dGhfdW5peF9sb29rdXAoc2luLT5z aW5fYWRkcikpKQo+ICsKPiArICAgIHN3aXRjaCAoZGF0YS0+Z2RfYWRkci5zYV9mYW1pbHkpIHsK PiArICAgIGNhc2UgQUZfSU5FVDoKPiArICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2lu ICopJmRhdGEtPmdkX2FkZHI7Cj4gKyAgICAgICAgaXB2Nl9hZGRyX3NldF92NG1hcHBlZChzaW4t PnNpbl9hZGRyLnNfYWRkciwgJmluNik7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFG X0lORVQ2Ogo+ICsgICAgICAgIHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZkYXRhLT5n ZF9hZGRyOwo+ICsgICAgICAgIGlwdjZfYWRkcl9jb3B5KCZpbjYsICZzaW42LT5zaW42X2FkZHIp Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBnb3RvIG91dDsK PiArICAgIH0KPiArCj4gKyAgICBpZiAoIShjbHAgPSBhdXRoX3VuaXhfbG9va3VwKCZpbjYpKSkK PiAgICAgICAgIGVyciA9IC1FUEVSTTsKPiAgICAgZWxzZSB7Cj4gICAgICAgICBlcnIgPSBleHBf cm9vdGZoKGNscCwgZGF0YS0+Z2RfcGF0aCwgJmZoLCBORlNfRkhTSVpFKTsKPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjYXV0aC5oIAo+IGIvaW5jbHVkZS9saW51eC9zdW5y cGMvc3ZjYXV0aC5oCj4gaW5kZXggMjJlMWVmOC4uNjRlY2I5MyAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9z dmNhdXRoLmgKPiBAQCAtMTUsNiArMTUsNyBAQAo+ICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNn X3Byb3QuaD4KPiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NhY2hlLmg+Cj4gI2luY2x1ZGUgPGxp bnV4L2hhc2guaD4KPiArI2luY2x1ZGUgPG5ldC9pcHY2Lmg+Cj4gI2RlZmluZSBTVkNfQ1JFRF9O R1JPVVBTICAgIDMyCj4gc3RydWN0IHN2Y19jcmVkIHsKPiBAQCAtMTIwLDEwICsxMjEsMTAgQEAg ZXh0ZXJuIHZvaWQgICAgc3ZjX2F1dGhfdW5yZWdpc3RlcihycGNfYXV0aGZsYXZvcl90IAo+IGZs YXZvcik7Cj4gZXh0ZXJuIHN0cnVjdCBhdXRoX2RvbWFpbiAqdW5peF9kb21haW5fZmluZChjaGFy ICpuYW1lKTsKPiBleHRlcm4gdm9pZCBhdXRoX2RvbWFpbl9wdXQoc3RydWN0IGF1dGhfZG9tYWlu ICppdGVtKTsKPiAtZXh0ZXJuIGludCBhdXRoX3VuaXhfYWRkX2FkZHIoc3RydWN0IGluX2FkZHIg YWRkciwgc3RydWN0IGF1dGhfZG9tYWluIAo+ICpkb20pOwo+ICtleHRlcm4gaW50IGF1dGhfdW5p eF9hZGRfYWRkcihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBhdXRoX2RvbWFpbiAKPiAq ZG9tKTsKPiBleHRlcm4gc3RydWN0IGF1dGhfZG9tYWluICphdXRoX2RvbWFpbl9sb29rdXAoY2hh ciAqbmFtZSwgc3RydWN0IAo+IGF1dGhfZG9tYWluICpuZXcpOwo+IGV4dGVybiBzdHJ1Y3QgYXV0 aF9kb21haW4gKmF1dGhfZG9tYWluX2ZpbmQoY2hhciAqbmFtZSk7Cj4gLWV4dGVybiBzdHJ1Y3Qg YXV0aF9kb21haW4gKmF1dGhfdW5peF9sb29rdXAoc3RydWN0IGluX2FkZHIgYWRkcik7Cj4gK2V4 dGVybiBzdHJ1Y3QgYXV0aF9kb21haW4gKmF1dGhfdW5peF9sb29rdXAoc3RydWN0IGluNl9hZGRy ICphZGRyKTsKPiBleHRlcm4gaW50IGF1dGhfdW5peF9mb3JnZXRfb2xkKHN0cnVjdCBhdXRoX2Rv bWFpbiAqZG9tKTsKPiBleHRlcm4gdm9pZCBzdmNhdXRoX3VuaXhfcHVyZ2Uodm9pZCk7Cj4gZXh0 ZXJuIHZvaWQgc3ZjYXV0aF91bml4X2luZm9fcmVsZWFzZSh2b2lkICopOwo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKPiBpbmRleCBhZTMyOGI2 Li4zNjZmZGNhIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAo+ICsrKyBiL2luY2x1 ZGUvbmV0L2lwdjYuaAo+IEBAIC0xNiw2ICsxNiw3IEBACj4gI2RlZmluZSBfTkVUX0lQVjZfSAo+ ICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbi5oPgo+ICNpbmNs dWRlIDxsaW51eC9oYXJkaXJxLmg+Cj4gI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPgo+ICNpbmNs dWRlIDxuZXQvbmRpc2MuaD4KPiBAQCAtNDAwLDYgKzQwMSwxNSBAQCBzdGF0aWMgaW5saW5lIGlu dCBpcHY2X2FkZHJfdjRtYXBwZWQoY29uc3Qgc3RydWN0IAo+IGluNl9hZGRyICphKQo+ICAgICAg ICAgIGEtPnM2X2FkZHIzMlsyXSA9PSBodG9ubCgweDAwMDBmZmZmKSk7Cj4gfQo+ICtzdGF0aWMg aW5saW5lIHZvaWQgaXB2Nl9hZGRyX3NldF92NG1hcHBlZChjb25zdCBfX2JlMzIgYWRkciwKPiAr ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciAqdjRtYXBwZWQpCj4gK3sKPiAr ICAgIGlwdjZfYWRkcl9zZXQodjRtYXBwZWQsCj4gKyAgICAgICAgICAgICAgMCwgMCwKPiArICAg ICAgICAgICAgICBfX2NvbnN0YW50X2h0b25sKDB4MDAwMEZGRkYpLAo+ICsgICAgICAgICAgICAg IGFkZHIpOwo+ICt9Cj4gKwo+IC8qCj4gICogZmluZCB0aGUgZmlyc3QgZGlmZmVyZW50IGJpdCBi ZXR3ZWVuIHR3byBhZGRyZXNzZXMKPiAgKiBsZW5ndGggb2YgYWRkcmVzcyBtdXN0IGJlIGEgbXVs dGlwbGUgb2YgMzJiaXRzCj4gZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMg Yi9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCj4gaW5kZXggNDExNDc5NC4uYTQwZDc2OSAxMDA2 NDQKPiAtLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCj4gKysrIGIvbmV0L3N1bnJwYy9z dmNhdXRoX3VuaXguYwo+IEBAIC0xMSw2ICsxMSw3IEBACj4gI2luY2x1ZGUgPGxpbnV4L2hhc2gu aD4KPiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cj4gI2luY2x1ZGUgPG5ldC9zb2NrLmg+Cj4g KyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgo+ICNkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgIFJQQ0RC R19BVVRICj4gQEAgLTg0LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgc3ZjYXV0aF91bml4X2RvbWFp bl9yZWxlYXNlKHN0cnVjdCAKPiBhdXRoX2RvbWFpbiAqZG9tKQo+IHN0cnVjdCBpcF9tYXAgewo+ ICAgICBzdHJ1Y3QgY2FjaGVfaGVhZCAgICBoOwo+ICAgICBjaGFyICAgICAgICAgICAgbV9jbGFz c1s4XTsgLyogZS5nLiAibmZzZCIgKi8KPiAtICAgIHN0cnVjdCBpbl9hZGRyICAgICAgICBtX2Fk ZHI7Cj4gKyAgICBzdHJ1Y3QgaW42X2FkZHIgICAgICAgIG1fYWRkcjsKPiAgICAgc3RydWN0IHVu aXhfZG9tYWluICAgICptX2NsaWVudDsKPiAgICAgaW50ICAgICAgICAgICAgbV9hZGRfY2hhbmdl Owo+IH07Cj4gQEAgLTEwMSw3ICsxMDIsNiBAQCBzdGF0aWMgdm9pZCBpcF9tYXBfcHV0KHN0cnVj dCBrcmVmICprcmVmKQo+ICAgICBrZnJlZShpbSk7Cj4gfQo+IC0jaWYgSVBfSEFTSEJJVFMgPT0g OAo+IC8qIGhhc2hfbG9uZyBvbiBhIDY0IGJpdCBtYWNoaW5lIGlzIGN1cnJlbnRseSBSRUFMTFkg QkFEIGZvcgo+ICAqIElQIGFkZHJlc3NlcyBpbiByZXZlcnNlLWVuZGlhbiAoaS5lLiBvbiBhIGxp dHRsZS1lbmRpYW4gbWFjaGluZSkuCj4gICogU28gdXNlIGEgdHJpdmlhbCBidXQgcmVsaWFibGUg aGFzaCBpbnN0ZWFkCj4gQEAgLTExMSwxMyArMTExLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGhh c2hfaXAoX19iZTMyIGlwKQo+ICAgICBpbnQgaGFzaCA9IChfX2ZvcmNlIHUzMilpcCBeICgoX19m b3JjZSB1MzIpaXA+PjE2KTsKPiAgICAgcmV0dXJuIChoYXNoIF4gKGhhc2g+PjgpKSAmIDB4ZmY7 Cj4gfQo+IC0jZW5kaWYKPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGhhc2hfaXA2KHN0cnVjdCBp bjZfYWRkciAqaXA2KQo+ICt7Cj4gKyAgICByZXR1cm4gKGhhc2hfaXAoaXA2LT5zNl9hZGRyMzJb MF0pIF4KPiArICAgICAgICBoYXNoX2lwKGlwNi0+czZfYWRkcjMyWzFdKSBeCj4gKyAgICAgICAg aGFzaF9pcChpcDYtPnM2X2FkZHIzMlsyXSkgXgo+ICsgICAgICAgIGhhc2hfaXAoaXA2LT5zNl9h ZGRyMzJbM10pKTsKPiArfQo+IHN0YXRpYyBpbnQgaXBfbWFwX21hdGNoKHN0cnVjdCBjYWNoZV9o ZWFkICpjb3JpZywgc3RydWN0IGNhY2hlX2hlYWQgKmNuZXcpCj4gewo+ICAgICBzdHJ1Y3QgaXBf bWFwICpvcmlnID0gY29udGFpbmVyX29mKGNvcmlnLCBzdHJ1Y3QgaXBfbWFwLCBoKTsKPiAgICAg c3RydWN0IGlwX21hcCAqbmV3ID0gY29udGFpbmVyX29mKGNuZXcsIHN0cnVjdCBpcF9tYXAsIGgp Owo+ICAgICByZXR1cm4gc3RyY21wKG9yaWctPm1fY2xhc3MsIG5ldy0+bV9jbGFzcykgPT0gMAo+ IC0gICAgICAgICYmIG9yaWctPm1fYWRkci5zX2FkZHIgPT0gbmV3LT5tX2FkZHIuc19hZGRyOwo+ ICsgICAgICAgICYmIGlwdjZfYWRkcl9lcXVhbCgmb3JpZy0+bV9hZGRyLCAmbmV3LT5tX2FkZHIp Owo+IH0KPiBzdGF0aWMgdm9pZCBpcF9tYXBfaW5pdChzdHJ1Y3QgY2FjaGVfaGVhZCAqY25ldywg c3RydWN0IGNhY2hlX2hlYWQgKmNpdGVtKQo+IHsKPiBAQCAtMTI1LDcgKzEzMiw3IEBAIHN0YXRp YyB2b2lkIGlwX21hcF9pbml0KHN0cnVjdCBjYWNoZV9oZWFkICpjbmV3LCBzdHJ1Y3QgCj4gY2Fj aGVfaGVhZCAqY2l0ZW0pCj4gICAgIHN0cnVjdCBpcF9tYXAgKml0ZW0gPSBjb250YWluZXJfb2Yo Y2l0ZW0sIHN0cnVjdCBpcF9tYXAsIGgpOwo+ICAgICBzdHJjcHkobmV3LT5tX2NsYXNzLCBpdGVt LT5tX2NsYXNzKTsKPiAtICAgIG5ldy0+bV9hZGRyLnNfYWRkciA9IGl0ZW0tPm1fYWRkci5zX2Fk ZHI7Cj4gKyAgICBpcHY2X2FkZHJfY29weSgmbmV3LT5tX2FkZHIsICZpdGVtLT5tX2FkZHIpOwo+ IH0KPiBzdGF0aWMgdm9pZCB1cGRhdGUoc3RydWN0IGNhY2hlX2hlYWQgKmNuZXcsIHN0cnVjdCBj YWNoZV9oZWFkICpjaXRlbSkKPiB7Cj4gQEAgLTE0OSwyMiArMTU2LDI0IEBAIHN0YXRpYyB2b2lk IGlwX21hcF9yZXF1ZXN0KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAo+ICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBjYWNoZV9oZWFkICpoLAo+ICAgICAgICAgICAgICAgICAgIGNoYXIgKipicHAs IGludCAqYmxlbikKPiB7Cj4gLSAgICBjaGFyIHRleHRfYWRkclsyMF07Cj4gKyAgICBjaGFyIHRl eHRfYWRkcls0MF07Cj4gICAgIHN0cnVjdCBpcF9tYXAgKmltID0gY29udGFpbmVyX29mKGgsIHN0 cnVjdCBpcF9tYXAsIGgpOwo+IC0gICAgX19iZTMyIGFkZHIgPSBpbS0+bV9hZGRyLnNfYWRkcjsK PiAtCj4gLSAgICBzbnByaW50Zih0ZXh0X2FkZHIsIDIwLCAiJXUuJXUuJXUuJXUiLAo+IC0gICAg ICAgICBudG9obChhZGRyKSA+PiAyNCAmIDB4ZmYsCj4gLSAgICAgICAgIG50b2hsKGFkZHIpID4+ IDE2ICYgMHhmZiwKPiAtICAgICAgICAgbnRvaGwoYWRkcikgPj4gIDggJiAweGZmLAo+IC0gICAg ICAgICBudG9obChhZGRyKSA+PiAgMCAmIDB4ZmYpOwo+ICsgICAgaWYgKGlwdjZfYWRkcl92NG1h cHBlZCgmKGltLT5tX2FkZHIpKSkgewo+ICsgICAgICAgIHNucHJpbnRmKHRleHRfYWRkciwgMjAs IE5JUFFVQURfRk1ULAo+ICsgICAgICAgICAgICAgICAgbnRvaGwoaW0tPm1fYWRkci5zNl9hZGRy MzJbM10pID4+IDI0ICYgMHhmZiwKPiArICAgICAgICAgICAgICAgIG50b2hsKGltLT5tX2FkZHIu czZfYWRkcjMyWzNdKSA+PiAxNiAmIDB4ZmYsCj4gKyAgICAgICAgICAgICAgICBudG9obChpbS0+ bV9hZGRyLnM2X2FkZHIzMlszXSkgPj4gIDggJiAweGZmLAo+ICsgICAgICAgICAgICAgICAgbnRv aGwoaW0tPm1fYWRkci5zNl9hZGRyMzJbM10pID4+ICAwICYgMHhmZik7Cj4gKyAgICB9IGVsc2Ug ewo+ICsgICAgICAgIHNucHJpbnRmKHRleHRfYWRkciwgNDAsIE5JUDZfRk1ULCBOSVA2KGltLT5t X2FkZHIpKTsKPiArICAgIH0KPiAgICAgcXdvcmRfYWRkKGJwcCwgYmxlbiwgaW0tPm1fY2xhc3Mp Owo+ICAgICBxd29yZF9hZGQoYnBwLCBibGVuLCB0ZXh0X2FkZHIpOwo+ICAgICAoKmJwcClbLTFd ID0gJ1xuJzsKPiB9Cj4gLXN0YXRpYyBzdHJ1Y3QgaXBfbWFwICppcF9tYXBfbG9va3VwKGNoYXIg KmNsYXNzLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKPiArc3RhdGljIHN0cnVjdCBpcF9tYXAgKmlw X21hcF9sb29rdXAoY2hhciAqY2xhc3MsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7Cj4gc3RhdGlj IGludCBpcF9tYXBfdXBkYXRlKHN0cnVjdCBpcF9tYXAgKmlwbSwgc3RydWN0IHVuaXhfZG9tYWlu ICp1ZG9tLCAKPiB0aW1lX3QgZXhwaXJ5KTsKPiBzdGF0aWMgaW50IGlwX21hcF9wYXJzZShzdHJ1 Y3QgY2FjaGVfZGV0YWlsICpjZCwKPiBAQCAtMTc1LDEwICsxODQsMTAgQEAgc3RhdGljIGludCBp cF9tYXBfcGFyc2Uoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsCj4gICAgICAqIGZvciBzY3JhdGNo OiAqLwo+ICAgICBjaGFyICpidWYgPSBtZXNnOwo+ICAgICBpbnQgbGVuOwo+IC0gICAgaW50IGIx LGIyLGIzLGI0Owo+ICsgICAgaW50IGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LCBiODsKPiAg ICAgY2hhciBjOwo+ICAgICBjaGFyIGNsYXNzWzhdOwo+IC0gICAgc3RydWN0IGluX2FkZHIgYWRk cjsKPiArICAgIHN0cnVjdCBpbjZfYWRkciBhZGRyNjsKPiAgICAgaW50IGVycjsKPiAgICAgc3Ry dWN0IGlwX21hcCAqaXBtcDsKPiBAQCAtMTk3LDcgKzIwNiwyMyBAQCBzdGF0aWMgaW50IGlwX21h cF9wYXJzZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKPiAgICAgbGVuID0gcXdvcmRfZ2V0KCZt ZXNnLCBidWYsIG1sZW4pOwo+ICAgICBpZiAobGVuIDw9IDApIHJldHVybiAtRUlOVkFMOwo+IC0g ICAgaWYgKHNzY2FuZihidWYsICIldS4ldS4ldS4ldSVjIiwgJmIxLCAmYjIsICZiMywgJmI0LCAm YykgIT0gNCkKPiArICAgIGlmIChzc2NhbmYoYnVmLCBOSVBRVUFEX0ZNVCAiJWMiLCAmYjEsICZi MiwgJmIzLCAmYjQsICZjKSA9PSA0KSB7Cj4gKyAgICAgICAgYWRkcjYuczZfYWRkcjMyWzBdID0g MDsKPiArICAgICAgICBhZGRyNi5zNl9hZGRyMzJbMV0gPSAwOwo+ICsgICAgICAgIGFkZHI2LnM2 X2FkZHIzMlsyXSA9IGh0b25sKDB4ZmZmZik7Cj4gKyAgICAgICAgYWRkcjYuczZfYWRkcjMyWzNd ID0KPiArICAgICAgICAgICAgaHRvbmwoKCgoKChiMTw8OCl8YjIpPDw4KXxiMyk8PDgpfGI0KTsK PiArICAgICAgIH0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgTklQNl9GTVQgIiVjIiwKPiArICAgICAg ICAgICAgJmIxLCAmYjIsICZiMywgJmI0LCAmYjUsICZiNiwgJmI3LCAmYjgsICZjKSA9PSA4KSB7 Cj4gKyAgICAgICAgYWRkcjYuczZfYWRkcjE2WzBdID0gaHRvbnMoYjEpOwo+ICsgICAgICAgIGFk ZHI2LnM2X2FkZHIxNlsxXSA9IGh0b25zKGIyKTsKPiArICAgICAgICBhZGRyNi5zNl9hZGRyMTZb Ml0gPSBodG9ucyhiMyk7Cj4gKyAgICAgICAgYWRkcjYuczZfYWRkcjE2WzNdID0gaHRvbnMoYjQp Owo+ICsgICAgICAgIGFkZHI2LnM2X2FkZHIxNls0XSA9IGh0b25zKGI1KTsKPiArICAgICAgICBh ZGRyNi5zNl9hZGRyMTZbNV0gPSBodG9ucyhiNik7Cj4gKyAgICAgICAgYWRkcjYuczZfYWRkcjE2 WzZdID0gaHRvbnMoYjcpOwo+ICsgICAgICAgIGFkZHI2LnM2X2FkZHIxNls3XSA9IGh0b25zKGI4 KTsKPiArICAgICAgIH0gZWxzZQo+ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gICAgIGV4cGly eSA9IGdldF9leHBpcnkoJm1lc2cpOwo+IEBAIC0yMTUsMTAgKzI0MCw3IEBAIHN0YXRpYyBpbnQg aXBfbWFwX3BhcnNlKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAo+ICAgICB9IGVsc2UKPiAgICAg ICAgIGRvbSA9IE5VTEw7Cj4gLSAgICBhZGRyLnNfYWRkciA9Cj4gLSAgICAgICAgaHRvbmwoKCgo KChiMTw8OCl8YjIpPDw4KXxiMyk8PDgpfGI0KTsKPiAtCj4gLSAgICBpcG1wID0gaXBfbWFwX2xv b2t1cChjbGFzcyxhZGRyKTsKPiArICAgIGlwbXAgPSBpcF9tYXBfbG9va3VwKGNsYXNzLCAmYWRk cjYpOwo+ICAgICBpZiAoaXBtcCkgewo+ICAgICAgICAgZXJyID0gaXBfbWFwX3VwZGF0ZShpcG1w LAo+ICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGRvbSwgc3RydWN0IHVuaXhfZG9tYWlu LCBoKSwKPiBAQCAtMjM4LDcgKzI2MCw3IEBAIHN0YXRpYyBpbnQgaXBfbWFwX3Nob3coc3RydWN0 IHNlcV9maWxlICptLAo+ICAgICAgICAgICAgICAgIHN0cnVjdCBjYWNoZV9oZWFkICpoKQo+IHsK PiAgICAgc3RydWN0IGlwX21hcCAqaW07Cj4gLSAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyOwo+ICsg ICAgc3RydWN0IGluNl9hZGRyIGFkZHI2Owo+ICAgICBjaGFyICpkb20gPSAiLW5vLWRvbWFpbi0i Owo+ICAgICBpZiAoaCA9PSBOVUxMKSB7Cj4gQEAgLTI0NywyMCArMjY5LDI0IEBAIHN0YXRpYyBp bnQgaXBfbWFwX3Nob3coc3RydWN0IHNlcV9maWxlICptLAo+ICAgICB9Cj4gICAgIGltID0gY29u dGFpbmVyX29mKGgsIHN0cnVjdCBpcF9tYXAsIGgpOwo+ICAgICAvKiBjbGFzcyBhZGRyIGRvbWFp biAqLwo+IC0gICAgYWRkciA9IGltLT5tX2FkZHI7Cj4gKyAgICBpcHY2X2FkZHJfY29weSgmYWRk cjYsICZpbS0+bV9hZGRyKTsKPiAgICAgaWYgKHRlc3RfYml0KENBQ0hFX1ZBTElELCAmaC0+Zmxh Z3MpICYmCj4gICAgICAgICAhdGVzdF9iaXQoQ0FDSEVfTkVHQVRJVkUsICZoLT5mbGFncykpCj4g ICAgICAgICBkb20gPSBpbS0+bV9jbGllbnQtPmgubmFtZTsKPiAtICAgIHNlcV9wcmludGYobSwg IiVzICVkLiVkLiVkLiVkICVzXG4iLAo+IC0gICAgICAgICAgIGltLT5tX2NsYXNzLAo+IC0gICAg ICAgICAgIG50b2hsKGFkZHIuc19hZGRyKSA+PiAyNCAmIDB4ZmYsCj4gLSAgICAgICAgICAgbnRv aGwoYWRkci5zX2FkZHIpID4+IDE2ICYgMHhmZiwKPiAtICAgICAgICAgICBudG9obChhZGRyLnNf YWRkcikgPj4gIDggJiAweGZmLAo+IC0gICAgICAgICAgIG50b2hsKGFkZHIuc19hZGRyKSA+PiAg MCAmIDB4ZmYsCj4gLSAgICAgICAgICAgZG9tCj4gLSAgICAgICAgICAgKTsKPiArICAgIGlmIChp cHY2X2FkZHJfdjRtYXBwZWQoJmFkZHI2KSkgewo+ICsgICAgICAgIHNlcV9wcmludGYobSwgIiVz IiBOSVBRVUFEX0ZNVCAiJXNcbiIsCj4gKyAgICAgICAgICAgIGltLT5tX2NsYXNzLAo+ICsgICAg ICAgICAgICBudG9obChhZGRyNi5zNl9hZGRyMzJbM10pID4+IDI0ICYgMHhmZiwKPiArICAgICAg ICAgICAgbnRvaGwoYWRkcjYuczZfYWRkcjMyWzNdKSA+PiAxNiAmIDB4ZmYsCj4gKyAgICAgICAg ICAgIG50b2hsKGFkZHI2LnM2X2FkZHIzMlszXSkgPj4gIDggJiAweGZmLAo+ICsgICAgICAgICAg ICBudG9obChhZGRyNi5zNl9hZGRyMzJbM10pID4+ICAwICYgMHhmZiwKPiArICAgICAgICAgICAg ZG9tKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgc2VxX3ByaW50ZihtLCAiJXMiIE5JUDZf Rk1UICIlc1xuIiwKPiArICAgICAgICAgICAgaW0tPm1fY2xhc3MsIE5JUDYoYWRkcjYpLCBkb20p Owo+ICsgICAgfQo+ICAgICByZXR1cm4gMDsKPiB9Cj4gQEAgLTI4MCwxNiArMzA2LDE2IEBAIHN0 cnVjdCBjYWNoZV9kZXRhaWwgaXBfbWFwX2NhY2hlID0gewo+ICAgICAuYWxsb2MgICAgICAgID0g aXBfbWFwX2FsbG9jLAo+IH07Cj4gLXN0YXRpYyBzdHJ1Y3QgaXBfbWFwICppcF9tYXBfbG9va3Vw KGNoYXIgKmNsYXNzLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKQo+ICtzdGF0aWMgc3RydWN0IGlwX21h cCAqaXBfbWFwX2xvb2t1cChjaGFyICpjbGFzcywgc3RydWN0IGluNl9hZGRyICphZGRyKQo+IHsK PiAgICAgc3RydWN0IGlwX21hcCBpcDsKPiAgICAgc3RydWN0IGNhY2hlX2hlYWQgKmNoOwo+ICAg ICBzdHJjcHkoaXAubV9jbGFzcywgY2xhc3MpOwo+IC0gICAgaXAubV9hZGRyID0gYWRkcjsKPiAr ICAgIGlwdjZfYWRkcl9jb3B5KCZpcC5tX2FkZHIsIGFkZHIpOwo+ICAgICBjaCA9IHN1bnJwY19j YWNoZV9sb29rdXAoJmlwX21hcF9jYWNoZSwgJmlwLmgsCj4gICAgICAgICAgICAgICAgICBoYXNo X3N0cihjbGFzcywgSVBfSEFTSEJJVFMpIF4KPiAtICAgICAgICAgICAgICAgICBoYXNoX2lwKGFk ZHIuc19hZGRyKSk7Cj4gKyAgICAgICAgICAgICAgICAgaGFzaF9pcDYoYWRkcikpOwo+ICAgICBp ZiAoY2gpCj4gICAgICAgICByZXR1cm4gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgaXBfbWFwLCBo KTsKPiBAQCAtMzE4LDE0ICszNDQsMTQgQEAgc3RhdGljIGludCBpcF9tYXBfdXBkYXRlKHN0cnVj dCBpcF9tYXAgKmlwbSwgc3RydWN0IAo+IHVuaXhfZG9tYWluICp1ZG9tLCB0aW1lX3QgZXgKPiAg ICAgY2ggPSBzdW5ycGNfY2FjaGVfdXBkYXRlKCZpcF9tYXBfY2FjaGUsCj4gICAgICAgICAgICAg ICAgICAmaXAuaCwgJmlwbS0+aCwKPiAgICAgICAgICAgICAgICAgIGhhc2hfc3RyKGlwbS0+bV9j bGFzcywgSVBfSEFTSEJJVFMpIF4KPiAtICAgICAgICAgICAgICAgICBoYXNoX2lwKGlwbS0+bV9h ZGRyLnNfYWRkcikpOwo+ICsgICAgICAgICAgICAgICAgIGhhc2hfaXA2KCZpcG0tPm1fYWRkcikp Owo+ICAgICBpZiAoIWNoKQo+ICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gICAgIGNhY2hlX3B1 dChjaCwgJmlwX21hcF9jYWNoZSk7Cj4gICAgIHJldHVybiAwOwo+IH0KPiAtaW50IGF1dGhfdW5p eF9hZGRfYWRkcihzdHJ1Y3QgaW5fYWRkciBhZGRyLCBzdHJ1Y3QgYXV0aF9kb21haW4gKmRvbSkK PiAraW50IGF1dGhfdW5peF9hZGRfYWRkcihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBh dXRoX2RvbWFpbiAqZG9tKQo+IHsKPiAgICAgc3RydWN0IHVuaXhfZG9tYWluICp1ZG9tOwo+ICAg ICBzdHJ1Y3QgaXBfbWFwICppcG1wOwo+IEBAIC0zNTIsNyArMzc4LDcgQEAgaW50IGF1dGhfdW5p eF9mb3JnZXRfb2xkKHN0cnVjdCBhdXRoX2RvbWFpbiAqZG9tKQo+ICAgICByZXR1cm4gMDsKPiB9 Cj4gLXN0cnVjdCBhdXRoX2RvbWFpbiAqYXV0aF91bml4X2xvb2t1cChzdHJ1Y3QgaW5fYWRkciBh ZGRyKQo+ICtzdHJ1Y3QgYXV0aF9kb21haW4gKmF1dGhfdW5peF9sb29rdXAoc3RydWN0IGluNl9h ZGRyICphZGRyKQo+IHsKPiAgICAgc3RydWN0IGlwX21hcCAqaXBtOwo+ICAgICBzdHJ1Y3QgYXV0 aF9kb21haW4gKnJ2Owo+IEBAIC02NDEsOSArNjY3LDIzIEBAIHN0YXRpYyBpbnQgdW5peF9naWRf ZmluZCh1aWRfdCB1aWQsIHN0cnVjdCBncm91cF9pbmZvIAo+ICoqZ2lwLAo+IGludAo+IHN2Y2F1 dGhfdW5peF9zZXRfY2xpZW50KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCj4gewo+IC0gICAgc3Ry dWN0IHNvY2thZGRyX2luICpzaW4gPSBzdmNfYWRkcl9pbihycXN0cCk7Cj4gKyAgICBzdHJ1Y3Qg c29ja2FkZHJfaW4gKnNpbjsKPiArICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsIHNpbjZf c3RvcmFnZTsKPiAgICAgc3RydWN0IGlwX21hcCAqaXBtOwo+ICsgICAgc3dpdGNoIChycXN0cC0+ cnFfYWRkci5zc19mYW1pbHkpIHsKPiArICAgIGNhc2UgQUZfSU5FVDoKPiArICAgICAgICBzaW4g PSBzdmNfYWRkcl9pbihycXN0cCk7Cj4gKyAgICAgICAgc2luNiA9ICZzaW42X3N0b3JhZ2U7Cj4g KyAgICAgICAgaXB2Nl9hZGRyX3NldF92NG1hcHBlZChzaW4tPnNpbl9hZGRyLnNfYWRkciwgJnNp bjYtPnNpbjZfYWRkcik7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFGX0lORVQ2Ogo+ ICsgICAgICAgIHNpbjYgPSBzdmNfYWRkcl9pbjYocnFzdHApOwo+ICsgICAgICAgIGJyZWFrOwo+ ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBCVUcoKTsKPiArICAgIH0KPiArCj4gICAgIHJxc3Rw LT5ycV9jbGllbnQgPSBOVUxMOwo+ICAgICBpZiAocnFzdHAtPnJxX3Byb2MgPT0gMCkKPiAgICAg ICAgIHJldHVybiBTVkNfT0s7Cj4gQEAgLTY1MSw3ICs2OTEsNyBAQCBzdmNhdXRoX3VuaXhfc2V0 X2NsaWVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQo+ICAgICBpcG0gPSBpcF9tYXBfY2FjaGVk X2dldChycXN0cCk7Cj4gICAgIGlmIChpcG0gPT0gTlVMTCkKPiAgICAgICAgIGlwbSA9IGlwX21h cF9sb29rdXAocnFzdHAtPnJxX3NlcnZlci0+c3ZfcHJvZ3JhbS0+cGdfY2xhc3MsCj4gLSAgICAg ICAgICAgICAgICAgICAgc2luLT5zaW5fYWRkcik7Cj4gKyAgICAgICAgICAgICAgICAgICAgJnNp bjYtPnNpbjZfYWRkcik7Cj4gICAgIGlmIChpcG0gPT0gTlVMTCkKPiAgICAgICAgIHJldHVybiBT VkNfREVOSUVEOwo+Cj4KPiAtLSAKPgo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Cj4gICAgICAgQXVyZWxpZW4gQ2hhcmJvbgo+ICAgICAgIExpbnV4IE5GU3Y0IHRlYW0KPiAgICAg ICAgICAgQnVsbCBTQVMKPiAgICAgRWNoaXJvbGxlcyAtIEZyYW5jZQo+IGh0dHA6Ly9uZnN2NC5i dWxsb3BlbnNvdXJjZS5vcmcvCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPgoK PiBkaWZmIC0tZ2l0IGEvZnMvbmZzZC9leHBvcnQuYyBiL2ZzL25mc2QvZXhwb3J0LmMKPiBpbmRl eCA2NmQwYWViLi5jNDdiYTc3IDEwMDY0NAo+IC0tLSBhL2ZzL25mc2QvZXhwb3J0LmMKPiArKysg Yi9mcy9uZnNkL2V4cG9ydC5jCj4gQEAgLTM1LDYgKzM1LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4 L2xvY2tkL2JpbmQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgo+ICAj aW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4KPiArI2luY2x1ZGUgPG5ldC9pcHY2Lmg+ Cj4gIAo+ICAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkJTkZTRERCR19FWFBPUlQKPiAgCj4gQEAg LTE1NTYsNiArMTU1Nyw3IEBAIGV4cF9hZGRjbGllbnQoc3RydWN0IG5mc2N0bF9jbGllbnQgKm5j cCkKPiAgewo+ICAJc3RydWN0IGF1dGhfZG9tYWluCSpkb207Cj4gIAlpbnQJCQlpLCBlcnI7Cj4g KwlzdHJ1Y3QgaW42X2FkZHIJCWluNjsKPiAgCj4gIAkvKiBGaXJzdCwgY29uc2lzdGVuY3kgY2hl Y2suICovCj4gIAllcnIgPSAtRUlOVkFMOwo+IEBAIC0xNTc0LDkgKzE1NzYsMTAgQEAgZXhwX2Fk ZGNsaWVudChzdHJ1Y3QgbmZzY3RsX2NsaWVudCAqbmNwKQo+ICAJCWdvdG8gb3V0X3VubG9jazsK PiAgCj4gIAkvKiBJbnNlcnQgY2xpZW50IGludG8gaGFzaHRhYmxlLiAqLwo+IC0JZm9yIChpID0g MDsgaSA8IG5jcC0+Y2xfbmFkZHI7IGkrKykKPiAtCQlhdXRoX3VuaXhfYWRkX2FkZHIobmNwLT5j bF9hZGRybGlzdFtpXSwgZG9tKTsKPiAtCj4gKwlmb3IgKGkgPSAwOyBpIDwgbmNwLT5jbF9uYWRk cjsgaSsrKSB7Cj4gKwkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChuY3AtPmNsX2FkZHJsaXN0W2ld LnNfYWRkciwgJmluNik7Cj4gKwkJYXV0aF91bml4X2FkZF9hZGRyKCZpbjYsIGRvbSk7Cj4gKwl9 Cj4gIAlhdXRoX3VuaXhfZm9yZ2V0X29sZChkb20pOwo+ICAJYXV0aF9kb21haW5fcHV0KGRvbSk7 Cj4gIAo+IGRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwo+ IGluZGV4IDc3ZGM5ODkuLjVjYjVmMGQgMTAwNjQ0Cj4gLS0tIGEvZnMvbmZzZC9uZnNjdGwuYwo+ ICsrKyBiL2ZzL25mc2QvbmZzY3RsLmMKPiBAQCAtMzcsNiArMzcsNyBAQAo+ICAjaW5jbHVkZSA8 bGludXgvbmZzZC9zeXNjYWxsLmg+Cj4gIAo+ICAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KPiAr I2luY2x1ZGUgPG5ldC9pcHY2Lmg+Cj4gIAo+ICAvKgo+ICAgKglXZSBoYXZlIGEgc2luZ2xlIGRp cmVjdG9yeSB3aXRoIDkgbm9kZXMgaW4gaXQuCj4gQEAgLTIxOSwyNCArMjIwLDM3IEBAIHN0YXRp YyBzc2l6ZV90IHdyaXRlX2dldGZzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVf dCBzaXplKQo+ICB7Cj4gIAlzdHJ1Y3QgbmZzY3RsX2ZzcGFybSAqZGF0YTsKPiAgCXN0cnVjdCBz b2NrYWRkcl9pbiAqc2luOwo+ICsJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKPiAgCXN0cnVj dCBhdXRoX2RvbWFpbiAqY2xwOwo+ICAJaW50IGVyciA9IDA7Cj4gIAlzdHJ1Y3Qga25mc2RfZmgg KnJlczsKPiArCXN0cnVjdCBpbjZfYWRkciBpbjY7Cj4gIAo+ICAJaWYgKHNpemUgPCBzaXplb2Yo KmRhdGEpKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAJZGF0YSA9IChzdHJ1Y3QgbmZzY3RsX2Zz cGFybSopYnVmOwo+ICAJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKPiAtCWlmIChkYXRhLT5nZF9h ZGRyLnNhX2ZhbWlseSAhPSBBRl9JTkVUKQo+ICsJc3dpdGNoIChkYXRhLT5nZF9hZGRyLnNhX2Zh bWlseSkgewo+ICsJY2FzZSBBRl9JTkVUOgo+ICsJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4g KikmZGF0YS0+Z2RfYWRkcjsKPiArCQlpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNpbi0+c2luX2Fk ZHIuc19hZGRyLCAmaW42KTsKPiArCQlicmVhazsKPiArCWNhc2UgQUZfSU5FVDY6Cj4gKwkJc2lu NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmRhdGEtPmdkX2FkZHI7Cj4gKwkJaXB2Nl9hZGRy X2NvcHkoJmluNiwgJnNpbjYtPnNpbjZfYWRkcik7IAo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoK PiAgCQlnb3RvIG91dDsKPiAtCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmZGF0YS0+Z2Rf YWRkcjsKPiArCX0KPiArCj4gIAlpZiAoZGF0YS0+Z2RfbWF4bGVuID4gTkZTM19GSFNJWkUpCj4g IAkJZGF0YS0+Z2RfbWF4bGVuID0gTkZTM19GSFNJWkU7Cj4gIAo+ICAJcmVzID0gKHN0cnVjdCBr bmZzZF9maCopYnVmOwo+ICAKPiAgCWV4cF9yZWFkbG9jaygpOwo+IC0JaWYgKCEoY2xwID0gYXV0 aF91bml4X2xvb2t1cChzaW4tPnNpbl9hZGRyKSkpCj4gKwo+ICsJaWYgKCEoY2xwID0gYXV0aF91 bml4X2xvb2t1cCgmaW42KSkpCj4gIAkJZXJyID0gLUVQRVJNOwo+ICAJZWxzZSB7Cj4gIAkJZXJy ID0gZXhwX3Jvb3RmaChjbHAsIGRhdGEtPmdkX3BhdGgsIHJlcywgZGF0YS0+Z2RfbWF4bGVuKTsK PiBAQCAtMjUzLDI1ICsyNjcsNDEgQEAgc3RhdGljIHNzaXplX3Qgd3JpdGVfZ2V0ZmQoc3RydWN0 IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCj4gIHsKPiAgCXN0cnVjdCBuZnNj dGxfZmRwYXJtICpkYXRhOwo+ICAJc3RydWN0IHNvY2thZGRyX2luICpzaW47Cj4gKwlzdHJ1Y3Qg c29ja2FkZHJfaW42ICpzaW42Owo+ICAJc3RydWN0IGF1dGhfZG9tYWluICpjbHA7Cj4gIAlpbnQg ZXJyID0gMDsKPiAgCXN0cnVjdCBrbmZzZF9maCBmaDsKPiAgCWNoYXIgKnJlczsKPiArCXN0cnVj dCBpbjZfYWRkciBpbjY7Cj4gIAo+ICAJaWYgKHNpemUgPCBzaXplb2YoKmRhdGEpKQo+ICAJCXJl dHVybiAtRUlOVkFMOwo+ICAJZGF0YSA9IChzdHJ1Y3QgbmZzY3RsX2ZkcGFybSopYnVmOwo+ICAJ ZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKPiAtCWlmIChkYXRhLT5nZF9hZGRyLnNhX2ZhbWlseSAh PSBBRl9JTkVUKQo+ICsJaWYgKGRhdGEtPmdkX2FkZHIuc2FfZmFtaWx5ICE9IEFGX0lORVQgJiYK PiArCSAgICBkYXRhLT5nZF9hZGRyLnNhX2ZhbWlseSAhPSBBRl9JTkVUNikKPiAgCQlnb3RvIG91 dDsKPiAgCWVyciA9IC1FSU5WQUw7Cj4gIAlpZiAoZGF0YS0+Z2RfdmVyc2lvbiA8IDIgfHwgZGF0 YS0+Z2RfdmVyc2lvbiA+IE5GU1NWQ19NQVhWRVJTKQo+ICAJCWdvdG8gb3V0Owo+ICAKPiAgCXJl cyA9IGJ1ZjsKPiAtCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmZGF0YS0+Z2RfYWRkcjsK PiAgCWV4cF9yZWFkbG9jaygpOwo+IC0JaWYgKCEoY2xwID0gYXV0aF91bml4X2xvb2t1cChzaW4t PnNpbl9hZGRyKSkpCj4gKwo+ICsJc3dpdGNoIChkYXRhLT5nZF9hZGRyLnNhX2ZhbWlseSkgewo+ ICsJY2FzZSBBRl9JTkVUOgo+ICsJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmZGF0YS0+ Z2RfYWRkcjsKPiArCQlpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNpbi0+c2luX2FkZHIuc19hZGRy LCAmaW42KTsKPiArCQlicmVhazsKPiArCWNhc2UgQUZfSU5FVDY6Cj4gKwkJc2luNiA9IChzdHJ1 Y3Qgc29ja2FkZHJfaW42ICopJmRhdGEtPmdkX2FkZHI7Cj4gKwkJaXB2Nl9hZGRyX2NvcHkoJmlu NiwgJnNpbjYtPnNpbjZfYWRkcik7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWdvdG8g b3V0Owo+ICsJfQo+ICsKPiArCWlmICghKGNscCA9IGF1dGhfdW5peF9sb29rdXAoJmluNikpKQo+ ICAJCWVyciA9IC1FUEVSTTsKPiAgCWVsc2Ugewo+ICAJCWVyciA9IGV4cF9yb290ZmgoY2xwLCBk YXRhLT5nZF9wYXRoLCAmZmgsIE5GU19GSFNJWkUpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xp bnV4L3N1bnJwYy9zdmNhdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKPiBp bmRleCAyMmUxZWY4Li42NGVjYjkzIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBj L3N2Y2F1dGguaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGguaAo+IEBAIC0x NSw2ICsxNSw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KPiAgI2lu Y2x1ZGUgPGxpbnV4L3N1bnJwYy9jYWNoZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgo+ ICsjaW5jbHVkZSA8bmV0L2lwdjYuaD4KPiAgCj4gICNkZWZpbmUgU1ZDX0NSRURfTkdST1VQUwkz Mgo+ICBzdHJ1Y3Qgc3ZjX2NyZWQgewo+IEBAIC0xMjAsMTAgKzEyMSwxMCBAQCBleHRlcm4gdm9p ZAlzdmNfYXV0aF91bnJlZ2lzdGVyKHJwY19hdXRoZmxhdm9yX3QgZmxhdm9yKTsKPiAgCj4gIGV4 dGVybiBzdHJ1Y3QgYXV0aF9kb21haW4gKnVuaXhfZG9tYWluX2ZpbmQoY2hhciAqbmFtZSk7Cj4g IGV4dGVybiB2b2lkIGF1dGhfZG9tYWluX3B1dChzdHJ1Y3QgYXV0aF9kb21haW4gKml0ZW0pOwo+ IC1leHRlcm4gaW50IGF1dGhfdW5peF9hZGRfYWRkcihzdHJ1Y3QgaW5fYWRkciBhZGRyLCBzdHJ1 Y3QgYXV0aF9kb21haW4gKmRvbSk7Cj4gK2V4dGVybiBpbnQgYXV0aF91bml4X2FkZF9hZGRyKHN0 cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IGF1dGhfZG9tYWluICpkb20pOwo+ICBleHRlcm4g c3RydWN0IGF1dGhfZG9tYWluICphdXRoX2RvbWFpbl9sb29rdXAoY2hhciAqbmFtZSwgc3RydWN0 IGF1dGhfZG9tYWluICpuZXcpOwo+ICBleHRlcm4gc3RydWN0IGF1dGhfZG9tYWluICphdXRoX2Rv bWFpbl9maW5kKGNoYXIgKm5hbWUpOwo+IC1leHRlcm4gc3RydWN0IGF1dGhfZG9tYWluICphdXRo X3VuaXhfbG9va3VwKHN0cnVjdCBpbl9hZGRyIGFkZHIpOwo+ICtleHRlcm4gc3RydWN0IGF1dGhf ZG9tYWluICphdXRoX3VuaXhfbG9va3VwKHN0cnVjdCBpbjZfYWRkciAqYWRkcik7Cj4gIGV4dGVy biBpbnQgYXV0aF91bml4X2ZvcmdldF9vbGQoc3RydWN0IGF1dGhfZG9tYWluICpkb20pOwo+ICBl eHRlcm4gdm9pZCBzdmNhdXRoX3VuaXhfcHVyZ2Uodm9pZCk7Cj4gIGV4dGVybiB2b2lkIHN2Y2F1 dGhfdW5peF9pbmZvX3JlbGVhc2Uodm9pZCAqKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQv aXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCj4gaW5kZXggYWUzMjhiNi4uMzY2ZmRjYSAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKPiArKysgYi9pbmNsdWRlL25ldC9pcHY2LmgK PiBAQCAtMTYsNiArMTYsNyBAQAo+ICAjZGVmaW5lIF9ORVRfSVBWNl9ICj4gIAo+ICAjaW5jbHVk ZSA8bGludXgvaXB2Ni5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW4uaD4KPiAgI2luY2x1ZGUgPGxp bnV4L2hhcmRpcnEuaD4KPiAgI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPgo+ICAjaW5jbHVkZSA8 bmV0L25kaXNjLmg+Cj4gQEAgLTQwMCw2ICs0MDEsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgaXB2 Nl9hZGRyX3Y0bWFwcGVkKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSkKPiAgCQkgYS0+czZfYWRk cjMyWzJdID09IGh0b25sKDB4MDAwMGZmZmYpKTsKPiAgfQo+ICAKPiArc3RhdGljIGlubGluZSB2 b2lkIGlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoY29uc3QgX19iZTMyIGFkZHIsCj4gKwkJCQkJICBz dHJ1Y3QgaW42X2FkZHIgKnY0bWFwcGVkKQo+ICt7Cj4gKwlpcHY2X2FkZHJfc2V0KHY0bWFwcGVk LAo+ICsJCSAgICAgIDAsIDAsCj4gKwkJICAgICAgX19jb25zdGFudF9odG9ubCgweDAwMDBGRkZG KSwKPiArCQkgICAgICBhZGRyKTsKPiArfQo+ICsKPiAgLyoKPiAgICogZmluZCB0aGUgZmlyc3Qg ZGlmZmVyZW50IGJpdCBiZXR3ZWVuIHR3byBhZGRyZXNzZXMKPiAgICogbGVuZ3RoIG9mIGFkZHJl c3MgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyYml0cwo+IGRpZmYgLS1naXQgYS9uZXQvc3VucnBj L3N2Y2F1dGhfdW5peC5jIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwo+IGluZGV4IDQxMTQ3 OTQuLmE0MGQ3NjkgMTAwNjQ0Cj4gLS0tIGEvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwo+ICsr KyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKPiBAQCAtMTEsNiArMTEsNyBAQAo+ICAjaW5j bHVkZSA8bGludXgvaGFzaC5oPgo+ICAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cj4gICNpbmNs dWRlIDxuZXQvc29jay5oPgo+ICsjaW5jbHVkZSA8bmV0L2lwdjYuaD4KPiAgCj4gICNkZWZpbmUg UlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICj4gIAo+IEBAIC04NCw3ICs4NSw3IEBAIHN0YXRp YyB2b2lkIHN2Y2F1dGhfdW5peF9kb21haW5fcmVsZWFzZShzdHJ1Y3QgYXV0aF9kb21haW4gKmRv bSkKPiAgc3RydWN0IGlwX21hcCB7Cj4gIAlzdHJ1Y3QgY2FjaGVfaGVhZAloOwo+ICAJY2hhcgkJ CW1fY2xhc3NbOF07IC8qIGUuZy4gIm5mc2QiICovCj4gLQlzdHJ1Y3QgaW5fYWRkcgkJbV9hZGRy Owo+ICsJc3RydWN0IGluNl9hZGRyCQltX2FkZHI7Cj4gIAlzdHJ1Y3QgdW5peF9kb21haW4JKm1f Y2xpZW50Owo+ICAJaW50CQkJbV9hZGRfY2hhbmdlOwo+ICB9Owo+IEBAIC0xMDEsNyArMTAyLDYg QEAgc3RhdGljIHZvaWQgaXBfbWFwX3B1dChzdHJ1Y3Qga3JlZiAqa3JlZikKPiAgCWtmcmVlKGlt KTsKPiAgfQo+ICAKPiAtI2lmIElQX0hBU0hCSVRTID09IDgKPiAgLyogaGFzaF9sb25nIG9uIGEg NjQgYml0IG1hY2hpbmUgaXMgY3VycmVudGx5IFJFQUxMWSBCQUQgZm9yCj4gICAqIElQIGFkZHJl c3NlcyBpbiByZXZlcnNlLWVuZGlhbiAoaS5lLiBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZSku Cj4gICAqIFNvIHVzZSBhIHRyaXZpYWwgYnV0IHJlbGlhYmxlIGhhc2ggaW5zdGVhZAo+IEBAIC0x MTEsMTMgKzExMSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCBoYXNoX2lwKF9fYmUzMiBpcCkKPiAg CWludCBoYXNoID0gKF9fZm9yY2UgdTMyKWlwIF4gKChfX2ZvcmNlIHUzMilpcD4+MTYpOwo+ICAJ cmV0dXJuIChoYXNoIF4gKGhhc2g+PjgpKSAmIDB4ZmY7Cj4gIH0KPiAtI2VuZGlmCj4gKwo+ICtz dGF0aWMgaW5saW5lIGludCBoYXNoX2lwNihzdHJ1Y3QgaW42X2FkZHIgKmlwNikKPiArewo+ICsJ cmV0dXJuIChoYXNoX2lwKGlwNi0+czZfYWRkcjMyWzBdKSBeCj4gKwkJaGFzaF9pcChpcDYtPnM2 X2FkZHIzMlsxXSkgXgo+ICsJCWhhc2hfaXAoaXA2LT5zNl9hZGRyMzJbMl0pIF4KPiArCQloYXNo X2lwKGlwNi0+czZfYWRkcjMyWzNdKSk7Cj4gK30KPiAgc3RhdGljIGludCBpcF9tYXBfbWF0Y2go c3RydWN0IGNhY2hlX2hlYWQgKmNvcmlnLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqY25ldykKPiAgewo+ ICAJc3RydWN0IGlwX21hcCAqb3JpZyA9IGNvbnRhaW5lcl9vZihjb3JpZywgc3RydWN0IGlwX21h cCwgaCk7Cj4gIAlzdHJ1Y3QgaXBfbWFwICpuZXcgPSBjb250YWluZXJfb2YoY25ldywgc3RydWN0 IGlwX21hcCwgaCk7Cj4gIAlyZXR1cm4gc3RyY21wKG9yaWctPm1fY2xhc3MsIG5ldy0+bV9jbGFz cykgPT0gMAo+IC0JCSYmIG9yaWctPm1fYWRkci5zX2FkZHIgPT0gbmV3LT5tX2FkZHIuc19hZGRy Owo+ICsJCSYmIGlwdjZfYWRkcl9lcXVhbCgmb3JpZy0+bV9hZGRyLCAmbmV3LT5tX2FkZHIpOwo+ ICB9Cj4gIHN0YXRpYyB2b2lkIGlwX21hcF9pbml0KHN0cnVjdCBjYWNoZV9oZWFkICpjbmV3LCBz dHJ1Y3QgY2FjaGVfaGVhZCAqY2l0ZW0pCj4gIHsKPiBAQCAtMTI1LDcgKzEzMiw3IEBAIHN0YXRp YyB2b2lkIGlwX21hcF9pbml0KHN0cnVjdCBjYWNoZV9oZWFkICpjbmV3LCBzdHJ1Y3QgY2FjaGVf aGVhZCAqY2l0ZW0pCj4gIAlzdHJ1Y3QgaXBfbWFwICppdGVtID0gY29udGFpbmVyX29mKGNpdGVt LCBzdHJ1Y3QgaXBfbWFwLCBoKTsKPiAgCj4gIAlzdHJjcHkobmV3LT5tX2NsYXNzLCBpdGVtLT5t X2NsYXNzKTsKPiAtCW5ldy0+bV9hZGRyLnNfYWRkciA9IGl0ZW0tPm1fYWRkci5zX2FkZHI7Cj4g KwlpcHY2X2FkZHJfY29weSgmbmV3LT5tX2FkZHIsICZpdGVtLT5tX2FkZHIpOwo+ICB9Cj4gIHN0 YXRpYyB2b2lkIHVwZGF0ZShzdHJ1Y3QgY2FjaGVfaGVhZCAqY25ldywgc3RydWN0IGNhY2hlX2hl YWQgKmNpdGVtKQo+ICB7Cj4gQEAgLTE0OSwyMiArMTU2LDI0IEBAIHN0YXRpYyB2b2lkIGlwX21h cF9yZXF1ZXN0KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAo+ICAJCQkJICBzdHJ1Y3QgY2FjaGVf aGVhZCAqaCwKPiAgCQkJCSAgY2hhciAqKmJwcCwgaW50ICpibGVuKQo+ICB7Cj4gLQljaGFyIHRl eHRfYWRkclsyMF07Cj4gKwljaGFyIHRleHRfYWRkcls0MF07Cj4gIAlzdHJ1Y3QgaXBfbWFwICpp bSA9IGNvbnRhaW5lcl9vZihoLCBzdHJ1Y3QgaXBfbWFwLCBoKTsKPiAtCV9fYmUzMiBhZGRyID0g aW0tPm1fYWRkci5zX2FkZHI7Cj4gLQo+IC0Jc25wcmludGYodGV4dF9hZGRyLCAyMCwgIiV1LiV1 LiV1LiV1IiwKPiAtCQkgbnRvaGwoYWRkcikgPj4gMjQgJiAweGZmLAo+IC0JCSBudG9obChhZGRy KSA+PiAxNiAmIDB4ZmYsCj4gLQkJIG50b2hsKGFkZHIpID4+ICA4ICYgMHhmZiwKPiAtCQkgbnRv aGwoYWRkcikgPj4gIDAgJiAweGZmKTsKPiAgCj4gKwlpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKCYo aW0tPm1fYWRkcikpKSB7Cj4gKwkJc25wcmludGYodGV4dF9hZGRyLCAyMCwgTklQUVVBRF9GTVQs Cj4gKwkJCQludG9obChpbS0+bV9hZGRyLnM2X2FkZHIzMlszXSkgPj4gMjQgJiAweGZmLAo+ICsJ CQkJbnRvaGwoaW0tPm1fYWRkci5zNl9hZGRyMzJbM10pID4+IDE2ICYgMHhmZiwKPiArCQkJCW50 b2hsKGltLT5tX2FkZHIuczZfYWRkcjMyWzNdKSA+PiAgOCAmIDB4ZmYsCj4gKwkJCQludG9obChp bS0+bV9hZGRyLnM2X2FkZHIzMlszXSkgPj4gIDAgJiAweGZmKTsKPiArCX0gZWxzZSB7Cj4gKwkJ c25wcmludGYodGV4dF9hZGRyLCA0MCwgTklQNl9GTVQsIE5JUDYoaW0tPm1fYWRkcikpOwo+ICsJ fQo+ICAJcXdvcmRfYWRkKGJwcCwgYmxlbiwgaW0tPm1fY2xhc3MpOwo+ICAJcXdvcmRfYWRkKGJw cCwgYmxlbiwgdGV4dF9hZGRyKTsKPiAgCSgqYnBwKVstMV0gPSAnXG4nOwo+ICB9Cj4gIAo+IC1z dGF0aWMgc3RydWN0IGlwX21hcCAqaXBfbWFwX2xvb2t1cChjaGFyICpjbGFzcywgc3RydWN0IGlu X2FkZHIgYWRkcik7Cj4gK3N0YXRpYyBzdHJ1Y3QgaXBfbWFwICppcF9tYXBfbG9va3VwKGNoYXIg KmNsYXNzLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwo+ICBzdGF0aWMgaW50IGlwX21hcF91cGRh dGUoc3RydWN0IGlwX21hcCAqaXBtLCBzdHJ1Y3QgdW5peF9kb21haW4gKnVkb20sIHRpbWVfdCBl eHBpcnkpOwo+ICAKPiAgc3RhdGljIGludCBpcF9tYXBfcGFyc2Uoc3RydWN0IGNhY2hlX2RldGFp bCAqY2QsCj4gQEAgLTE3NSwxMCArMTg0LDEwIEBAIHN0YXRpYyBpbnQgaXBfbWFwX3BhcnNlKHN0 cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAo+ICAJICogZm9yIHNjcmF0Y2g6ICovCj4gIAljaGFyICpi dWYgPSBtZXNnOwo+ICAJaW50IGxlbjsKPiAtCWludCBiMSxiMixiMyxiNDsKPiArCWludCBiMSwg YjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjg7Cj4gIAljaGFyIGM7Cj4gIAljaGFyIGNsYXNzWzhd Owo+IC0Jc3RydWN0IGluX2FkZHIgYWRkcjsKPiArCXN0cnVjdCBpbjZfYWRkciBhZGRyNjsKPiAg CWludCBlcnI7Cj4gIAo+ICAJc3RydWN0IGlwX21hcCAqaXBtcDsKPiBAQCAtMTk3LDcgKzIwNiwy MyBAQCBzdGF0aWMgaW50IGlwX21hcF9wYXJzZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKPiAg CWxlbiA9IHF3b3JkX2dldCgmbWVzZywgYnVmLCBtbGVuKTsKPiAgCWlmIChsZW4gPD0gMCkgcmV0 dXJuIC1FSU5WQUw7Cj4gIAo+IC0JaWYgKHNzY2FuZihidWYsICIldS4ldS4ldS4ldSVjIiwgJmIx LCAmYjIsICZiMywgJmI0LCAmYykgIT0gNCkKPiArCWlmIChzc2NhbmYoYnVmLCBOSVBRVUFEX0ZN VCAiJWMiLCAmYjEsICZiMiwgJmIzLCAmYjQsICZjKSA9PSA0KSB7Cj4gKwkJYWRkcjYuczZfYWRk cjMyWzBdID0gMDsKPiArCQlhZGRyNi5zNl9hZGRyMzJbMV0gPSAwOwo+ICsJCWFkZHI2LnM2X2Fk ZHIzMlsyXSA9IGh0b25sKDB4ZmZmZik7Cj4gKwkJYWRkcjYuczZfYWRkcjMyWzNdID0KPiArCQkJ aHRvbmwoKCgoKChiMTw8OCl8YjIpPDw4KXxiMyk8PDgpfGI0KTsKPiArICAgICAgIH0gZWxzZSBp ZiAoc3NjYW5mKGJ1ZiwgTklQNl9GTVQgIiVjIiwKPiArCQkJJmIxLCAmYjIsICZiMywgJmI0LCAm YjUsICZiNiwgJmI3LCAmYjgsICZjKSA9PSA4KSB7Cj4gKwkJYWRkcjYuczZfYWRkcjE2WzBdID0g aHRvbnMoYjEpOwo+ICsJCWFkZHI2LnM2X2FkZHIxNlsxXSA9IGh0b25zKGIyKTsKPiArCQlhZGRy Ni5zNl9hZGRyMTZbMl0gPSBodG9ucyhiMyk7Cj4gKwkJYWRkcjYuczZfYWRkcjE2WzNdID0gaHRv bnMoYjQpOwo+ICsJCWFkZHI2LnM2X2FkZHIxNls0XSA9IGh0b25zKGI1KTsKPiArCQlhZGRyNi5z Nl9hZGRyMTZbNV0gPSBodG9ucyhiNik7Cj4gKwkJYWRkcjYuczZfYWRkcjE2WzZdID0gaHRvbnMo YjcpOwo+ICsJCWFkZHI2LnM2X2FkZHIxNls3XSA9IGh0b25zKGI4KTsKPiArICAgICAgIH0gZWxz ZQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAgCWV4cGlyeSA9IGdldF9leHBpcnkoJm1lc2cp Owo+IEBAIC0yMTUsMTAgKzI0MCw3IEBAIHN0YXRpYyBpbnQgaXBfbWFwX3BhcnNlKHN0cnVjdCBj YWNoZV9kZXRhaWwgKmNkLAo+ICAJfSBlbHNlCj4gIAkJZG9tID0gTlVMTDsKPiAgCj4gLQlhZGRy LnNfYWRkciA9Cj4gLQkJaHRvbmwoKCgoKChiMTw8OCl8YjIpPDw4KXxiMyk8PDgpfGI0KTsKPiAt Cj4gLQlpcG1wID0gaXBfbWFwX2xvb2t1cChjbGFzcyxhZGRyKTsKPiArCWlwbXAgPSBpcF9tYXBf bG9va3VwKGNsYXNzLCAmYWRkcjYpOwo+ICAJaWYgKGlwbXApIHsKPiAgCQllcnIgPSBpcF9tYXBf dXBkYXRlKGlwbXAsCj4gIAkJCSAgICAgY29udGFpbmVyX29mKGRvbSwgc3RydWN0IHVuaXhfZG9t YWluLCBoKSwKPiBAQCAtMjM4LDcgKzI2MCw3IEBAIHN0YXRpYyBpbnQgaXBfbWFwX3Nob3coc3Ry dWN0IHNlcV9maWxlICptLAo+ICAJCSAgICAgICBzdHJ1Y3QgY2FjaGVfaGVhZCAqaCkKPiAgewo+ ICAJc3RydWN0IGlwX21hcCAqaW07Cj4gLQlzdHJ1Y3QgaW5fYWRkciBhZGRyOwo+ICsJc3RydWN0 IGluNl9hZGRyIGFkZHI2Owo+ICAJY2hhciAqZG9tID0gIi1uby1kb21haW4tIjsKPiAgCj4gIAlp ZiAoaCA9PSBOVUxMKSB7Cj4gQEAgLTI0NywyMCArMjY5LDI0IEBAIHN0YXRpYyBpbnQgaXBfbWFw X3Nob3coc3RydWN0IHNlcV9maWxlICptLAo+ICAJfQo+ICAJaW0gPSBjb250YWluZXJfb2YoaCwg c3RydWN0IGlwX21hcCwgaCk7Cj4gIAkvKiBjbGFzcyBhZGRyIGRvbWFpbiAqLwo+IC0JYWRkciA9 IGltLT5tX2FkZHI7Cj4gKwlpcHY2X2FkZHJfY29weSgmYWRkcjYsICZpbS0+bV9hZGRyKTsKPiAg Cj4gIAlpZiAodGVzdF9iaXQoQ0FDSEVfVkFMSUQsICZoLT5mbGFncykgJiYKPiAgCSAgICAhdGVz dF9iaXQoQ0FDSEVfTkVHQVRJVkUsICZoLT5mbGFncykpCj4gIAkJZG9tID0gaW0tPm1fY2xpZW50 LT5oLm5hbWU7Cj4gIAo+IC0Jc2VxX3ByaW50ZihtLCAiJXMgJWQuJWQuJWQuJWQgJXNcbiIsCj4g LQkJICAgaW0tPm1fY2xhc3MsCj4gLQkJICAgbnRvaGwoYWRkci5zX2FkZHIpID4+IDI0ICYgMHhm ZiwKPiAtCQkgICBudG9obChhZGRyLnNfYWRkcikgPj4gMTYgJiAweGZmLAo+IC0JCSAgIG50b2hs KGFkZHIuc19hZGRyKSA+PiAgOCAmIDB4ZmYsCj4gLQkJICAgbnRvaGwoYWRkci5zX2FkZHIpID4+ ICAwICYgMHhmZiwKPiAtCQkgICBkb20KPiAtCQkgICApOwo+ICsJaWYgKGlwdjZfYWRkcl92NG1h cHBlZCgmYWRkcjYpKSB7Cj4gKwkJc2VxX3ByaW50ZihtLCAiJXMiIE5JUFFVQURfRk1UICIlc1xu IiwKPiArCQkJaW0tPm1fY2xhc3MsCj4gKwkJCW50b2hsKGFkZHI2LnM2X2FkZHIzMlszXSkgPj4g MjQgJiAweGZmLAo+ICsJCQludG9obChhZGRyNi5zNl9hZGRyMzJbM10pID4+IDE2ICYgMHhmZiwK PiArCQkJbnRvaGwoYWRkcjYuczZfYWRkcjMyWzNdKSA+PiAgOCAmIDB4ZmYsCj4gKwkJCW50b2hs KGFkZHI2LnM2X2FkZHIzMlszXSkgPj4gIDAgJiAweGZmLAo+ICsJCQlkb20pOwo+ICsJfSBlbHNl IHsKPiArCQlzZXFfcHJpbnRmKG0sICIlcyIgTklQNl9GTVQgIiVzXG4iLAo+ICsJCQlpbS0+bV9j bGFzcywgTklQNihhZGRyNiksIGRvbSk7Cj4gKwl9Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBA QCAtMjgwLDE2ICszMDYsMTYgQEAgc3RydWN0IGNhY2hlX2RldGFpbCBpcF9tYXBfY2FjaGUgPSB7 Cj4gIAkuYWxsb2MJCT0gaXBfbWFwX2FsbG9jLAo+ICB9Owo+ICAKPiAtc3RhdGljIHN0cnVjdCBp cF9tYXAgKmlwX21hcF9sb29rdXAoY2hhciAqY2xhc3MsIHN0cnVjdCBpbl9hZGRyIGFkZHIpCj4g K3N0YXRpYyBzdHJ1Y3QgaXBfbWFwICppcF9tYXBfbG9va3VwKGNoYXIgKmNsYXNzLCBzdHJ1Y3Qg aW42X2FkZHIgKmFkZHIpCj4gIHsKPiAgCXN0cnVjdCBpcF9tYXAgaXA7Cj4gIAlzdHJ1Y3QgY2Fj aGVfaGVhZCAqY2g7Cj4gIAo+ICAJc3RyY3B5KGlwLm1fY2xhc3MsIGNsYXNzKTsKPiAtCWlwLm1f YWRkciA9IGFkZHI7Cj4gKwlpcHY2X2FkZHJfY29weSgmaXAubV9hZGRyLCBhZGRyKTsKPiAgCWNo ID0gc3VucnBjX2NhY2hlX2xvb2t1cCgmaXBfbWFwX2NhY2hlLCAmaXAuaCwKPiAgCQkJCSBoYXNo X3N0cihjbGFzcywgSVBfSEFTSEJJVFMpIF4KPiAtCQkJCSBoYXNoX2lwKGFkZHIuc19hZGRyKSk7 Cj4gKwkJCQkgaGFzaF9pcDYoYWRkcikpOwo+ICAKPiAgCWlmIChjaCkKPiAgCQlyZXR1cm4gY29u dGFpbmVyX29mKGNoLCBzdHJ1Y3QgaXBfbWFwLCBoKTsKPiBAQCAtMzE4LDE0ICszNDQsMTQgQEAg c3RhdGljIGludCBpcF9tYXBfdXBkYXRlKHN0cnVjdCBpcF9tYXAgKmlwbSwgc3RydWN0IHVuaXhf ZG9tYWluICp1ZG9tLCB0aW1lX3QgZXgKPiAgCWNoID0gc3VucnBjX2NhY2hlX3VwZGF0ZSgmaXBf bWFwX2NhY2hlLAo+ICAJCQkJICZpcC5oLCAmaXBtLT5oLAo+ICAJCQkJIGhhc2hfc3RyKGlwbS0+ bV9jbGFzcywgSVBfSEFTSEJJVFMpIF4KPiAtCQkJCSBoYXNoX2lwKGlwbS0+bV9hZGRyLnNfYWRk cikpOwo+ICsJCQkJIGhhc2hfaXA2KCZpcG0tPm1fYWRkcikpOwo+ICAJaWYgKCFjaCkKPiAgCQly ZXR1cm4gLUVOT01FTTsKPiAgCWNhY2hlX3B1dChjaCwgJmlwX21hcF9jYWNoZSk7Cj4gIAlyZXR1 cm4gMDsKPiAgfQo+ICAKPiAtaW50IGF1dGhfdW5peF9hZGRfYWRkcihzdHJ1Y3QgaW5fYWRkciBh ZGRyLCBzdHJ1Y3QgYXV0aF9kb21haW4gKmRvbSkKPiAraW50IGF1dGhfdW5peF9hZGRfYWRkcihz dHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBhdXRoX2RvbWFpbiAqZG9tKQo+ICB7Cj4gIAlz dHJ1Y3QgdW5peF9kb21haW4gKnVkb207Cj4gIAlzdHJ1Y3QgaXBfbWFwICppcG1wOwo+IEBAIC0z NTIsNyArMzc4LDcgQEAgaW50IGF1dGhfdW5peF9mb3JnZXRfb2xkKHN0cnVjdCBhdXRoX2RvbWFp biAqZG9tKQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0cnVjdCBhdXRoX2RvbWFpbiAqYXV0 aF91bml4X2xvb2t1cChzdHJ1Y3QgaW5fYWRkciBhZGRyKQo+ICtzdHJ1Y3QgYXV0aF9kb21haW4g KmF1dGhfdW5peF9sb29rdXAoc3RydWN0IGluNl9hZGRyICphZGRyKQo+ICB7Cj4gIAlzdHJ1Y3Qg aXBfbWFwICppcG07Cj4gIAlzdHJ1Y3QgYXV0aF9kb21haW4gKnJ2Owo+IEBAIC02NDEsOSArNjY3 LDIzIEBAIHN0YXRpYyBpbnQgdW5peF9naWRfZmluZCh1aWRfdCB1aWQsIHN0cnVjdCBncm91cF9p bmZvICoqZ2lwLAo+ICBpbnQKPiAgc3ZjYXV0aF91bml4X3NldF9jbGllbnQoc3RydWN0IHN2Y19y cXN0ICpycXN0cCkKPiAgewo+IC0Jc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBzdmNfYWRkcl9p bihycXN0cCk7Cj4gKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKPiArCXN0cnVjdCBzb2NrYWRk cl9pbjYgKnNpbjYsIHNpbjZfc3RvcmFnZTsKPiAgCXN0cnVjdCBpcF9tYXAgKmlwbTsKPiAgCj4g Kwlzd2l0Y2ggKHJxc3RwLT5ycV9hZGRyLnNzX2ZhbWlseSkgewo+ICsJY2FzZSBBRl9JTkVUOgo+ ICsJCXNpbiA9IHN2Y19hZGRyX2luKHJxc3RwKTsKPiArCQlzaW42ID0gJnNpbjZfc3RvcmFnZTsK PiArCQlpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNpbi0+c2luX2FkZHIuc19hZGRyLCAmc2luNi0+ c2luNl9hZGRyKTsgCj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFGX0lORVQ2Ogo+ICsJCXNpbjYgPSBz dmNfYWRkcl9pbjYocnFzdHApOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlCVUcoKTsK PiArCX0KPiArCj4gIAlycXN0cC0+cnFfY2xpZW50ID0gTlVMTDsKPiAgCWlmIChycXN0cC0+cnFf cHJvYyA9PSAwKQo+ICAJCXJldHVybiBTVkNfT0s7Cj4gQEAgLTY1MSw3ICs2OTEsNyBAQCBzdmNh dXRoX3VuaXhfc2V0X2NsaWVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQo+ICAJaXBtID0gaXBf bWFwX2NhY2hlZF9nZXQocnFzdHApOwo+ICAJaWYgKGlwbSA9PSBOVUxMKQo+ICAJCWlwbSA9IGlw X21hcF9sb29rdXAocnFzdHAtPnJxX3NlcnZlci0+c3ZfcHJvZ3JhbS0+cGdfY2xhc3MsCj4gLQkJ CQkgICAgc2luLT5zaW5fYWRkcik7Cj4gKwkJCQkgICAgJnNpbjYtPnNpbjZfYWRkcik7Cj4gIAo+ ICAJaWYgKGlwbSA9PSBOVUxMKQo+ICAJCXJldHVybiBTVkNfREVOSUVEOwoKPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IE5GU3Y0IG1haWxpbmcgbGlz dAo+IE5GU3Y0QGxpbnV4LW5mcy5vcmcKPiBodHRwOi8vbGludXgtbmZzLm9yZy9jZ2ktYmluL21h aWxtYW4vbGlzdGluZm8vbmZzdjQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KTkZTdjQgbWFpbGluZyBsaXN0Ck5GU3Y0QGxpbnV4LW5mcy5vcmcKaHR0cDov L2xpbnV4LW5mcy5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL25mc3Y0