From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [CI 06/20] drm/i915: Slaughter the thundering i915_wait_request herd Date: Fri, 20 May 2016 13:04:13 +0100 Message-ID: <573EFD3D.2040103@linux.intel.com> References: <1463657576-32063-1-git-send-email-chris@chris-wilson.co.uk> <1463657576-32063-6-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id C8F196E33E for ; Fri, 20 May 2016 12:04:15 +0000 (UTC) In-Reply-To: <1463657576-32063-6-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE5LzA1LzE2IDEyOjMyLCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gT25lIHBhcnRpY3VsYXJs eSBzdHJlc3NmdWwgc2NlbmFyaW8gY29uc2lzdHMgb2YgbWFueSBpbmRlcGVuZGVudCB0YXNrcwo+ IGFsbCBjb21wZXRpbmcgZm9yIEdQVSB0aW1lIGFuZCB3YWl0aW5nIHVwb24gdGhlIHJlc3VsdHMg KGUuZy4gcmVhbHRpbWUKPiB0cmFuc2NvZGluZyBvZiBtYW55LCBtYW55IHN0cmVhbXMpLiBPbmUg Ym90dGxlbmVjayBpbiBwYXJ0aWN1bGFyIGlzIHRoYXQKPiBlYWNoIGNsaWVudCB3YWl0cyBvbiBp dHMgb3duIHJlc3VsdHMsIGJ1dCBldmVyeSBjbGllbnQgaXMgd29rZW4gdXAgYWZ0ZXIKPiBldmVy eSBiYXRjaGJ1ZmZlciAtIGhlbmNlIHRoZSB0aHVuZGVyIG9mIGhvb3ZlcyBhcyB0aGVuIGV2ZXJ5 IGNsaWVudCBtdXN0Cj4gZG8gaXRzIGhlYXZ5d2VpZ2h0IGRhbmNlIHRvIHJlYWQgYSBjb2hlcmVu dCBzZXFubyB0byBzZWUgaWYgaXQgaXMgdGhlCj4gbHVja3kgb25lLgo+Cj4gSWRlYWxseSwgd2Ug b25seSB3YW50IG9uZSBjbGllbnQgdG8gd2FrZSB1cCBhZnRlciB0aGUgaW50ZXJydXB0IGFuZAo+ IGNoZWNrIGl0cyByZXF1ZXN0IGZvciBjb21wbGV0aW9uLiBTaW5jZSB0aGUgcmVxdWVzdHMgbXVz dCByZXRpcmUgaW4KPiBvcmRlciwgd2UgY2FuIHNlbGVjdCB0aGUgZmlyc3QgY2xpZW50IG9uIHRo ZSBvbGRlc3QgcmVxdWVzdCB0byBiZSB3b2tlbi4KPiBPbmNlIHRoYXQgY2xpZW50IGhhcyBjb21w bGV0ZWQgaGlzIHdhaXQsIHdlIGNhbiB0aGVuIHdha2UgdXAgdGhlCj4gbmV4dCBjbGllbnQgYW5k IHNvIG9uLiBIb3dldmVyLCBhbGwgY2xpZW50cyB0aGVuIGluY3VyIGxhdGVuY3kgYXMgZXZlcnkK PiBwcm9jZXNzIGluIHRoZSBjaGFpbiBtYXkgYmUgZGVsYXllZCBmb3Igc2NoZWR1bGluZyAtIHRo aXMgbWF5IGFsc28gdGhlbgo+IGNhdXNlIHNvbWUgcHJpb3JpdHkgaW52ZXJzaW9uLiBUbyByZWR1 Y2UgdGhlIGxhdGVuY3ksIHdoZW4gYSBjbGllbnQKPiBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20g dGhlIGxpc3QsIHdlIHNjYW4gdGhlIHRyZWUgZm9yIGNvbXBsZXRlZAo+IHNlcW5vIGFuZCB3YWtl IHVwIGFsbCB0aGUgY29tcGxldGVkIHdhaXRlcnMgaW4gcGFyYWxsZWwuCj4KPiBVc2luZyBpZ3Qv YmVuY2htYXJrcy9nZW1fbGF0ZW5jeSwgd2UgY2FuIGRlbW9uc3RyYXRlIHRoaXMgZWZmZWN0LiBU aGUKPiBiZW5jaG1hcmsgbWVhc3VyZXMgdGhlIG51bWJlciBvZiBHUFUgY3ljbGVzIGJldHdlZW4g Y29tcGxldGlvbiBvZiBhCj4gYmF0Y2ggYW5kIHRoZSBjbGllbnQgd2FraW5nIHVwIGZyb20gYSBj YWxsIHRvIHdhaXQtaW9jdGwuIFdpdGggbWFueQo+IGNvbmN1cnJlbnQgd2FpdGVycywgd2l0aCBl YWNoIG9uIGEgZGlmZmVyZW50IHJlcXVlc3QsIHdlIG9ic2VydmUgdGhhdAo+IHRoZSB3YWtldXAg bGF0ZW5jeSBiZWZvcmUgdGhlIHBhdGNoIHNjYWxlcyBuZWFybHkgbGluZWFybHkgd2l0aCB0aGUK PiBudW1iZXIgb2Ygd2FpdGVycyAoYmVmb3JlIGV4dGVybmFsIGZhY3RvcnMga2ljayBpbiBtYWtp bmcgdGhlIHNjYWxpbmcgbXVjaAo+IHdvcnNlKS4gQWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoLCB3 ZSBjYW4gc2VlIHRoYXQgb25seSB0aGUgc2luZ2xlIHdhaXRlcgo+IGZvciB0aGUgcmVxdWVzdCBp cyBiZWluZyB3b2tlbiB1cCwgcHJvdmlkaW5nIGEgY29uc3RhbnQgd2FrZXVwIGxhdGVuY3kKPiBm b3IgZXZlcnkgb3BlcmF0aW9uLiBIb3dldmVyLCB0aGUgc2l0dWF0aW9uIGlzIG5vdCBxdWl0ZSBh cyByb3N5IGZvcgo+IG1hbnkgd2FpdGVycyBvbiB0aGUgc2FtZSByZXF1ZXN0LCB0aG91Z2ggdG8g dGhlIGJlc3Qgb2YgbXkga25vd2xlZGdlIHRoaXMKPiBpcyBtdWNoIGxlc3MgbGlrZWx5IGluIHBy YWN0aWNlLiBIZXJlLCB3ZSBjYW4gb2JzZXJ2ZSB0aGF0IHRoZQo+IGNvbmN1cnJlbnQgd2FpdGVy cyBpbmN1ciBleHRyYSBsYXRlbmN5IGZyb20gYmVpbmcgd29rZW4gdXAgYnkgdGhlCj4gc29saXRh cnkgYm90dG9tLWhhbGYsIHJhdGhlciB0aGFuIGRpcmVjdGx5IGJ5IHRoZSBpbnRlcnJ1cHQuIFRo aXMKPiBhcHBlYXJzIHRvIGJlIHNjaGVkdWxlciBpbmR1Y2VkIChoYXZpbmcgZGlzY291bnRlZCBh ZHZlcnNlIGVmZmVjdHMgZnJvbQo+IGhhdmluZyBhIHJidHJlZSB3YWxrL2VyYXNlIGluIHRoZSB3 YWtldXAgcGF0aCksIGVhY2ggYWRkaXRpb25hbAo+IHdha2VfdXBfcHJvY2VzcygpIGNvc3RzIGFw cHJveGltYXRlbHkgMXVzIG9uIGJpZyBjb3JlLiBBbm90aGVyIGVmZmVjdCBvZgo+IHBlcmZvcm1p bmcgdGhlIHNlY29uZGFyeSB3YWtldXBzIGZyb20gdGhlIGZpcnN0IGJvdHRvbS1oYWxmIGlzIHRo ZQo+IGluY3VycmVkIGRlbGF5IHRoaXMgaW1wb3NlcyBvbiBoaWdoIHByaW9yaXR5IHRocmVhZHMg LSByYXRoZXIgdGhhbgo+IGltbWVkaWF0ZWx5IHJldHVybmluZyB0byB1c2Vyc3BhY2UgYW5kIGxl YXZpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvCj4gd2FrZSB0aGUgb3RoZXJzLgo+Cj4gVG8g b2Zmc2V0IHRoZSBkZWxheSBpbmN1cnJlZCB3aXRoIGFkZGl0aW9uYWwgd2FpdGVycyBvbiBhIHJl cXVlc3QsIHdlCj4gY291bGQgdXNlIGEgaHlicmlkIHNjaGVtZSB0aGF0IGRpZCBhIHF1aWNrIHJl YWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyCj4gYW5kIGRlcXVldWVkIGFsbCB0aGUgY29tcGxl dGVkIHdhaXRlcnMgKGluY3VycmluZyB0aGUgb3ZlcmhlYWQgaW4gdGhlCj4gaW50ZXJydXB0IGhh bmRsZXIsIG5vdCB0aGUgYmVzdCBwbGFuIGVpdGhlciBhcyB3ZSB0aGVuIGluY3VyIEdQVQo+IHN1 Ym1pc3Npb24gbGF0ZW5jeSkgYnV0IHdlIHdvdWxkIHN0aWxsIGhhdmUgdG8gd2FrZSB1cCB0aGUg Ym90dG9tLWhhbGYKPiBldmVyeSB0aW1lIHRvIGRvIHRoZSBoZWF2eXdlaWdodCBzbG93IHJlYWQu IE9yIHdlIGNvdWxkIG9ubHkga2ljayB0aGUKPiB3YWl0ZXJzIG9uIHRoZSBzZXFubyB3aXRoIHRo ZSBzYW1lIHByaW9yaXR5IGFzIHRoZSBjdXJyZW50IHRhc2sgKGkuZS4gaW4KPiB0aGUgcmVhbHRp bWUgd2FpdGVyIHNjZW5hcmlvLCBvbmx5IGl0IGlzIHdva2VuIHVwIGltbWVkaWF0ZWx5IGJ5IHRo ZQo+IGludGVycnVwdCBhbmQgc2ltcGx5IHF1ZXVlcyB0aGUgbmV4dCB3YWl0ZXIgYmVmb3JlIHJl dHVybmluZyB0byB1c2Vyc3BhY2UsCj4gbWluaW1pc2luZyBpdHMgZGVsYXkgYXQgdGhlIGV4cGVu c2Ugb2YgdGhlIGNoYWluLCBhbmQgYWxzbyByZWR1Y2luZwo+IGNvbnRlbnRpb24gb24gaXRzIHNj aGVkdWxlciBydW5xdWV1ZSkuIFRoaXMgaXMgZWZmZWN0aXZlIGF0IGF2b2lkIGxvbmcKPiBwYXVz ZXMgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBhdCBhdm9pZGluZyB0aGUgZXh0cmEgbGF0 ZW5jeSBpbgo+IHJlYWx0aW1lL2hpZ2gtcHJpb3JpdHkgd2FpdGVycy4KPgo+IHYyOiBDb252ZXJ0 IGZyb20gYSBrd29ya2VyIHBlciBlbmdpbmUgaW50byBhIGRlZGljYXRlZCBrdGhyZWFkIGZvciB0 aGUKPiBib3R0b20taGFsZi4KPiB2MzogUmVuYW1lIHJlcXVlc3QgbWVtYmVycyBhbmQgdHdlYWsg Y29tbWVudHMuCj4gdjQ6IFVzZSBhIHBlci1lbmdpbmUgc3BpbmxvY2sgaW4gdGhlIGJyZWFkY3J1 bWJzIGJvdHRvbS1oYWxmLgo+IHY1OiBGaXggcmFjZSBpbiBsb2NrbGVzc2x5IGNoZWNraW5nIHdh aXRlciBzdGF0dXMgYW5kIGtpY2tpbmcgdGhlIHRhc2sgb24KPiBhZGRpbmcgYSBuZXcgd2FpdGVy Lgo+IHY2OiBGaXggZGVjaWRpbmcgd2hlbiB0byBmb3JjZSB0aGUgdGltZXIgdG8gaGlkZSBtaXNz aW5nIGludGVycnVwdHMuCj4gdjc6IE1vdmUgdGhlIGJvdHRvbS1oYWxmIGZyb20gdGhlIGt0aHJl YWQgdG8gdGhlIGZpcnN0IGNsaWVudCBwcm9jZXNzLgo+IHY4OiBSZXdvcmQgYSBmZXcgY29tbWVu dHMKPiB2OTogQnJlYWsgdGhlIGJ1c3kgbG9vcCB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgdW5tYXNr ZWQgb3IgaGFzIGZpcmVkLgo+IHYxMDogQ29tbWVudHMsIHVubmVjZXNzYXJ5IGNodXJuLCBiZXR0 ZXIgZGVidWdnaW5nIGZyb20gVHZydGtvCj4gdjExOiBXYWtlIGFsbCBjb21wbGV0ZWQgd2FpdGVy cyBvbiByZW1vdmluZyB0aGUgY3VycmVudCBib3R0b20taGFsZiB0bwo+IHJlZHVjZSB0aGUgbGF0 ZW5jeSBvZiB3YWtpbmcgdXAgYSBoZXJkIG9mIGNsaWVudHMgYWxsIHdhaXRpbmcgb24gdGhlCj4g c2FtZSByZXF1ZXN0Lgo+IHYxMjogUmVhcnJhbmdlIG1pc3NlZC1pbnRlcnJ1cHQgZmF1bHQgaW5q ZWN0aW9uIHNvIHRoYXQgaXQgd29ya3Mgd2l0aAo+IGlndC9kcnZfbWlzc2VkX2lycV9oYW5nCj4g djEzOiBSZW5hbWUgaW50ZWxfYnJlYWRjcnVtYiBhbmQgZnJpZW5kcyB0byBpbnRlbF93YWl0IGlu IHByZXBhcmF0aW9uCj4gZm9yIHNpZ25hbCBoYW5kbGluZy4KPiB2MTQ6IFJDVSBjb21tZW50YXJ5 LCBhc3NlcnRfc3Bpbl9sb2NrZWQKPiB2MTU6IEhpZGUgQlVHX09OIGJlaGluZCB0aGUgY29tcGls ZXI7IHJlcG9ydCBvbiBnZW1fbGF0ZW5jeSBmaW5kaW5ncy4KPiB2MTY6IFNvcnQgc2Vxbm8tZ3Jv dXBzIGJ5IHByaW9yaXR5IHNvIHRoYXQgZmlyc3Qtd2FpdGVyIGhhcyB0aGUgaGlnaGVzdAo+IHRh c2sgcHJpb3JpdHkgKGFuZCBzbyBhdm9pZCBwcmlvcml0eSBpbnZlcnNpb24pLgo+IHYxNzogQWRk IHdhaXRlcnMgdG8gcG9zdC1tb3J0ZW0gR1BVIGhhbmcgc3RhdGUuCgpBIGxvdCBvZiB0aW1lIGhh cyBwYXNzZWQgc2luY2UgSSBsYXN0IGxvb2tlZCBhdCB0aGlzLiA6SSBBIGxvdCBvZiAKY29tcGxl eGl0eSB0byByZWNhbGwuIDopCgo+Cj4gVGVzdGNhc2U6IGlndC9nZW1fY29uY3VycmVudF9ibGl0 Cj4gVGVzdGNhc2U6IGlndC9iZW5jaG1hcmtzL2dlbV9sYXRlbmN5Cj4gU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6ICJSb2dvemhraW4s IERtaXRyeSBWIiA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KPiBDYzogIkdvbmcsIFpo aXBlbmciIDx6aGlwZW5nLmdvbmdAaW50ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AbGludXguaW50ZWwuY29tPgo+IENjOiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5n b3Jkb25AaW50ZWwuY29tPgo+IENjOiAiR29lbCwgQWthc2giIDxha2FzaC5nb2VsQGludGVsLmNv bT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgfCAg IDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICB8ICAxNSAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICB8ICAzOSArKyst Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgIHwgMTMwICsrKyst LS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyAgICB8ICA1 OSArKysrKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICAgICAgfCAg MjcgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jIHwgMzMz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jICAgICAgICAgfCAgIDQgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYyAgfCAgIDMgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuaCAgfCAgNjcgKysrKysrLQo+ICAgMTAgZmlsZXMgY2hhbmdlZCwgNTY3IGlu c2VydGlvbnMoKyksIDExMSBkZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQo+IGluZGV4IDdlMjk0NDQwNmI4Zi4uNGM0ZTE5YjNmNGQ3IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiBAQCAtMzcsNiArMzcsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ ICAgCSAgaTkxNV9nZW1fdXNlcnB0ci5vIFwKPiAgIAkgIGk5MTVfZ3B1X2Vycm9yLm8gXAo+ICAg CSAgaTkxNV90cmFjZV9wb2ludHMubyBcCj4gKwkgIGludGVsX2JyZWFkY3J1bWJzLm8gXAo+ICAg CSAgaW50ZWxfbHJjLm8gXAo+ICAgCSAgaW50ZWxfbW9jcy5vIFwKPiAgIAkgIGludGVsX3Jpbmdi dWZmZXIubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCAyNGY0MTA1 YjkxMGYuLjAyYTkyM2ZlZWI3ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j Cj4gQEAgLTc2MSwxMCArNzYxLDIxIEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVzdF9pbmZv KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgIHN0YXRpYyB2b2lkIGk5MTVfcmlu Z19zZXFub19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKPiAgIAkJCQkgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICAgewo+ICsJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0g JmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gKwlzdHJ1Y3QgcmJfbm9kZSAqcmI7Cj4gKwo+ICAgCXNl cV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2UgKCVzKTogJXhcbiIsCj4gICAJCSAgIGVuZ2lu ZS0+bmFtZSwgZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKSk7Cj4gICAJc2VxX3ByaW50ZihtLCAi Q3VycmVudCB1c2VyIGludGVycnVwdHMgKCVzKTogJXhcbiIsCj4gICAJCSAgIGVuZ2luZS0+bmFt ZSwgUkVBRF9PTkNFKGVuZ2luZS0+dXNlcl9pbnRlcnJ1cHRzKSk7Cj4gKwo+ICsJc3Bpbl9sb2Nr KCZiLT5sb2NrKTsKPiArCWZvciAocmIgPSByYl9maXJzdCgmYi0+d2FpdGVycyk7IHJiICE9IE5V TEw7IHJiID0gcmJfbmV4dChyYikpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqdyA9IGNvbnRh aW5lcl9vZihyYiwgdHlwZW9mKCp3KSwgbm9kZSk7Cj4gKwkJc2VxX3ByaW50ZihtLCAiV2FpdGlu ZyAoJXMpOiAlcyBbJWRdIG9uICV4XG4iLAo+ICsJCQkgICBlbmdpbmUtPm5hbWUsIHctPnRhc2st PmNvbW0sIHctPnRhc2stPnBpZCwgdy0+c2Vxbm8pOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2soJmIt PmxvY2spOwo+ICAgfQo+Cj4gICBzdGF0aWMgaW50IGk5MTVfZ2VtX3NlcW5vX2luZm8oc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+IEBAIC0xNDAwLDYgKzE0MTEsOCBAQCBzdGF0aWMg aW50IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQp Cj4gICAJCQkgICBlbmdpbmUtPmhhbmdjaGVjay5zZXFubywKPiAgIAkJCSAgIHNlcW5vW2lkXSwK PiAgIAkJCSAgIGVuZ2luZS0+bGFzdF9zdWJtaXR0ZWRfc2Vxbm8pOwo+ICsJCXNlcV9wcmludGYo bSwgIlx0d2FpdGVycz8gJWRcbiIsCj4gKwkJCSAgIGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVu Z2luZSkpOwo+ICAgCQlzZXFfcHJpbnRmKG0sICJcdHVzZXIgaW50ZXJydXB0cyA9ICV4IFtjdXJy ZW50ICV4XVxuIiwKPiAgIAkJCSAgIGVuZ2luZS0+aGFuZ2NoZWNrLnVzZXJfaW50ZXJydXB0cywK PiAgIAkJCSAgIFJFQURfT05DRShlbmdpbmUtPnVzZXJfaW50ZXJydXB0cykpOwo+IEBAIC0yMzg0 LDcgKzIzOTcsNyBAQCBzdGF0aWMgaW50IGNvdW50X2lycV93YWl0ZXJzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQo+ICAgCWludCBjb3VudCA9IDA7Cj4KPiAgIAlmb3JfZWFjaF9lbmdp bmUoZW5naW5lLCBpOTE1KQo+IC0JCWNvdW50ICs9IGVuZ2luZS0+aXJxX3JlZmNvdW50Owo+ICsJ CWNvdW50ICs9IGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVuZ2luZSk7Cj4KPiAgIAlyZXR1cm4g Y291bnQ7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggMzM1NTNlYTk5YTAz Li43YjMyOTQ2NGU4ZWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtNTAzLDYg KzUwMyw3IEBAIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSB7Cj4gICAJCWJvb2wgdmFsaWQ7 Cj4gICAJCS8qIFNvZnR3YXJlIHRyYWNrZWQgc3RhdGUgKi8KPiAgIAkJYm9vbCB3YWl0aW5nOwo+ ICsJCWludCBudW1fd2FpdGVyczsKPiAgIAkJaW50IGhhbmdjaGVja19zY29yZTsKPiAgIAkJZW51 bSBpbnRlbF9yaW5nX2hhbmdjaGVja19hY3Rpb24gaGFuZ2NoZWNrX2FjdGlvbjsKPiAgIAkJaW50 IG51bV9yZXF1ZXN0czsKPiBAQCAtNTQ4LDYgKzU0OSwxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZXJy b3Jfc3RhdGUgewo+ICAgCQkJdTMyIHRhaWw7Cj4gICAJCX0gKnJlcXVlc3RzOwo+Cj4gKwkJc3Ry dWN0IGRybV9pOTE1X2Vycm9yX3dhaXRlciB7Cj4gKwkJCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVO XTsKPiArCQkJcGlkX3QgcGlkOwo+ICsJCQl1MzIgc2Vxbm87Cj4gKwkJfSAqd2FpdGVyczsKPiAr Cj4gICAJCXN0cnVjdCB7Cj4gICAJCQl1MzIgZ2Z4X21vZGU7Cj4gICAJCQl1bmlvbiB7Cj4gQEAg LTE0MTUsNyArMTQyMiw3IEBAIHN0cnVjdCBpOTE1X2dwdV9lcnJvciB7Cj4gICAjZGVmaW5lIEk5 MTVfU1RPUF9SSU5HX0FMTE9XX1dBUk4gICAgICAoMSA8PCAzMCkKPgo+ICAgCS8qIEZvciBtaXNz ZWQgaXJxL3NlcW5vIHNpbXVsYXRpb24uICovCj4gLQl1bnNpZ25lZCBpbnQgdGVzdF9pcnFfcmlu Z3M7Cj4gKwl1bnNpZ25lZCBsb25nIHRlc3RfaXJxX3JpbmdzOwo+ICAgfTsKPgo+ICAgZW51bSBt b2Rlc2V0X3Jlc3RvcmUgewo+IEBAIC0yOTQxLDcgKzI5NDgsNiBAQCBpYnhfZGlzYWJsZV9kaXNw bGF5X2ludGVycnVwdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90 IGJpdHMpCj4gICAJaWJ4X2Rpc3BsYXlfaW50ZXJydXB0X3VwZGF0ZShkZXZfcHJpdiwgYml0cywg MCk7Cj4gICB9Cj4KPiAtCj4gICAvKiBpOTE1X2dlbS5jICovCj4gICBpbnQgaTkxNV9nZW1fY3Jl YXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCQkgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiBAQCAtMzgxNSw0ICszODIxLDMzIEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBpOTE1X3RyYWNlX2lycV9nZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+ICAgCQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmZW5naW5lLT50cmFjZV9pcnFf cmVxLCByZXEpOwo+ICAgfQo+Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBfX2k5MTVfcmVxdWVzdF9p cnFfY29tcGxldGUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCS8q IEVuc3VyZSBvdXIgcmVhZCBvZiB0aGUgc2Vxbm8gaXMgY29oZXJlbnQgc28gdGhhdCB3ZQo+ICsJ ICogZG8gbm90ICJtaXNzIGFuIGludGVycnVwdCIgKGkuZS4gaWYgdGhpcyBpcyB0aGUgbGFzdAo+ ICsJICogcmVxdWVzdCBhbmQgdGhlIHNlcW5vIHdyaXRlIGZyb20gdGhlIEdQVSBpcyBub3Qgdmlz aWJsZQo+ICsJICogYnkgdGhlIHRpbWUgdGhlIGludGVycnVwdCBmaXJlcywgd2Ugd2lsbCBzZWUg dGhhdCB0aGUKPiArCSAqIHJlcXVlc3QgaXMgaW5jb21wbGV0ZSBhbmQgZ28gYmFjayB0byBzbGVl cCBhd2FpdGluZwo+ICsJICogYW5vdGhlciBpbnRlcnJ1cHQgdGhhdCB3aWxsIG5ldmVyIGNvbWUu KQo+ICsJICoKPiArCSAqIFN0cmljdGx5LCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlIGFm dGVyIGFuIGludGVycnVwdCwKPiArCSAqIGJ1dCBpdCBpcyBlYXNpZXIgYW5kIHNhZmVyIHRvIGRv IGl0IGV2ZXJ5IHRpbWUgdGhlIHdhaXRlcgo+ICsJICogaXMgd29rZW4uCj4gKwkgKi8KPiArCWlm IChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIGZhbHNlKSkKPiArCQlyZXR1cm4gdHJ1 ZTsKPiArCj4gKwkvKiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IGdwdSByZXNldCBoYXBw ZW5lZCBpbiBiZXR3ZWVuCj4gKwkgKiB0aGUgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQgYW5kIG5v dy4gSWYgYSByZXNldCBoYXMgb2NjdXJyZWQsCj4gKwkgKiB0aGUgcmVxdWVzdCBpcyBlZmZlY3Rp dmVseSBjb21wbGV0ZSAod2UgZWl0aGVyIGFyZSBpbiB0aGUKPiArCSAqIHByb2Nlc3Mgb2Ygb3Ig aGF2ZSBkaXNjYXJkZWQgdGhlIHJlbmRlcmluZyBhbmQgY29tcGxldGVseQo+ICsJICogcmVzZXQg dGhlIEdQVS4gVGhlIHJlc3VsdHMgb2YgdGhlIHJlcXVlc3QgYXJlIGxvc3QgYW5kIHdlCj4gKwkg KiBhcmUgZnJlZSB0byBjb250aW51ZSBvbiB3aXRoIHRoZSBvcmlnaW5hbCBvcGVyYXRpb24uCj4g KwkgKi8KPiArCWlmIChyZXEtPnJlc2V0X2NvdW50ZXIgIT0gaTkxNV9yZXNldF9jb3VudGVyKCZy ZXEtPmk5MTUtPmdwdV9lcnJvcikpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0dXJuIGZh bHNlOwo+ICt9Cj4gKwo+ICAgI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXgg MDYwMTNiOWZiYzZhLi45MzQ4YjVkN2RlMGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK PiBAQCAtMTEyMywxNyArMTEyMyw2IEBAIGk5MTVfZ2VtX2NoZWNrX3dlZGdlKHVuc2lnbmVkIHJl c2V0X2NvdW50ZXIsIGJvb2wgaW50ZXJydXB0aWJsZSkKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPgo+ IC1zdGF0aWMgdm9pZCBmYWtlX2lycSh1bnNpZ25lZCBsb25nIGRhdGEpCj4gLXsKPiAtCXdha2Vf dXBfcHJvY2Vzcygoc3RydWN0IHRhc2tfc3RydWN0ICopZGF0YSk7Cj4gLX0KPiAtCj4gLXN0YXRp YyBib29sIG1pc3NlZF9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0J CSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXJldHVybiB0 ZXN0X2JpdChlbmdpbmUtPmlkLCAmZGV2X3ByaXYtPmdwdV9lcnJvci5taXNzZWRfaXJxX3Jpbmdz KTsKPiAtfQo+IC0KPiAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2FsX2Nsb2NrX3VzKHVuc2ln bmVkICpjcHUpCj4gICB7Cj4gICAJdW5zaWduZWQgbG9uZyB0Owo+IEBAIC0xMTY2LDcgKzExNTUs NyBAQCBzdGF0aWMgYm9vbCBidXN5d2FpdF9zdG9wKHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdW5z aWduZWQgY3B1KQo+ICAgCXJldHVybiB0aGlzX2NwdSAhPSBjcHU7Cj4gICB9Cj4KPiAtc3RhdGlj IGludCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx LCBpbnQgc3RhdGUpCj4gK3N0YXRpYyBib29sIF9faTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBzdGF0ZSkKPiAgIHsKPiAgIAl1bnNpZ25lZCBs b25nIHRpbWVvdXQ7Cj4gICAJdW5zaWduZWQgY3B1Owo+IEBAIC0xMTgxLDE3ICsxMTcwLDE0IEBA IHN0YXRpYyBpbnQgX19pOTE1X3NwaW5fcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSwgaW50IHN0YXRlKQo+ICAgCSAqIHRha2VzIHRvIHNsZWVwIG9uIGEgcmVxdWVzdCwg b24gdGhlIG9yZGVyIG9mIGEgbWljcm9zZWNvbmQuCj4gICAJICovCj4KPiAtCWlmIChyZXEtPmVu Z2luZS0+aXJxX3JlZmNvdW50KQo+IC0JCXJldHVybiAtRUJVU1k7Cj4gLQo+ICAgCS8qIE9ubHkg c3BpbiBpZiB3ZSBrbm93IHRoZSBHUFUgaXMgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QgKi8KPiAg IAlpZiAoIWk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChyZXEsIHRydWUpKQo+IC0JCXJldHVybiAt RUFHQUlOOwo+ICsJCXJldHVybiBmYWxzZTsKPgo+ICAgCXRpbWVvdXQgPSBsb2NhbF9jbG9ja191 cygmY3B1KSArIDU7Cj4gLQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7Cj4gKwlkbyB7Cj4gICAJ CWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIHRydWUpKQo+IC0JCQlyZXR1cm4g MDsKPiArCQkJcmV0dXJuIHRydWU7Cj4KPiAgIAkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0 YXRlLCBjdXJyZW50KSkKPiAgIAkJCWJyZWFrOwo+IEBAIC0xMjAwLDEyICsxMTg2LDkgQEAgc3Rh dGljIGludCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxLCBpbnQgc3RhdGUpCj4gICAJCQlicmVhazsKPgo+ICAgCQljcHVfcmVsYXhfbG93bGF0ZW5j eSgpOwo+IC0JfQo+IC0KPiAtCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIGZh bHNlKSkKPiAtCQlyZXR1cm4gMDsKPiArCX0gd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSk7Cj4KPiAt CXJldHVybiAtRUFHQUlOOwo+ICsJcmV0dXJuIGZhbHNlOwo+ICAgfQo+Cj4gICAvKioKPiBAQCAt MTIyOSwxNyArMTIxMiwxMyBAQCBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAgIAkJCXM2NCAqdGltZW91dCwKPiAgIAkJCXN0cnVjdCBp bnRlbF9ycHNfY2xpZW50ICpycHMpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9lbmdpbmUocmVxKTsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJlcS0+aTkxNTsKPiAtCWNvbnN0IGJvb2wgaXJxX3Rl c3RfaW5fcHJvZ3Jlc3MgPQo+IC0JCUFDQ0VTU19PTkNFKGRldl9wcml2LT5ncHVfZXJyb3IudGVz dF9pcnFfcmluZ3MpICYgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKTsKPiAgIAlpbnQgc3RhdGUg PSBpbnRlcnJ1cHRpYmxlID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElC TEU7Cj4gLQlERUZJTkVfV0FJVCh3YWl0KTsKPiAtCXVuc2lnbmVkIGxvbmcgdGltZW91dF9leHBp cmU7Cj4gKwlzdHJ1Y3QgaW50ZWxfd2FpdCB3YWl0Owo+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0 X3JlbWFpbjsKPiAgIAlzNjQgYmVmb3JlID0gMDsgLyogT25seSB0byBzaWxlbmNlIGEgY29tcGls ZXIgd2FybmluZy4gKi8KPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0ID0gMDsKPgo+IC0JV0FSTigh aW50ZWxfaXJxc19lbmFibGVkKGRldl9wcml2KSwgIklSUXMgZGlzYWJsZWQiKTsKPiArCW1pZ2h0 X3NsZWVwKCk7Cj4KPiAgIAlpZiAobGlzdF9lbXB0eSgmcmVxLT5saXN0KSkKPiAgIAkJcmV0dXJu IDA7Cj4gQEAgLTEyNDcsNyArMTIyNiw3IEBAIGludCBfX2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICAgCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2Nv bXBsZXRlZChyZXEsIHRydWUpKQo+ICAgCQlyZXR1cm4gMDsKPgo+IC0JdGltZW91dF9leHBpcmUg PSAwOwo+ICsJdGltZW91dF9yZW1haW4gPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKPiAgIAlpZiAo dGltZW91dCkgewo+ICAgCQlpZiAoV0FSTl9PTigqdGltZW91dCA8IDApKQo+ICAgCQkJcmV0dXJu IC1FSU5WQUw7Cj4gQEAgLTEyNTUsNyArMTIzNCw3IEBAIGludCBfX2k5MTVfd2FpdF9yZXF1ZXN0 KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICAgCQlpZiAoKnRpbWVvdXQgPT0g MCkKPiAgIAkJCXJldHVybiAtRVRJTUU7Cj4KPiAtCQl0aW1lb3V0X2V4cGlyZSA9IGppZmZpZXMg KyBuc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoKnRpbWVvdXQpOwo+ICsJCXRpbWVvdXRfcmVtYWlu ID0gbnNlY3NfdG9famlmZmllc190aW1lb3V0KCp0aW1lb3V0KTsKPgo+ICAgCQkvKgo+ICAgCQkg KiBSZWNvcmQgY3VycmVudCB0aW1lIGluIGNhc2UgaW50ZXJydXB0ZWQgYnkgc2lnbmFsLCBvciB3 ZWRnZWQuCj4gQEAgLTEyNjMsNzggKzEyNDIsNTcgQEAgaW50IF9faTkxNV93YWl0X3JlcXVlc3Qo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gICAJCWJlZm9yZSA9IGt0aW1lX2dl dF9yYXdfbnMoKTsKPiAgIAl9Cj4KPiAtCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49 IDYpCj4gLQkJZ2VuNl9ycHNfYm9vc3QoZGV2X3ByaXYsIHJwcywgcmVxLT5lbWl0dGVkX2ppZmZp ZXMpOwo+IC0KPiAgIAl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4ocmVxKTsKPgo+ IC0JLyogT3B0aW1pc3RpYyBzcGluIGZvciB0aGUgbmV4dCBqaWZmaWUgYmVmb3JlIHRvdWNoaW5n IElSUXMgKi8KPiAtCXJldCA9IF9faTkxNV9zcGluX3JlcXVlc3QocmVxLCBzdGF0ZSk7Cj4gLQlp ZiAocmV0ID09IDApCj4gLQkJZ290byBvdXQ7Cj4gKwlpZiAoSU5URUxfSU5GTyhyZXEtPmk5MTUp LT5nZW4gPj0gNikKPiArCQlnZW42X3Jwc19ib29zdChyZXEtPmk5MTUsIHJwcywgcmVxLT5lbWl0 dGVkX2ppZmZpZXMpOwo+Cj4gLQlpZiAoIWlycV90ZXN0X2luX3Byb2dyZXNzICYmIFdBUk5fT04o IWVuZ2luZS0+aXJxX2dldChlbmdpbmUpKSkgewo+IC0JCXJldCA9IC1FTk9ERVY7Cj4gLQkJZ290 byBvdXQ7Cj4gLQl9Cj4gLQo+IC0JZm9yICg7Oykgewo+IC0JCXN0cnVjdCB0aW1lcl9saXN0IHRp bWVyOwo+ICsJLyogT3B0aW1pc3RpYyBzcGluIGZvciB0aGUgbmV4dCB+amlmZmllIGJlZm9yZSB0 b3VjaGluZyBJUlFzICovCj4gKwlpZiAoX19pOTE1X3NwaW5fcmVxdWVzdChyZXEsIHN0YXRlKSkK PiArCQlnb3RvIGNvbXBsZXRlOwo+Cj4gLQkJcHJlcGFyZV90b193YWl0KCZlbmdpbmUtPmlycV9x dWV1ZSwgJndhaXQsIHN0YXRlKTsKPiAtCj4gLQkJLyogV2UgbmVlZCB0byBjaGVjayB3aGV0aGVy IGFueSBncHUgcmVzZXQgaGFwcGVuZWQgaW4gYmV0d2Vlbgo+IC0JCSAqIHRoZSByZXF1ZXN0IGJl aW5nIHN1Ym1pdHRlZCBhbmQgbm93LiBJZiBhIHJlc2V0IGhhcyBvY2N1cnJlZCwKPiAtCQkgKiB0 aGUgcmVxdWVzdCBpcyBlZmZlY3RpdmVseSBjb21wbGV0ZSAod2UgZWl0aGVyIGFyZSBpbiB0aGUK PiAtCQkgKiBwcm9jZXNzIG9mIG9yIGhhdmUgZGlzY2FyZGVkIHRoZSByZW5kZXJpbmcgYW5kIGNv bXBsZXRlbHkKPiAtCQkgKiByZXNldCB0aGUgR1BVLiBUaGUgcmVzdWx0cyBvZiB0aGUgcmVxdWVz dCBhcmUgbG9zdCBhbmQgd2UKPiAtCQkgKiBhcmUgZnJlZSB0byBjb250aW51ZSBvbiB3aXRoIHRo ZSBvcmlnaW5hbCBvcGVyYXRpb24uCj4gKwlpbnRlbF93YWl0X2luaXQoJndhaXQsIHJlcS0+c2Vx bm8pOwo+ICsJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwo+ICsJaWYgKGludGVsX2VuZ2luZV9h ZGRfd2FpdChyZXEtPmVuZ2luZSwgJndhaXQpKQo+ICsJCS8qIEluIG9yZGVyIHRvIGNoZWNrIHRo YXQgd2UgaGF2ZW4ndCBtaXNzZWQgdGhlIGludGVycnVwdAo+ICsJCSAqIGFzIHdlIGVuYWJsZWQg aXQsIHdlIG5lZWQgdG8ga2ljayBvdXJzZWx2ZXMgdG8gZG8gYQo+ICsJCSAqIGNvaGVyZW50IGNo ZWNrIG9uIHRoZSBzZXFubyBiZWZvcmUgd2Ugc2xlZXAuCj4gICAJCSAqLwo+IC0JCWlmIChyZXEt PnJlc2V0X2NvdW50ZXIgIT0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9y KSkgewo+IC0JCQlyZXQgPSAwOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+IC0JCWlmIChpOTE1 X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIGZhbHNlKSkgewo+IC0JCQlyZXQgPSAwOwo+IC0J CQlicmVhazsKPiAtCQl9Cj4gKwkJZ290byB3YWtldXA7Cj4KPiArCWZvciAoOzspIHsKPiAgIAkJ aWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCBjdXJyZW50KSkgewo+ICAgCQkJcmV0ID0g LUVSRVNUQVJUU1lTOwo+ICAgCQkJYnJlYWs7Cj4gICAJCX0KPgo+IC0JCWlmICh0aW1lb3V0ICYm IHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dF9leHBpcmUpKSB7Cj4gKwkJLyogRW5zdXJl IHRoYXQgZXZlbiBpZiB0aGUgR1BVIGhhbmdzLCB3ZSBnZXQgd29rZW4gdXAuICovCj4gKwkJaTkx NV9xdWV1ZV9oYW5nY2hlY2socmVxLT5pOTE1KTsKPiArCj4gKwkJdGltZW91dF9yZW1haW4gPSBp b19zY2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfcmVtYWluKTsKPiArCQlpZiAodGltZW91dF9yZW1h aW4gPT0gMCkgewo+ICAgCQkJcmV0ID0gLUVUSU1FOwo+ICAgCQkJYnJlYWs7Cj4gICAJCX0KPgo+ IC0JCS8qIEVuc3VyZSB0aGF0IGV2ZW4gaWYgdGhlIEdQVSBoYW5ncywgd2UgZ2V0IHdva2VuIHVw LiAqLwo+IC0JCWk5MTVfcXVldWVfaGFuZ2NoZWNrKGRldl9wcml2KTsKPiAtCj4gLQkJdGltZXIu ZnVuY3Rpb24gPSBOVUxMOwo+IC0JCWlmICh0aW1lb3V0IHx8IG1pc3NlZF9pcnEoZGV2X3ByaXYs IGVuZ2luZSkpIHsKPiAtCQkJdW5zaWduZWQgbG9uZyBleHBpcmU7Cj4gLQo+IC0JCQlzZXR1cF90 aW1lcl9vbl9zdGFjaygmdGltZXIsIGZha2VfaXJxLCAodW5zaWduZWQgbG9uZyljdXJyZW50KTsK PiAtCQkJZXhwaXJlID0gbWlzc2VkX2lycShkZXZfcHJpdiwgZW5naW5lKSA/IGppZmZpZXMgKyAx IDogdGltZW91dF9leHBpcmU7Cj4gLQkJCW1vZF90aW1lcigmdGltZXIsIGV4cGlyZSk7Cj4gLQkJ fQo+ICsJCWlmIChpbnRlbF93YWl0X2NvbXBsZXRlKCZ3YWl0KSkKPiArCQkJYnJlYWs7Cj4KPiAt CQlpb19zY2hlZHVsZSgpOwo+ICt3YWtldXA6Cj4gKwkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUp Owo+Cj4gLQkJaWYgKHRpbWVyLmZ1bmN0aW9uKSB7Cj4gLQkJCWRlbF9zaW5nbGVzaG90X3RpbWVy X3N5bmMoJnRpbWVyKTsKPiAtCQkJZGVzdHJveV90aW1lcl9vbl9zdGFjaygmdGltZXIpOwo+IC0J CX0KPiArCQkvKiBDYXJlZnVsbHkgY2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgY29tcGxldGUsIGdp dmluZyB0aW1lCj4gKwkJICogZm9yIHRoZSBzZXFubyB0byBiZSB2aXNpYmxlIGZvbGxvd2luZyB0 aGUgaW50ZXJydXB0Lgo+ICsJCSAqIFdlIGFsc28gaGF2ZSB0byBjaGVjayBpbiBjYXNlIHdlIGFy ZSBraWNrZWQgYnkgdGhlIEdQVQo+ICsJCSAqIHJlc2V0IGluIG9yZGVyIHRvIGRyb3AgdGhlIHN0 cnVjdF9tdXRleC4KPiArCQkgKi8KPiArCQlpZiAoX19pOTE1X3JlcXVlc3RfaXJxX2NvbXBsZXRl KHJlcSkpCj4gKwkJCWJyZWFrOwo+ICAgCX0KPiAtCWlmICghaXJxX3Rlc3RfaW5fcHJvZ3Jlc3Mp Cj4gLQkJZW5naW5lLT5pcnFfcHV0KGVuZ2luZSk7Cj4KPiAtCWZpbmlzaF93YWl0KCZlbmdpbmUt PmlycV9xdWV1ZSwgJndhaXQpOwo+IC0KPiAtb3V0Ogo+ICsJaW50ZWxfZW5naW5lX3JlbW92ZV93 YWl0KHJlcS0+ZW5naW5lLCAmd2FpdCk7Cj4gKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVO TklORyk7Cj4gK2NvbXBsZXRlOgo+ICAgCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQo cmVxKTsKPgo+ICAgCWlmICh0aW1lb3V0KSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9l cnJvci5jCj4gaW5kZXggMzRmZjI0NTljZWVhLi44OTI0MWZmY2M2NzYgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtNDYzLDYgKzQ2MywxOCBAQCBpbnQgaTkx NV9lcnJvcl9zdGF0ZV90b19zdHIoc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1ZiAqbSwK PiAgIAkJCX0KPiAgIAkJfQo+Cj4gKwkJaWYgKGVycm9yLT5yaW5nW2ldLm51bV93YWl0ZXJzKSB7 Cj4gKwkJCWVycl9wcmludGYobSwgIiVzIC0tLSAlZCB3YWl0ZXJzXG4iLAo+ICsJCQkJICAgZGV2 X3ByaXYtPmVuZ2luZVtpXS5uYW1lLAo+ICsJCQkJICAgZXJyb3ItPnJpbmdbaV0ubnVtX3dhaXRl cnMpOwo+ICsJCQlmb3IgKGogPSAwOyBqIDwgZXJyb3ItPnJpbmdbaV0ubnVtX3dhaXRlcnM7IGor Kykgewo+ICsJCQkJZXJyX3ByaW50ZihtLCAiIHNlcW5vIDB4JTA4eCBmb3IgJXMgWyVkXVxuIiwK PiArCQkJCQkgICBlcnJvci0+cmluZ1tpXS53YWl0ZXJzW2pdLnNlcW5vLAo+ICsJCQkJCSAgIGVy cm9yLT5yaW5nW2ldLndhaXRlcnNbal0uY29tbSwKPiArCQkJCQkgICBlcnJvci0+cmluZ1tpXS53 YWl0ZXJzW2pdLnBpZCk7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICAgCQlpZiAoKG9iaiA9IGVycm9y LT5yaW5nW2ldLnJpbmdidWZmZXIpKSB7Cj4gICAJCQllcnJfcHJpbnRmKG0sICIlcyAtLS0gcmlu Z2J1ZmZlciA9IDB4JTA4eFxuIiwKPiAgIAkJCQkgICBkZXZfcHJpdi0+ZW5naW5lW2ldLm5hbWUs Cj4gQEAgLTYwNSw4ICs2MTcsOSBAQCBzdGF0aWMgdm9pZCBpOTE1X2Vycm9yX3N0YXRlX2ZyZWUo c3RydWN0IGtyZWYgKmVycm9yX3JlZikKPiAgIAkJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJv ci0+cmluZ1tpXS5yaW5nYnVmZmVyKTsKPiAgIAkJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJv ci0+cmluZ1tpXS5od3NfcGFnZSk7Cj4gICAJCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3It PnJpbmdbaV0uY3R4KTsKPiAtCQlrZnJlZShlcnJvci0+cmluZ1tpXS5yZXF1ZXN0cyk7Cj4gICAJ CWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnJpbmdbaV0ud2FfY3R4KTsKPiArCQlrZnJl ZShlcnJvci0+cmluZ1tpXS5yZXF1ZXN0cyk7Cj4gKwkJa2ZyZWUoZXJyb3ItPnJpbmdbaV0ud2Fp dGVycyk7Cj4gICAJfQo+Cj4gICAJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJvci0+c2VtYXBo b3JlX29iaik7Cj4gQEAgLTg5Miw2ICs5MDUsNDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9yZWNvcmRf c2VtYXBob3JlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAl9 Cj4gICB9Cj4KPiArc3RhdGljIHZvaWQgZW5naW5lX3JlY29yZF93YWl0ZXJzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJCSAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3Jpbmcg KmVyaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5i cmVhZGNydW1iczsKPiArCXN0cnVjdCBkcm1faTkxNV9lcnJvcl93YWl0ZXIgKndhaXRlcjsKPiAr CXN0cnVjdCByYl9ub2RlICpyYjsKPiArCWludCBjb3VudDsKPiArCj4gKwllcmluZy0+bnVtX3dh aXRlcnMgPSAwOwo+ICsJZXJpbmctPndhaXRlcnMgPSBOVUxMOwo+ICsKPiArCXNwaW5fbG9jaygm Yi0+bG9jayk7Cj4gKwljb3VudCA9IDA7Cj4gKwlmb3IgKHJiID0gcmJfZmlyc3QoJmItPndhaXRl cnMpOyByYiAhPSBOVUxMOyByYiA9IHJiX25leHQocmIpKQo+ICsJCWNvdW50Kys7Cj4gKwlzcGlu X3VubG9jaygmYi0+bG9jayk7Cj4gKwo+ICsJd2FpdGVyID0gTlVMTDsKPiArCWlmIChjb3VudCkK PiArCQl3YWl0ZXIgPSBrbWFsbG9jKGNvdW50KnNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jf d2FpdGVyKSwKPiArCQkJCSBHRlBfQVRPTUlDKTsKPiArCWlmICghd2FpdGVyKQo+ICsJCXJldHVy bjsKPiArCj4gKwllcmluZy0+d2FpdGVycyA9IHdhaXRlcjsKPiArCj4gKwlzcGluX2xvY2soJmIt PmxvY2spOwo+ICsJZm9yIChyYiA9IHJiX2ZpcnN0KCZiLT53YWl0ZXJzKTsgcmIgIT0gTlVMTDsg cmIgPSByYl9uZXh0KHJiKSkgewo+ICsJCXN0cnVjdCBpbnRlbF93YWl0ICp3ID0gY29udGFpbmVy X29mKHJiLCB0eXBlb2YoKncpLCBub2RlKTsKPiArCj4gKwkJc3RyY3B5KHdhaXRlci0+Y29tbSwg dy0+dGFzay0+Y29tbSk7Cj4gKwkJd2FpdGVyLT5waWQgPSB3LT50YXNrLT5waWQ7Cj4gKwkJd2Fp dGVyLT5zZXFubyA9IHctPnNlcW5vOwo+ICsJCXdhaXRlcisrOwo+ICsKPiArCQlpZiAoKytlcmlu Zy0+bnVtX3dhaXRlcnMgPT0gY291bnQpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsJc3Bpbl91bmxv Y2soJmItPmxvY2spOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQgaTkxNV9yZWNvcmRfcmluZ19z dGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJCQkJICAgc3RydWN0 IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvciwKPiAgIAkJCQkgICBzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCj4gQEAgLTkyNiw3ICs5ODAsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X3Jl Y29yZF9yaW5nX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJ ZXJpbmctPmluc3Rkb25lID0gSTkxNV9SRUFEKEdFTjJfSU5TVERPTkUpOwo+ICAgCX0KPgo+IC0J ZXJpbmctPndhaXRpbmcgPSB3YWl0cXVldWVfYWN0aXZlKCZlbmdpbmUtPmlycV9xdWV1ZSk7Cj4g KwllcmluZy0+d2FpdGluZyA9IGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVuZ2luZSk7Cj4gICAJ ZXJpbmctPmluc3RwbSA9IEk5MTVfUkVBRChSSU5HX0lOU1RQTShlbmdpbmUtPm1taW9fYmFzZSkp Owo+ICAgCWVyaW5nLT5hY3RoZCA9IGludGVsX3JpbmdfZ2V0X2FjdGl2ZV9oZWFkKGVuZ2luZSk7 Cj4gICAJZXJpbmctPnNlcW5vID0gZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKTsKPiBAQCAtMTAz Miw2ICsxMDg2LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVjb3JkX3JpbmdzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJZXJyb3ItPnJpbmdbaV0udmFsaWQgPSB0 cnVlOwo+Cj4gICAJCWk5MTVfcmVjb3JkX3Jpbmdfc3RhdGUoZGV2X3ByaXYsIGVycm9yLCBlbmdp bmUsICZlcnJvci0+cmluZ1tpXSk7Cj4gKwkJZW5naW5lX3JlY29yZF93YWl0ZXJzKGVuZ2luZSwg JmVycm9yLT5yaW5nW2ldKTsKPgo+ICAgCQlyZXF1ZXN0ID0gaTkxNV9nZW1fZmluZF9hY3RpdmVf cmVxdWVzdChlbmdpbmUpOwo+ICAgCQlpZiAocmVxdWVzdCkgewo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9p cnEuYwo+IGluZGV4IDI3ZGQ0NWE3MjkxYy4uYzQ5YjgzNTZhODBkIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2lycS5jCj4gQEAgLTk4OCwxMyArOTg4LDEwIEBAIHN0YXRpYyB2b2lkIGlyb25sYWtl X3Jwc19jaGFuZ2VfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+Cj4gICBzdGF0aWMgdm9pZCBub3RpZnlfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gICB7Cj4gLQlpZiAoIWludGVsX2VuZ2luZV9pbml0aWFsaXplZChlbmdpbmUpKQo+ IC0JCXJldHVybjsKPiAtCj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X25vdGlmeShlbmdpbmUp Owo+IC0JZW5naW5lLT51c2VyX2ludGVycnVwdHMrKzsKPiAtCj4gLQl3YWtlX3VwX2FsbCgmZW5n aW5lLT5pcnFfcXVldWUpOwo+ICsJaWYgKGludGVsX2VuZ2luZV93YWtldXAoZW5naW5lKSkgewo+ ICsJCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5KGVuZ2luZSk7Cj4gKwkJZW5naW5lLT51 c2VyX2ludGVycnVwdHMrKzsKPiArCX0KPiAgIH0KPgo+ICAgc3RhdGljIHZvaWQgdmx2X2MwX3Jl YWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IEBAIC0xMDc1LDcgKzEwNzIs NyBAQCBzdGF0aWMgYm9vbCBhbnlfd2FpdGVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+Cj4gICAJZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpCj4gLQkJaWYgKGVuZ2luZS0+aXJxX3JlZmNvdW50 KQo+ICsJCWlmIChpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihlbmdpbmUpKQo+ICAgCQkJcmV0dXJu IHRydWU7Cj4KPiAgIAlyZXR1cm4gZmFsc2U7Cj4gQEAgLTI1MDUsOCArMjUwMiw2IEBAIHN0YXRp YyBpcnFyZXR1cm5fdCBnZW44X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiAgIHN0 YXRpYyB2b2lkIGk5MTVfZXJyb3Jfd2FrZV91cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gICAJCQkgICAgICAgYm9vbCByZXNldF9jb21wbGV0ZWQpCj4gICB7Cj4gLQlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQo+ICAgCS8qCj4gICAJICogTm90aWZ5IGFs bCB3YWl0ZXJzIGZvciBHUFUgY29tcGxldGlvbiBldmVudHMgdGhhdCByZXNldCBzdGF0ZSBoYXMK PiAgIAkgKiBiZWVuIGNoYW5nZWQsIGFuZCB0aGF0IHRoZXkgbmVlZCB0byByZXN0YXJ0IHRoZWly IHdhaXQgYWZ0ZXIKPiBAQCAtMjUxNCw5ICsyNTA5LDggQEAgc3RhdGljIHZvaWQgaTkxNV9lcnJv cl93YWtlX3VwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkgKiBhIGdw dSByZXNldCBwZW5kaW5nIHNvIHRoYXQgaTkxNV9lcnJvcl93b3JrX2Z1bmMgY2FuIGFjcXVpcmUg dGhlbSkuCj4gICAJICovCj4KPiAtCS8qIFdha2UgdXAgX193YWl0X3NlcW5vLCBwb3RlbnRpYWxs eSBob2xkaW5nIGRldi0+c3RydWN0X211dGV4LiAqLwo+IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgZGV2X3ByaXYpCj4gLQkJd2FrZV91cF9hbGwoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKPiArCS8q IFdha2UgdXAgaTkxNV93YWl0X3JlcXVlc3QsIHBvdGVudGlhbGx5IGhvbGRpbmcgZGV2LT5zdHJ1 Y3RfbXV0ZXguICovCj4gKwlpbnRlbF9raWNrX3dhaXRlcnMoZGV2X3ByaXYpOwo+Cj4gICAJLyog V2FrZSB1cCBpbnRlbF9jcnRjX3dhaXRfZm9yX3BlbmRpbmdfZmxpcHMsIGhvbGRpbmcgY3J0Yy0+ bXV0ZXguICovCj4gICAJd2FrZV91cF9hbGwoJmRldl9wcml2LT5wZW5kaW5nX2ZsaXBfcXVldWUp Owo+IEBAIC0zMDk4LDEzICszMDkyLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBraWNrX3dhaXRlcnMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Cj4gICAJaWYgKGVuZ2luZS0+aGFuZ2No ZWNrLnVzZXJfaW50ZXJydXB0cyA9PSB1c2VyX2ludGVycnVwdHMgJiYKPiAgIAkgICAgIXRlc3Rf YW5kX3NldF9iaXQoZW5naW5lLT5pZCwgJmk5MTUtPmdwdV9lcnJvci5taXNzZWRfaXJxX3Jpbmdz KSkgewo+IC0JCWlmICghKGk5MTUtPmdwdV9lcnJvci50ZXN0X2lycV9yaW5ncyAmIGludGVsX2Vu Z2luZV9mbGFnKGVuZ2luZSkpKQo+ICsJCWlmICghdGVzdF9iaXQoZW5naW5lLT5pZCwgJmk5MTUt PmdwdV9lcnJvci50ZXN0X2lycV9yaW5ncykpCj4gICAJCQlEUk1fRVJST1IoIkhhbmdjaGVjayB0 aW1lciBlbGFwc2VkLi4uICVzIGlkbGVcbiIsCj4gICAJCQkJICBlbmdpbmUtPm5hbWUpOwo+ICAg CQllbHNlCj4gICAJCQlEUk1fSU5GTygiRmFrZSBtaXNzZWQgaXJxIG9uICVzXG4iLAo+ICAgCQkJ CSBlbmdpbmUtPm5hbWUpOwo+IC0JCXdha2VfdXBfYWxsKCZlbmdpbmUtPmlycV9xdWV1ZSk7Cj4g Kwo+ICsJCWludGVsX2VuZ2luZV9lbmFibGVfZmFrZV9pcnEoZW5naW5lKTsKPiAgIAl9Cj4KPiAg IAlyZXR1cm4gdXNlcl9pbnRlcnJ1cHRzOwo+IEBAIC0zMTQ4LDcgKzMxNDMsNyBAQCBzdGF0aWMg dm9pZCBpOTE1X2hhbmdjaGVja19lbGFwc2VkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAg IAlpbnRlbF91bmNvcmVfYXJtX3VuY2xhaW1lZF9tbWlvX2RldGVjdGlvbihkZXZfcHJpdik7Cj4K PiAgIAlmb3JfZWFjaF9lbmdpbmVfaWQoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKPiAtCQlib29s IGJ1c3kgPSB3YWl0cXVldWVfYWN0aXZlKCZlbmdpbmUtPmlycV9xdWV1ZSk7Cj4gKwkJYm9vbCBi dXN5ID0gaW50ZWxfZW5naW5lX2hhc193YWl0ZXIoZW5naW5lKTsKPiAgIAkJdTY0IGFjdGhkOwo+ ICAgCQl1MzIgc2Vxbm87Cj4gICAJCXVuc2lnbmVkIHVzZXJfaW50ZXJydXB0czsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uYzgyZWNiZjc0NzBhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMKPiBAQCAtMCwwICsxLDMz MyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJpOTE1 X2Rydi5oIgo+ICsKPiArc3RhdGljIHZvaWQgaW50ZWxfYnJlYWRjcnVtYnNfZmFrZV9pcnEodW5z aWduZWQgbG9uZyBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUg PSAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKWRhdGE7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSB0 aW1lciBwZXJzaXN0cyBpbiBjYXNlIHdlIGNhbm5vdCBlbmFibGUgaW50ZXJydXB0cywKPiArCSAq IG9yIGlmIHdlIGhhdmUgcHJldmlvdXNseSBzZWVuIHNlcW5vL2ludGVycnVwdCBpbmNvaGVyZW5j eQo+ICsJICogKCJtaXNzZWQgaW50ZXJydXB0IiBzeW5kcm9tZSkuIEhlcmUgdGhlIHdvcmtlciB3 aWxsIHdha2UgdXAKPiArCSAqIGV2ZXJ5IGppZmZpZSBpbiBvcmRlciB0byBraWNrIHRoZSBvbGRl c3Qgd2FpdGVyIHRvIGRvIHRoZQo+ICsJICogY29oZXJlbnQgc2Vxbm8gY2hlY2suCj4gKwkgKi8K PiArCXJjdV9yZWFkX2xvY2soKTsKPiArCWlmIChpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSkp Cj4gKwkJbW9kX3RpbWVyKCZlbmdpbmUtPmJyZWFkY3J1bWJzLmZha2VfaXJxLCBqaWZmaWVzICsg MSk7Cj4gKwlyY3VfcmVhZF91bmxvY2soKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXJxX2Vu YWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCVdBUk5fT04oIWVu Z2luZS0+aXJxX2dldChlbmdpbmUpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXJxX2Rpc2Fi bGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwllbmdpbmUtPmlycV9w dXQoZW5naW5lKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgX19pbnRlbF9icmVhZGNydW1ic19l bmFibGVfaXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYikKPiArewo+ICsJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lID0KPiArCQljb250YWluZXJfb2YoYiwgc3RydWN0IGludGVs X2VuZ2luZV9jcywgYnJlYWRjcnVtYnMpOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBlbmdpbmUtPmk5MTU7Cj4gKwlib29sIGlycV9wb3N0ZWQgPSBmYWxzZTsKPiArCj4gKwlh c3NlcnRfc3Bpbl9sb2NrZWQoJmItPmxvY2spOwo+ICsJaWYgKGItPnJwbV93YWtlbG9jaykKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJLyogU2luY2Ugd2UgYXJlIHdhaXRpbmcgb24gYSByZXF1 ZXN0LCB0aGUgR1BVIHNob3VsZCBiZSBidXN5Cj4gKwkgKiBhbmQgc2hvdWxkIGhhdmUgaXRzIG93 biBycG0gcmVmZXJlbmNlLiBGb3IgY29tcGxldGVuZXNzLAo+ICsJICogcmVjb3JkIGFuIHJwbSBy ZWZlcmVuY2UgZm9yIG91cnNlbHZlcyB0byBjb3ZlciB0aGUKPiArCSAqIGludGVycnVwdCB3ZSB1 bm1hc2suCj4gKwkgKi8KPiArCWludGVsX3J1bnRpbWVfcG1fZ2V0X25vcmVzdW1lKGk5MTUpOwo+ ICsJYi0+cnBtX3dha2Vsb2NrID0gdHJ1ZTsKPiArCj4gKwkvKiBObyBpbnRlcnJ1cHRzPyBLaWNr IHRoZSB3YWl0ZXIgZXZlcnkgamlmZmllISAqLwo+ICsJaWYgKGludGVsX2lycXNfZW5hYmxlZChp OTE1KSkgewo+ICsJCWlmICghdGVzdF9iaXQoZW5naW5lLT5pZCwgJmk5MTUtPmdwdV9lcnJvci50 ZXN0X2lycV9yaW5ncykpIHsKPiArCQkJaXJxX2VuYWJsZShlbmdpbmUpOwo+ICsJCQlpcnFfcG9z dGVkID0gdHJ1ZTsKPiArCQl9Cj4gKwkJYi0+aXJxX2VuYWJsZWQgPSB0cnVlOwo+ICsJfQo+ICsK PiArCWlmICghYi0+aXJxX2VuYWJsZWQgfHwKPiArCSAgICB0ZXN0X2JpdChlbmdpbmUtPmlkLCAm aTkxNS0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpKQo+ICsJCW1vZF90aW1lcigmYi0+ZmFr ZV9pcnEsIGppZmZpZXMgKyAxKTsKPiArCj4gKwlyZXR1cm4gaXJxX3Bvc3RlZDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgX19pbnRlbF9icmVhZGNydW1ic19kaXNhYmxlX2lycShzdHJ1Y3QgaW50 ZWxfYnJlYWRjcnVtYnMgKmIpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSA9Cj4gKwkJY29udGFpbmVyX29mKGIsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MsIGJyZWFkY3J1 bWJzKTsKPiArCj4gKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmItPmxvY2spOwo+ICsJaWYgKCFiLT5y cG1fd2FrZWxvY2spCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChiLT5pcnFfZW5hYmxlZCkgewo+ ICsJCWlycV9kaXNhYmxlKGVuZ2luZSk7Cj4gKwkJYi0+aXJxX2VuYWJsZWQgPSBmYWxzZTsKPiAr CX0KPiArCj4gKwlpbnRlbF9ydW50aW1lX3BtX3B1dChlbmdpbmUtPmk5MTUpOwo+ICsJYi0+cnBt X3dha2Vsb2NrID0gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVs X3dhaXQgKnRvX3dhaXQoc3RydWN0IHJiX25vZGUgKm5vZGUpCj4gK3sKPiArCXJldHVybiBjb250 YWluZXJfb2Yobm9kZSwgc3RydWN0IGludGVsX3dhaXQsIG5vZGUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgX19pbnRlbF9icmVhZGNydW1ic19maW5pc2goc3RydWN0IGludGVsX2Jy ZWFkY3J1bWJzICpiLAo+ICsJCQkJCSAgICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQo+ICt7 Cj4gKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmItPmxvY2spOwo+ICsKPiArCS8qIFRoaXMgcmVxdWVz dCBpcyBjb21wbGV0ZWQsIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBtYXJrIGl0IGFzCj4g KwkgKiBjb21wbGV0ZSwgYW5kICp0aGVuKiB3YWtlIHVwIHRoZSBhc3NvY2lhdGVkIHRhc2suCj4g KwkgKi8KPiArCXJiX2VyYXNlKCZ3YWl0LT5ub2RlLCAmYi0+d2FpdGVycyk7Cj4gKwlSQl9DTEVB Ul9OT0RFKCZ3YWl0LT5ub2RlKTsKPiArCj4gKwl3YWtlX3VwX3Byb2Nlc3Mod2FpdC0+dGFzayk7 IC8qIGltcGxpY2l0IHNtcF93bWIoKSAqLwo+ICt9Cj4gKwo+ICtib29sIGludGVsX2VuZ2luZV9h ZGRfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCSAgIHN0cnVjdCBp bnRlbF93YWl0ICp3YWl0KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAm ZW5naW5lLT5icmVhZGNydW1iczsKPiArCXN0cnVjdCByYl9ub2RlICoqcCwgKnBhcmVudCwgKmNv bXBsZXRlZDsKPiArCWJvb2wgZmlyc3Q7Cj4gKwl1MzIgc2Vxbm87Cj4gKwo+ICsJc3Bpbl9sb2Nr KCZiLT5sb2NrKTsKPiArCj4gKwkvKiBJbnNlcnQgdGhlIHJlcXVlc3QgaW50byB0aGUgcmV0aXJl bWVudCBvcmRlcmVkIGxpc3QKPiArCSAqIG9mIHdhaXRlcnMgYnkgd2Fsa2luZyB0aGUgcmJ0cmVl LiBJZiB3ZSBhcmUgdGhlIG9sZGVzdAo+ICsJICogc2Vxbm8gaW4gdGhlIHRyZWUgKHRoZSBmaXJz dCB0byBiZSByZXRpcmVkKSwgdGhlbgo+ICsJICogc2V0IG91cnNlbHZlcyBhcyB0aGUgYm90dG9t LWhhbGYuCj4gKwkgKgo+ICsJICogQXMgd2UgZGVzY2VuZCB0aGUgdHJlZSwgcHJ1bmUgY29tcGxl dGVkIGJyYW5jaGVzIHNpbmNlIHdlIGhvbGQgdGhlCj4gKwkgKiBzcGlubG9jayB3ZSBrbm93IHRo YXQgdGhlIGZpcnN0X3dhaXRlciBtdXN0IGJlIGRlbGF5ZWQgYW5kIGNhbgo+ICsJICogcmVkdWNl IHNvbWUgb2YgdGhlIHNlcXVlbnRpYWwgd2FrZSB1cCBsYXRlbmN5IGlmIHdlIHRha2UgYWN0aW9u Cj4gKwkgKiBvdXJzZWx2ZXMgYW5kIHdha2UgdXAgdGhlIGNvbXBsZXRlZCB0YXNrcyBpbiBwYXJh bGxlbC4gQWxzbywgYnkKPiArCSAqIHJlbW92aW5nIHN0YWxlIGVsZW1lbnRzIGluIHRoZSB0cmVl LCB3ZSBtYXkgYmUgYWJsZSB0byByZWR1Y2UgdGhlCj4gKwkgKiBwaW5nLXBvbmcgYmV0d2VlbiB0 aGUgb2xkIGJvdHRvbS1oYWxmIGFuZCBvdXJzZWx2ZXMgYXMgZmlyc3Qtd2FpdGVyLgo+ICsJICov Cj4gKwlmaXJzdCA9IHRydWU7Cj4gKwlwYXJlbnQgPSBOVUxMOwo+ICsJY29tcGxldGVkID0gTlVM TDsKPiArCXNlcW5vID0gZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKTsKPiArCj4gKwlwID0gJmIt PndhaXRlcnMucmJfbm9kZTsKPiArCXdoaWxlICgqcCkgewo+ICsJCXBhcmVudCA9ICpwOwo+ICsJ CWlmICh3YWl0LT5zZXFubyA9PSB0b193YWl0KHBhcmVudCktPnNlcW5vKSB7Cj4gKwkJCS8qIFdl IGhhdmUgbXVsdGlwbGUgd2FpdGVycyBvbiB0aGUgc2FtZSBzZXFubywgc2VsZWN0Cj4gKwkJCSAq IHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgKHRoYXQgd2l0aCB0aGUgc21hbGxlc3QKPiArCQkJ ICogdGFzay0+cHJpbykgdG8gc2VydmUgYXMgdGhlIGJvdHRvbS1oYWxmIGZvciB0aGlzCj4gKwkJ CSAqIGdyb3VwLgo+ICsJCQkgKi8KPiArCQkJaWYgKHdhaXQtPnRhc2stPnByaW8gPiB0b193YWl0 KHBhcmVudCktPnRhc2stPnByaW8pIHsKPiArCQkJCXAgPSAmcGFyZW50LT5yYl9yaWdodDsKPiAr CQkJCWZpcnN0ID0gZmFsc2U7Cj4gKwkJCX0gZWxzZQo+ICsJCQkJcCA9ICZwYXJlbnQtPnJiX2xl ZnQ7Cj4gKwkJfSBlbHNlIGlmIChpOTE1X3NlcW5vX3Bhc3NlZCh3YWl0LT5zZXFubywKPiArCQkJ CQkgICAgIHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKSB7Cj4gKwkJCXAgPSAmcGFyZW50LT5yYl9y aWdodDsKPiArCQkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCB0b193YWl0KHBhcmVudCkt PnNlcW5vKSkKPiArCQkJCWNvbXBsZXRlZCA9IHBhcmVudDsKCkhtIGRvbid0IHlvdSBuZWVkIHRo ZSBjb21wbGV0ZWQgaGFuZGxpbmcgaW4gdGhlIGVxdWFsIHNlcW5vIGNhc2UgYXMgd2VsbD8KCj4g KwkJCWVsc2UKPiArCQkJCWZpcnN0ID0gZmFsc2U7Cj4gKwkJfSBlbHNlCj4gKwkJCXAgPSAmcGFy ZW50LT5yYl9sZWZ0Owo+ICsJfQo+ICsJcmJfbGlua19ub2RlKCZ3YWl0LT5ub2RlLCBwYXJlbnQs IHApOwo+ICsJcmJfaW5zZXJ0X2NvbG9yKCZ3YWl0LT5ub2RlLCAmYi0+d2FpdGVycyk7Cj4gKwo+ ICsJaWYgKGNvbXBsZXRlZCAhPSBOVUxMKSB7Cj4gKwkJc3RydWN0IHJiX25vZGUgKm5leHQgPSBy Yl9uZXh0KGNvbXBsZXRlZCk7Cj4gKwo+ICsJCWlmIChuZXh0ICYmIG5leHQgIT0gJndhaXQtPm5v ZGUpIHsKPiArCQkJR0VNX0JVR19PTihmaXJzdCk7Cj4gKwkJCXNtcF9zdG9yZV9tYihiLT5maXJz dF93YWl0ZXIsIHRvX3dhaXQobmV4dCktPnRhc2spOwo+ICsJCQkvKiBBcyB0aGVyZSBpcyBhIGRl bGF5IGJldHdlZW4gcmVhZGluZyB0aGUgY3VycmVudAo+ICsJCQkgKiBzZXFubywgcHJvY2Vzc2lu ZyB0aGUgY29tcGxldGVkIHRhc2tzIGFuZCBzZWxlY3RpbmcKPiArCQkJICogdGhlIG5leHQgd2Fp dGVyLCB3ZSBtYXkgaGF2ZSBtaXNzZWQgdGhlIGludGVycnVwdAo+ICsJCQkgKiBhbmQgc28gbmVl ZCBmb3IgdGhlIG5leHQgYm90dG9tLWhhbGYgdG8gd2FrZXVwLgo+ICsJCQkgKgo+ICsJCQkgKiBB bHNvIGFzIHdlIGVuYWJsZSB0aGUgSVJRLCB3ZSBtYXkgbWlzcyB0aGUKPiArCQkJICogaW50ZXJy dXB0IGZvciB0aGF0IHNlcW5vLCBzbyB3ZSBoYXZlIHRvIHdha2UgdXAKPiArCQkJICogdGhlIG5l eHQgYm90dG9tLWhhbGYgaW4gb3JkZXIgdG8gZG8gYSBjb2hlcmVudCBjaGVjawo+ICsJCQkgKiBp biBjYXNlIHRoZSBzZXFubyBwYXNzZWQuCj4gKwkJCSAqLwo+ICsJCQlfX2ludGVsX2JyZWFkY3J1 bWJzX2VuYWJsZV9pcnEoYik7Cj4gKwkJCXdha2VfdXBfcHJvY2Vzcyh0b193YWl0KG5leHQpLT50 YXNrKTsKPiArCQl9Cj4gKwo+ICsJCWRvIHsKPiArCQkJc3RydWN0IGludGVsX3dhaXQgKmNydW1i ID0gdG9fd2FpdChjb21wbGV0ZWQpOwo+ICsJCQljb21wbGV0ZWQgPSByYl9wcmV2KGNvbXBsZXRl ZCk7Cj4gKwkJCV9faW50ZWxfYnJlYWRjcnVtYnNfZmluaXNoKGIsIGNydW1iKTsKPiArCQl9IHdo aWxlIChjb21wbGV0ZWQgIT0gTlVMTCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGZpcnN0KSB7Cj4gKwkJ c21wX3N0b3JlX21iKGItPmZpcnN0X3dhaXRlciwgd2FpdC0+dGFzayk7Cj4gKwkJZmlyc3QgPV9f aW50ZWxfYnJlYWRjcnVtYnNfZW5hYmxlX2lycShiKTsKPiArCX0KPiArCUdFTV9CVUdfT04oYi0+ Zmlyc3Rfd2FpdGVyID09IE5VTEwpOwo+ICsKPiArCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKPiAr Cj4gKwlyZXR1cm4gZmlyc3Q7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZW5naW5lX2VuYWJsZV9m YWtlX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCW1vZF90aW1l cigmZW5naW5lLT5icmVhZGNydW1icy5mYWtlX2lycSwgamlmZmllcyArIDEpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIGJvb2wgY2hhaW5fd2FrZXVwKHN0cnVjdCByYl9ub2RlICpyYiwgaW50 IHByaW9yaXR5KQo+ICt7Cj4gKwlyZXR1cm4gcmIgJiYgdG9fd2FpdChyYiktPnRhc2stPnByaW8g PD0gcHJpb3JpdHk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJICAgICAgc3RydWN0IGludGVsX3dh aXQgKndhaXQpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUt PmJyZWFkY3J1bWJzOwo+ICsKPiArCS8qIFF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIHdhaXRl ciB3YXMgYWxyZWFkeSBkZWNvdXBsZWQgZnJvbQo+ICsJICogdGhlIHRyZWUgYnkgdGhlIGJvdHRv bS1oYWxmIHRvIGF2b2lkIGNvbnRlbnRpb24gb24gdGhlIHNwaW5sb2NrCj4gKwkgKiBieSB0aGUg aGVyZC4KPiArCSAqLwo+ICsJaWYgKFJCX0VNUFRZX05PREUoJndhaXQtPm5vZGUpKQo+ICsJCXJl dHVybjsKPiArCj4gKwlzcGluX2xvY2soJmItPmxvY2spOwo+ICsKPiArCWlmIChiLT5maXJzdF93 YWl0ZXIgPT0gd2FpdC0+dGFzaykgewo+ICsJCXN0cnVjdCByYl9ub2RlICpuZXh0Owo+ICsJCXN0 cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKPiArCQljb25zdCBpbnQgcHJpb3JpdHkgPSB3YWl0LT50 YXNrLT5wcmlvOwo+ICsKPiArCQkvKiBXZSBhcmUgdGhlIGN1cnJlbnQgYm90dG9tLWhhbGYuIEZp bmQgdGhlIG5leHQgY2FuZGlkYXRlLAo+ICsJCSAqIHRoZSBmaXJzdCB3YWl0ZXIgaW4gdGhlIHF1 ZXVlIG9uIHRoZSByZW1haW5pbmcgb2xkZXN0Cj4gKwkJICogcmVxdWVzdC4gQXMgbXVsdGlwbGUg c2Vxbm9zIG1heSBjb21wbGV0ZSBpbiB0aGUgdGltZSBpdAo+ICsJCSAqIHRha2VzIHVzIHRvIHdh a2UgdXAgYW5kIGZpbmQgdGhlIG5leHQgd2FpdGVyLCB3ZSBoYXZlIHRvCj4gKwkJICogd2FrZSB1 cCB0aGF0IHdhaXRlciBmb3IgaXQgdG8gcGVyZm9ybSBpdHMgb3duIGNvaGVyZW50Cj4gKwkJICog Y29tcGxldGlvbiBjaGVjay4KPiArCQkgKi8KPiArCQluZXh0ID0gcmJfbmV4dCgmd2FpdC0+bm9k ZSk7Cj4gKwkJaWYgKGNoYWluX3dha2V1cChuZXh0LCBwcmlvcml0eSkpIHsKCkRvbid0IGdldCB0 aGlzLCBuZXh0IHdhaXRlciBteSBiZSBhIGRpZmZlcmVudCBzZXFubyBzbyBob3cgaXMgdGhlIApw cmlvcml0eSBjaGVjayByZWxldmFudD8KCkFsc28sIGhvdyBjYW4gdGhlIG5leHQgbm9kZSBiZSBz bWFsbGVyIHByaW9yaXR5IGFueXdheSwgaWYgZXF1YWwgc2Vxbm8gCmlmIGhhcyBiZSBlcXVhbCBv ciBncmVhdGVyIEkgdGhvdWdodD8KClRoZW4gc2luY2UgYWRkX3dhaXRlciB3aWxsIHdha2UgdXAg b25lIGV4dHJhIHdhaXRlciB0byBoYW5kbGUgdGhlIG1pc3NlZCAKaXJxIGNhc2UsIGhlcmUgeW91 IG1heSBza2lwIGNoZWNraW5nIHRoZW0gYmFzZWQgc2ltcGx5IG9uIHRhc2sgcHJpb3JpdHkgCndo aWNoIHNlZW1zIHdyb25nLgoKPiArCQkJLyogSWYgdGhlIG5leHQgd2FpdGVyIGlzIGFscmVhZHkg Y29tcGxldGUsCj4gKwkJCSAqIHdha2UgaXQgdXAgYW5kIGNvbnRpbnVlIG9udG8gdGhlIG5leHQg d2FpdGVyLiBTbwo+ICsJCQkgKiBpZiBoYXZlIGEgc21hbGwgaGVyZCwgdGhleSB3aWxsIHdha2Ug dXAgaW4gcGFyYWxsZWwKPiArCQkJICogcmF0aGVyIHRoYW4gc2VxdWVudGlhbGx5LCB3aGljaCBz aG91bGQgcmVkdWNlCj4gKwkJCSAqIHRoZSBvdmVyYWxsIGxhdGVuY3kgaW4gd2FraW5nIGFsbCB0 aGUgY29tcGxldGVkCj4gKwkJCSAqIGNsaWVudHMuCj4gKwkJCSAqCj4gKwkJCSAqIEhvd2V2ZXIs IHdha2luZyB1cCBhIGNoYWluIGFkZHMgZXh0cmEgbGF0ZW5jeSB0bwo+ICsJCQkgKiB0aGUgZmly c3Rfd2FpdGVyLiBUaGlzIGlzIHVuZGVzaXJhYmxlIGlmIHRoYXQKPiArCQkJICogd2FpdGVyIGlz IGEgaGlnaCBwcmlvcml0eSB0YXNrLgo+ICsJCQkgKi8KPiArCQkJdTMyIHNlcW5vID0gZW5naW5l LT5nZXRfc2Vxbm8oZW5naW5lKTsKPiArCQkJd2hpbGUgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5v LCB0b193YWl0KG5leHQpLT5zZXFubykpIHsKPiArCQkJCXN0cnVjdCByYl9ub2RlICpuID0gcmJf bmV4dChuZXh0KTsKPiArCQkJCV9faW50ZWxfYnJlYWRjcnVtYnNfZmluaXNoKGIsIHRvX3dhaXQo bmV4dCkpOwo+ICsJCQkJbmV4dCA9IG47Cj4gKwkJCQlpZiAoIWNoYWluX3dha2V1cChuZXh0LCBw cmlvcml0eSkpCj4gKwkJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9Cj4gKwkJdGFzayA9IG5leHQg PyB0b193YWl0KG5leHQpLT50YXNrIDogTlVMTDsKPiArCj4gKwkJc21wX3N0b3JlX21iKGItPmZp cnN0X3dhaXRlciwgdGFzayk7Cj4gKwkJaWYgKHRhc2spIHsKPiArCQkJLyogSW4gb3VyIGhhc3Rl LCB3ZSBtYXkgaGF2ZSBjb21wbGV0ZWQgdGhlIGZpcnN0IHdhaXRlcgo+ICsJCQkgKiBiZWZvcmUg d2UgZW5hYmxlZCB0aGUgaW50ZXJydXB0LiBEbyBzbyBub3cgYXMgd2UKPiArCQkJICogaGF2ZSBh IHNlY29uZCB3YWl0ZXIgZm9yIGEgZnV0dXJlIHNlcW5vLiBBZnRlcndhcmRzLAo+ICsJCQkgKiB3 ZSBoYXZlIHRvIHdha2UgdXAgdGhhdCB3YWl0ZXIgaW4gY2FzZSB3ZSBtaXNzZWQKPiArCQkJICog dGhlIGludGVycnVwdCwgb3IgaWYgd2UgaGF2ZSB0byBoYW5kbGUgYW4KPiArCQkJICogZXhjZXB0 aW9uIHJhdGhlciB0aGFuIGEgc2Vxbm8gY29tcGxldGlvbi4KPiArCQkJICovCj4gKwkJCWlmICh0 b193YWl0KG5leHQpLT5zZXFubyAhPSB3YWl0LT5zZXFubykKPiArCQkJCV9faW50ZWxfYnJlYWRj cnVtYnNfZW5hYmxlX2lycShiKTsKPiArCQkJd2FrZV91cF9wcm9jZXNzKHRhc2spOwo+ICsJCX0g ZWxzZQo+ICsJCQlfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FibGVfaXJxKGIpOwo+ICsJfQo+ICsK PiArCWlmICghUkJfRU1QVFlfTk9ERSgmd2FpdC0+bm9kZSkpCj4gKwkJcmJfZXJhc2UoJndhaXQt Pm5vZGUsICZiLT53YWl0ZXJzKTsKPiArCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKPiArfQo+ICsK PiArdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdp bmUtPmJyZWFkY3J1bWJzOwo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZiLT5sb2NrKTsKPiArCXNl dHVwX3RpbWVyKCZiLT5mYWtlX2lycSwKPiArCQkgICAgaW50ZWxfYnJlYWRjcnVtYnNfZmFrZV9p cnEsCj4gKwkJICAgICh1bnNpZ25lZCBsb25nKWVuZ2luZSk7Cj4gK30KPiArCj4gK3ZvaWQgaW50 ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNy dW1iczsKPiArCj4gKwlkZWxfdGltZXJfc3luYygmYi0+ZmFrZV9pcnEpOwo+ICt9Cj4gKwo+ICt1 bnNpZ25lZCBpbnRlbF9raWNrX3dhaXRlcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXVuc2lnbmVkIG1h c2sgPSAwOwo+ICsKPiArCS8qIFRvIGF2b2lkIHRoZSB0YXNrX3N0cnVjdCBkaXNhcHBlYXJpbmcg YmVuZWF0aCB1cyBhcyB3ZSB3YWtlIHVwCj4gKwkgKiB0aGUgcHJvY2Vzcywgd2UgbXVzdCBmaXJz dCBpbnNwZWN0IHRoZSB0YXNrX3N0cnVjdC0+c3RhdGUgdW5kZXIgdGhlCj4gKwkgKiBSQ1UgbG9j aywgaS5lLiBhcyB3ZSBjYWxsIHdha2VfdXBfcHJvY2VzcygpIHdlIG11c3QgYmUgaG9sZGluZyB0 aGUKPiArCSAqIHJjdV9yZWFkX2xvY2soKS4KPiArCSAqLwo+ICsJcmN1X3JlYWRfbG9jaygpOwo+ ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSkKPiArCQlpZiAodW5saWtlbHkoaW50ZWxf ZW5naW5lX3dha2V1cChlbmdpbmUpKSkKPiArCQkJbWFzayB8PSBpbnRlbF9lbmdpbmVfZmxhZyhl bmdpbmUpOwo+ICsJcmN1X3JlYWRfdW5sb2NrKCk7Cj4gKwo+ICsJcmV0dXJuIG1hc2s7Cj4gK30K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IGluZGV4IGRiMTBjOTYxZTBmNC4uMzRjNmMzZmQ2 Mjk2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtMTg5NCw2ICsxODk0LDgg QEAgdm9pZCBpbnRlbF9sb2dpY2FsX3JpbmdfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gICAJaTkxNV9jbWRfcGFyc2VyX2ZpbmlfcmluZyhlbmdpbmUpOwo+ICAgCWk5 MTVfZ2VtX2JhdGNoX3Bvb2xfZmluaSgmZW5naW5lLT5iYXRjaF9wb29sKTsKPgo+ICsJaW50ZWxf ZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoZW5naW5lKTsKPiArCj4gICAJaWYgKGVuZ2luZS0+c3Rh dHVzX3BhZ2Uub2JqKSB7Cj4gICAJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZW5naW5lLT5z dGF0dXNfcGFnZS5vYmopOwo+ICAgCQllbmdpbmUtPnN0YXR1c19wYWdlLm9iaiA9IE5VTEw7Cj4g QEAgLTE5MzEsNyArMTkzMyw3IEBAIGxvZ2ljYWxfcmluZ19kZWZhdWx0X2lycXMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1bnNpZ25lZCBzaGlmdCkKPiAgIHsKPiAgIAllbmdpbmUt PmlycV9lbmFibGVfbWFzayA9IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBzaGlmdDsKPiAg IAllbmdpbmUtPmlycV9rZWVwX21hc2sgPSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwg c2hpZnQ7Cj4gLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlbmdpbmUtPmlycV9xdWV1ZSk7Cj4gKwlp bnRlbF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhlbmdpbmUpOwo+ICAgfQo+Cj4gICBzdGF0aWMg aW50Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IGluZGV4IDhkMzVh Mzk3OGY5Yi4uOWJkM2RkNzU2ZDNkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuYwo+IEBAIC0yMjU4LDcgKzIyNTgsNyBAQCBzdGF0aWMgaW50IGludGVsX2luaXRf cmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAltZW1zZXQoZW5naW5lLT5z ZW1hcGhvcmUuc3luY19zZXFubywgMCwKPiAgIAkgICAgICAgc2l6ZW9mKGVuZ2luZS0+c2VtYXBo b3JlLnN5bmNfc2Vxbm8pKTsKPgo+IC0JaW5pdF93YWl0cXVldWVfaGVhZCgmZW5naW5lLT5pcnFf cXVldWUpOwo+ICsJaW50ZWxfZW5naW5lX2luaXRfYnJlYWRjcnVtYnMoZW5naW5lKTsKPgo+ICAg CXJpbmdidWYgPSBpbnRlbF9lbmdpbmVfY3JlYXRlX3JpbmdidWZmZXIoZW5naW5lLCAzMiAqIFBB R0VfU0laRSk7Cj4gICAJaWYgKElTX0VSUihyaW5nYnVmKSkgewo+IEBAIC0yMzI3LDYgKzIzMjcs NyBAQCB2b2lkIGludGVsX2NsZWFudXBfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPgo+ICAgCWk5MTVfY21kX3BhcnNlcl9maW5pX3JpbmcoZW5naW5lKTsKPiAgIAlpOTE1 X2dlbV9iYXRjaF9wb29sX2ZpbmkoJmVuZ2luZS0+YmF0Y2hfcG9vbCk7Cj4gKwlpbnRlbF9lbmdp bmVfZmluaV9icmVhZGNydW1icyhlbmdpbmUpOwo+ICAgCWVuZ2luZS0+aTkxNSA9IE5VTEw7Cj4g ICB9Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggOTI5 ZTdiNGFmMmE0Li4yODU5N2VhOGZiZjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5oCj4gQEAgLTE2MCw2ICsxNjAsMzEgQEAgc3RydWN0IGludGVsX2VuZ2luZV9j cyB7Cj4gICAJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKmJ1ZmZlcjsKPiAgIAlzdHJ1Y3QgbGlz dF9oZWFkIGJ1ZmZlcnM7Cj4KPiArCS8qIFJhdGhlciB0aGFuIGhhdmUgZXZlcnkgY2xpZW50IHdh aXQgdXBvbiBhbGwgdXNlciBpbnRlcnJ1cHRzLAo+ICsJICogd2l0aCB0aGUgaGVyZCB3YWtpbmcg YWZ0ZXIgZXZlcnkgaW50ZXJydXB0IGFuZCBlYWNoIGRvaW5nIHRoZQo+ICsJICogaGVhdnl3ZWln aHQgc2Vxbm8gZGFuY2UsIHdlIGRlbGVnYXRlIHRoZSB0YXNrIChvZiBiZWluZyB0aGUKPiArCSAq IGJvdHRvbS1oYWxmIG9mIHRoZSB1c2VyIGludGVycnVwdCkgdG8gdGhlIGZpcnN0IGNsaWVudC4g QWZ0ZXIKPiArCSAqIGV2ZXJ5IGludGVycnVwdCwgd2Ugd2FrZSB1cCBvbmUgY2xpZW50LCB3aG8g ZG9lcyB0aGUgaGVhdnl3ZWlnaHQKPiArCSAqIGNvaGVyZW50IHNlcW5vIHJlYWQgYW5kIGVpdGhl ciBnb2VzIGJhY2sgdG8gc2xlZXAgKGlmIGluY29tcGxldGUpLAo+ICsJICogb3Igd2FrZXMgdXAg YWxsIHRoZSBjb21wbGV0ZWQgY2xpZW50cyBpbiBwYXJhbGxlbCwgYmVmb3JlIHRoZW4KPiArCSAq IHRyYW5zZmVycmluZyB0aGUgYm90dG9tLWhhbGYgc3RhdHVzIHRvIHRoZSBuZXh0IGNsaWVudCBp biB0aGUgcXVldWUuCj4gKwkgKgo+ICsJICogQ29tcGFyZWQgdG8gd2Fsa2luZyB0aGUgZW50aXJl IGxpc3Qgb2Ygd2FpdGVycyBpbiBhIHNpbmdsZSBkZWRpY2F0ZWQKPiArCSAqIGJvdHRvbS1oYWxm LCB3ZSByZWR1Y2UgdGhlIGxhdGVuY3kgb2YgdGhlIGZpcnN0IHdhaXRlciBieSBhdm9pZGluZwo+ ICsJICogYSBjb250ZXh0IHN3aXRjaCwgYnV0IGluY3VyIGFkZGl0aW9uYWwgY29oZXJlbnQgc2Vx bm8gcmVhZHMgd2hlbgo+ICsJICogZm9sbG93aW5nIHRoZSBjaGFpbiBvZiByZXF1ZXN0IGJyZWFk Y3J1bWJzLiBTaW5jZSBpdCBpcyBtb3N0IGxpa2VseQo+ICsJICogdGhhdCB3ZSBoYXZlIGEgc2lu Z2xlIGNsaWVudCB3YWl0aW5nIG9uIGVhY2ggc2Vxbm8sIHRoZW4gcmVkdWNpbmcKPiArCSAqIHRo ZSBvdmVyaGVhZCBvZiB3YWtpbmcgdGhhdCBjbGllbnQgaXMgbXVjaCBwcmVmZXJyZWQuCj4gKwkg Ki8KPiArCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyB7Cj4gKwkJc3BpbmxvY2tfdCBsb2NrOyAv KiBwcm90ZWN0cyB0aGUgbGlzdHMgb2YgcmVxdWVzdHMgKi8KPiArCQlzdHJ1Y3QgcmJfcm9vdCB3 YWl0ZXJzOyAvKiBzb3J0ZWQgYnkgcmV0aXJlbWVudCwgcHJpb3JpdHkgKi8KPiArCQlzdHJ1Y3Qg dGFza19zdHJ1Y3QgKmZpcnN0X3dhaXRlcjsgLyogYmggZm9yIHVzZXIgaW50ZXJydXB0cyAqLwo+ ICsJCXN0cnVjdCB0aW1lcl9saXN0IGZha2VfaXJxOyAvKiB1c2VkIGFmdGVyIGEgbWlzc2VkIGlu dGVycnVwdCAqLwo+ICsJCWJvb2wgaXJxX2VuYWJsZWQ7Cj4gKwkJYm9vbCBycG1fd2FrZWxvY2s7 Cj4gKwl9IGJyZWFkY3J1bWJzOwo+ICsKPiAgIAkvKgo+ICAgCSAqIEEgcG9vbCBvZiBvYmplY3Rz IHRvIHVzZSBhcyBzaGFkb3cgY29waWVzIG9mIGNsaWVudCBiYXRjaCBidWZmZXJzCj4gICAJICog d2hlbiB0aGUgY29tbWFuZCBwYXJzZXIgaXMgZW5hYmxlZC4gUHJldmVudHMgdGhlIGNsaWVudCBm cm9tCj4gQEAgLTMwOCw4ICszMzMsNiBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKPgo+ICAg CWJvb2wgZ3B1X2NhY2hlc19kaXJ0eTsKPgo+IC0Jd2FpdF9xdWV1ZV9oZWFkX3QgaXJxX3F1ZXVl Owo+IC0KPiAgIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqbGFzdF9jb250ZXh0Owo+Cj4gICAJc3Ry dWN0IGludGVsX3JpbmdfaGFuZ2NoZWNrIGhhbmdjaGVjazsKPiBAQCAtNDk1LDQgKzUxOCw0NCBA QCBzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9od3Nfc2Vxbm9fYWRkcmVzcyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gICAJcmV0dXJuIGVuZ2luZS0+c3RhdHVzX3BhZ2UuZ2Z4X2Fk ZHIgKyBJOTE1X0dFTV9IV1NfSU5ERVhfQUREUjsKPiAgIH0KPgo+ICsvKiBpbnRlbF9icmVhZGNy dW1icy5jIC0tIHVzZXIgaW50ZXJydXB0IGJvdHRvbS1oYWxmIGZvciB3YWl0ZXJzICovCj4gK3N0 cnVjdCBpbnRlbF93YWl0IHsKPiArCXN0cnVjdCByYl9ub2RlIG5vZGU7Cj4gKwlzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnRhc2s7Cj4gKwl1MzIgc2Vxbm87Cj4gK307Cj4gK3ZvaWQgaW50ZWxfZW5naW5l X2luaXRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArc3Rh dGljIGlubGluZSB2b2lkIGludGVsX3dhaXRfaW5pdChzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCwg dTMyIHNlcW5vKQo+ICt7Cj4gKwl3YWl0LT50YXNrID0gY3VycmVudDsKPiArCXdhaXQtPnNlcW5v ID0gc2Vxbm87Cj4gK30KPiArc3RhdGljIGlubGluZSBib29sIGludGVsX3dhaXRfY29tcGxldGUo Y29uc3Qgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCj4gK3sKPiArCXJldHVybiBSQl9FTVBUWV9O T0RFKCZ3YWl0LT5ub2RlKTsKPiArfQo+ICtib29sIGludGVsX2VuZ2luZV9hZGRfd2FpdChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCSAgIHN0cnVjdCBpbnRlbF93YWl0ICp3 YWl0KTsKPiArdm9pZCBpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCk7Cj4gK3N0 YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXJldHVybiBSRUFEX09OQ0UoZW5naW5lLT5icmVhZGNy dW1icy5maXJzdF93YWl0ZXIpOwo+ICt9Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9lbmdp bmVfd2FrZXVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJYm9vbCB3 YWtldXAgPSBmYWxzZTsKPiArCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IFJFQURfT05DRShl bmdpbmUtPmJyZWFkY3J1bWJzLmZpcnN0X3dhaXRlcik7Cj4gKwkvKiBOb3RlIHRoYXQgZm9yIHRo aXMgbm90IHRvIGRhbmdlcm91c2x5IGNoYXNlIGEgZGFuZ2xpbmcgcG9pbnRlciwKPiArCSAqIHRo ZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyZSB0aGF0IHRoZSB0YXNrIHJlbWFpbiB2 YWxpZCBmb3IKPiArCSAqIHdha2VfdXBfcHJvY2VzcygpIGkuZS4gdGhhdCB0aGUgUkNVIGdyYWNl IHBlcmlvZCBjYW5ub3QgZXhwaXJlLgo+ICsJICovCgpUaGlzIGdldHMgY2FsbGVkIGZyb20gaGFy ZCBpcnEgY29udGV4dCBhbmQgSSBkaWQgbm90IG1hbmFnZSB0byBmaWd1cmUgCm91dCB3aGF0IG1h a2VzIGl0IHNhZmUgaW4gdGhlIHJlbW92ZSB3YWl0ZXIgcGF0aD8gV2h5IHRoZSBoYXJkIGlycSAK Y291bGRuJ3Qgbm90IHNhbXBsZSBOVUxMIGhlcmU/Cgo+ICsJaWYgKHRhc2spCj4gKwkJd2FrZXVw ID0gd2FrZV91cF9wcm9jZXNzKHRhc2spOwo+ICsJcmV0dXJuIHdha2V1cDsKPiArfQo+ICt2b2lk IGludGVsX2VuZ2luZV9lbmFibGVfZmFrZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKTsKPiArdm9pZCBpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpOwo+ICt1bnNpZ25lZCBpbnRlbF9raWNrX3dhaXRlcnMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICsKPiAgICNlbmRpZiAvKiBfSU5URUxfUklOR0JV RkZFUl9IXyAqLwo+CgpPdGhlcndpc2Ugc3RpbGwgbG9va3MgbGlrZSBhIGdvb2QgaWRlYSEgOikK ClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==