From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 14/40] drm/i915: Load balancing across a virtual engine Date: Wed, 8 May 2019 11:29:34 +0100 Message-ID: <4b4fa815-b2b2-7873-bc55-720f856ce596@linux.intel.com> References: <20190508080704.24223-1-chris@chris-wilson.co.uk> <20190508080704.24223-14-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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1901489065 for ; Wed, 8 May 2019 10:29:37 +0000 (UTC) In-Reply-To: <20190508080704.24223-14-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDA4LzA1LzIwMTkgMDk6MDYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBIYXZpbmcgYWxsb3dl ZCB0aGUgdXNlciB0byBkZWZpbmUgYSBzZXQgb2YgZW5naW5lcyB0aGF0IHRoZXkgd2lsbCB3YW50 Cj4gdG8gb25seSB1c2UsIHdlIGdvIG9uZSBzdGVwIGZ1cnRoZXIgYW5kIGFsbG93IHRoZW0gdG8g YmluZCB0aG9zZSBlbmdpbmVzCj4gaW50byBhIHNpbmdsZSB2aXJ0dWFsIGluc3RhbmNlLiBTdWJt aXR0aW5nIGEgYmF0Y2ggdG8gdGhlIHZpcnR1YWwgZW5naW5lCj4gd2lsbCB0aGVuIGZvcndhcmQg aXQgdG8gYW55IG9uZSBvZiB0aGUgc2V0IGluIGEgbWFubmVyIGFzIGJlc3QgdG8KPiBkaXN0cmli dXRlIGxvYWQuICBUaGUgdmlydHVhbCBlbmdpbmUgaGFzIGEgc2luZ2xlIHRpbWVsaW5lIGFjcm9z cyBhbGwKPiBlbmdpbmVzIChpdCBvcGVyYXRlcyBhcyBhIHNpbmdsZSBxdWV1ZSksIHNvIGl0IGlz IG5vdCBhYmxlIHRvIGNvbmN1cnJlbnRseQo+IHJ1biBiYXRjaGVzIGFjcm9zcyBtdWx0aXBsZSBl bmdpbmVzIGJ5IGl0c2VsZjsgdGhhdCBpcyBsZWZ0IHVwIHRvIHRoZSB1c2VyCj4gdG8gc3VibWl0 IG11bHRpcGxlIGNvbmN1cnJlbnQgYmF0Y2hlcyB0byBtdWx0aXBsZSBxdWV1ZXMuIE11bHRpcGxl IHVzZXJzCj4gd2lsbCBiZSBsb2FkIGJhbGFuY2VkIGFjcm9zcyB0aGUgc3lzdGVtLgo+IAo+IFRo ZSBtZWNoYW5pc20gdXNlZCBmb3IgbG9hZCBiYWxhbmNpbmcgaW4gdGhpcyBwYXRjaCBpcyBhIGxh dGUgZ3JlZWR5Cj4gYmFsYW5jZXIuIFdoZW4gYSByZXF1ZXN0IGlzIHJlYWR5IGZvciBleGVjdXRp b24sIGl0IGlzIGFkZGVkIHRvIGVhY2gKPiBlbmdpbmUncyBxdWV1ZSwgYW5kIHdoZW4gYW4gZW5n aW5lIGlzIHJlYWR5IGZvciBpdHMgbmV4dCByZXF1ZXN0IGl0Cj4gY2xhaW1zIGl0IGZyb20gdGhl IHZpcnR1YWwgZW5naW5lLiBUaGUgZmlyc3QgZW5naW5lIHRvIGRvIHNvLCB3aW5zLCBpLmUuCj4g dGhlIHJlcXVlc3QgaXMgZXhlY3V0ZWQgYXQgdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IChpZGxl IG1vbWVudCkgaW4gdGhlCj4gc3lzdGVtLgo+IAo+IEFzIG5vdCBhbGwgSFcgaXMgY3JlYXRlZCBl cXVhbCwgdGhlIHVzZXIgaXMgc3RpbGwgYWJsZSB0byBza2lwIHRoZQo+IHZpcnR1YWwgZW5naW5l IGFuZCBleGVjdXRlIHRoZSBiYXRjaCBvbiBhIHNwZWNpZmljIGVuZ2luZSwgYWxsIHdpdGhpbiB0 aGUKPiBzYW1lIHF1ZXVlLiBJdCB3aWxsIHRoZW4gYmUgZXhlY3V0ZWQgaW4gb3JkZXIgb24gdGhl IGNvcnJlY3QgZW5naW5lLAo+IHdpdGggZXhlY3V0aW9uIG9uIG90aGVyIHZpcnR1YWwgZW5naW5l cyBiZWluZyBtb3ZlZCBhd2F5IGR1ZSB0byB0aGUgbG9hZAo+IGRldGVjdGlvbi4KPiAKPiBBIGNv dXBsZSBvZiBhcmVhcyBmb3IgcG90ZW50aWFsIGltcHJvdmVtZW50IGxlZnQhCj4gCj4gLSBUaGUg dmlydHVhbCBlbmdpbmUgYWx3YXlzIHRha2UgcHJpb3JpdHkgb3ZlciBlcXVhbC1wcmlvcml0eSB0 YXNrcy4KPiBNb3N0bHkgYnJva2VuIHVwIGJ5IGFwcGx5aW5nIEZRX0NPREVMIHJ1bGVzIGZvciBw cmlvcml0aXNpbmcgbmV3IGNsaWVudHMsCj4gYW5kIGhvcGVmdWxseSB0aGUgdmlydHVhbCBhbmQg cmVhbCBlbmdpbmVzIGFyZSBub3QgdGhlbiBjb25nZXN0ZWQgKGkuZS4KPiBhbGwgd29yayBpcyB2 aWEgdmlydHVhbCBlbmdpbmVzLCBvciBhbGwgd29yayBpcyB0byB0aGUgcmVhbCBlbmdpbmUpLgo+ IAo+IC0gV2UgcmVxdWlyZSB0aGUgYnJlYWRjcnVtYiBpcnEgYXJvdW5kIGV2ZXJ5IHZpcnR1YWwg ZW5naW5lIHJlcXVlc3QuIEZvcgo+IG5vcm1hbCBlbmdpbmVzLCB3ZSBlbGltaW5hdGUgdGhlIG5l ZWQgZm9yIHRoZSBzbG93IHJvdW5kIHRyaXAgdmlhCj4gaW50ZXJydXB0IGJ5IHVzaW5nIHRoZSBz dWJtaXQgZmVuY2UgYW5kIHF1ZXVlaW5nIGluIG9yZGVyLiBGb3IgdmlydHVhbAo+IGVuZ2luZXMs IHdlIGhhdmUgdG8gYWxsb3cgYW55IGpvYiB0byB0cmFuc2ZlciB0byBhIG5ldyByaW5nLCBhbmQg Y2Fubm90Cj4gY29hbGVzY2UgdGhlIHN1Ym1pc3Npb25zLCBzbyByZXF1aXJlIHRoZSBjb21wbGV0 aW9uIGZlbmNlIGluc3RlYWQsCj4gZm9yY2luZyB0aGUgcGVyc2lzdGVudCB1c2Ugb2YgaW50ZXJy dXB0cy4KPiAKPiAtIFdlIG9ubHkgZHJpcCBmZWVkIHNpbmdsZSByZXF1ZXN0cyB0aHJvdWdoIGVh Y2ggdmlydHVhbCBlbmdpbmUgYW5kIG9udG8KPiB0aGUgcGh5c2ljYWwgZW5naW5lcywgZXZlbiBp ZiB0aGVyZSB3YXMgZW5vdWdoIHdvcmsgdG8gZmlsbCBhbGwgRUxTUCwKPiBsZWF2aW5nIHNtYWxs IHN0YWxscyB3aXRoIGFuIGlkbGUgQ1MgZXZlbnQgYXQgdGhlIGVuZCBvZiBldmVyeSByZXF1ZXN0 Lgo+IENvdWxkIHdlIGJlIGdyZWVkeSBhbmQgZmlsbCBib3RoIHNsb3RzPyBCZWluZyBsYXp5IGlz IHZpcnR1b3VzIGZvciBsb2FkCj4gZGlzdHJpYnV0aW9uIG9uIGxlc3MtdGhhbi1mdWxsIHdvcmts b2FkcyB0aG91Z2guCj4gCj4gT3RoZXIgYXJlYXMgb2YgaW1wcm92ZW1lbnQgYXJlIG1vcmUgZ2Vu ZXJhbCwgc3VjaCBhcyByZWR1Y2luZyBsb2NrCj4gY29udGVudGlvbiwgcmVkdWNpbmcgZGlzcGF0 Y2ggb3ZlcmhlYWQsIGxvb2tpbmcgYXQgZGlyZWN0IHN1Ym1pc3Npb24KPiByYXRoZXIgdGhhbiBi b3VuY2luZyBhcm91bmQgdGFza2xldHMgZXRjLgo+IAo+IHNzZXU6IExpZnQgdGhlIHJlc3RyaWN0 aW9uIHRvIGFsbG93IHNzZXUgdG8gYmUgcmVjb25maWd1cmVkIG9uIHZpcnR1YWwKPiBlbmdpbmVz IGNvbXBvc2VkIG9mIFJFTkRFUl9DTEFTUyAocmNzKS4KPiAKPiB2MjogbWFjcm9pemUgY2hlY2tf dXNlcl9tYnooKQo+IHYzOiBDYW5jZWwgdmlydHVhbCBlbmdpbmVzIG9uIHdlZGdpbmcKPiB2NDog Q29tbWVuY2UgY29tbWVudGluZwo+IHY1OiBSZXBsYWNlIDY0YiBzaWJsaW5nX21hc2sgd2l0aCBh IGxpc3Qgb2YgY2xhc3M6aW5zdGFuY2UKPiB2NjogRHJvcCB0aGUgb25lLWVsZW1lbnQgYXJyYXkg aW4gdGhlIHVhYmkKPiB2NzogQXNzZXJ0IGl0IGlzIGFuIHZpcnR1YWwgZW5naW5lIGluIHRvX3Zp cnR1YWxfZW5naW5lKCkKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGlu dGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90 eXBlcy5oIHwgICA4ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jICAg ICAgICAgIHwgNjgzICsrKysrKysrKysrKysrKysrKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2xyYy5oICAgICAgICAgIHwgICA5ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X2xyYy5jICAgICAgIHwgMTgwICsrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbS5oICAgICAgICAgICAgICB8ICAgNSArCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgICAgICB8IDExNiArKystCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jICAgICAgICB8ICAxOSArLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV90aW1lbGluZV90eXBlcy5oICAgfCAgIDEgKwo+ICAgaW5jbHVkZS91YXBp L2RybS9pOTE1X2RybS5oICAgICAgICAgICAgICAgICAgfCAgMzkgKysKPiAgIDkgZmlsZXMgY2hh bmdlZCwgMTAzMiBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaAo+IGluZGV4IGUzODFjMWM3Mzkw Mi4uN2I0N2UwMGZhMDgyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZV90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZW5naW5lX3R5cGVzLmgKPiBAQCAtMjI3LDYgKzIyNyw3IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVf ZXhlY2xpc3RzIHsKPiAgIAkgKiBAcXVldWU6IHF1ZXVlIG9mIHJlcXVlc3RzLCBpbiBwcmlvcml0 eSBsaXN0cwo+ICAgCSAqLwo+ICAgCXN0cnVjdCByYl9yb290X2NhY2hlZCBxdWV1ZTsKPiArCXN0 cnVjdCByYl9yb290X2NhY2hlZCB2aXJ0dWFsOwo+ICAgCj4gICAJLyoqCj4gICAJICogQGNzYl93 cml0ZTogY29udHJvbCByZWdpc3RlciBmb3IgQ29udGV4dCBTd2l0Y2ggYnVmZmVyCj4gQEAgLTQ0 NSw2ICs0NDYsNyBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKPiAgICNkZWZpbmUgSTkxNV9F TkdJTkVfSEFTX1BSRUVNUFRJT04gICBCSVQoMikKPiAgICNkZWZpbmUgSTkxNV9FTkdJTkVfSEFT X1NFTUFQSE9SRVMgICBCSVQoMykKPiAgICNkZWZpbmUgSTkxNV9FTkdJTkVfTkVFRFNfQlJFQURD UlVNQl9UQVNLTEVUIEJJVCg0KQo+ICsjZGVmaW5lIEk5MTVfRU5HSU5FX0lTX1ZJUlRVQUwgICAg ICAgQklUKDUpCj4gICAJdW5zaWduZWQgaW50IGZsYWdzOwo+ICAgCj4gICAJLyoKPiBAQCAtNTM0 LDYgKzUzNiwxMiBAQCBpbnRlbF9lbmdpbmVfbmVlZHNfYnJlYWRjcnVtYl90YXNrbGV0KGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlyZXR1cm4gZW5naW5lLT5mbGFn cyAmIEk5MTVfRU5HSU5FX05FRURTX0JSRUFEQ1JVTUJfVEFTS0xFVDsKPiAgIH0KPiAgIAo+ICtz dGF0aWMgaW5saW5lIGJvb2wKPiAraW50ZWxfZW5naW5lX2lzX3ZpcnR1YWwoY29uc3Qgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlyZXR1cm4gZW5naW5lLT5mbGFncyAm IEk5MTVfRU5HSU5FX0lTX1ZJUlRVQUw7Cj4gK30KPiArCj4gICAjZGVmaW5lIGluc3Rkb25lX3Ns aWNlX21hc2soZGV2X3ByaXZfXykgXAo+ICAgCShJU19HRU4oZGV2X3ByaXZfXywgNykgPyBcCj4g ICAJIDEgOiBSVU5USU1FX0lORk8oZGV2X3ByaXZfXyktPnNzZXUuc2xpY2VfbWFzaykKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+IGluZGV4IGYxZDYyNzQ2ZTA2Ni4uYmMzODhkZjM5 ODAyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKPiBAQCAtMTY2LDYgKzE2 Niw0MiBAQAo+ICAgCj4gICAjZGVmaW5lIEFDVElWRV9QUklPUklUWSAoSTkxNV9QUklPUklUWV9O RVdDTElFTlQgfCBJOTE1X1BSSU9SSVRZX05PU0VNQVBIT1JFKQo+ICAgCj4gK3N0cnVjdCB2aXJ0 dWFsX2VuZ2luZSB7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIGJhc2U7Cj4gKwlzdHJ1Y3Qg aW50ZWxfY29udGV4dCBjb250ZXh0Owo+ICsKPiArCS8qCj4gKwkgKiBXZSBhbGxvdyBvbmx5IGEg c2luZ2xlIHJlcXVlc3QgdGhyb3VnaCB0aGUgdmlydHVhbCBlbmdpbmUgYXQgYSB0aW1lCj4gKwkg KiAoZWFjaCByZXF1ZXN0IGluIHRoZSB0aW1lbGluZSB3YWl0cyBmb3IgdGhlIGNvbXBsZXRpb24g ZmVuY2Ugb2YKPiArCSAqIHRoZSBwcmV2aW91cyBiZWZvcmUgYmVpbmcgc3VibWl0dGVkKS4gQnkg cmVzdHJpY3Rpbmcgb3Vyc2VsdmVzIHRvCj4gKwkgKiBvbmx5IHN1Ym1pdHRpbmcgYSBzaW5nbGUg cmVxdWVzdCwgZWFjaCByZXF1ZXN0IGlzIHBsYWNlZCBvbiB0byBhCj4gKwkgKiBwaHlzaWNhbCB0 byBtYXhpbWlzZSBsb2FkIHNwcmVhZGluZyAoYnkgdmlydHVlIG9mIHRoZSBsYXRlIGdyZWVkeQo+ ICsJICogc2NoZWR1bGluZyAtLSBlYWNoIHJlYWwgZW5naW5lIHRha2VzIHRoZSBuZXh0IGF2YWls YWJsZSByZXF1ZXN0Cj4gKwkgKiB1cG9uIGlkbGluZykuCj4gKwkgKi8KPiArCXN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3Q7Cj4gKwo+ICsJLyoKPiArCSAqIFdlIGtlZXAgYSByYnRyZWUgb2Yg YXZhaWxhYmxlIHZpcnR1YWwgZW5naW5lcyBpbnNpZGUgZWFjaCBwaHlzaWNhbAo+ICsJICogZW5n aW5lLCBzb3J0ZWQgYnkgcHJpb3JpdHkuIEhlcmUgd2UgcHJlYWxsb2NhdGUgdGhlIG5vZGVzIHdl IG5lZWQKPiArCSAqIGZvciB0aGUgdmlydHVhbCBlbmdpbmUsIGluZGV4ZWQgYnkgcGh5c2ljYWxf ZW5naW5lLT5pZC4KPiArCSAqLwo+ICsJc3RydWN0IHZlX25vZGUgewo+ICsJCXN0cnVjdCByYl9u b2RlIHJiOwo+ICsJCWludCBwcmlvOwo+ICsJfSBub2Rlc1tJOTE1X05VTV9FTkdJTkVTXTsKPiAr Cj4gKwkvKiBBbmQgZmluYWxseSwgd2hpY2ggcGh5c2ljYWwgZW5naW5lcyB0aGlzIHZpcnR1YWwg ZW5naW5lIG1hcHMgb250by4gKi8KPiArCXVuc2lnbmVkIGludCBudW1fc2libGluZ3M7Cj4gKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nc1swXTsKPiArfTsKPiArCj4gK3N0YXRpYyBz dHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnRvX3ZpcnR1YWxfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiArewo+ICsJR0VNX0JVR19PTighaW50ZWxfZW5naW5lX2lzX3ZpcnR1 YWwoZW5naW5lKSk7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGVuZ2luZSwgc3RydWN0IHZpcnR1 YWxfZW5naW5lLCBiYXNlKTsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQgZXhlY2xpc3RzX2NvbnRl eHRfZGVmZXJyZWRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCQkJCQkgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIHN0YXRpYyB2b2lkIGV4ZWNsaXN0 c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ19zdGF0ZSwKPiBAQCAtMjI5LDcgKzI2NSw4IEBAIHN0 YXRpYyBpbnQgcXVldWVfcHJpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq ZXhlY2xpc3RzKQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0 KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJCWNvbnN0IHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxKQo+ICsJCQkJY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Cj4gKwkJCQlzdHJ1Y3QgcmJfbm9kZSAqcmIpCj4gICB7Cj4gICAJaW50IGxhc3RfcHJpbzsKPiAg IAo+IEBAIC0yNjQsNiArMzAxLDI1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQo Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCSAgICBycV9wcmlvKGxp c3RfbmV4dF9lbnRyeShycSwgbGluaykpID4gbGFzdF9wcmlvKQo+ICAgCQlyZXR1cm4gdHJ1ZTsK PiAgIAo+ICsJaWYgKHJiKSB7Cj4gKwkJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9Cj4gKwkJ CXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOwo+ICsJCWJv b2wgcHJlZW1wdCA9IGZhbHNlOwo+ICsKPiArCQlpZiAoZW5naW5lID09IHZlLT5zaWJsaW5nc1sw XSkgeyAvKiBvbmx5IHByZWVtcHQgb25lIHNpYmxpbmcgKi8KPiArCQkJc3RydWN0IGk5MTVfcmVx dWVzdCAqbmV4dDsKPiArCj4gKwkJCXJjdV9yZWFkX2xvY2soKTsKPiArCQkJbmV4dCA9IFJFQURf T05DRSh2ZS0+cmVxdWVzdCk7Cj4gKwkJCWlmIChuZXh0KQo+ICsJCQkJcHJlZW1wdCA9IHJxX3By aW8obmV4dCkgPiBsYXN0X3ByaW87Cj4gKwkJCXJjdV9yZWFkX3VubG9jaygpOwo+ICsJCX0KPiAr Cj4gKwkJaWYgKHByZWVtcHQpCj4gKwkJCXJldHVybiBwcmVlbXB0Owo+ICsJfQo+ICsKPiAgIAkv Kgo+ICAgCSAqIElmIHRoZSBpbmZsaWdodCBjb250ZXh0IGRpZCBub3QgdHJpZ2dlciB0aGUgcHJl ZW1wdGlvbiwgdGhlbiBtYXliZQo+ICAgCSAqIGl0IHdhcyB0aGUgc2V0IG9mIHF1ZXVlZCByZXF1 ZXN0cz8gUGljayB0aGUgaGlnaGVzdCBwcmlvcml0eSBpbgo+IEBAIC0zODIsNiArNDM4LDggQEAg X191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsIGludCBib29zdCkKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShycSwg cm4sCj4gICAJCQkJCSAmZW5naW5lLT50aW1lbGluZS5yZXF1ZXN0cywKPiAgIAkJCQkJIGxpbmsp IHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvd25lcjsKPiArCj4gICAJCWlmIChpOTE1 X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKPiAgIAkJCWJyZWFrOwo+ICAgCj4gQEAgLTM5MCwxNiAr NDQ4LDMyIEBAIF9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLCBpbnQgYm9vc3QpCj4gICAKPiAgIAkJR0VNX0JVR19PTihycS0+aHdfY29u dGV4dC0+YWN0aXZlKTsKPiAgIAo+IC0JCUdFTV9CVUdfT04ocnFfcHJpbyhycSkgPT0gSTkxNV9Q UklPUklUWV9JTlZBTElEKTsKPiAtCQlpZiAocnFfcHJpbyhycSkgIT0gcHJpbykgewo+IC0JCQlw cmlvID0gcnFfcHJpbyhycSk7Cj4gLQkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3Qo ZW5naW5lLCBwcmlvKTsKPiAtCQl9Cj4gLQkJR0VNX0JVR19PTihSQl9FTVBUWV9ST09UKCZlbmdp bmUtPmV4ZWNsaXN0cy5xdWV1ZS5yYl9yb290KSk7Cj4gKwkJLyoKPiArCQkgKiBQdXNoIHRoZSBy ZXF1ZXN0IGJhY2sgaW50byB0aGUgcXVldWUgZm9yIGxhdGVyIHJlc3VibWlzc2lvbi4KPiArCQkg KiBJZiB0aGlzIHJlcXVlc3QgaXMgbm90IG5hdGl2ZSB0byB0aGlzIHBoeXNpY2FsIGVuZ2luZSAo aS5lLgo+ICsJCSAqIGl0IGNhbWUgZnJvbSBhIHZpcnR1YWwgc291cmNlKSwgcHVzaCBpdCBiYWNr IG9udG8gdGhlIHZpcnR1YWwKPiArCQkgKiBlbmdpbmUgc28gdGhhdCBpdCBjYW4gYmUgbW92ZWQg YWNyb3NzIG9udG8gYW5vdGhlciBwaHlzaWNhbAo+ICsJCSAqIGVuZ2luZSBhcyBsb2FkIGRpY3Rh dGVzLgo+ICsJCSAqLwo+ICsJCW93bmVyID0gcnEtPmh3X2NvbnRleHQtPmVuZ2luZTsKPiArCQlp ZiAobGlrZWx5KG93bmVyID09IGVuZ2luZSkpIHsKPiArCQkJR0VNX0JVR19PTihycV9wcmlvKHJx KSA9PSBJOTE1X1BSSU9SSVRZX0lOVkFMSUQpOwo+ICsJCQlpZiAocnFfcHJpbyhycSkgIT0gcHJp bykgewo+ICsJCQkJcHJpbyA9IHJxX3ByaW8ocnEpOwo+ICsJCQkJcGwgPSBpOTE1X3NjaGVkX2xv b2t1cF9wcmlvbGlzdChlbmdpbmUsIHByaW8pOwo+ICsJCQl9Cj4gKwkJCUdFTV9CVUdfT04oUkJf RU1QVFlfUk9PVCgmZW5naW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwo+ICAgCj4gLQkJ bGlzdF9hZGQoJnJxLT5zY2hlZC5saW5rLCBwbCk7Cj4gKwkJCWxpc3RfYWRkKCZycS0+c2NoZWQu bGluaywgcGwpOwo+ICsJCQlhY3RpdmUgPSBycTsKPiArCQl9IGVsc2Ugewo+ICsJCQlpZiAoX19p OTE1X3JlcXVlc3RfaGFzX3N0YXJ0ZWQocnEpKQo+ICsJCQkJcnEtPnNjaGVkLmF0dHIucHJpb3Jp dHkgfD0gYm9vc3Q7Cj4gICAKPiAtCQlhY3RpdmUgPSBycTsKPiArCQkJcnEtPmVuZ2luZSA9IG93 bmVyOwo+ICsJCQlvd25lci0+c3VibWl0X3JlcXVlc3QocnEpOwo+ICsJCQlhY3RpdmUgPSBOVUxM Owo+ICsJCX0KPiAgIAl9Cj4gICAKPiAgIAkvKgo+IEBAIC00MTksNyArNDkzLDcgQEAgX191bndp bmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGlu dCBib29zdCkKPiAgIAkgKiBpbiB0aGUgcHJpb3JpdHkgcXVldWUsIGJ1dCB0aGV5IHdpbGwgbm90 IGdhaW4gaW1tZWRpYXRlIGFjY2VzcyB0bwo+ICAgCSAqIHRoZSBHUFUuCj4gICAJICovCj4gLQlp ZiAofnByaW8gJiBib29zdCAmJiBfX2k5MTVfcmVxdWVzdF9oYXNfc3RhcnRlZChhY3RpdmUpKSB7 Cj4gKwlpZiAofnByaW8gJiBib29zdCAmJiBhY3RpdmUgJiYgX19pOTE1X3JlcXVlc3RfaGFzX3N0 YXJ0ZWQoYWN0aXZlKSkgewo+ICAgCQlwcmlvIHw9IGJvb3N0Owo+ICAgCQlHRU1fQlVHX09OKGFj dGl2ZS0+c2NoZWQuYXR0ci5wcmlvcml0eSA+PSBwcmlvKTsKPiAgIAkJYWN0aXZlLT5zY2hlZC5h dHRyLnByaW9yaXR5ID0gcHJpbzsKPiBAQCAtNjYxLDYgKzczNSw5MCBAQCBzdGF0aWMgdm9pZCBj b21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4 ZWNsaXN0cykKPiAgIAkJCQkgICAgIEFDVElWRV9QUklPUklUWSk7Cj4gICB9Cj4gICAKPiArc3Rh dGljIHZvaWQgdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyh1MzIgKnJlZ3MsCj4gKwkJ CQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJdTMyIGJhc2Ug PSBlbmdpbmUtPm1taW9fYmFzZTsKPiArCj4gKwkvKiBNdXN0IG1hdGNoIGV4ZWNsaXN0c19pbml0 X3JlZ19zdGF0ZSgpISAqLwo+ICsKPiArCXJlZ3NbQ1RYX0NPTlRFWFRfQ09OVFJPTF0gPQo+ICsJ CWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9DT05UUk9MKGJhc2UpKTsKPiArCXJl Z3NbQ1RYX1JJTkdfSEVBRF0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0hFQUQoYmFzZSkp Owo+ICsJcmVnc1tDVFhfUklOR19UQUlMXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfVEFJ TChiYXNlKSk7Cj4gKwlyZWdzW0NUWF9SSU5HX0JVRkZFUl9TVEFSVF0gPSBpOTE1X21taW9fcmVn X29mZnNldChSSU5HX1NUQVJUKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX1JJTkdfQlVGRkVSX0NPTlRS T0xdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DVEwoYmFzZSkpOwo+ICsKPiArCXJlZ3Nb Q1RYX0JCX0hFQURfVV0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0JCQUREUl9VRFcoYmFz ZSkpOwo+ICsJcmVnc1tDVFhfQkJfSEVBRF9MXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdf QkJBRERSKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX0JCX1NUQVRFXSA9IGk5MTVfbW1pb19yZWdfb2Zm c2V0KFJJTkdfQkJTVEFURShiYXNlKSk7Cj4gKwlyZWdzW0NUWF9TRUNPTkRfQkJfSEVBRF9VXSA9 Cj4gKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19TQkJBRERSX1VEVyhiYXNlKSk7Cj4gKwly ZWdzW0NUWF9TRUNPTkRfQkJfSEVBRF9MXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU0JC QUREUihiYXNlKSk7Cj4gKwlyZWdzW0NUWF9TRUNPTkRfQkJfU1RBVEVdID0gaTkxNV9tbWlvX3Jl Z19vZmZzZXQoUklOR19TQkJTVEFURShiYXNlKSk7Cj4gKwo+ICsJcmVnc1tDVFhfQ1RYX1RJTUVT VEFNUF0gPQo+ICsJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ1RYX1RJTUVTVEFNUChiYXNl KSk7Cj4gKwlyZWdzW0NUWF9QRFAzX1VEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJ TkdfUERQX1VEVyhiYXNlLCAzKSk7Cj4gKwlyZWdzW0NUWF9QRFAzX0xEV10gPSBpOTE1X21taW9f cmVnX29mZnNldChHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAzKSk7Cj4gKwlyZWdzW0NUWF9QRFAy X1VEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAyKSk7 Cj4gKwlyZWdzW0NUWF9QRFAyX0xEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdf UERQX0xEVyhiYXNlLCAyKSk7Cj4gKwlyZWdzW0NUWF9QRFAxX1VEV10gPSBpOTE1X21taW9fcmVn X29mZnNldChHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAxKSk7Cj4gKwlyZWdzW0NUWF9QRFAxX0xE V10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAxKSk7Cj4g KwlyZWdzW0NUWF9QRFAwX1VEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQ X1VEVyhiYXNlLCAwKSk7Cj4gKwlyZWdzW0NUWF9QRFAwX0xEV10gPSBpOTE1X21taW9fcmVnX29m ZnNldChHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAwKSk7Cj4gKwo+ICsJaWYgKGVuZ2luZS0+Y2xh c3MgPT0gUkVOREVSX0NMQVNTKSB7Cj4gKwkJcmVnc1tDVFhfUkNTX0lORElSRUNUX0NUWF0gPQo+ ICsJCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0lORElSRUNUX0NUWChiYXNlKSk7Cj4gKwkJ cmVnc1tDVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVRdID0KPiArCQkJaTkxNV9tbWlvX3JlZ19v ZmZzZXQoUklOR19JTkRJUkVDVF9DVFhfT0ZGU0VUKGJhc2UpKTsKPiArCQlyZWdzW0NUWF9CQl9Q RVJfQ1RYX1BUUl0gPQo+ICsJCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0JCX1BFUl9DVFhf UFRSKGJhc2UpKTsKPiArCj4gKwkJcmVnc1tDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9Cj4gKwkJCWk5 MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUl9QV1JfQ0xLX1NUQVRFKTsKPiArCX0KPiArfQo+ICsK PiArc3RhdGljIGJvb2wgdmlydHVhbF9tYXRjaGVzKGNvbnN0IHN0cnVjdCB2aXJ0dWFsX2VuZ2lu ZSAqdmUsCj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqYWN0aXZlOwo+ICsKPiArCS8qCj4gKwkgKiBXZSB0cmFjayB3 aGVuIHRoZSBIVyBoYXMgY29tcGxldGVkIHNhdmluZyB0aGUgY29udGV4dCBpbWFnZQo+ICsJICog KGkuZS4gd2hlbiB3ZSBoYXZlIHNlZW4gdGhlIGZpbmFsIENTIGV2ZW50IHN3aXRjaGluZyBvdXQg b2YKPiArCSAqIHRoZSBjb250ZXh0KSBhbmQgbXVzdCBub3Qgb3ZlcndyaXRlIHRoZSBjb250ZXh0 IGltYWdlIGJlZm9yZQo+ICsJICogdGhlbi4gVGhpcyByZXN0cmljdHMgdXMgdG8gb25seSB1c2lu ZyB0aGUgYWN0aXZlIGVuZ2luZQo+ICsJICogd2hpbGUgdGhlIHByZXZpb3VzIHZpcnR1YWxpemVk IHJlcXVlc3QgaXMgaW5mbGlnaHQgKHNvCj4gKwkgKiB3ZSByZXVzZSB0aGUgcmVnaXN0ZXIgb2Zm c2V0cykuIFRoaXMgaXMgYSB2ZXJ5IHNtYWxsCj4gKwkgKiBoeXN0ZXJzaXMgb24gdGhlIGdyZWVk eSBzZWVsY3Rpb24gYWxnb3JpdGhtLgo+ICsJICovCj4gKwlhY3RpdmUgPSBSRUFEX09OQ0UodmUt PmNvbnRleHQuYWN0aXZlKTsKPiArCWlmIChhY3RpdmUgJiYgYWN0aXZlICE9IGVuZ2luZSkKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZpcnR1YWxfeGZlcl9icmVhZGNydW1icyhzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlLAo+ ICsJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKm9sZCA9IHZlLT5zaWJsaW5nc1swXTsKPiArCj4gKwkvKiBBbGwg dW5hdHRhY2hlZCAocnEtPmVuZ2luZSA9PSBvbGQpIG11c3QgYWxyZWFkeSBiZSBjb21wbGV0ZWQg Ki8KPiArCj4gKwlzcGluX2xvY2soJm9sZC0+YnJlYWRjcnVtYnMuaXJxX2xvY2spOwo+ICsJaWYg KCFsaXN0X2VtcHR5KCZ2ZS0+Y29udGV4dC5zaWduYWxfbGluaykpIHsKPiArCQlsaXN0X21vdmVf dGFpbCgmdmUtPmNvbnRleHQuc2lnbmFsX2xpbmssCj4gKwkJCSAgICAgICAmZW5naW5lLT5icmVh ZGNydW1icy5zaWduYWxlcnMpOwo+ICsJCWludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhl bmdpbmUpOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2soJm9sZC0+YnJlYWRjcnVtYnMuaXJxX2xvY2sp Owo+ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xp c3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+IEBAIC02OTMsNiAr ODUxLDI2IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgIAkgKiBhbmQgY29udGV4dCBzd2l0Y2hlcykgc3VibWlzc2lvbi4K PiAgIAkgKi8KPiAgIAo+ICsJZm9yIChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52 aXJ0dWFsKTsgcmI7ICkgewo+ICsJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsJCQly Yl9lbnRyeShyYiwgdHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKPiArCQlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IFJFQURfT05DRSh2ZS0+cmVxdWVzdCk7Cj4gKwo+ICsJCWlm ICghcnEpIHsgLyogbGF6aWx5IGNsZWFudXAgYWZ0ZXIgYW5vdGhlciBlbmdpbmUgaGFuZGxlZCBy cSAqLwo+ICsJCQlyYl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOwo+ICsJ CQlSQl9DTEVBUl9OT0RFKHJiKTsKPiArCQkJcmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0 cy0+dmlydHVhbCk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJaWYgKCF2aXJ0dWFs X21hdGNoZXModmUsIHJxLCBlbmdpbmUpKSB7Cj4gKwkJCXJiID0gcmJfbmV4dChyYik7Cj4gKwkJ CWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICAgCWlmIChsYXN0 KSB7Cj4gICAJCS8qCj4gICAJCSAqIERvbid0IHJlc3VibWl0IG9yIHN3aXRjaCB1bnRpbCBhbGwg b3V0c3RhbmRpbmcKPiBAQCAtNzE0LDcgKzg5Miw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19k ZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAkJaWYgKCFleGVjbGlz dHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSykpCj4gICAJCQly ZXR1cm47Cj4gICAKPiAtCQlpZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFzdCkpIHsKPiArCQlp ZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFzdCwgcmIpKSB7Cj4gICAJCQlpbmplY3RfcHJlZW1w dF9jb250ZXh0KGVuZ2luZSk7Cj4gICAJCQlyZXR1cm47Cj4gICAJCX0KPiBAQCAtNzU0LDYgKzkz Miw5MiBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gICAJCWxhc3QtPnRhaWwgPSBsYXN0LT53YV90YWlsOwo+ICAgCX0KPiAg IAo+ICsJd2hpbGUgKHJiKSB7IC8qIFhYWCB2aXJ0dWFsIGlzIGFsd2F5cyB0YWtpbmcgcHJlY2Vk ZW5jZSAqLwo+ICsJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsJCQlyYl9lbnRyeShy YiwgdHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKPiArCQlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycTsKPiArCj4gKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsK PiArCj4gKwkJcnEgPSB2ZS0+cmVxdWVzdDsKPiArCQlpZiAodW5saWtlbHkoIXJxKSkgeyAvKiBs b3N0IHRoZSByYWNlIHRvIGEgc2libGluZyAqLwo+ICsJCQlzcGluX3VubG9jaygmdmUtPmJhc2Uu dGltZWxpbmUubG9jayk7Cj4gKwkJCXJiX2VyYXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmly dHVhbCk7Cj4gKwkJCVJCX0NMRUFSX05PREUocmIpOwo+ICsJCQlyYiA9IHJiX2ZpcnN0X2NhY2hl ZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlH RU1fQlVHX09OKHJxICE9IHZlLT5yZXF1ZXN0KTsKPiArCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUg IT0gJnZlLT5iYXNlKTsKPiArCQlHRU1fQlVHX09OKHJxLT5od19jb250ZXh0ICE9ICZ2ZS0+Y29u dGV4dCk7Cj4gKwo+ICsJCWlmIChycV9wcmlvKHJxKSA+PSBxdWV1ZV9wcmlvKGV4ZWNsaXN0cykp IHsKPiArCQkJaWYgKCF2aXJ0dWFsX21hdGNoZXModmUsIHJxLCBlbmdpbmUpKSB7Cj4gKwkJCQlz cGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7Cj4gKwkJCQlyYiA9IHJiX25leHQo cmIpOwo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChsYXN0ICYmICFjYW5f bWVyZ2VfcnEobGFzdCwgcnEpKSB7Cj4gKwkJCQlzcGluX3VubG9jaygmdmUtPmJhc2UudGltZWxp bmUubG9jayk7Cj4gKwkJCQlyZXR1cm47IC8qIGxlYXZlIHRoaXMgcnEgZm9yIGFub3RoZXIgZW5n aW5lICovCj4gKwkJCX0KPiArCj4gKwkJCUdFTV9UUkFDRSgiJXM6IHZpcnR1YWwgcnE9JWxseDol bGxkJXMsIG5ldyBlbmdpbmU/ICVzXG4iLAo+ICsJCQkJICBlbmdpbmUtPm5hbWUsCj4gKwkJCQkg IHJxLT5mZW5jZS5jb250ZXh0LAo+ICsJCQkJICBycS0+ZmVuY2Uuc2Vxbm8sCj4gKwkJCQkgIGk5 MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpID8gIiEiIDoKPiArCQkJCSAgaTkxNV9yZXF1ZXN0X3N0 YXJ0ZWQocnEpID8gIioiIDoKPiArCQkJCSAgIiIsCj4gKwkJCQkgIHllc25vKGVuZ2luZSAhPSB2 ZS0+c2libGluZ3NbMF0pKTsKPiArCj4gKwkJCXZlLT5yZXF1ZXN0ID0gTlVMTDsKPiArCQkJdmUt PmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwo+ICsJCQlyYl9l cmFzZV9jYWNoZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOwo+ICsJCQlSQl9DTEVBUl9OT0RF KHJiKTsKPiArCj4gKwkJCXJxLT5lbmdpbmUgPSBlbmdpbmU7Cj4gKwo+ICsJCQlpZiAoZW5naW5l ICE9IHZlLT5zaWJsaW5nc1swXSkgewo+ICsJCQkJdTMyICpyZWdzID0gdmUtPmNvbnRleHQubHJj X3JlZ19zdGF0ZTsKPiArCQkJCXVuc2lnbmVkIGludCBuOwo+ICsKPiArCQkJCUdFTV9CVUdfT04o UkVBRF9PTkNFKHZlLT5jb250ZXh0LmFjdGl2ZSkpOwo+ICsJCQkJdmlydHVhbF91cGRhdGVfcmVn aXN0ZXJfb2Zmc2V0cyhyZWdzLCBlbmdpbmUpOwo+ICsKPiArCQkJCWlmICghbGlzdF9lbXB0eSgm dmUtPmNvbnRleHQuc2lnbmFscykpCj4gKwkJCQkJdmlydHVhbF94ZmVyX2JyZWFkY3J1bWJzKHZl LCBlbmdpbmUpOwo+ICsKPiArCQkJCS8qCj4gKwkJCQkgKiBNb3ZlIHRoZSBib3VuZCBlbmdpbmUg dG8gdGhlIHRvcCBvZiB0aGUgbGlzdAo+ICsJCQkJICogZm9yIGZ1dHVyZSBleGVjdXRpb24uIFdl IHRoZW4ga2ljayB0aGlzCj4gKwkJCQkgKiB0YXNrbGV0IGZpcnN0IGJlZm9yZSBjaGVja2luZyBv dGhlcnMsIHNvIHRoYXQKPiArCQkJCSAqIHdlIHByZWZlcmVudGlhbGx5IHJldXNlIHRoaXMgc2V0 IG9mIGJvdW5kCj4gKwkJCQkgKiByZWdpc3RlcnMuCj4gKwkJCQkgKi8KPiArCQkJCWZvciAobiA9 IDE7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspIHsKPiArCQkJCQlpZiAodmUtPnNpYmxpbmdz W25dID09IGVuZ2luZSkgewo+ICsJCQkJCQlzd2FwKHZlLT5zaWJsaW5nc1tuXSwKPiArCQkJCQkJ ICAgICB2ZS0+c2libGluZ3NbMF0pOwo+ICsJCQkJCQlicmVhazsKPiArCQkJCQl9Cj4gKwkJCQl9 Cj4gKwo+ICsJCQkJR0VNX0JVR19PTih2ZS0+c2libGluZ3NbMF0gIT0gZW5naW5lKTsKPiArCQkJ fQo+ICsKPiArCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKTsKPiArCQkJdHJhY2VfaTkxNV9y ZXF1ZXN0X2luKHJxLCBwb3J0X2luZGV4KHBvcnQsIGV4ZWNsaXN0cykpOwo+ICsJCQlzdWJtaXQg PSB0cnVlOwo+ICsJCQlsYXN0ID0gcnE7Cj4gKwkJfQo+ICsKPiArCQlzcGluX3VubG9jaygmdmUt PmJhc2UudGltZWxpbmUubG9jayk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICAgCXdoaWxlICgo cmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpKSkgewo+ICAgCQlzdHJ1Y3Qg aTkxNV9wcmlvbGlzdCAqcCA9IHRvX3ByaW9saXN0KHJiKTsKPiAgIAkJc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsICpybjsKPiBAQCAtMTg3Nyw2ICsyMTQxLDI1IEBAIHN0YXRpYyB2b2lkIHJlc2V0 X2NzYl9wb2ludGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQo+ ICAgCQkJICAgICAgICZleGVjbGlzdHMtPmNzYl9zdGF0dXNbcmVzZXRfdmFsdWVdKTsKPiAgIH0K PiAgIAo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqYWN0aXZlX3JlcXVlc3Qoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKiBjb25z dCBsaXN0ID0gJnJxLT5lbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzOwo+ICsJY29uc3Qgc3RydWN0 IGludGVsX2NvbnRleHQgKiBjb25zdCBjb250ZXh0ID0gcnEtPmh3X2NvbnRleHQ7Cj4gKwlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICphY3RpdmUgPSBOVUxMOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50 cnlfZnJvbV9yZXZlcnNlKHJxLCBsaXN0LCBsaW5rKSB7Cj4gKwkJaWYgKGk5MTVfcmVxdWVzdF9j b21wbGV0ZWQocnEpKQo+ICsJCQlicmVhazsKPiArCj4gKwkJaWYgKHJxLT5od19jb250ZXh0ICE9 IGNvbnRleHQpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlhY3RpdmUgPSBycTsKPiArCX0KPiArCj4g KwlyZXR1cm4gYWN0aXZlOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQgX19leGVjbGlzdHNfcmVz ZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBib29sIHN0YWxsZWQpCj4gICB7Cj4g ICAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5n aW5lLT5leGVjbGlzdHM7Cj4gQEAgLTE4OTcsNyArMjE4MCw4IEBAIHN0YXRpYyB2b2lkIF9fZXhl Y2xpc3RzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgYm9vbCBzdGFsbGVk KQo+ICAgCWlmICghcG9ydF9pc3NldChleGVjbGlzdHMtPnBvcnQpKQo+ICAgCQlnb3RvIG91dF9j bGVhcjsKPiAgIAo+IC0JY2UgPSBwb3J0X3JlcXVlc3QoZXhlY2xpc3RzLT5wb3J0KS0+aHdfY29u dGV4dDsKPiArCXJxID0gcG9ydF9yZXF1ZXN0KGV4ZWNsaXN0cy0+cG9ydCk7Cj4gKwljZSA9IHJx LT5od19jb250ZXh0Owo+ICAgCj4gICAJLyoKPiAgIAkgKiBDYXRjaCB1cCB3aXRoIGFueSBtaXNz ZWQgY29udGV4dC1zd2l0Y2ggaW50ZXJydXB0cy4KPiBAQCAtMTkxMCwxNiArMjE5NCwxMCBAQCBz dGF0aWMgdm9pZCBfX2V4ZWNsaXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsIGJvb2wgc3RhbGxlZCkKPiAgIAkgKi8KPiAgIAlleGVjbGlzdHNfY2FuY2VsX3BvcnRfcmVx dWVzdHMoZXhlY2xpc3RzKTsKPiAgIAo+IC0JLyogUHVzaCBiYWNrIGFueSBpbmNvbXBsZXRlIHJl cXVlc3RzIGZvciByZXBsYXkgYWZ0ZXIgdGhlIHJlc2V0LiAqLwo+IC0JcnEgPSBfX3Vud2luZF9p bmNvbXBsZXRlX3JlcXVlc3RzKGVuZ2luZSwgMCk7Cj4gKwlycSA9IGFjdGl2ZV9yZXF1ZXN0KHJx KTsKPiAgIAlpZiAoIXJxKQo+ICAgCQlnb3RvIG91dF9yZXBsYXk7Cj4gICAKPiAtCWlmIChycS0+ aHdfY29udGV4dCAhPSBjZSkgeyAvKiBjYXVnaHQganVzdCBiZWZvcmUgYSBDUyBldmVudCAqLwo+ IC0JCXJxID0gTlVMTDsKPiAtCQlnb3RvIG91dF9yZXBsYXk7Cj4gLQl9Cj4gLQo+ICAgCS8qCj4g ICAJICogSWYgdGhpcyByZXF1ZXN0IGhhc24ndCBzdGFydGVkIHlldCwgZS5nLiBpdCBpcyB3YWl0 aW5nIG9uIGEKPiAgIAkgKiBzZW1hcGhvcmUsIHdlIG5lZWQgdG8gYXZvaWQgc2tpcHBpbmcgdGhl IHJlcXVlc3Qgb3IgZWxzZSB3ZQo+IEBAIC0xOTY2LDEzICsyMjQ0LDE2IEBAIHN0YXRpYyB2b2lk IF9fZXhlY2xpc3RzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgYm9vbCBz dGFsbGVkKQo+ICAgCX0KPiAgIAlleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUocmVncywgY2UsIGVu Z2luZSwgY2UtPnJpbmcpOwo+ICAgCj4gLQkvKiBSZXJ1biB0aGUgcmVxdWVzdDsgaXRzIHBheWxv YWQgaGFzIGJlZW4gbmV1dGVyZWQgKGlmIGd1aWx0eSkuICovCj4gICBvdXRfcmVwbGF5Ogo+ICsJ LyogUmVydW4gdGhlIHJlcXVlc3Q7IGl0cyBwYXlsb2FkIGhhcyBiZWVuIG5ldXRlcmVkIChpZiBn dWlsdHkpLiAqLwo+ICAgCWNlLT5yaW5nLT5oZWFkID0KPiAgIAkJcnEgPyBpbnRlbF9yaW5nX3dy YXAoY2UtPnJpbmcsIHJxLT5oZWFkKSA6IGNlLT5yaW5nLT50YWlsOwo+ICAgCWludGVsX3Jpbmdf dXBkYXRlX3NwYWNlKGNlLT5yaW5nKTsKPiAgIAlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRl KGNlLCBlbmdpbmUpOwo+ICAgCj4gKwkvKiBQdXNoIGJhY2sgYW55IGluY29tcGxldGUgcmVxdWVz dHMgZm9yIHJlcGxheSBhZnRlciB0aGUgcmVzZXQuICovCj4gKwlfX3Vud2luZF9pbmNvbXBsZXRl X3JlcXVlc3RzKGVuZ2luZSwgMCk7Cj4gKwo+ICAgb3V0X2NsZWFyOgo+ICAgCWV4ZWNsaXN0c19j bGVhcl9hbGxfYWN0aXZlKGV4ZWNsaXN0cyk7Cj4gICB9Cj4gQEAgLTIwNDYsNiArMjMyNywyNiBA QCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgIAkJaTkxNV9wcmlvbGlzdF9mcmVlKHApOwo+ICAgCX0KPiAgIAo+ ICsJLyogQ2FuY2VsIGFsbCBhdHRhY2hlZCB2aXJ0dWFsIGVuZ2luZXMgKi8KPiArCXdoaWxlICgo cmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCkpKSB7Cj4gKwkJc3RydWN0 IHZpcnR1YWxfZW5naW5lICp2ZSA9Cj4gKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9k ZXNbZW5naW5lLT5pZF0ucmIpOwo+ICsKPiArCQlyYl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlz dHMtPnZpcnR1YWwpOwo+ICsJCVJCX0NMRUFSX05PREUocmIpOwo+ICsKPiArCQlzcGluX2xvY2so JnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOwo+ICsJCWlmICh2ZS0+cmVxdWVzdCkgewo+ICsJCQl2 ZS0+cmVxdWVzdC0+ZW5naW5lID0gZW5naW5lOwo+ICsJCQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQo dmUtPnJlcXVlc3QpOwo+ICsJCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZ2ZS0+cmVxdWVzdC0+ZmVu Y2UsIC1FSU8pOwo+ICsJCQlpOTE1X3JlcXVlc3RfbWFya19jb21wbGV0ZSh2ZS0+cmVxdWVzdCk7 Cj4gKwkJCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0gSU5UX01JTjsK PiArCQkJdmUtPnJlcXVlc3QgPSBOVUxMOwo+ICsJCX0KPiArCQlzcGluX3VubG9jaygmdmUtPmJh c2UudGltZWxpbmUubG9jayk7Cj4gKwl9Cj4gKwo+ICAgCS8qIFJlbWFpbmluZyBfdW5yZWFkeV8g cmVxdWVzdHMgd2lsbCBiZSBub3AnZWQgd2hlbiBzdWJtaXR0ZWQgKi8KPiAgIAo+ICAgCWV4ZWNs aXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47Cj4gQEAgLTI1MjksMTIgKzI4MzAs MTUgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVncywKPiAg IAlib29sIHJjcyA9IGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTOwo+ICAgCXUzMiBiYXNl ID0gZW5naW5lLT5tbWlvX2Jhc2U7Cj4gICAKPiAtCS8qIEEgY29udGV4dCBpcyBhY3R1YWxseSBh IGJpZyBiYXRjaCBidWZmZXIgd2l0aCBzZXZlcmFsCj4gKwkvKgo+ICsJICogQSBjb250ZXh0IGlz IGFjdHVhbGx5IGEgYmlnIGJhdGNoIGJ1ZmZlciB3aXRoIHNldmVyYWwKPiAgIAkgKiBNSV9MT0FE X1JFR0lTVEVSX0lNTSBjb21tYW5kcyBmb2xsb3dlZCBieSAocmVnLCB2YWx1ZSkgcGFpcnMuIFRo ZQo+ICAgCSAqIHZhbHVlcyB3ZSBhcmUgc2V0dGluZyBoZXJlIGFyZSBvbmx5IGZvciB0aGUgZmly c3QgY29udGV4dCByZXN0b3JlOgo+ICAgCSAqIG9uIGEgc3Vic2VxdWVudCBzYXZlLCB0aGUgR1BV IHdpbGwgcmVjcmVhdGUgdGhpcyBiYXRjaGJ1ZmZlciB3aXRoIG5ldwo+ICAgCSAqIHZhbHVlcyAo aW5jbHVkaW5nIGFsbCB0aGUgbWlzc2luZyBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kcyB0 aGF0Cj4gICAJICogd2UgYXJlIG5vdCBpbml0aWFsaXppbmcgaGVyZSkuCj4gKwkgKgo+ICsJICog TXVzdCBrZWVwIGNvbnNpc3RlbnQgd2l0aCB2aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRz KCkuCj4gICAJICovCj4gICAJcmVnc1tDVFhfTFJJX0hFQURFUl8wXSA9IE1JX0xPQURfUkVHSVNU RVJfSU1NKHJjcyA/IDE0IDogMTEpIHwKPiAgIAkJCQkgTUlfTFJJX0ZPUkNFX1BPU1RFRDsKPiBA QCAtMjc1Myw2ICszMDU3LDMyMCBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X2RlZmVy cmVkX2FsbG9jKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAlyZXR1cm4gcmV0Owo+ICAg fQo+ICAgCj4gK3N0YXRpYyB2b2lkIHZpcnR1YWxfY29udGV4dF9kZXN0cm95KHN0cnVjdCBrcmVm ICprcmVmKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KPiArCQljb250YWlu ZXJfb2Yoa3JlZiwgdHlwZW9mKCp2ZSksIGNvbnRleHQucmVmKTsKPiArCXVuc2lnbmVkIGludCBu Owo+ICsKPiArCUdFTV9CVUdfT04odmUtPnJlcXVlc3QpOwo+ICsJR0VNX0JVR19PTih2ZS0+Y29u dGV4dC5hY3RpdmUpOwo+ICsKPiArCWZvciAobiA9IDA7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBu KyspIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nID0gdmUtPnNpYmxpbmdz W25dOwo+ICsJCXN0cnVjdCByYl9ub2RlICpub2RlID0gJnZlLT5ub2Rlc1tzaWJsaW5nLT5pZF0u cmI7Cj4gKwo+ICsJCWlmIChSQl9FTVBUWV9OT0RFKG5vZGUpKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJc3Bpbl9sb2NrX2lycSgmc2libGluZy0+dGltZWxpbmUubG9jayk7Cj4gKwo+ICsJCS8q IERldGFjaG1lbnQgaXMgbGF6aWx5IHBlcmZvcm1lZCBpbiB0aGUgZXhlY2xpc3RzIHRhc2tsZXQg Ki8KPiArCQlpZiAoIVJCX0VNUFRZX05PREUobm9kZSkpCj4gKwkJCXJiX2VyYXNlX2NhY2hlZChu b2RlLCAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwpOwo+ICsKPiArCQlzcGluX3VubG9ja19p cnEoJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOwo+ICsJfQo+ICsJR0VNX0JVR19PTihfX3Rhc2ts ZXRfaXNfc2NoZWR1bGVkKCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCkpOwo+ICsKPiArCWlm ICh2ZS0+Y29udGV4dC5zdGF0ZSkKPiArCQlfX2V4ZWNsaXN0c19jb250ZXh0X2ZpbmkoJnZlLT5j b250ZXh0KTsKPiArCj4gKwlpOTE1X3RpbWVsaW5lX2ZpbmkoJnZlLT5iYXNlLnRpbWVsaW5lKTsK PiArCWtmcmVlKHZlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHVhbF9lbmdpbmVfaW5p dGlhbF9oaW50KHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUpCj4gK3sKPiArCWludCBzd3A7Cj4g Kwo+ICsJLyoKPiArCSAqIFBpY2sgYSByYW5kb20gc2libGluZyBvbiBzdGFydGluZyB0byBoZWxw IHNwcmVhZCB0aGUgbG9hZCBhcm91bmQuCj4gKwkgKgo+ICsJICogTmV3IGNvbnRleHRzIGFyZSB0 eXBpY2FsbHkgY3JlYXRlZCB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgb3JkZXIKPiArCSAqIG9mIHNp YmxpbmdzLCBhbmQgb2Z0ZW4gc3RhcnRlZCBpbiBiYXRjaGVzLiBEdWUgdG8gdGhlIHdheSB3ZSBp dGVyYXRlCj4gKwkgKiB0aGUgYXJyYXkgb2Ygc2libGluZyB3aGVuIHN1Ym1pdHRpbmcgcmVxdWVz dHMsIHNpYmxpbmdbMF0gaXMKPiArCSAqIHByaW9yaXRpc2VkIGZvciBkZXF1ZXVpbmcuIElmIHdl IG1ha2Ugc3VyZSB0aGF0IHNpYmxpbmdbMF0gaXMgZmFpcmx5Cj4gKwkgKiByYW5kb21pc2VkIGFj cm9zcyB0aGUgc3lzdGVtLCB3ZSBhbHNvIGhlbHAgc3ByZWFkIHRoZSBsb2FkIGJ5IHRoZQo+ICsJ ICogZmlyc3QgZW5naW5lIHdlIGluc3BlY3QgYmVpbmcgZGlmZmVyZW50IGVhY2ggdGltZS4KPiAr CSAqCj4gKwkgKiBOQiBUaGlzIGRvZXMgbm90IGZvcmNlIHVzIHRvIGV4ZWN1dGUgb24gdGhpcyBl bmdpbmUsIGl0IHdpbGwganVzdAo+ICsJICogdHlwaWNhbGx5IGJlIHRoZSBmaXJzdCB3ZSBpbnNw ZWN0IGZvciBzdWJtaXNzaW9uLgo+ICsJICovCj4gKwlzd3AgPSBwcmFuZG9tX3UzMl9tYXgodmUt Pm51bV9zaWJsaW5ncyk7Cj4gKwlpZiAoIXN3cCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJc3dhcCh2 ZS0+c2libGluZ3Nbc3dwXSwgdmUtPnNpYmxpbmdzWzBdKTsKPiArCXZpcnR1YWxfdXBkYXRlX3Jl Z2lzdGVyX29mZnNldHModmUtPmNvbnRleHQubHJjX3JlZ19zdGF0ZSwKPiArCQkJCQl2ZS0+c2li bGluZ3NbMF0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnR1YWxfY29udGV4dF9waW4oc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZl ID0gY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwgY29udGV4dCk7Cj4gKwlpbnQgZXJyOwo+ ICsKPiArCS8qIE5vdGU6IHdlIG11c3QgdXNlIGEgcmVhbCBlbmdpbmUgY2xhc3MgZm9yIHNldHRp bmcgdXAgcmVnIHN0YXRlICovCj4gKwllcnIgPSBfX2V4ZWNsaXN0c19jb250ZXh0X3BpbihjZSwg dmUtPnNpYmxpbmdzWzBdKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl2 aXJ0dWFsX2VuZ2luZV9pbml0aWFsX2hpbnQodmUpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHZpcnR1YWxfY29udGV4dF9lbnRlcihzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UpCj4gK3sKPiArCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPSBjb250YWluZXJfb2YoY2Us IHR5cGVvZigqdmUpLCBjb250ZXh0KTsKPiArCXVuc2lnbmVkIGludCBuOwo+ICsKPiArCWZvciAo biA9IDA7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspCj4gKwkJaW50ZWxfZW5naW5lX3BtX2dl dCh2ZS0+c2libGluZ3Nbbl0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0dWFsX2NvbnRl eHRfZXhpdChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gK3sKPiArCXN0cnVjdCB2aXJ0dWFs X2VuZ2luZSAqdmUgPSBjb250YWluZXJfb2YoY2UsIHR5cGVvZigqdmUpLCBjb250ZXh0KTsKPiAr CXVuc2lnbmVkIGludCBuOwo+ICsKPiArCWNlLT5zYXR1cmF0ZWQgPSAwOwo+ICsJZm9yIChuID0g MDsgbiA8IHZlLT5udW1fc2libGluZ3M7IG4rKykKPiArCQlpbnRlbF9lbmdpbmVfcG1fcHV0KHZl LT5zaWJsaW5nc1tuXSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfY29u dGV4dF9vcHMgdmlydHVhbF9jb250ZXh0X29wcyA9IHsKPiArCS5waW4gPSB2aXJ0dWFsX2NvbnRl eHRfcGluLAo+ICsJLnVucGluID0gZXhlY2xpc3RzX2NvbnRleHRfdW5waW4sCj4gKwo+ICsJLmVu dGVyID0gdmlydHVhbF9jb250ZXh0X2VudGVyLAo+ICsJLmV4aXQgPSB2aXJ0dWFsX2NvbnRleHRf ZXhpdCwKPiArCj4gKwkuZGVzdHJveSA9IHZpcnR1YWxfY29udGV4dF9kZXN0cm95LAo+ICt9Owo+ ICsKPiArc3RhdGljIHZvaWQgdmlydHVhbF9zdWJtaXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9u ZyBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKiBjb25zdCB2ZSA9IChzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKilkYXRhOwo+ICsJY29uc3QgaW50IHByaW8gPSB2ZS0+YmFzZS5l eGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludDsKPiArCXVuc2lnbmVkIGludCBuOwo+ICsKPiAr CWxvY2FsX2lycV9kaXNhYmxlKCk7Cj4gKwlmb3IgKG4gPSAwOyBSRUFEX09OQ0UodmUtPnJlcXVl c3QpICYmIG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpzaWJsaW5nID0gdmUtPnNpYmxpbmdzW25dOwo+ICsJCXN0cnVjdCB2ZV9ub2RlICog Y29uc3Qgbm9kZSA9ICZ2ZS0+bm9kZXNbc2libGluZy0+aWRdOwo+ICsJCXN0cnVjdCByYl9ub2Rl ICoqcGFyZW50LCAqcmI7Cj4gKwkJYm9vbCBmaXJzdDsKPiArCj4gKwkJc3Bpbl9sb2NrKCZzaWJs aW5nLT50aW1lbGluZS5sb2NrKTsKPiArCj4gKwkJaWYgKCFSQl9FTVBUWV9OT0RFKCZub2RlLT5y YikpIHsKPiArCQkJLyoKPiArCQkJICogQ2hlYXQgYW5kIGF2b2lkIHJlYmFsYW5jaW5nIHRoZSB0 cmVlIGlmIHdlIGNhbgo+ICsJCQkgKiByZXVzZSB0aGlzIG5vZGUgaW4gc2l0dS4KPiArCQkJICov Cj4gKwkJCWZpcnN0ID0gcmJfZmlyc3RfY2FjaGVkKCZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVh bCkgPT0KPiArCQkJCSZub2RlLT5yYjsKPiArCQkJaWYgKHByaW8gPT0gbm9kZS0+cHJpbyB8fCAo cHJpbyA+IG5vZGUtPnByaW8gJiYgZmlyc3QpKQo+ICsJCQkJZ290byBzdWJtaXRfZW5naW5lOwo+ ICsKPiArCQkJcmJfZXJhc2VfY2FjaGVkKCZub2RlLT5yYiwgJnNpYmxpbmctPmV4ZWNsaXN0cy52 aXJ0dWFsKTsKPiArCQl9Cj4gKwo+ICsJCXJiID0gTlVMTDsKPiArCQlmaXJzdCA9IHRydWU7Cj4g KwkJcGFyZW50ID0gJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsLnJiX3Jvb3QucmJfbm9kZTsK PiArCQl3aGlsZSAoKnBhcmVudCkgewo+ICsJCQlzdHJ1Y3QgdmVfbm9kZSAqb3RoZXI7Cj4gKwo+ ICsJCQlyYiA9ICpwYXJlbnQ7Cj4gKwkJCW90aGVyID0gcmJfZW50cnkocmIsIHR5cGVvZigqb3Ro ZXIpLCByYik7Cj4gKwkJCWlmIChwcmlvID4gb3RoZXItPnByaW8pIHsKPiArCQkJCXBhcmVudCA9 ICZyYi0+cmJfbGVmdDsKPiArCQkJfSBlbHNlIHsKPiArCQkJCXBhcmVudCA9ICZyYi0+cmJfcmln aHQ7Cj4gKwkJCQlmaXJzdCA9IGZhbHNlOwo+ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQlyYl9saW5r X25vZGUoJm5vZGUtPnJiLCByYiwgcGFyZW50KTsKPiArCQlyYl9pbnNlcnRfY29sb3JfY2FjaGVk KCZub2RlLT5yYiwKPiArCQkJCSAgICAgICAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwsCj4g KwkJCQkgICAgICAgZmlyc3QpOwo+ICsKPiArc3VibWl0X2VuZ2luZToKPiArCQlHRU1fQlVHX09O KFJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSk7Cj4gKwkJbm9kZS0+cHJpbyA9IHByaW87Cj4gKwkJ aWYgKGZpcnN0ICYmIHByaW8gPiBzaWJsaW5nLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGlu dCkgewo+ICsJCQlzaWJsaW5nLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHByaW87 Cj4gKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNpYmxpbmctPmV4ZWNsaXN0cy50YXNrbGV0KTsK PiArCQl9Cj4gKwo+ICsJCXNwaW5fdW5sb2NrKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsKPiAr CX0KPiArCWxvY2FsX2lycV9lbmFibGUoKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHVh bF9zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsJc3RydWN0 IHZpcnR1YWxfZW5naW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5naW5lKHJxLT5lbmdpbmUpOwo+ICsK PiArCUdFTV9UUkFDRSgiJXM6IHJxPSVsbHg6JWxsZFxuIiwKPiArCQkgIHZlLT5iYXNlLm5hbWUs Cj4gKwkJICBycS0+ZmVuY2UuY29udGV4dCwKPiArCQkgIHJxLT5mZW5jZS5zZXFubyk7Cj4gKwo+ ICsJR0VNX0JVR19PTih2ZS0+YmFzZS5zdWJtaXRfcmVxdWVzdCAhPSB2aXJ0dWFsX3N1Ym1pdF9y ZXF1ZXN0KTsKPiArCj4gKwlHRU1fQlVHX09OKHZlLT5yZXF1ZXN0KTsKPiArCXZlLT5iYXNlLmV4 ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcnFfcHJpbyhycSk7Cj4gKwlXUklURV9PTkNF KHZlLT5yZXF1ZXN0LCBycSk7Cj4gKwo+ICsJdGFza2xldF9zY2hlZHVsZSgmdmUtPmJhc2UuZXhl Y2xpc3RzLnRhc2tsZXQpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCj4gK2lu dGVsX2V4ZWNsaXN0c19jcmVhdGVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 LAo+ICsJCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxpbmdzLAo+ICsJCQkg ICAgICAgdW5zaWduZWQgaW50IGNvdW50KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUg KnZlOwo+ICsJdW5zaWduZWQgaW50IG47Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmIChjb3VudCA9 PSAwKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsKPiArCWlmIChjb3VudCA9PSAx KQo+ICsJCXJldHVybiBpbnRlbF9jb250ZXh0X2NyZWF0ZShjdHgsIHNpYmxpbmdzWzBdKTsKPiAr Cj4gKwl2ZSA9IGt6YWxsb2Moc3RydWN0X3NpemUodmUsIHNpYmxpbmdzLCBjb3VudCksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCF2ZSkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4g Kwl2ZS0+YmFzZS5pOTE1ID0gY3R4LT5pOTE1Owo+ICsJdmUtPmJhc2UuaWQgPSAtMTsKPiArCXZl LT5iYXNlLmNsYXNzID0gT1RIRVJfQ0xBU1M7Cj4gKwl2ZS0+YmFzZS51YWJpX2NsYXNzID0gSTkx NV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsKPiArCXZlLT5iYXNlLmluc3RhbmNlID0gSTkxNV9FTkdJ TkVfQ0xBU1NfSU5WQUxJRF9WSVJUVUFMOwo+ICsJdmUtPmJhc2UuZmxhZ3MgPSBJOTE1X0VOR0lO RV9JU19WSVJUVUFMOwo+ICsKPiArCXNucHJpbnRmKHZlLT5iYXNlLm5hbWUsIHNpemVvZih2ZS0+ YmFzZS5uYW1lKSwgInZpcnR1YWwiKTsKPiArCj4gKwllcnIgPSBpOTE1X3RpbWVsaW5lX2luaXQo Y3R4LT5pOTE1LCAmdmUtPmJhc2UudGltZWxpbmUsIE5VTEwpOwo+ICsJaWYgKGVycikKPiArCQln b3RvIGVycl9wdXQ7Cj4gKwlpOTE1X3RpbWVsaW5lX3NldF9zdWJjbGFzcygmdmUtPmJhc2UudGlt ZWxpbmUsIFRJTUVMSU5FX1ZJUlRVQUwpOwo+ICsKPiArCWludGVsX2VuZ2luZV9pbml0X2V4ZWNs aXN0cygmdmUtPmJhc2UpOwo+ICsKPiArCXZlLT5iYXNlLmNvcHMgPSAmdmlydHVhbF9jb250ZXh0 X29wczsKPiArCXZlLT5iYXNlLnJlcXVlc3RfYWxsb2MgPSBleGVjbGlzdHNfcmVxdWVzdF9hbGxv YzsKPiArCj4gKwl2ZS0+YmFzZS5zY2hlZHVsZSA9IGk5MTVfc2NoZWR1bGU7Cj4gKwl2ZS0+YmFz ZS5zdWJtaXRfcmVxdWVzdCA9IHZpcnR1YWxfc3VibWl0X3JlcXVlc3Q7Cj4gKwo+ICsJdmUtPmJh c2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwo+ICsJdGFza2xldF9p bml0KCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCwKPiArCQkgICAgIHZpcnR1YWxfc3VibWlz c2lvbl90YXNrbGV0LAo+ICsJCSAgICAgKHVuc2lnbmVkIGxvbmcpdmUpOwo+ICsKPiArCWludGVs X2NvbnRleHRfaW5pdCgmdmUtPmNvbnRleHQsIGN0eCwgJnZlLT5iYXNlKTsKPiArCj4gKwlmb3Ig KG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewo+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNp YmxpbmcgPSBzaWJsaW5nc1tuXTsKPiArCj4gKwkJR0VNX0JVR19PTighaXNfcG93ZXJfb2ZfMihz aWJsaW5nLT5tYXNrKSk7Cj4gKwkJaWYgKHNpYmxpbmctPm1hc2sgJiB2ZS0+YmFzZS5tYXNrKSB7 Cj4gKwkJCURSTV9ERUJVRygiZHVwbGljYXRlICVzIGVudHJ5IGluIGxvYWQgYmFsYW5jZXJcbiIs Cj4gKwkJCQkgIHNpYmxpbmctPm5hbWUpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQlnb3Rv IGVycl9wdXQ7Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAqIFRoZSB2aXJ0dWFsIGVuZ2luZSBp bXBsZW1lbnRhdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgdG8KPiArCQkgKiB0aGUgZXhlY2xpc3Rz IGJhY2tlbmQgLS0gd2UgcHVzaCBvdXQgcmVxdWVzdCBkaXJlY3RseQo+ICsJCSAqIGludG8gYSB0 cmVlIGluc2lkZSBlYWNoIHBoeXNpY2FsIGVuZ2luZS4gV2UgY291bGQgc3VwcG9ydAo+ICsJCSAq IGxheWVyaW5nIGlmIHdlIGhhbmRsZSBjbG9uaW5nIG9mIHRoZSByZXF1ZXN0cyBhbmQKPiArCQkg KiBzdWJtaXR0aW5nIGEgY29weSBpbnRvIGVhY2ggYmFja2VuZC4KPiArCQkgKi8KPiArCQlpZiAo c2libGluZy0+ZXhlY2xpc3RzLnRhc2tsZXQuZnVuYyAhPQo+ICsJCSAgICBleGVjbGlzdHNfc3Vi bWlzc2lvbl90YXNrbGV0KSB7Cj4gKwkJCWVyciA9IC1FTk9ERVY7Cj4gKwkJCWdvdG8gZXJyX3B1 dDsKPiArCQl9Cj4gKwo+ICsJCUdFTV9CVUdfT04oUkJfRU1QVFlfTk9ERSgmdmUtPm5vZGVzW3Np YmxpbmctPmlkXS5yYikpOwo+ICsJCVJCX0NMRUFSX05PREUoJnZlLT5ub2Rlc1tzaWJsaW5nLT5p ZF0ucmIpOwo+ICsKPiArCQl2ZS0+c2libGluZ3NbdmUtPm51bV9zaWJsaW5ncysrXSA9IHNpYmxp bmc7Cj4gKwkJdmUtPmJhc2UubWFzayB8PSBzaWJsaW5nLT5tYXNrOwo+ICsKPiArCQkvKgo+ICsJ CSAqIEFsbCBwaHlzaWNhbCBlbmdpbmVzIG11c3QgYmUgY29tcGF0aWJsZSBmb3IgdGhlaXIgZW1p c3Npb24KPiArCQkgKiBmdW5jdGlvbnMgKGFzIHdlIGJ1aWxkIHRoZSBpbnN0cnVjdGlvbnMgZHVy aW5nIHJlcXVlc3QKPiArCQkgKiBjb25zdHJ1Y3Rpb24gYW5kIGRvIG5vdCBhbHRlciB0aGVtIGJl Zm9yZSBzdWJtaXNzaW9uCj4gKwkJICogb24gdGhlIHBoeXNpY2FsIGVuZ2luZSkuIFdlIHVzZSB0 aGUgZW5naW5lIGNsYXNzIGFzIGEgZ3VpZGUKPiArCQkgKiBoZXJlLCBhbHRob3VnaCB0aGF0IGNv dWxkIGJlIHJlZmluZWQuCj4gKwkJICovCj4gKwkJaWYgKHZlLT5iYXNlLmNsYXNzICE9IE9USEVS X0NMQVNTKSB7Cj4gKwkJCWlmICh2ZS0+YmFzZS5jbGFzcyAhPSBzaWJsaW5nLT5jbGFzcykgewo+ ICsJCQkJRFJNX0RFQlVHKCJpbnZhbGlkIG1peGluZyBvZiBlbmdpbmUgY2xhc3MsIHNpYmxpbmcg JWQsIGFscmVhZHkgJWRcbiIsCj4gKwkJCQkJICBzaWJsaW5nLT5jbGFzcywgdmUtPmJhc2UuY2xh c3MpOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJCWdvdG8gZXJyX3B1dDsKPiArCQkJfQo+ ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCXZlLT5iYXNlLmNsYXNzID0gc2libGluZy0+ Y2xhc3M7Cj4gKwkJdmUtPmJhc2UudWFiaV9jbGFzcyA9IHNpYmxpbmctPnVhYmlfY2xhc3M7Cj4g KwkJc25wcmludGYodmUtPmJhc2UubmFtZSwgc2l6ZW9mKHZlLT5iYXNlLm5hbWUpLAo+ICsJCQkg InYlZHglZCIsIHZlLT5iYXNlLmNsYXNzLCBjb3VudCk7Cj4gKwkJdmUtPmJhc2UuY29udGV4dF9z aXplID0gc2libGluZy0+Y29udGV4dF9zaXplOwo+ICsKPiArCQl2ZS0+YmFzZS5lbWl0X2JiX3N0 YXJ0ID0gc2libGluZy0+ZW1pdF9iYl9zdGFydDsKPiArCQl2ZS0+YmFzZS5lbWl0X2ZsdXNoID0g c2libGluZy0+ZW1pdF9mbHVzaDsKPiArCQl2ZS0+YmFzZS5lbWl0X2luaXRfYnJlYWRjcnVtYiA9 IHNpYmxpbmctPmVtaXRfaW5pdF9icmVhZGNydW1iOwo+ICsJCXZlLT5iYXNlLmVtaXRfZmluaV9i cmVhZGNydW1iID0gc2libGluZy0+ZW1pdF9maW5pX2JyZWFkY3J1bWI7Cj4gKwkJdmUtPmJhc2Uu ZW1pdF9maW5pX2JyZWFkY3J1bWJfZHcgPQo+ICsJCQlzaWJsaW5nLT5lbWl0X2ZpbmlfYnJlYWRj cnVtYl9kdzsKPiArCX0KPiArCj4gKwlyZXR1cm4gJnZlLT5jb250ZXh0Owo+ICsKPiArZXJyX3B1 dDoKPiArCWludGVsX2NvbnRleHRfcHV0KCZ2ZS0+Y29udGV4dCk7Cj4gKwlyZXR1cm4gRVJSX1BU UihlcnIpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCj4gK2ludGVsX2V4ZWNs aXN0c19jbG9uZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gKwkJCSAg ICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNyYykKPiArewo+ICsJc3RydWN0IHZpcnR1YWxf ZW5naW5lICpzZSA9IHRvX3ZpcnR1YWxfZW5naW5lKHNyYyk7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqZHN0Owo+ICsKPiArCWRzdCA9IGludGVsX2V4ZWNsaXN0c19jcmVhdGVfdmlydHVhbChj dHgsCj4gKwkJCQkJICAgICBzZS0+c2libGluZ3MsCj4gKwkJCQkJICAgICBzZS0+bnVtX3NpYmxp bmdzKTsKPiArCWlmIChJU19FUlIoZHN0KSkKPiArCQlyZXR1cm4gZHN0Owo+ICsKPiArCXJldHVy biBkc3Q7Cj4gK30KPiArCj4gICB2b2lkIGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkgICBzdHJ1Y3QgZHJtX3ByaW50 ZXIgKm0sCj4gICAJCQkJICAgdm9pZCAoKnNob3dfcmVxdWVzdCkoc3RydWN0IGRybV9wcmludGVy ICptLAo+IEBAIC0yODEwLDYgKzM0MjgsMjkgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19y ZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCXNob3dfcmVxdWVz dChtLCBsYXN0LCAiXHRcdFEgIik7Cj4gICAJfQo+ICAgCj4gKwlsYXN0ID0gTlVMTDsKPiArCWNv dW50ID0gMDsKPiArCWZvciAocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVh bCk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7Cj4gKwkJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2 ZSA9Cj4gKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIp Owo+ICsJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsK PiArCj4gKwkJaWYgKHJxKSB7Cj4gKwkJCWlmIChjb3VudCsrIDwgbWF4IC0gMSkKPiArCQkJCXNo b3dfcmVxdWVzdChtLCBycSwgIlx0XHRWICIpOwo+ICsJCQllbHNlCj4gKwkJCQlsYXN0ID0gcnE7 Cj4gKwkJfQo+ICsJfQo+ICsJaWYgKGxhc3QpIHsKPiArCQlpZiAoY291bnQgPiBtYXgpIHsKPiAr CQkJZHJtX3ByaW50ZihtLAo+ICsJCQkJICAgIlx0XHQuLi5za2lwcGluZyAlZCB2aXJ0dWFsIHJl cXVlc3RzLi4uXG4iLAo+ICsJCQkJICAgY291bnQgLSBtYXgpOwo+ICsJCX0KPiArCQlzaG93X3Jl cXVlc3QobSwgbGFzdCwgIlx0XHRWICIpOwo+ICsJfQo+ICsKPiAgIAlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiAgIH0KPiAgIAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2xyYy5oCj4gaW5kZXggYTBkYzkwN2E3MjQ5Li41NTMwNjA2MDUy ZTUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuaAo+IEBAIC0xMTQsNCArMTE0 LDEzIEBAIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ICAgCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCksCj4gICAJCQkJ ICAgdW5zaWduZWQgaW50IG1heCk7Cj4gICAKPiArc3RydWN0IGludGVsX2NvbnRleHQgKgo+ICtp bnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCwKPiArCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKipzaWJsaW5ncywKPiArCQkJ ICAgICAgIHVuc2lnbmVkIGludCBjb3VudCk7Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Cj4gK2ludGVsX2V4ZWNsaXN0c19jbG9uZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsCj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNyYyk7Cj4gKwo+ICAg I2VuZGlmIC8qIF9JTlRFTF9MUkNfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF9scmMuYwo+IGluZGV4IDViM2Q4ZTMzZjFjZi4uY2NjMGI2MzUwMTIzIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKPiBAQCAtMTMxMCw2ICsxMzEwLDE4NSBAQCBz dGF0aWMgaW50IGxpdmVfcHJlZW1wdF9zbW9rZSh2b2lkICphcmcpCj4gICAJcmV0dXJuIGVycjsK PiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IG5vcF92aXJ0dWFsX2VuZ2luZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQkJICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNp YmxpbmdzLAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgbnNpYmxpbmcsCj4gKwkJCSAgICAgIHVu c2lnbmVkIGludCBuY3R4LAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gKyNkZWZp bmUgQ0hBSU4gQklUKDApCj4gK3sKPiArCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKPiArCXN0cnVj dCBpOTE1X3JlcXVlc3QgKnJlcXVlc3RbMTZdOwo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg KmN0eFsxNl07Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqdmVbMTZdOwo+ICsJdW5zaWduZWQg bG9uZyBuLCBwcmltZSwgbmM7Cj4gKwlzdHJ1Y3QgaWd0X2xpdmVfdGVzdCB0Owo+ICsJa3RpbWVf dCB0aW1lc1syXSA9IHt9Owo+ICsJaW50IGVycjsKPiArCj4gKwlHRU1fQlVHX09OKCFuY3R4IHx8 IG5jdHggPiBBUlJBWV9TSVpFKGN0eCkpOwo+ICsKPiArCWZvciAobiA9IDA7IG4gPCBuY3R4OyBu KyspIHsKPiArCQljdHhbbl0gPSBrZXJuZWxfY29udGV4dChpOTE1KTsKPiArCQlpZiAoIWN0eFtu XSkgewo+ICsJCQllcnIgPSAtRU5PTUVNOwo+ICsJCQluY3R4ID0gbjsKPiArCQkJZ290byBvdXQ7 Cj4gKwkJfQo+ICsKPiArCQl2ZVtuXSA9IGludGVsX2V4ZWNsaXN0c19jcmVhdGVfdmlydHVhbChj dHhbbl0sCj4gKwkJCQkJCSAgICAgICBzaWJsaW5ncywgbnNpYmxpbmcpOwo+ICsJCWlmIChJU19F UlIodmVbbl0pKSB7Cj4gKwkJCWtlcm5lbF9jb250ZXh0X2Nsb3NlKGN0eFtuXSk7Cj4gKwkJCWVy ciA9IFBUUl9FUlIodmVbbl0pOwo+ICsJCQluY3R4ID0gbjsKPiArCQkJZ290byBvdXQ7Cj4gKwkJ fQo+ICsKPiArCQllcnIgPSBpbnRlbF9jb250ZXh0X3Bpbih2ZVtuXSk7Cj4gKwkJaWYgKGVycikg ewo+ICsJCQlpbnRlbF9jb250ZXh0X3B1dCh2ZVtuXSk7Cj4gKwkJCWtlcm5lbF9jb250ZXh0X2Ns b3NlKGN0eFtuXSk7Cj4gKwkJCW5jdHggPSBuOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwl9 Cj4gKwo+ICsJZXJyID0gaWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgaTkxNSwgX19mdW5jX18sIHZl WzBdLT5lbmdpbmUtPm5hbWUpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIG91dDsKPiArCj4gKwlm b3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbShwcmltZSwgMSwgODE5Mikgewo+ICsJCXRpbWVzWzFd ID0ga3RpbWVfZ2V0X3JhdygpOwo+ICsKPiArCQlpZiAoZmxhZ3MgJiBDSEFJTikgewo+ICsJCQlm b3IgKG5jID0gMDsgbmMgPCBuY3R4OyBuYysrKSB7Cj4gKwkJCQlmb3IgKG4gPSAwOyBuIDwgcHJp bWU7IG4rKykgewo+ICsJCQkJCXJlcXVlc3RbbmNdID0KPiArCQkJCQkJaTkxNV9yZXF1ZXN0X2Ny ZWF0ZSh2ZVtuY10pOwo+ICsJCQkJCWlmIChJU19FUlIocmVxdWVzdFtuY10pKSB7Cj4gKwkJCQkJ CWVyciA9IFBUUl9FUlIocmVxdWVzdFtuY10pOwo+ICsJCQkJCQlnb3RvIG91dDsKPiArCQkJCQl9 Cj4gKwo+ICsJCQkJCWk5MTVfcmVxdWVzdF9hZGQocmVxdWVzdFtuY10pOwo+ICsJCQkJfQo+ICsJ CQl9Cj4gKwkJfSBlbHNlIHsKPiArCQkJZm9yIChuID0gMDsgbiA8IHByaW1lOyBuKyspIHsKPiAr CQkJCWZvciAobmMgPSAwOyBuYyA8IG5jdHg7IG5jKyspIHsKPiArCQkJCQlyZXF1ZXN0W25jXSA9 Cj4gKwkJCQkJCWk5MTVfcmVxdWVzdF9jcmVhdGUodmVbbmNdKTsKPiArCQkJCQlpZiAoSVNfRVJS KHJlcXVlc3RbbmNdKSkgewo+ICsJCQkJCQllcnIgPSBQVFJfRVJSKHJlcXVlc3RbbmNdKTsKPiAr CQkJCQkJZ290byBvdXQ7Cj4gKwkJCQkJfQo+ICsKPiArCQkJCQlpOTE1X3JlcXVlc3RfYWRkKHJl cXVlc3RbbmNdKTsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJZm9yIChuYyA9IDA7 IG5jIDwgbmN0eDsgbmMrKykgewo+ICsJCQlpZiAoaTkxNV9yZXF1ZXN0X3dhaXQocmVxdWVzdFtu Y10sCj4gKwkJCQkJICAgICAgSTkxNV9XQUlUX0xPQ0tFRCwKPiArCQkJCQkgICAgICBIWiAvIDEw KSA8IDApIHsKPiArCQkJCXByX2VycigiJXMoJXMpOiB3YWl0IGZvciAlbGx4OiVsbGQgdGltZWQg b3V0XG4iLAo+ICsJCQkJICAgICAgIF9fZnVuY19fLCB2ZVswXS0+ZW5naW5lLT5uYW1lLAo+ICsJ CQkJICAgICAgIHJlcXVlc3RbbmNdLT5mZW5jZS5jb250ZXh0LAo+ICsJCQkJICAgICAgIHJlcXVl c3RbbmNdLT5mZW5jZS5zZXFubyk7Cj4gKwo+ICsJCQkJR0VNX1RSQUNFKCIlcyglcykgZmFpbGVk IGF0IHJlcXVlc3QgJWxseDolbGxkXG4iLAo+ICsJCQkJCSAgX19mdW5jX18sIHZlWzBdLT5lbmdp bmUtPm5hbWUsCj4gKwkJCQkJICByZXF1ZXN0W25jXS0+ZmVuY2UuY29udGV4dCwKPiArCQkJCQkg IHJlcXVlc3RbbmNdLT5mZW5jZS5zZXFubyk7Cj4gKwkJCQlHRU1fVFJBQ0VfRFVNUCgpOwo+ICsJ CQkJaTkxNV9nZW1fc2V0X3dlZGdlZChpOTE1KTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJ fQo+ICsKPiArCQl0aW1lc1sxXSA9IGt0aW1lX3N1YihrdGltZV9nZXRfcmF3KCksIHRpbWVzWzFd KTsKPiArCQlpZiAocHJpbWUgPT0gMSkKPiArCQkJdGltZXNbMF0gPSB0aW1lc1sxXTsKPiArCj4g KwkJaWYgKF9faWd0X3RpbWVvdXQoZW5kX3RpbWUsIE5VTEwpKQo+ICsJCQlicmVhazsKPiArCX0K PiArCj4gKwllcnIgPSBpZ3RfbGl2ZV90ZXN0X2VuZCgmdCk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdv dG8gb3V0Owo+ICsKPiArCXByX2luZm8oIlJlcXVlc3R4JWQgbGF0ZW5jaWVzIG9uICVzOiAxID0g JWxsdW5zLCAlbHUgPSAlbGx1bnNcbiIsCj4gKwkJbmN0eCwgdmVbMF0tPmVuZ2luZS0+bmFtZSwg a3RpbWVfdG9fbnModGltZXNbMF0pLAo+ICsJCXByaW1lLCBkaXY2NF91NjQoa3RpbWVfdG9fbnMo dGltZXNbMV0pLCBwcmltZSkpOwo+ICsKPiArb3V0Ogo+ICsJaWYgKGlndF9mbHVzaF90ZXN0KGk5 MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQo+ICsJCWVyciA9IC1FSU87Cj4gKwo+ICsJZm9yIChuYyA9 IDA7IG5jIDwgbmN0eDsgbmMrKykgewo+ICsJCWludGVsX2NvbnRleHRfdW5waW4odmVbbmNdKTsK PiArCQlpbnRlbF9jb250ZXh0X3B1dCh2ZVtuY10pOwo+ICsJCWtlcm5lbF9jb250ZXh0X2Nsb3Nl KGN0eFtuY10pOwo+ICsJfQo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBs aXZlX3ZpcnR1YWxfZW5naW5lKHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSBhcmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nc1tN QVhfRU5HSU5FX0lOU1RBTkNFICsgMV07Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiArCXVuc2lnbmVkIGludCBjbGFzcywg aW5zdDsKPiArCWludCBlcnIgPSAtRU5PREVWOwo+ICsKPiArCWlmIChVU0VTX0dVQ19TVUJNSVNT SU9OKGk5MTUpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCW11dGV4X2xvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7 Cj4gKwkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsICZlbmdpbmUsIDEsIDEsIDApOwo+ ICsJCWlmIChlcnIpIHsKPiArCQkJcHJfZXJyKCJGYWlsZWQgdG8gd3JhcCBlbmdpbmUgJXM6IGVy cj0lZFxuIiwKPiArCQkJICAgICAgIGVuZ2luZS0+bmFtZSwgZXJyKTsKPiArCQkJZ290byBvdXRf dW5sb2NrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlmb3IgKGNsYXNzID0gMDsgY2xhc3MgPD0gTUFY X0VOR0lORV9DTEFTUzsgY2xhc3MrKykgewo+ICsJCWludCBuc2libGluZywgbjsKPiArCj4gKwkJ bnNpYmxpbmcgPSAwOwo+ICsJCWZvciAoaW5zdCA9IDA7IGluc3QgPD0gTUFYX0VOR0lORV9JTlNU QU5DRTsgaW5zdCsrKSB7Cj4gKwkJCWlmICghaTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0 XSkKPiArCQkJCWJyZWFrOwoKSSBwcmV2aW91cyByZXZpZXcgSSBzYWlkIEkgdGhpbmsgdGhpcyBz aG91bGQgYmUgY29udGludWUgaW5zdGVhZCBvZiAKYnJlYWsgc28gdmNzMCArIHZjczIgc2t1cyBj YW4gYWxzbyBiZSB0ZXN0ZWQuCgo+ICsKPiArCQkJc2libGluZ3NbbnNpYmxpbmcrK10gPSBpOTE1 LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RdOwo+ICsJCX0KPiArCQlpZiAobnNpYmxpbmcgPCAy KQo+ICsJCQljb250aW51ZTsKCkFuZCBhbHNvIHRoYXQgc2luZ2xlIGVuZ2luZSBWRSBjb3VsZCBi ZSB0ZXN0ZWQganVzdCBhcyB3ZWxsLCB1bmxlc3MgSSBhbSAKbWlzc2luZyBzb21ldGhpbmcuCgpU aGF0J3MgYWxsIHJlbWFpbmluZyBmZWVkYmFjayBJIGhhdmUgb24gdGhpcyBwYXRjaC4KClJlZ2Fy ZHMsCgpUdnJ0a28KCj4gKwo+ICsJCWZvciAobiA9IDE7IG4gPD0gbnNpYmxpbmcgKyAxOyBuKysp IHsKPiArCQkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsIHNpYmxpbmdzLCBuc2libGlu ZywKPiArCQkJCQkJIG4sIDApOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBvdXRfdW5sb2Nr Owo+ICsJCX0KPiArCj4gKwkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsIHNpYmxpbmdz LCBuc2libGluZywgbiwgQ0hBSU4pOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8gb3V0X3VubG9j azsKPiArCX0KPiArCj4gK291dF91bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAgIGludCBpbnRlbF9leGVj bGlzdHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICB7 Cj4gICAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKPiBAQCAt MTMyMiw2ICsxNTAxLDcgQEAgaW50IGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0ZXN0cyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAkJU1VCVEVTVChsaXZlX2NoYWluX3ByZWVt cHQpLAo+ICAgCQlTVUJURVNUKGxpdmVfcHJlZW1wdF9oYW5nKSwKPiAgIAkJU1VCVEVTVChsaXZl X3ByZWVtcHRfc21va2UpLAo+ICsJCVNVQlRFU1QobGl2ZV92aXJ0dWFsX2VuZ2luZSksCj4gICAJ fTsKPiAgIAo+ICAgCWlmICghSEFTX0VYRUNMSVNUUyhpOTE1KSkKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmgKPiBpbmRleCA2N2Y4YTRhODA3YTAuLmZlODJkMzU3MTA3MiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uaAo+IEBAIC05MSw0ICs5MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3Rh c2tsZXRfZW5hYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKPiAgIAlyZXR1cm4gYXRvbWlj X2RlY19hbmRfdGVzdCgmdC0+Y291bnQpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUgYm9v bCBfX3Rhc2tsZXRfaXNfc2NoZWR1bGVkKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKPiArewo+ ICsJcmV0dXJuIHRlc3RfYml0KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0ZSk7Cj4gK30K PiArCj4gICAjZW5kaWYgLyogX19JOTE1X0dFTV9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXggMDQwYzBiNzcwYzIxLi4zYWUxZDI3MTMwYTggMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gQEAgLTg2LDYgKzg2 LDcgQEAKPiAgICAqLwo+ICAgCj4gICAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbm9zcGVjLmg+Cj4gICAKPiAgICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KPiAg IAo+IEBAIC0xMjE4LDcgKzEyMTksNiBAQCBfX2ludGVsX2NvbnRleHRfcmVjb25maWd1cmVfc3Nl dShzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gICAJaW50IHJldDsKPiAgIAo+ICAgCUdFTV9C VUdfT04oSU5URUxfR0VOKGNlLT5nZW1fY29udGV4dC0+aTkxNSkgPCA4KTsKPiAtCUdFTV9CVUdf T04oY2UtPmVuZ2luZS0+aWQgIT0gUkNTMCk7Cj4gICAKPiAgIAlyZXQgPSBpbnRlbF9jb250ZXh0 X2xvY2tfcGlubmVkKGNlKTsKPiAgIAlpZiAocmV0KQo+IEBAIC0xNDEyLDcgKzE0MTIsMTAwIEBA IHN0cnVjdCBzZXRfZW5naW5lcyB7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgKmVuZ2lu ZXM7Cj4gICB9Owo+ICAgCj4gK3N0YXRpYyBpbnQKPiArc2V0X2VuZ2luZXNfX2xvYWRfYmFsYW5j ZShzdHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBfX3VzZXIgKmJhc2UsIHZvaWQgKmRhdGEpCj4g K3sKPiArCXN0cnVjdCBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2UgX191c2VyICpl eHQgPQo+ICsJCWNvbnRhaW5lcl9vZl91c2VyKGJhc2UsIHR5cGVvZigqZXh0KSwgYmFzZSk7Cj4g Kwljb25zdCBzdHJ1Y3Qgc2V0X2VuZ2luZXMgKnNldCA9IGRhdGE7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpzdGFja1sxNl07Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2libGlu Z3M7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gKwl1MTYgbnVtX3NpYmxpbmdzLCBp ZHg7Cj4gKwl1bnNpZ25lZCBpbnQgbjsKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYgKCFIQVNfRVhF Q0xJU1RTKHNldC0+Y3R4LT5pOTE1KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlpZiAo VVNFU19HVUNfU1VCTUlTU0lPTihzZXQtPmN0eC0+aTkxNSkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7 IC8qIG5vdCBpbXBsZW1lbnQgeWV0ICovCj4gKwo+ICsJaWYgKGdldF91c2VyKGlkeCwgJmV4dC0+ ZW5naW5lX2luZGV4KSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAoaWR4ID49IHNl dC0+ZW5naW5lcy0+bnVtX2VuZ2luZXMpIHsKPiArCQlEUk1fREVCVUcoIkludmFsaWQgcGxhY2Vt ZW50IHZhbHVlLCAlZCA+PSAlZFxuIiwKPiArCQkJICBpZHgsIHNldC0+ZW5naW5lcy0+bnVtX2Vu Z2luZXMpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlkeCA9IGFycmF5X2lu ZGV4X25vc3BlYyhpZHgsIHNldC0+ZW5naW5lcy0+bnVtX2VuZ2luZXMpOwo+ICsJaWYgKHNldC0+ ZW5naW5lcy0+ZW5naW5lc1tpZHhdKSB7Cj4gKwkJRFJNX0RFQlVHKCJJbnZhbGlkIHBsYWNlbWVu dFslZF0sIGFscmVhZHkgb2NjdXBpZWRcbiIsIGlkeCk7Cj4gKwkJcmV0dXJuIC1FRVhJU1Q7Cj4g Kwl9Cj4gKwo+ICsJaWYgKGdldF91c2VyKG51bV9zaWJsaW5ncywgJmV4dC0+bnVtX3NpYmxpbmdz KSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwllcnIgPSBjaGVja191c2VyX21ieigmZXh0 LT5mbGFncyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZXJyID0gY2hl Y2tfdXNlcl9tYnooJmV4dC0+bWJ6NjQpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ ICsKPiArCXNpYmxpbmdzID0gc3RhY2s7Cj4gKwlpZiAobnVtX3NpYmxpbmdzID4gQVJSQVlfU0la RShzdGFjaykpIHsKPiArCQlzaWJsaW5ncyA9IGttYWxsb2NfYXJyYXkobnVtX3NpYmxpbmdzLAo+ ICsJCQkJCSBzaXplb2YoKnNpYmxpbmdzKSwKPiArCQkJCQkgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYg KCFzaWJsaW5ncykKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJZm9yIChuID0g MDsgbiA8IG51bV9zaWJsaW5nczsgbisrKSB7Cj4gKwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNz X2luc3RhbmNlIGNpOwo+ICsKPiArCQlpZiAoY29weV9mcm9tX3VzZXIoJmNpLCAmZXh0LT5lbmdp bmVzW25dLCBzaXplb2YoY2kpKSkgewo+ICsJCQllcnIgPSAtRUZBVUxUOwo+ICsJCQlnb3RvIG91 dF9zaWJsaW5nczsKPiArCQl9Cj4gKwo+ICsJCXNpYmxpbmdzW25dID0gaW50ZWxfZW5naW5lX2xv b2t1cF91c2VyKHNldC0+Y3R4LT5pOTE1LAo+ICsJCQkJCQkgICAgICAgY2kuZW5naW5lX2NsYXNz LAo+ICsJCQkJCQkgICAgICAgY2kuZW5naW5lX2luc3RhbmNlKTsKPiArCQlpZiAoIXNpYmxpbmdz W25dKSB7Cj4gKwkJCURSTV9ERUJVRygiSW52YWxpZCBzaWJsaW5nWyVkXTogeyBjbGFzczolZCwg aW5zdDolZCB9XG4iLAo+ICsJCQkJICBuLCBjaS5lbmdpbmVfY2xhc3MsIGNpLmVuZ2luZV9pbnN0 YW5jZSk7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCWdvdG8gb3V0X3NpYmxpbmdzOwo+ICsJ CX0KPiArCX0KPiArCj4gKwljZSA9IGludGVsX2V4ZWNsaXN0c19jcmVhdGVfdmlydHVhbChzZXQt PmN0eCwgc2libGluZ3MsIG4pOwo+ICsJaWYgKElTX0VSUihjZSkpIHsKPiArCQllcnIgPSBQVFJf RVJSKGNlKTsKPiArCQlnb3RvIG91dF9zaWJsaW5nczsKPiArCX0KPiArCj4gKwlpZiAoY21weGNo Zygmc2V0LT5lbmdpbmVzLT5lbmdpbmVzW2lkeF0sIE5VTEwsIGNlKSkgewo+ICsJCWludGVsX2Nv bnRleHRfcHV0KGNlKTsKPiArCQllcnIgPSAtRUVYSVNUOwo+ICsJCWdvdG8gb3V0X3NpYmxpbmdz Owo+ICsJfQo+ICsKPiArb3V0X3NpYmxpbmdzOgo+ICsJaWYgKHNpYmxpbmdzICE9IHN0YWNrKQo+ ICsJCWtmcmVlKHNpYmxpbmdzKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICAgc3Rh dGljIGNvbnN0IGk5MTVfdXNlcl9leHRlbnNpb25fZm4gc2V0X2VuZ2luZXNfX2V4dGVuc2lvbnNb XSA9IHsKPiArCVtJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFXSA9IHNldF9l bmdpbmVzX19sb2FkX2JhbGFuY2UsCj4gICB9Owo+ICAgCj4gICBzdGF0aWMgaW50Cj4gQEAgLTE3 MTEsMTQgKzE4MDQsMjkgQEAgc3RhdGljIGludCBjbG9uZV9lbmdpbmVzKHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpkc3QsCj4gICAKPiAgIAljbG9uZS0+aTkxNSA9IGRzdC0+aTkxNTsKPiAgIAlm b3IgKG4gPSAwOyBuIDwgZS0+bnVtX2VuZ2luZXM7IG4rKykgewo+ICsJCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPiArCj4gICAJCWlmICghZS0+ZW5naW5lc1tuXSkgewo+ICAgCQkJ Y2xvbmUtPmVuZ2luZXNbbl0gPSBOVUxMOwo+ICAgCQkJY29udGludWU7Cj4gICAJCX0KPiArCQll bmdpbmUgPSBlLT5lbmdpbmVzW25dLT5lbmdpbmU7Cj4gICAKPiAtCQljbG9uZS0+ZW5naW5lc1tu XSA9Cj4gLQkJCWludGVsX2NvbnRleHRfY3JlYXRlKGRzdCwgZS0+ZW5naW5lc1tuXS0+ZW5naW5l KTsKPiAtCQlpZiAoIWNsb25lLT5lbmdpbmVzW25dKSB7Cj4gKwkJLyoKPiArCQkgKiBWaXJ0dWFs IGVuZ2luZXMgYXJlIHNpbmdsZXRvbnM7IHRoZXkgY2FuIG9ubHkgZXhpc3QKPiArCQkgKiBpbnNp ZGUgYSBzaW5nbGUgY29udGV4dCwgYmVjYXVzZSB0aGV5IGVtYmVkIHRoZWlyCj4gKwkJICogSFcg Y29udGV4dC4uLiBBcyBlYWNoIHZpcnR1YWwgY29udGV4dCBpbXBsaWVzIGEgc2luZ2xlCj4gKwkJ ICogdGltZWxpbmUgKGVhY2ggZW5naW5lIGNhbiBvbmx5IGRlcXVldWUgYSBzaW5nbGUgcmVxdWVz dAo+ICsJCSAqIGF0IGFueSB0aW1lKSwgaXQgd291bGQgYmUgc3VycHJpc2luZyBmb3IgdHdvIGNv bnRleHRzCj4gKwkJICogdG8gdXNlIHRoZSBzYW1lIGVuZ2luZS4gU28gbGV0J3MgY3JlYXRlIGEg Y29weSBvZgo+ICsJCSAqIHRoZSB2aXJ0dWFsIGVuZ2luZSBpbnN0ZWFkLgo+ICsJCSAqLwo+ICsJ CWlmIChpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChlbmdpbmUpKQo+ICsJCQljbG9uZS0+ZW5naW5l c1tuXSA9Cj4gKwkJCQlpbnRlbF9leGVjbGlzdHNfY2xvbmVfdmlydHVhbChkc3QsIGVuZ2luZSk7 Cj4gKwkJZWxzZQo+ICsJCQljbG9uZS0+ZW5naW5lc1tuXSA9IGludGVsX2NvbnRleHRfY3JlYXRl KGRzdCwgZW5naW5lKTsKPiArCQlpZiAoSVNfRVJSX09SX05VTEwoY2xvbmUtPmVuZ2luZXNbbl0p KSB7Cj4gICAJCQlfX2ZyZWVfZW5naW5lcyhjbG9uZSwgbik7Cj4gICAJCQlnb3RvIGVycl91bmxv Y2s7Cj4gICAJCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hl ZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBpbmRleCBk MjE1ZGNkZjBiMWUuLjc4Y2ViNTZkNzgwMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z Y2hlZHVsZXIuYwo+IEBAIC0xNTAsMTcgKzE1MCwyNiBAQCBzY2hlZF9sb2NrX2VuZ2luZShjb25z dCBzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLAo+ICAgCQkgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmxvY2tlZCwKPiAgIAkJICBzdHJ1Y3Qgc2NoZWRfY2FjaGUgKmNhY2hlKQo+ICAgewo+ IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gbm9kZV90b19yZXF1ZXN0KG5vZGUp LT5lbmdpbmU7Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IG5vZGVfdG9fcmVx dWVzdChub2RlKTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAo+ICAg CUdFTV9CVUdfT04oIWxvY2tlZCk7Cj4gICAKPiAtCWlmIChlbmdpbmUgIT0gbG9ja2VkKSB7Cj4g KwkvKgo+ICsJICogVmlydHVhbCBlbmdpbmVzIGNvbXBsaWNhdGUgYWNxdWlyaW5nIHRoZSBlbmdp bmUgdGltZWxpbmUgbG9jaywKPiArCSAqIGFzIHRoZWlyIHJxLT5lbmdpbmUgcG9pbnRlciBpcyBu b3Qgc3RhYmxlIHVudGlsIHVuZGVyIHRoYXQKPiArCSAqIGVuZ2luZSBsb2NrLiBUaGUgc2ltcGxl IHBsb3kgd2UgdXNlIGlzIHRvIHRha2UgdGhlIGxvY2sgdGhlbgo+ICsJICogY2hlY2sgdGhhdCB0 aGUgcnEgc3RpbGwgYmVsb25ncyB0byB0aGUgbmV3bHkgbG9ja2VkIGVuZ2luZS4KPiArCSAqLwo+ ICsJd2hpbGUgKGxvY2tlZCAhPSAoZW5naW5lID0gUkVBRF9PTkNFKHJxLT5lbmdpbmUpKSkgewo+ ICAgCQlzcGluX3VubG9jaygmbG9ja2VkLT50aW1lbGluZS5sb2NrKTsKPiAgIAkJbWVtc2V0KGNh Y2hlLCAwLCBzaXplb2YoKmNhY2hlKSk7Cj4gICAJCXNwaW5fbG9jaygmZW5naW5lLT50aW1lbGlu ZS5sb2NrKTsKPiArCQlsb2NrZWQgPSBlbmdpbmU7Cj4gICAJfQo+ICAgCj4gLQlyZXR1cm4gZW5n aW5lOwo+ICsJR0VNX0JVR19PTihsb2NrZWQgIT0gZW5naW5lKTsKPiArCXJldHVybiBsb2NrZWQ7 Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUgaW50IHJxX3ByaW8oY29uc3Qgc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEpCj4gQEAgLTI3Miw2ICsyODEsNyBAQCBzdGF0aWMgdm9pZCBfX2k5MTVf c2NoZWR1bGUoc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSwKPiAgIAlzcGluX2xvY2soJmVu Z2luZS0+dGltZWxpbmUubG9jayk7Cj4gICAKPiAgIAkvKiBGaWZvIGFuZCBkZXB0aC1maXJzdCBy ZXBsYWNlbWVudCBlbnN1cmUgb3VyIGRlcHMgZXhlY3V0ZSBiZWZvcmUgdXMgKi8KPiArCWVuZ2lu ZSA9IHNjaGVkX2xvY2tfZW5naW5lKG5vZGUsIGVuZ2luZSwgJmNhY2hlKTsKPiAgIAlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShkZXAsIHAsICZkZnMsIGRmc19saW5rKSB7Cj4gICAJ CUlOSVRfTElTVF9IRUFEKCZkZXAtPmRmc19saW5rKTsKPiAgIAo+IEBAIC0yODMsOCArMjkzLDEx IEBAIHN0YXRpYyB2b2lkIF9faTkxNV9zY2hlZHVsZShzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpu b2RlLAo+ICAgCQlpZiAocHJpbyA8PSBub2RlLT5hdHRyLnByaW9yaXR5IHx8IG5vZGVfc2lnbmFs ZWQobm9kZSkpCj4gICAJCQljb250aW51ZTsKPiAgIAo+ICsJCUdFTV9CVUdfT04obm9kZV90b19y ZXF1ZXN0KG5vZGUpLT5lbmdpbmUgIT0gZW5naW5lKTsKPiArCj4gICAJCW5vZGUtPmF0dHIucHJp b3JpdHkgPSBwcmlvOwo+ICAgCQlpZiAoIWxpc3RfZW1wdHkoJm5vZGUtPmxpbmspKSB7Cj4gKwkJ CUdFTV9CVUdfT04oaW50ZWxfZW5naW5lX2lzX3ZpcnR1YWwoZW5naW5lKSk7Cj4gICAJCQlpZiAo IWNhY2hlLnByaW9saXN0KQo+ICAgCQkJCWNhY2hlLnByaW9saXN0ID0KPiAgIAkJCQkJaTkxNV9z Y2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3RpbWVsaW5lX3R5cGVzLmgKPiBpbmRleCA1MjU2YTBiNWM1ZjcuLjE2ODg3MDVmNGEyYiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmgKPiBAQCAtMjYs NiArMjYsNyBAQCBzdHJ1Y3QgaTkxNV90aW1lbGluZSB7Cj4gICAJc3BpbmxvY2tfdCBsb2NrOwo+ ICAgI2RlZmluZSBUSU1FTElORV9DTElFTlQgMCAvKiBkZWZhdWx0IHN1YmNsYXNzICovCj4gICAj ZGVmaW5lIFRJTUVMSU5FX0VOR0lORSAxCj4gKyNkZWZpbmUgVElNRUxJTkVfVklSVFVBTCAyCj4g ICAJc3RydWN0IG11dGV4IG11dGV4OyAvKiBwcm90ZWN0cyB0aGUgZmxvdyBvZiByZXF1ZXN0cyAq Lwo+ICAgCj4gICAJdW5zaWduZWQgaW50IHBpbl9jb3VudDsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gaW5k ZXggNjIzOTZkNTc1ZTI4Li5mOTc3MDk0ODE2MWMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBp L2RybS9pOTE1X2RybS5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gQEAg LTEzNyw2ICsxMzcsNyBAQCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2Ugewo+ICAg CV9fdTE2IGVuZ2luZV9jbGFzczsgLyogc2VlIGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFz cyAqLwo+ICAgCV9fdTE2IGVuZ2luZV9pbnN0YW5jZTsKPiAgICNkZWZpbmUgSTkxNV9FTkdJTkVf Q0xBU1NfSU5WQUxJRF9OT05FIC0xCj4gKyNkZWZpbmUgSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJ RF9WSVJUVUFMIC0yCj4gICB9Owo+ICAgCj4gICAvKioKPiBAQCAtMTYwOCw4ICsxNjA5LDQ2IEBA IHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHsKPiAgIAlfX3UzMiByc3Zk Owo+ICAgfTsKPiAgIAo+ICsvKgo+ICsgKiBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFu Y2U6Cj4gKyAqCj4gKyAqIEVuYWJsZSBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgdGhpcyBzZXQgb2Yg ZW5naW5lcy4KPiArICoKPiArICogSW50byB0aGUgSTkxNV9FWEVDX0RFRkFVTFQgc2xvdCBbMF0s IGEgdmlydHVhbCBlbmdpbmUgaXMgY3JlYXRlZCB0aGF0IHdoZW4KPiArICogdXNlZCB3aWxsIHBy b3h5IHRoZSBleGVjYnVmZmVyIHJlcXVlc3Qgb250byBvbmUgb2YgdGhlIHNldCBvZiBlbmdpbmVz Cj4gKyAqIGluIHN1Y2ggYSB3YXkgYXMgdG8gZGlzdHJpYnV0ZSB0aGUgbG9hZCBldmVubHkgYWNy b3NzIHRoZSBzZXQuCj4gKyAqCj4gKyAqIFRoZSBzZXQgb2YgZW5naW5lcyBtdXN0IGJlIGNvbXBh dGlibGUgKGUuZy4gdGhlIHNhbWUgSFcgY2xhc3MpIGFzIHRoZXkKPiArICogd2lsbCBzaGFyZSB0 aGUgc2FtZSBsb2dpY2FsIEdQVSBjb250ZXh0IGFuZCByaW5nLgo+ICsgKgo+ICsgKiBUbyBpbnRl cm1peCByZW5kZXJpbmcgd2l0aCB0aGUgdmlydHVhbCBlbmdpbmUgYW5kIGRpcmVjdCByZW5kZXJp bmcgb250bwo+ICsgKiB0aGUgYmFja2luZyBlbmdpbmVzIChieXBhc3NpbmcgdGhlIGxvYWQgYmFs YW5jaW5nIHByb3h5KSwgdGhlIGNvbnRleHQgbXVzdAo+ICsgKiBiZSBkZWZpbmVkIHRvIHVzZSBh IHNpbmdsZSB0aW1lbGluZSBmb3IgYWxsIGVuZ2luZXMuCj4gKyAqLwo+ICtzdHJ1Y3QgaTkxNV9j b250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlIHsKPiArCXN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5z aW9uIGJhc2U7Cj4gKwo+ICsJX191MTYgZW5naW5lX2luZGV4Owo+ICsJX191MTYgbnVtX3NpYmxp bmdzOwo+ICsJX191MzIgZmxhZ3M7IC8qIGFsbCB1bmRlZmluZWQgZmxhZ3MgbXVzdCBiZSB6ZXJv ICovCj4gKwo+ICsJX191NjQgbWJ6NjQ7IC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0 IGJlIHplcm8gKi8KPiArCj4gKwlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgZW5n aW5lc1swXTsKPiArfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKPiArCj4gKyNkZWZpbmUgSTkx NV9ERUZJTkVfQ09OVEVYVF9FTkdJTkVTX0xPQURfQkFMQU5DRShuYW1lX18sIE5fXykgc3RydWN0 IHsgXAo+ICsJc3RydWN0IGk5MTVfdXNlcl9leHRlbnNpb24gYmFzZTsgXAo+ICsJX191MTYgZW5n aW5lX2luZGV4OyBcCj4gKwlfX3UxNiBudW1fc2libGluZ3M7IFwKPiArCV9fdTMyIGZsYWdzOyBc Cj4gKwlfX3U2NCBtYno2NDsgXAo+ICsJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNl IGVuZ2luZXNbTl9fXTsgXAo+ICt9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG5hbWVfXwo+ICsK PiAgIHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyB7Cj4gICAJX191NjQgZXh0ZW5z aW9uczsgLyogbGlua2VkIGNoYWluIG9mIGV4dGVuc2lvbiBibG9ja3MsIDAgdGVybWluYXRlcyAq Lwo+ICsjZGVmaW5lIEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0UgMCAvKiBz ZWUgaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlICovCj4gICAJc3RydWN0IGk5MTVf ZW5naW5lX2NsYXNzX2luc3RhbmNlIGVuZ2luZXNbMF07Cj4gICB9IF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwo+ICAgCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeA==