From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arun Siluvery Subject: Re: [PATCH 12/62] drm/i915: Skip capturing an error state if we already have one Date: Wed, 8 Jun 2016 16:44:45 +0530 Message-ID: <5757FE25.2080206@linux.intel.com> References: <1464971847-15809-1-git-send-email-chris@chris-wilson.co.uk> <1464971847-15809-13-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 mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id BA3BF6E999 for ; Wed, 8 Jun 2016 11:14:48 +0000 (UTC) In-Reply-To: <1464971847-15809-13-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 T24gMDMvMDYvMjAxNiAyMjowNiwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IEFzIHdlIG9ubHkgZXZl ciBrZWVwIHRoZSBmaXJzdCBlcnJvciBzdGF0ZSBhcm91bmQsIHdlIGNhbiBhdm9pZCBzb21lCj4g d29yayB0aGF0IGNhbiBiZSBxdWl0ZSBpbnRydXNpdmUgaWYgd2UgZG9uJ3QgcmVjb3JkIHRoZSBl cnJvciB0aGUgc2Vjb25kCj4gdGltZSBhcm91bmQuIFRoaXMgZG9lcyBtb3ZlIHRoZSByYWNlIHdo ZXJlYnkgdGhlIHVzZXIgY291bGQgZGlzY2FyZCBvbmUKPiBlcnJvciBzdGF0ZSBhcyB0aGUgc2Vj b25kIGlzIGJlaW5nIGNhcHR1cmVkLCBidXQgdGhhdCByYWNlIGV4aXN0cyBpbiB0aGUKPiBjdXJy ZW50IGNvZGUgYW5kIHdlIGhvcGUgdGhhdCByZWNhcHR1cmluZyBlcnJvciBzdGF0ZSBpcyBvbmx5 IGRvbmUgZm9yCj4gZGVidWdnaW5nLgo+Cj4gTm90ZSB0aGF0IGFzIHdlIGRpc2NhcmQgdGhlIGVy cm9yIHN0YXRlIGZvciBzaW11bGF0ZWQgZXJyb3JzLCBpZ3QgdGhhdAo+IGV4ZXJjaXNlIGVycm9y IGNhcHR1cmUgY29udGludWUgdG8gZnVuY3Rpb24uCj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KClBhdGNoIGRvZXMgbW9yZSB0 aGFuIHdoYXQgaXMgZGVzY3JpYmVkIGhlcmUsIGFsbCBvZiBpOTE1X2dlbV9yZXF1ZXN0IApjaGFu Z2VzIGFyZSBwYXJ0IG9mIHRoaXMgcGF0Y2gsIGFjY2lkZW50YWxseSBzcXVhc2hlZCBtYXkgYmUu CgpyZWdhcmRzCkFydW4KCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAg ICAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwg MjEwICstLS0tLS0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAg ICB8IDY1MyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMgfCA2NTkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuaCB8IDI0 NSArKysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMg ICB8ICAgMyArCj4gICA2IGZpbGVzIGNoYW5nZWQsIDkxNiBpbnNlcnRpb25zKCspLCA4NTUgZGVs ZXRpb25zKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fcmVxdWVzdC5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fcmVxdWVzdC5oCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IGYyMDAw NzQ0MDgyMS4uMTRjZWYxZDIzNDNjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMzIs NiArMzIsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ICAgCSAgaTkxNV9nZW1f Z3R0Lm8gXAo+ICAgCSAgaTkxNV9nZW0ubyBcCj4gICAJICBpOTE1X2dlbV9yZW5kZXJfc3RhdGUu byBcCj4gKwkgIGk5MTVfZ2VtX3JlcXVlc3QubyBcCj4gICAJICBpOTE1X2dlbV9zaHJpbmtlci5v IFwKPiAgIAkgIGk5MTVfZ2VtX3N0b2xlbi5vIFwKPiAgIAkgIGk5MTVfZ2VtX3RpbGluZy5vIFwK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAxNWEwYzZiZGY1MDAuLjkzOWNkNDUwNDNj NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC02MCw2ICs2MCw3IEBACj4gICAj aW5jbHVkZSAiaTkxNV9nZW0uaCIKPiAgICNpbmNsdWRlICJpOTE1X2dlbV9ndHQuaCIKPiAgICNp bmNsdWRlICJpOTE1X2dlbV9yZW5kZXJfc3RhdGUuaCIKPiArI2luY2x1ZGUgImk5MTVfZ2VtX3Jl cXVlc3QuaCIKPgo+ICAgLyogR2VuZXJhbCBjdXN0b21pemF0aW9uOgo+ICAgICovCj4gQEAgLTIz MzksMTcyICsyMzQwLDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKl9fc2df bmV4dChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQo+ICAgCSAgICAgKCgoX19pdGVyKS5jdXJyICs9 IFBBR0VfU0laRSkgPCAoX19pdGVyKS5tYXgpIHx8CQlcCj4gICAJICAgICAoKF9faXRlcikgPSBf X3NndF9pdGVyKF9fc2dfbmV4dCgoX19pdGVyKS5zZ3ApLCBmYWxzZSksIDApKQo+Cj4gLS8qKgo+ IC0gKiBSZXF1ZXN0IHF1ZXVlIHN0cnVjdHVyZS4KPiAtICoKPiAtICogVGhlIHJlcXVlc3QgcXVl dWUgYWxsb3dzIHVzIHRvIG5vdGUgc2VxdWVuY2UgbnVtYmVycyB0aGF0IGhhdmUgYmVlbiBlbWl0 dGVkCj4gLSAqIGFuZCBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBidWZmZXJzIHRvIGJl IHJldGlyZWQuCj4gLSAqCj4gLSAqIEJ5IGtlZXBpbmcgdGhpcyBsaXN0LCB3ZSBjYW4gYXZvaWQg aGF2aW5nIHRvIGRvIHF1ZXN0aW9uYWJsZSBzZXF1ZW5jZQo+IC0gKiBudW1iZXIgY29tcGFyaXNv bnMgb24gYnVmZmVyIGxhc3RfcmVhZHx3cml0ZV9zZXFuby4gSXQgYWxzbyBhbGxvd3MgYW4KPiAt ICogZW1pc3Npb24gdGltZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QgZm9yIHRy YWNraW5nIGhvdyBmYXIgYWhlYWQKPiAtICogb2YgdGhlIEdQVSB0aGUgc3VibWlzc2lvbiBpcy4K PiAtICoKPiAtICogVGhlIHJlcXVlc3RzIGFyZSByZWZlcmVuY2UgY291bnRlZCwgc28gdXBvbiBj cmVhdGlvbiB0aGV5IHNob3VsZCBoYXZlIGFuCj4gLSAqIGluaXRpYWwgcmVmZXJlbmNlIHRha2Vu IHVzaW5nIGtyZWZfaW5pdAo+IC0gKi8KPiAtc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsK PiAtCXN0cnVjdCBrcmVmIHJlZjsKPiAtCj4gLQkvKiogT24gV2hpY2ggcmluZyB0aGlzIHJlcXVl c3Qgd2FzIGdlbmVyYXRlZCAqLwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4g LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQl1bnNpZ25lZCByZXNldF9jb3Vu dGVyOwo+IC0Jc3RydWN0IGludGVsX3NpZ25hbF9ub2RlIHNpZ25hbGluZzsKPiAtCj4gLQkgLyoq IEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcmV2aW91cyByZXF1ZXN0 LAo+IC0JICAqIHdoZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVxdWFsIHRvIHRoaXMgdGhlIEdQ VSBpcyBwcm9jZXNzaW5nCj4gLQkgICogdGhpcyByZXF1ZXN0Lgo+IC0JICAqLwo+IC0JdTMyIHBy ZXZpb3VzX3NlcW5vOwo+IC0KPiAtCSAvKiogR0VNIHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVk IHdpdGggdGhpcyByZXF1ZXN0LAo+IC0JICAqIHdoZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVx dWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGlzIHRoZSBHUFUKPiAtCSAgKiBoYXMgZmluaXNoZWQgcHJv Y2Vzc2luZyB0aGlzIHJlcXVlc3QuCj4gLQkgICovCj4gLQl1MzIgc2Vxbm87Cj4gLQo+IC0JLyoq IFBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdCAq Lwo+IC0JdTMyIGhlYWQ7Cj4gLQo+IC0JLyoqCj4gLQkgKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1 ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHBvc3RmaXguCj4gLQkgKiBUaGlzIGlzIHJlcXVpcmVk IHRvIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBhdmFpbGFibGUgcmluZ2J1ZmZlcgo+IC0JICogc3Bh Y2Ugd2l0aG91dCBvdmVyd3JpdGluZyB0aGUgcG9zdGZpeC4KPiAtCSAqLwo+IC0JIHUzMiBwb3N0 Zml4Owo+IC0KPiAtCS8qKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgZW5kIG9m IHRoZSB3aG9sZSByZXF1ZXN0ICovCj4gLQl1MzIgdGFpbDsKPiAtCj4gLQkvKiogUHJlYWxsb2Nh dGUgc3BhY2UgaW4gdGhlIHJpbmdidWZmZXIgZm9yIHRoZSBlbWl0dGluZyB0aGUgcmVxdWVzdCAq Lwo+IC0JdTMyIHJlc2VydmVkX3NwYWNlOwo+IC0KPiAtCS8qKgo+IC0JICogQ29udGV4dCBhbmQg cmluZyBidWZmZXIgcmVsYXRlZCB0byB0aGlzIHJlcXVlc3QKPiAtCSAqIENvbnRleHRzIGFyZSBy ZWZjb3VudGVkLCBzbyB3aGVuIHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGggYQo+IC0J ICogY29udGV4dCwgd2UgbXVzdCBpbmNyZW1lbnQgdGhlIGNvbnRleHQncyByZWZjb3VudCwgdG8g Z3VhcmFudGVlIHRoYXQKPiAtCSAqIGl0IHBlcnNpc3RzIHdoaWxlIGFueSByZXF1ZXN0IGlzIGxp bmtlZCB0byBpdC4gUmVxdWVzdHMgdGhlbXNlbHZlcwo+IC0JICogYXJlIGFsc28gcmVmY291bnRl ZCwgc28gdGhlIHJlcXVlc3Qgd2lsbCBvbmx5IGJlIGZyZWVkIHdoZW4gdGhlIGxhc3QKPiAtCSAq IHJlZmVyZW5jZSB0byBpdCBpcyBkaXNtaXNzZWQsIGFuZCB0aGUgY29kZSBpbgo+IC0JICogaTkx NV9nZW1fcmVxdWVzdF9mcmVlKCkgd2lsbCB0aGVuIGRlY3JlbWVudCB0aGUgcmVmY291bnQgb24g dGhlCj4gLQkgKiBjb250ZXh0Lgo+IC0JICovCj4gLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4Owo+IC0Jc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7Cj4gLQo+IC0JLyoqCj4g LQkgKiBDb250ZXh0IHJlbGF0ZWQgdG8gdGhlIHByZXZpb3VzIHJlcXVlc3QuCj4gLQkgKiBBcyB0 aGUgY29udGV4dHMgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZSB1bnRpbCB0aGUgc3dpdGNo IGlzCj4gLQkgKiBjb21wbGV0ZWQgdG8gYSBuZXcgY29udGV4dCwgdGhlIGhhcmR3YXJlIG1heSBz dGlsbCBiZSB3cml0aW5nCj4gLQkgKiB0byB0aGUgY29udGV4dCBvYmplY3QgYWZ0ZXIgdGhlIGJy ZWFkY3J1bWIgaXMgdmlzaWJsZS4gV2UgbXVzdAo+IC0JICogbm90IHVucGluL3VuYmluZC9wcnVu ZSB0aGF0IG9iamVjdCB3aGlsc3Qgc3RpbGwgYWN0aXZlIGFuZCBzbwo+IC0JICogd2Uga2VlcCB0 aGUgcHJldmlvdXMgY29udGV4dCBwaW5uZWQgdW50aWwgdGhlIGZvbGxvd2luZyAodGhpcykKPiAt CSAqIHJlcXVlc3QgaXMgcmV0aXJlZC4KPiAtCSAqLwo+IC0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKnByZXZpb3VzX2NvbnRleHQ7Cj4gLQo+IC0JLyoqIEJhdGNoIGJ1ZmZlciByZWxhdGVkIHRv IHRoaXMgcmVxdWVzdCBpZiBhbnkgKHVzZWQgZm9yCj4gLQkgICAgZXJyb3Igc3RhdGUgZHVtcCBv bmx5KSAqLwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iajsKPiAtCj4g LQkvKiogVGltZSBhdCB3aGljaCB0aGlzIHJlcXVlc3Qgd2FzIGVtaXR0ZWQsIGluIGppZmZpZXMu ICovCj4gLQl1bnNpZ25lZCBsb25nIGVtaXR0ZWRfamlmZmllczsKPiAtCj4gLQkvKiogZ2xvYmFs IGxpc3QgZW50cnkgZm9yIHRoaXMgcmVxdWVzdCAqLwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0 Owo+IC0KPiAtCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdjsKPiAtCS8q KiBmaWxlX3ByaXYgbGlzdCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCj4gLQlzdHJ1Y3QgbGlz dF9oZWFkIGNsaWVudF9saXN0Owo+IC0KPiAtCS8qKiBwcm9jZXNzIGlkZW50aWZpZXIgc3VibWl0 dGluZyB0aGlzIHJlcXVlc3QgKi8KPiAtCXN0cnVjdCBwaWQgKnBpZDsKPiAtCj4gLQkvKioKPiAt CSAqIFRoZSBFTFNQIG9ubHkgYWNjZXB0cyB0d28gZWxlbWVudHMgYXQgYSB0aW1lLCBzbyB3ZSBx dWV1ZQo+IC0JICogY29udGV4dC90YWlsIHBhaXJzIG9uIGEgZ2l2ZW4gcXVldWUgKHJpbmctPmV4 ZWNsaXN0X3F1ZXVlKSB1bnRpbCB0aGUKPiAtCSAqIGhhcmR3YXJlIGlzIGF2YWlsYWJsZS4gVGhl IHF1ZXVlIHNlcnZlcyBhIGRvdWJsZSBwdXJwb3NlOiB3ZSBhbHNvIHVzZQo+IC0JICogaXQgdG8g a2VlcCB0cmFjayBvZiB0aGUgdXAgdG8gMiBjb250ZXh0cyBjdXJyZW50bHkgaW4gdGhlIGhhcmR3 YXJlCj4gLQkgKiAodXN1YWxseSBvbmUgaW4gZXhlY3V0aW9uIGFuZCB0aGUgb3RoZXIgcXVldWVk IHVwIGJ5IHRoZSBHUFUpOiBXZQo+IC0JICogb25seSByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUg aGVhZCBvZiB0aGUgcXVldWUgd2hlbiB0aGUgaGFyZHdhcmUKPiAtCSAqIGluZm9ybXMgdXMgdGhh dCBhbiBlbGVtZW50IGhhcyBiZWVuIGNvbXBsZXRlZC4KPiAtCSAqCj4gLQkgKiBBbGwgYWNjZXNz ZXMgdG8gdGhlIHF1ZXVlIGFyZSBtZWRpYXRlZCBieSBhIHNwaW5sb2NrCj4gLQkgKiAocmluZy0+ ZXhlY2xpc3RfbG9jaykuCj4gLQkgKi8KPiAtCj4gLQkvKiogRXhlY2xpc3QgbGluayBpbiB0aGUg c3VibWlzc2lvbiBxdWV1ZS4qLwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBleGVjbGlzdF9saW5rOwo+ IC0KPiAtCS8qKiBFeGVjbGlzdHMgbm8uIG9mIHRpbWVzIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiBz ZW50IHRvIHRoZSBFTFNQICovCj4gLQlpbnQgZWxzcF9zdWJtaXR0ZWQ7Cj4gLQo+IC0JLyoqIEV4 ZWNsaXN0cyBjb250ZXh0IGhhcmR3YXJlIGlkLiAqLwo+IC0JdW5zaWduZWQgY3R4X2h3X2lkOwo+ IC19Owo+IC0KPiAtc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICogX19tdXN0X2NoZWNrCj4g LWk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ IC0JCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KTsKPiAtdm9pZCBpOTE1X2dl bV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGtyZWYgKnJlcV9yZWYpOwo+IC1pbnQgaTkxNV9nZW1fcmVx dWVzdF9hZGRfdG9fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+IC0J CQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiAtCj4gLXN0YXRpYyBpbmxpbmUgdWludDMy X3QKPiAtaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEpCj4gLXsKPiAtCXJldHVybiByZXEgPyByZXEtPnNlcW5vIDogMDsKPiAtfQo+IC0K PiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKPiAtaTkxNV9nZW1fcmVx dWVzdF9nZXRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+IC17Cj4g LQlyZXR1cm4gcmVxID8gcmVxLT5lbmdpbmUgOiBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5s aW5lIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqCj4gLWk5MTVfZ2VtX3JlcXVlc3RfcmVm ZXJlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+IC17Cj4gLQlpZiAocmVx KQo+IC0JCWtyZWZfZ2V0KCZyZXEtPnJlZik7Cj4gLQlyZXR1cm4gcmVxOwo+IC19Cj4gLQo+IC1z dGF0aWMgaW5saW5lIHZvaWQKPiAtaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAtewo+IC0Ja3JlZl9wdXQoJnJlcS0+cmVmLCBp OTE1X2dlbV9yZXF1ZXN0X2ZyZWUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgaTkx NV9nZW1fcmVxdWVzdF9hc3NpZ24oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoqcGRzdCwK PiAtCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnNyYykKPiAtewo+IC0JaWYg KHNyYykKPiAtCQlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShzcmMpOwo+IC0KPiAtCWlmICgq cGRzdCkKPiAtCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKCpwZHN0KTsKPiAtCj4gLQkq cGRzdCA9IHNyYzsKPiAtfQo+IC0KPiAtLyoKPiAtICogWFhYOiBpOTE1X2dlbV9yZXF1ZXN0X2Nv bXBsZXRlZCBzaG91bGQgYmUgaGVyZSBidXQgY3VycmVudGx5IG5lZWRzIHRoZQo+IC0gKiBkZWZp bml0aW9uIG9mIGk5MTVfc2Vxbm9fcGFzc2VkKCkgd2hpY2ggaXMgYmVsb3cuIEl0IHdpbGwgYmUg bW92ZWQgaW4KPiAtICogYSBsYXRlciBwYXRjaCB3aGVuIHRoZSBjYWxsIHRvIGk5MTVfc2Vxbm9f cGFzc2VkKCkgaXMgb2Jzb2xldGVkLi4uCj4gLSAqLwo+IC0KPiAgIC8qCj4gICAgKiBBIGNvbW1h bmQgdGhhdCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIGJ5IHRoZSBjb21tYW5kIHBhcnNlci4K PiAgICAqLwo+IEBAIC0zMjA4LDM3ICszMDQzLDYgQEAgdm9pZCBpOTE1X2dlbV90cmFja19mYihz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2xkLAo+ICAgCQkgICAgICAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm5ldywKPiAgIAkJICAgICAgIHVuc2lnbmVkIGZyb250YnVmZmVyX2Jp dHMpOwo+Cj4gLS8qKgo+IC0gKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNl cTIuCj4gLSAqLwo+IC1zdGF0aWMgaW5saW5lIGJvb2wKPiAtaTkxNV9zZXFub19wYXNzZWQodWlu dDMyX3Qgc2VxMSwgdWludDMyX3Qgc2VxMikKPiAtewo+IC0JcmV0dXJuIChpbnQzMl90KShzZXEx IC0gc2VxMikgPj0gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX3Jl cXVlc3Rfc3RhcnRlZChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAt ewo+IC0JcmV0dXJuIGk5MTVfc2Vxbm9fcGFzc2VkKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8ocmVx LT5lbmdpbmUpLAo+IC0JCQkJIHJlcS0+cHJldmlvdXNfc2Vxbm8pOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQoY29uc3Qgc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gLXsKPiAtCXJldHVybiBpOTE1X3NlcW5vX3Bhc3Nl ZChpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKHJlcS0+ZW5naW5lKSwKPiAtCQkJCSByZXEtPnNlcW5v KTsKPiAtfQo+IC0KPiAtYm9vbCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCwKPiAtCQkJIGludCBzdGF0ZSwgdW5zaWduZWQgbG9u ZyB0aW1lb3V0X3VzKTsKPiAtc3RhdGljIGlubGluZSBib29sIGk5MTVfc3Bpbl9yZXF1ZXN0KGNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCwKPiAtCQkJCSAgICAgaW50 IHN0YXRlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfdXMpCj4gLXsKPiAtCXJldHVybiAoaTkxNV9n ZW1fcmVxdWVzdF9zdGFydGVkKHJlcXVlc3QpICYmCj4gLQkJX19pOTE1X3NwaW5fcmVxdWVzdChy ZXF1ZXN0LCBzdGF0ZSwgdGltZW91dF91cykpOwo+IC19Cj4gLQo+IC1pbnQgX19tdXN0X2NoZWNr IGk5MTVfZ2VtX2dldF9zZXFubyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUz MiAqc2Vxbm8pOwo+ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zZXRfc2Vxbm8oc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdTMyIHNlcW5vKTsKPgo+ICAgc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICoKPiBAQCAtMzI5NiwxOCArMzEwMCw2IEBAIHZvaWQgaTkxNV9nZW1faW5pdF9zd2l6 emxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICB2b2lkIGk5MTVfZ2VtX2NsZWFudXBf ZW5naW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgIGludCBfX211c3RfY2hlY2sgaTkx NV9nZW1fd2FpdF9mb3JfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+IC12b2lkIF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSwKPiAtCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwKPiAt CQkJYm9vbCBmbHVzaF9jYWNoZXMpOwo+IC0jZGVmaW5lIGk5MTVfYWRkX3JlcXVlc3QocmVxKSBc Cj4gLQlfX2k5MTVfYWRkX3JlcXVlc3QocmVxLCBOVUxMLCB0cnVlKQo+IC0jZGVmaW5lIGk5MTVf YWRkX3JlcXVlc3Rfbm9fZmx1c2gocmVxKSBcCj4gLQlfX2k5MTVfYWRkX3JlcXVlc3QocmVxLCBO VUxMLCBmYWxzZSkKPiAtaW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXEsCj4gLQkJCWJvb2wgaW50ZXJydXB0aWJsZSwKPiAtCQkJczY0ICp0aW1l b3V0LAo+IC0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKTsKPiAtaW50IF9fbXVzdF9j aGVjayBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7 Cj4gICBpbnQgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVj dCB2bV9mYXVsdCAqdm1mKTsKPiAgIGludCBfX211c3RfY2hlY2sKPiAgIGk5MTVfZ2VtX29iamVj dF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGY0OGY1NDE5Mzk3Mi4uOTU3ODJjZjg1ZGNjIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTExMDUsMzYxICsxMTA1LDYgQEAgcHV0X3Jw bToKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+Cj4gLXN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fY2hl Y2tfd2VkZ2UodW5zaWduZWQgcmVzZXRfY291bnRlciwgYm9vbCBpbnRlcnJ1cHRpYmxlKQo+IC17 Cj4gLQlpZiAoX19pOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKHJlc2V0X2NvdW50ZXIpKQo+IC0JCXJl dHVybiAtRUlPOwo+IC0KPiAtCWlmIChfX2k5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MocmVzZXRfY291 bnRlcikpIHsKPiAtCQkvKiBOb24taW50ZXJydXB0aWJsZSBjYWxsZXJzIGNhbid0IGhhbmRsZSAt RUFHQUlOLCBoZW5jZSByZXR1cm4KPiAtCQkgKiAtRUlPIHVuY29uZGl0aW9uYWxseSBmb3IgdGhl c2UuICovCj4gLQkJaWYgKCFpbnRlcnJ1cHRpYmxlKQo+IC0JCQlyZXR1cm4gLUVJTzsKPiAtCj4g LQkJcmV0dXJuIC1FQUdBSU47Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB1bnNpZ25lZCBsb25nIGxvY2FsX2Nsb2NrX3VzKHVuc2lnbmVkICpjcHUpCj4gLXsKPiAt CXVuc2lnbmVkIGxvbmcgdDsKPiAtCj4gLQkvKiBDaGVhcGx5IGFuZCBhcHByb3hpbWF0ZWx5IGNv bnZlcnQgZnJvbSBuYW5vc2Vjb25kcyB0byBtaWNyb3NlY29uZHMuCj4gLQkgKiBUaGUgcmVzdWx0 IGFuZCBzdWJzZXF1ZW50IGNhbGN1bGF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoZSBzYW1l Cj4gLQkgKiBhcHByb3hpbWF0ZSBtaWNyb3NlY29uZHMgdW5pdHMuIFRoZSBwcmluY2lwYWwgc291 cmNlIG9mIHRpbWluZwo+IC0JICogZXJyb3IgaGVyZSBpcyBmcm9tIHRoZSBzaW1wbGUgdHJ1bmNh dGlvbi4KPiAtCSAqCj4gLQkgKiBOb3RlIHRoYXQgbG9jYWxfY2xvY2soKSBpcyBvbmx5IGRlZmlu ZWQgd3J0IHRvIHRoZSBjdXJyZW50IENQVTsKPiAtCSAqIHRoZSBjb21wYXJpc29ucyBhcmUgbm8g bG9uZ2VyIHZhbGlkIGlmIHdlIHN3aXRjaCBDUFVzLiBJbnN0ZWFkIG9mCj4gLQkgKiBibG9ja2lu ZyBwcmVlbXB0aW9uIGZvciB0aGUgZW50aXJlIGJ1c3l3YWl0LCB3ZSBjYW4gZGV0ZWN0IHRoZSBD UFUKPiAtCSAqIHN3aXRjaCBhbmQgdXNlIHRoYXQgYXMgaW5kaWNhdG9yIG9mIHN5c3RlbSBsb2Fk IGFuZCBhIHJlYXNvbiB0bwo+IC0JICogc3RvcCBidXN5d2FpdGluZywgc2VlIGJ1c3l3YWl0X3N0 b3AoKS4KPiAtCSAqLwo+IC0JKmNwdSA9IGdldF9jcHUoKTsKPiAtCXQgPSBsb2NhbF9jbG9jaygp ID4+IDEwOwo+IC0JcHV0X2NwdSgpOwo+IC0KPiAtCXJldHVybiB0Owo+IC19Cj4gLQo+IC1zdGF0 aWMgYm9vbCBidXN5d2FpdF9zdG9wKHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdW5zaWduZWQgY3B1 KQo+IC17Cj4gLQl1bnNpZ25lZCB0aGlzX2NwdTsKPiAtCj4gLQlpZiAodGltZV9hZnRlcihsb2Nh bF9jbG9ja191cygmdGhpc19jcHUpLCB0aW1lb3V0KSkKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCj4g LQlyZXR1cm4gdGhpc19jcHUgIT0gY3B1Owo+IC19Cj4gLQo+IC1ib29sIF9faTkxNV9zcGluX3Jl cXVlc3QoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gLQkJCSBpbnQg c3RhdGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dF91cykKPiAtewo+IC0JdW5zaWduZWQgY3B1Owo+ IC0KPiAtCS8qIFdoZW4gd2FpdGluZyBmb3IgaGlnaCBmcmVxdWVuY3kgcmVxdWVzdHMsIGUuZy4g ZHVyaW5nIHN5bmNocm9ub3VzCj4gLQkgKiByZW5kZXJpbmcgc3BsaXQgYmV0d2VlbiB0aGUgQ1BV IGFuZCBHUFUsIHRoZSBmaW5pdGUgYW1vdW50IG9mIHRpbWUKPiAtCSAqIHJlcXVpcmVkIHRvIHNl dCB1cCB0aGUgaXJxIGFuZCB3YWl0IHVwb24gaXQgbGltaXRzIHRoZSByZXNwb25zZQo+IC0JICog cmF0ZS4gQnkgYnVzeXdhaXRpbmcgb24gdGhlIHJlcXVlc3QgY29tcGxldGlvbiBmb3IgYSBzaG9y dCB3aGlsZSB3ZQo+IC0JICogY2FuIHNlcnZpY2UgdGhlIGhpZ2ggZnJlcXVlbmN5IHdhaXRzIGFz IHF1aWNrIGFzIHBvc3NpYmxlLiBIb3dldmVyLAo+IC0JICogaWYgaXQgaXMgYSBzbG93IHJlcXVl c3QsIHdlIHdhbnQgdG8gc2xlZXAgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KPiAtCSAqIFRoZSB0 cmFkZW9mZiBiZXR3ZWVuIHdhaXRpbmcgYW5kIHNsZWVwaW5nIGlzIHJvdWdobHkgdGhlIHRpbWUg aXQKPiAtCSAqIHRha2VzIHRvIHNsZWVwIG9uIGEgcmVxdWVzdCwgb24gdGhlIG9yZGVyIG9mIGEg bWljcm9zZWNvbmQuCj4gLQkgKi8KPiAtCj4gLQl0aW1lb3V0X3VzICs9IGxvY2FsX2Nsb2NrX3Vz KCZjcHUpOwo+IC0JZG8gewo+IC0JCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEp KQo+IC0JCQlyZXR1cm4gdHJ1ZTsKPiAtCj4gLQkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0 YXRlLCBjdXJyZW50KSkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCWlmIChidXN5d2FpdF9zdG9wKHRp bWVvdXRfdXMsIGNwdSkpCj4gLQkJCWJyZWFrOwo+IC0KPiAtCQljcHVfcmVsYXhfbG93bGF0ZW5j eSgpOwo+IC0JfSB3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKTsKPiAtCj4gLQlyZXR1cm4gZmFsc2U7 Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBfX2k5MTVfd2FpdF9yZXF1ZXN0IC0gd2FpdCB1bnRpbCBl eGVjdXRpb24gb2YgcmVxdWVzdCBoYXMgZmluaXNoZWQKPiAtICogQHJlcTogZHVoIQo+IC0gKiBA aW50ZXJydXB0aWJsZTogZG8gYW4gaW50ZXJydXB0aWJsZSB3YWl0IChub3JtYWxseSB5ZXMpCj4g LSAqIEB0aW1lb3V0OiBpbiAtIGhvdyBsb25nIHRvIHdhaXQgKE5VTEwgZm9yZXZlcik7IG91dCAt IGhvdyBtdWNoIHRpbWUgcmVtYWluaW5nCj4gLSAqCj4gLSAqIE5vdGU6IEl0IGlzIG9mIHV0bW9z dCBpbXBvcnRhbmNlIHRoYXQgdGhlIHBhc3NlZCBpbiBzZXFubyBhbmQgcmVzZXRfY291bnRlcgo+ IC0gKiB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWQgYnkgdGhlIGNhbGxlciBpbiBhbiBzbXAgc2FmZSBt YW5uZXIuIFdoZXJlIHJlYWQtc2lkZQo+IC0gKiBsb2NrcyBhcmUgaW52b2x2ZWQsIGl0IGlzIHN1 ZmZpY2llbnQgdG8gcmVhZCB0aGUgcmVzZXRfY291bnRlciBiZWZvcmUKPiAtICogdW5sb2NraW5n IHRoZSBsb2NrIHRoYXQgcHJvdGVjdHMgdGhlIHNlcW5vLiBGb3IgbG9ja2xlc3MgdHJpY2tzLCB0 aGUKPiAtICogcmVzZXRfY291bnRlciBfbXVzdF8gYmUgcmVhZCBiZWZvcmUsIGFuZCBhbiBhcHBy b3ByaWF0ZSBzbXBfcm1iIG11c3QgYmUKPiAtICogaW5zZXJ0ZWQuCj4gLSAqCj4gLSAqIFJldHVy bnMgMCBpZiB0aGUgcmVxdWVzdCB3YXMgZm91bmQgd2l0aGluIHRoZSBhbGxvdGVkIHRpbWUuIEVs c2UgcmV0dXJucyB0aGUKPiAtICogZXJybm8gd2l0aCByZW1haW5pbmcgdGltZSBmaWxsZWQgaW4g dGltZW91dCBhcmd1bWVudC4KPiAtICovCj4gLWludCBfX2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+IC0JCQlib29sIGludGVycnVwdGlibGUsCj4g LQkJCXM2NCAqdGltZW91dCwKPiAtCQkJc3RydWN0IGludGVsX3Jwc19jbGllbnQgKnJwcykKPiAt ewo+IC0JaW50IHN0YXRlID0gaW50ZXJydXB0aWJsZSA/IFRBU0tfSU5URVJSVVBUSUJMRSA6IFRB U0tfVU5JTlRFUlJVUFRJQkxFOwo+IC0JREVGSU5FX1dBSVQocmVzZXQpOwo+IC0Jc3RydWN0IGlu dGVsX3dhaXQgd2FpdDsKPiAtCXVuc2lnbmVkIGxvbmcgdGltZW91dF9yZW1haW47Cj4gLQlpbnQg cmV0ID0gMDsKPiAtCj4gLQltaWdodF9zbGVlcCgpOwo+IC0KPiAtCWlmIChsaXN0X2VtcHR5KCZy ZXEtPmxpc3QpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2Nv bXBsZXRlZChyZXEpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCXRpbWVvdXRfcmVtYWluID0gTUFY X1NDSEVEVUxFX1RJTUVPVVQ7Cj4gLQlpZiAodGltZW91dCkgewo+IC0JCWlmIChXQVJOX09OKCp0 aW1lb3V0IDwgMCkpCj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCQlpZiAoKnRpbWVvdXQg PT0gMCkKPiAtCQkJcmV0dXJuIC1FVElNRTsKPiAtCj4gLQkJLyogUmVjb3JkIGN1cnJlbnQgdGlt ZSBpbiBjYXNlIGludGVycnVwdGVkLCBvciB3ZWRnZWQgKi8KPiAtCQl0aW1lb3V0X3JlbWFpbiA9 IG5zZWNzX3RvX2ppZmZpZXNfdGltZW91dCgqdGltZW91dCk7Cj4gLQkJKnRpbWVvdXQgKz0ga3Rp bWVfZ2V0X3Jhd19ucygpOwo+IC0JfQo+IC0KPiAtCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2Fp dF9iZWdpbihyZXEpOwo+IC0KPiAtCS8qIFRoaXMgY2xpZW50IGlzIGFib3V0IHRvIHN0YWxsIHdh aXRpbmcgZm9yIHRoZSBHUFUuIEluIG1hbnkgY2FzZXMKPiAtCSAqIHRoaXMgaXMgdW5kZXNpcmFi bGUgYW5kIGxpbWl0cyB0aGUgdGhyb3VnaHB1dCBvZiB0aGUgc3lzdGVtLCBhcwo+IC0JICogbWFu eSBjbGllbnRzIGNhbm5vdCBjb250aW51ZSBwcm9jZXNzaW5nIHVzZXIgaW5wdXQvb3V0cHV0IHdo aWxzdAo+IC0JICogYmxvY2tlZC4gUlBTIGF1dG90dW5pbmcgbWF5IHRha2UgdGVucyBvZiBtaWxs aXNlY29uZHMgdG8gcmVzcG9uZAo+IC0JICogdG8gdGhlIEdQVSBsb2FkIGFuZCB0aHVzIGluY3Vy cyBhZGRpdGlvbmFsIGxhdGVuY3kgZm9yIHRoZSBjbGllbnQuCj4gLQkgKiBXZSBjYW4gY2lyY3Vt dmVudCB0aGF0IGJ5IHByb21vdGluZyB0aGUgR1BVIGZyZXF1ZW5jeSB0byBtYXhpbXVtCj4gLQkg KiBiZWZvcmUgd2Ugd2FpdC4gVGhpcyBtYWtlcyB0aGUgR1BVIHRocm90dGxlIHVwIG11Y2ggbW9y ZSBxdWlja2x5Cj4gLQkgKiAoZ29vZCBmb3IgYmVuY2htYXJrcyBhbmQgdXNlciBleHBlcmllbmNl LCBlLmcuIHdpbmRvdyBhbmltYXRpb25zKSwKPiAtCSAqIGJ1dCBhdCBhIGNvc3Qgb2Ygc3BlbmRp bmcgbW9yZSBwb3dlciBwcm9jZXNzaW5nIHRoZSB3b3JrbG9hZAo+IC0JICogKGJhZCBmb3IgYmF0 dGVyeSkuIE5vdCBhbGwgY2xpZW50cyBldmVuIHdhbnQgdGhlaXIgcmVzdWx0cwo+IC0JICogaW1t ZWRpYXRlbHkgYW5kIGZvciB0aGVtIHdlIHNob3VsZCBqdXN0IGxldCB0aGUgR1BVIHNlbGVjdCBp dHMgb3duCj4gLQkgKiBmcmVxdWVuY3kgdG8gbWF4aW1pc2UgZWZmaWNpZW5jeS4gVG8gcHJldmVu dCBhIHNpbmdsZSBjbGllbnQgZnJvbQo+IC0JICogZm9yY2luZyB0aGUgY2xvY2tzIHRvbyBoaWdo IGZvciB0aGUgd2hvbGUgc3lzdGVtLCB3ZSBvbmx5IGFsbG93Cj4gLQkgKiBlYWNoIGNsaWVudCB0 byB3YWl0Ym9vc3Qgb25jZSBpbiBhIGJ1c3kgcGVyaW9kLgo+IC0JICovCj4gLQlpZiAoSU5URUxf SU5GTyhyZXEtPmk5MTUpLT5nZW4gPj0gNikKPiAtCQlnZW42X3Jwc19ib29zdChyZXEtPmk5MTUs IHJwcywgcmVxLT5lbWl0dGVkX2ppZmZpZXMpOwo+IC0KPiAtCS8qIE9wdGltaXN0aWMgc3BpbiBm b3IgdGhlIG5leHQgfmppZmZpZSBiZWZvcmUgdG91Y2hpbmcgSVJRcyAqLwo+IC0JaWYgKGk5MTVf c3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUsIDUpKQo+IC0JCWdvdG8gY29tcGxldGU7Cj4gLQo+IC0J aW50ZWxfd2FpdF9pbml0KCZ3YWl0LCByZXEtPnNlcW5vKTsKPiAtCXNldF9jdXJyZW50X3N0YXRl KHN0YXRlKTsKPiAtCWlmIChpbnRlbF9lbmdpbmVfYWRkX3dhaXQocmVxLT5lbmdpbmUsICZ3YWl0 KSkKPiAtCQkvKiBJbiBvcmRlciB0byBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgbWlzc2VkIHRoZSBp bnRlcnJ1cHQKPiAtCQkgKiBhcyB3ZSBlbmFibGVkIGl0LCB3ZSBuZWVkIHRvIGtpY2sgb3Vyc2Vs dmVzIHRvIGRvIGEKPiAtCQkgKiBjb2hlcmVudCBjaGVjayBvbiB0aGUgc2Vxbm8gYmVmb3JlIHdl IHNsZWVwLgo+IC0JCSAqLwo+IC0JCWdvdG8gd2FrZXVwOwo+IC0KPiAtCWFkZF93YWl0X3F1ZXVl KCZyZXEtPmk5MTUtPmdwdV9lcnJvci53YWl0X3F1ZXVlLCAmcmVzZXQpOwo+IC0JZm9yICg7Oykg ewo+IC0JCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpIHsKPiAtCQkJ cmV0ID0gLUVSRVNUQVJUU1lTOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+IC0JCS8qIEVuc3Vy ZSB0aGF0IGV2ZW4gaWYgdGhlIEdQVSBoYW5ncywgd2UgZ2V0IHdva2VuIHVwLiAqLwo+IC0JCWk5 MTVfcXVldWVfaGFuZ2NoZWNrKHJlcS0+aTkxNSk7Cj4gLQo+IC0JCXRpbWVvdXRfcmVtYWluID0g aW9fc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0X3JlbWFpbik7Cj4gLQkJaWYgKHRpbWVvdXRfcmVt YWluID09IDApIHsKPiAtCQkJcmV0ID0gLUVUSU1FOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+ IC0JCWlmIChpbnRlbF93YWl0X2NvbXBsZXRlKCZ3YWl0KSkKPiAtCQkJYnJlYWs7Cj4gLQo+IC13 YWtldXA6Cj4gLQkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwo+IC0KPiAtCQkvKiBDYXJlZnVs bHkgY2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgY29tcGxldGUsIGdpdmluZyB0aW1lCj4gLQkJICog Zm9yIHRoZSBzZXFubyB0byBiZSB2aXNpYmxlIGZvbGxvd2luZyB0aGUgaW50ZXJydXB0Lgo+IC0J CSAqIFdlIGFsc28gaGF2ZSB0byBjaGVjayBpbiBjYXNlIHdlIGFyZSBraWNrZWQgYnkgdGhlIEdQ VQo+IC0JCSAqIHJlc2V0IGluIG9yZGVyIHRvIGRyb3AgdGhlIHN0cnVjdF9tdXRleC4KPiAtCQkg Ki8KPiAtCQlpZiAoX19pOTE1X3JlcXVlc3RfaXJxX2NvbXBsZXRlKHJlcSkpCj4gLQkJCWJyZWFr Owo+IC0KPiAtCQkvKiBPbmx5IHNwaW4gaWYgd2Uga25vdyB0aGUgR1BVIGlzIHByb2Nlc3Npbmcg dGhpcyByZXF1ZXN0ICovCj4gLQkJaWYgKGk5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUsIDIp KQo+IC0JCQlicmVhazsKPiAtCX0KPiAtCXJlbW92ZV93YWl0X3F1ZXVlKCZyZXEtPmk5MTUtPmdw dV9lcnJvci53YWl0X3F1ZXVlLCAmcmVzZXQpOwo+IC0KPiAtCWludGVsX2VuZ2luZV9yZW1vdmVf d2FpdChyZXEtPmVuZ2luZSwgJndhaXQpOwo+IC0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JV Tk5JTkcpOwo+IC1jb21wbGV0ZToKPiAtCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQo cmVxKTsKPiAtCj4gLQlpZiAodGltZW91dCkgewo+IC0JCSp0aW1lb3V0IC09IGt0aW1lX2dldF9y YXdfbnMoKTsKPiAtCQlpZiAoKnRpbWVvdXQgPCAwKQo+IC0JCQkqdGltZW91dCA9IDA7Cj4gLQo+ IC0JCS8qCj4gLQkJICogQXBwYXJlbnRseSBrdGltZSBpc24ndCBhY2N1cmF0ZSBlbm91Z2ggYW5k IG9jY2FzaW9uYWxseSBoYXMgYQo+IC0JCSAqIGJpdCBvZiBtaXNtYXRjaCBpbiB0aGUgamlmZmll czwtPm5zZWNzPC0+a3RpbWUgbG9vcC4gU28gcGF0Y2gKPiAtCQkgKiB0aGluZ3MgdXAgdG8gbWFr ZSB0aGUgdGVzdCBoYXBweS4gV2UgYWxsb3cgdXAgdG8gMSBqaWZmeS4KPiAtCQkgKgo+IC0JCSAq IFRoaXMgaXMgYSByZWdyc3Npb24gZnJvbSB0aGUgdGltZXNwZWMtPmt0aW1lIGNvbnZlcnNpb24u Cj4gLQkJICovCj4gLQkJaWYgKHJldCA9PSAtRVRJTUUgJiYgKnRpbWVvdXQgPCBqaWZmaWVzX3Rv X3VzZWNzKDEpKjEwMDApCj4gLQkJCSp0aW1lb3V0ID0gMDsKPiAtCX0KPiAtCj4gLQlpZiAocnBz ICYmIHJlcS0+c2Vxbm8gPT0gcmVxLT5lbmdpbmUtPmxhc3Rfc3VibWl0dGVkX3NlcW5vKSB7Cj4g LQkJLyogVGhlIEdQVSBpcyBub3cgaWRsZSBhbmQgdGhpcyBjbGllbnQgaGFzIHN0YWxsZWQuCj4g LQkJICogU2luY2Ugbm8gb3RoZXIgY2xpZW50IGhhcyBzdWJtaXR0ZWQgYSByZXF1ZXN0IGluIHRo ZQo+IC0JCSAqIG1lYW50aW1lLCBhc3N1bWUgdGhhdCB0aGlzIGNsaWVudCBpcyB0aGUgb25seSBv bmUKPiAtCQkgKiBzdXBwbHlpbmcgd29yayB0byB0aGUgR1BVIGJ1dCBpcyB1bmFibGUgdG8ga2Vl cCB0aGF0Cj4gLQkJICogd29yayBzdXBwbGllZCBiZWNhdXNlIGl0IGlzIHdhaXRpbmcuIFNpbmNl IHRoZSBHUFUgaXMKPiAtCQkgKiB0aGVuIG5ldmVyIGtlcHQgZnVsbHkgYnVzeSwgUlBTIGF1dG9j bG9ja2luZyB3aWxsCj4gLQkJICoga2VlcCB0aGUgY2xvY2tzIHJlbGF0aXZlbHkgbG93LCBjYXVz aW5nIGZ1cnRoZXIgZGVsYXlzLgo+IC0JCSAqIENvbXBlbnNhdGUgYnkgZ2l2aW5nIHRoZSBzeW5j aHJvbm91cyBjbGllbnQgY3JlZGl0IGZvcgo+IC0JCSAqIGEgd2FpdGJvb3N0IG5leHQgdGltZS4K PiAtCQkgKi8KPiAtCQlzcGluX2xvY2soJnJlcS0+aTkxNS0+cnBzLmNsaWVudF9sb2NrKTsKPiAt CQlsaXN0X2RlbF9pbml0KCZycHMtPmxpbmspOwo+IC0JCXNwaW5fdW5sb2NrKCZyZXEtPmk5MTUt PnJwcy5jbGllbnRfbG9jayk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAt aW50IGk5MTVfZ2VtX3JlcXVlc3RfYWRkX3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSwKPiAtCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAtewo+IC0Jc3Ry dWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2Owo+IC0KPiAtCVdBUk5fT04oIXJl cSB8fCAhZmlsZSB8fCByZXEtPmZpbGVfcHJpdik7Cj4gLQo+IC0JaWYgKCFyZXEgfHwgIWZpbGUp Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JaWYgKHJlcS0+ZmlsZV9wcml2KQo+IC0JCXJl dHVybiAtRUlOVkFMOwo+IC0KPiAtCWZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+IC0K PiAtCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiAtCXJlcS0+ZmlsZV9wcml2ID0g ZmlsZV9wcml2Owo+IC0JbGlzdF9hZGRfdGFpbCgmcmVxLT5jbGllbnRfbGlzdCwgJmZpbGVfcHJp di0+bW0ucmVxdWVzdF9saXN0KTsKPiAtCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2sp Owo+IC0KPiAtCXJlcS0+cGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7Cj4gLQo+IC0J cmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZAo+IC1pOTE1X2dlbV9yZXF1 ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVl c3QpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IHJl cXVlc3QtPmZpbGVfcHJpdjsKPiAtCj4gLQlpZiAoIWZpbGVfcHJpdikKPiAtCQlyZXR1cm47Cj4g LQo+IC0Jc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+IC0JbGlzdF9kZWwoJnJlcXVl c3QtPmNsaWVudF9saXN0KTsKPiAtCXJlcXVlc3QtPmZpbGVfcHJpdiA9IE5VTEw7Cj4gLQlzcGlu X3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiAtCj4gLQlwdXRfcGlkKHJlcXVlc3QtPnBp ZCk7Cj4gLQlyZXF1ZXN0LT5waWQgPSBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOTE1 X2dlbV9yZXF1ZXN0X3JldGlyZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Qp Cj4gLXsKPiAtCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOwo+IC0KPiAt CS8qIFdlIGtub3cgdGhlIEdQVSBtdXN0IGhhdmUgcmVhZCB0aGUgcmVxdWVzdCB0byBoYXZlCj4g LQkgKiBzZW50IHVzIHRoZSBzZXFubyArIGludGVycnVwdCwgc28gdXNlIHRoZSBwb3NpdGlvbgo+ IC0JICogb2YgdGFpbCBvZiB0aGUgcmVxdWVzdCB0byB1cGRhdGUgdGhlIGxhc3Qga25vd24gcG9z aXRpb24KPiAtCSAqIG9mIHRoZSBHUFUgaGVhZC4KPiAtCSAqCj4gLQkgKiBOb3RlIHRoaXMgcmVx dWlyZXMgdGhhdCB3ZSBhcmUgYWx3YXlzIGNhbGxlZCBpbiByZXF1ZXN0Cj4gLQkgKiBjb21wbGV0 aW9uIG9yZGVyLgo+IC0JICovCj4gLQlyZXF1ZXN0LT5yaW5nYnVmLT5sYXN0X3JldGlyZWRfaGVh ZCA9IHJlcXVlc3QtPnBvc3RmaXg7Cj4gLQo+IC0JbGlzdF9kZWxfaW5pdCgmcmVxdWVzdC0+bGlz dCk7Cj4gLQlpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChyZXF1ZXN0KTsKPiAt Cj4gLQlpZiAocmVxdWVzdC0+cHJldmlvdXNfY29udGV4dCkgewo+IC0JCWlmIChpOTE1LmVuYWJs ZV9leGVjbGlzdHMpCj4gLQkJCWludGVsX2xyX2NvbnRleHRfdW5waW4ocmVxdWVzdC0+cHJldmlv dXNfY29udGV4dCwKPiAtCQkJCQkgICAgICAgcmVxdWVzdC0+ZW5naW5lKTsKPiAtCX0KPiAtCj4g LQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKHJlcXVlc3QtPmN0eCk7Cj4gLQlpOTE1X2dl bV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcXVlc3QpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+ IC1fX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRvKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXEt PmVuZ2luZTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqdG1wOwo+IC0KPiAtCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmVuZ2luZS0+aTkxNS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0K PiAtCWlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlkbyB7 Cj4gLQkJdG1wID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT5yZXF1ZXN0X2xpc3QsCj4gLQkJ CQkgICAgICAgdHlwZW9mKCp0bXApLCBsaXN0KTsKPiAtCj4gLQkJaTkxNV9nZW1fcmVxdWVzdF9y ZXRpcmUodG1wKTsKPiAtCX0gd2hpbGUgKHRtcCAhPSByZXEpOwo+IC0KPiAtCVdBUk5fT04oaTkx NV92ZXJpZnlfbGlzdHMoZW5naW5lLT5kZXYpKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIFdhaXRz IGZvciBhIHJlcXVlc3QgdG8gYmUgc2lnbmFsZWQsIGFuZCBjbGVhbnMgdXAgdGhlCj4gLSAqIHJl cXVlc3QgYW5kIG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IGV2ZW50Lgo+IC0g Ki8KPiAtaW50Cj4gLWk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXEt Pmk5MTU7Cj4gLQlib29sIGludGVycnVwdGlibGU7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWludGVy cnVwdGlibGUgPSBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZTsKPiAtCj4gLQlCVUdfT04oIW11 dGV4X2lzX2xvY2tlZCgmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KSk7Cj4gLQo+IC0JcmV0 ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXEsIGludGVycnVwdGlibGUsIE5VTEwsIE5VTEwpOwo+ IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCS8qIElmIHRoZSBHUFUgaHVuZywg d2Ugd2FudCB0byBrZWVwIHRoZSByZXF1ZXN0cyB0byBmaW5kIHRoZSBndWlsdHkuICovCj4gLQlp ZiAocmVxLT5yZXNldF9jb3VudGVyID09IGk5MTVfcmVzZXRfY291bnRlcigmZGV2X3ByaXYtPmdw dV9lcnJvcikpCj4gLQkJX19pOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhyZXEpOwo+IC0K PiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ICAgLyoqCj4gICAgKiBFbnN1cmVzIHRoYXQgYWxsIHJl bmRlcmluZyB0byB0aGUgb2JqZWN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSBvYmplY3QgaXMKPiAg ICAqIHNhZmUgdG8gdW5iaW5kIGZyb20gdGhlIEdUVCBvciBhY2Nlc3MgZnJvbSB0aGUgQ1BVLgo+ IEBAIC0xNTE0LDcgKzExNTksNyBAQCBpOTE1X2dlbV9vYmplY3RfcmV0aXJlX3JlcXVlc3Qoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJaTkxNV9nZW1fb2JqZWN0X3JldGly ZV9fd3JpdGUob2JqKTsKPgo+ICAgCWlmIChyZXEtPnJlc2V0X2NvdW50ZXIgPT0gaTkxNV9yZXNl dF9jb3VudGVyKCZyZXEtPmk5MTUtPmdwdV9lcnJvcikpCj4gLQkJX19pOTE1X2dlbV9yZXF1ZXN0 X3JldGlyZV9fdXB0byhyZXEpOwo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX3VwdG8ocmVx KTsKPiAgIH0KPgo+ICAgLyogQSBub25ibG9ja2luZyB2YXJpYW50IG9mIHRoZSBhYm92ZSB3YWl0 LiBUaGlzIGlzIGEgaGlnaGx5IGRhbmdlcm91cyByb3V0aW5lCj4gQEAgLTI1MTUsMTk0ICsyMTYw LDYgQEAgaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLCBpbnQgcmluZykKPiAgIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2Jq LT5iYXNlKTsKPiAgIH0KPgo+IC1zdGF0aWMgaW50Cj4gLWk5MTVfZ2VtX2luaXRfc2Vxbm8oc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgc2Vxbm8pCj4gLXsKPiAtCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JLyogQ2FyZWZ1 bGx5IHJldGlyZSBhbGwgcmVxdWVzdHMgd2l0aG91dCB3cml0aW5nIHRvIHRoZSByaW5ncyAqLwo+ IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpIHsKPiAtCQlyZXQgPSBpbnRlbF9l bmdpbmVfaWRsZShlbmdpbmUpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9 Cj4gLQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2X3ByaXYpOwo+IC0KPiAtCS8qIElmIHRo ZSBzZXFubyB3cmFwcyBhcm91bmQsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGJyZWFkY3J1bWIgcmJ0 cmVlICovCj4gLQlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCBkZXZfcHJpdi0+bmV4dF9z ZXFubykpIHsKPiAtCQl3aGlsZSAoaW50ZWxfa2lja193YWl0ZXJzKGRldl9wcml2KSB8fAo+IC0J CSAgICAgICBpbnRlbF9raWNrX3NpZ25hbGVycyhkZXZfcHJpdikpCj4gLQkJCXlpZWxkKCk7Cj4g LQl9Cj4gLQo+IC0JLyogRmluYWxseSByZXNldCBodyBzdGF0ZSAqLwo+IC0JZm9yX2VhY2hfZW5n aW5lKGVuZ2luZSwgZGV2X3ByaXYpCj4gLQkJaW50ZWxfcmluZ19pbml0X3NlcW5vKGVuZ2luZSwg c2Vxbm8pOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1pbnQgaTkxNV9nZW1fc2V0X3Nl cW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubykKPiAtewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCWludCByZXQ7 Cj4gLQo+IC0JaWYgKHNlcW5vID09IDApCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JLyog SFdTIHBhZ2UgbmVlZHMgdG8gYmUgc2V0IGxlc3MgdGhhbiB3aGF0IHdlCj4gLQkgKiB3aWxsIGlu amVjdCB0byByaW5nCj4gLQkgKi8KPiAtCXJldCA9IGk5MTVfZ2VtX2luaXRfc2Vxbm8oZGV2X3By aXYsIHNlcW5vIC0gMSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JLyog Q2FyZWZ1bGx5IHNldCB0aGUgbGFzdF9zZXFubyB2YWx1ZSBzbyB0aGF0IHdyYXAKPiAtCSAqIGRl dGVjdGlvbiBzdGlsbCB3b3Jrcwo+IC0JICovCj4gLQlkZXZfcHJpdi0+bmV4dF9zZXFubyA9IHNl cW5vOwo+IC0JZGV2X3ByaXYtPmxhc3Rfc2Vxbm8gPSBzZXFubyAtIDE7Cj4gLQlpZiAoZGV2X3By aXYtPmxhc3Rfc2Vxbm8gPT0gMCkKPiAtCQlkZXZfcHJpdi0+bGFzdF9zZXFuby0tOwo+IC0KPiAt CXJldHVybiAwOwo+IC19Cj4gLQo+IC1pbnQKPiAtaTkxNV9nZW1fZ2V0X3NlcW5vKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyICpzZXFubykKPiAtewo+IC0JLyogcmVzZXJ2 ZSAwIGZvciBub24tc2Vxbm8gKi8KPiAtCWlmIChkZXZfcHJpdi0+bmV4dF9zZXFubyA9PSAwKSB7 Cj4gLQkJaW50IHJldCA9IGk5MTVfZ2VtX2luaXRfc2Vxbm8oZGV2X3ByaXYsIDApOwo+IC0JCWlm IChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQo+IC0JCWRldl9wcml2LT5uZXh0X3NlcW5vID0g MTsKPiAtCX0KPiAtCj4gLQkqc2Vxbm8gPSBkZXZfcHJpdi0+bGFzdF9zZXFubyA9IGRldl9wcml2 LT5uZXh0X3NlcW5vKys7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkx NV9nZW1fbWFya19idXN5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJ ICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0JZGV2 X3ByaXYtPmd0LmFjdGl2ZV9lbmdpbmVzIHw9IGludGVsX2VuZ2luZV9mbGFnKGVuZ2luZSk7Cj4g LQlpZiAoZGV2X3ByaXYtPmd0LmF3YWtlKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpbnRlbF9ydW50 aW1lX3BtX2dldF9ub3Jlc3VtZShkZXZfcHJpdik7Cj4gLQlkZXZfcHJpdi0+Z3QuYXdha2UgPSB0 cnVlOwo+IC0KPiAtCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOwo+IC0JaTkx NV91cGRhdGVfZ2Z4X3ZhbChkZXZfcHJpdik7Cj4gLQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdikt PmdlbiA+PSA2KQo+IC0JCWdlbjZfcnBzX2J1c3koZGV2X3ByaXYpOwo+IC0KPiAtCXF1ZXVlX2Rl bGF5ZWRfd29yayhkZXZfcHJpdi0+d3EsCj4gLQkJCSAgICZkZXZfcHJpdi0+Z3QucmV0aXJlX3dv cmssCj4gLQkJCSAgIHJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoSFopKTsKPiAtfQo+IC0KPiAt LyoKPiAtICogTkI6IFRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4gRG9pbmcg c28gd291bGQgbWVhbiB0aGUgdGhlCj4gLSAqIHJlcXVlc3QgaXMgbm90IGJlaW5nIHRyYWNrZWQg Zm9yIGNvbXBsZXRpb24gYnV0IHRoZSB3b3JrIGl0c2VsZiBpcwo+IC0gKiBnb2luZyB0byBoYXBw ZW4gb24gdGhlIGhhcmR3YXJlLiBUaGlzIHdvdWxkIGJlIGEgQmFkIFRoaW5nKHRtKS4KPiAtICov Cj4gLXZvaWQgX19pOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxdWVzdCwKPiAtCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJYm9v bCBmbHVzaF9jYWNoZXMpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsK PiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiAtCXN0cnVjdCBpbnRlbF9y aW5nYnVmZmVyICpyaW5nYnVmOwo+IC0JdTMyIHJlcXVlc3Rfc3RhcnQ7Cj4gLQl1MzIgcmVzZXJ2 ZWRfdGFpbDsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKFdBUk5fT04ocmVxdWVzdCA9PSBOVUxM KSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZW5naW5lID0gcmVxdWVzdC0+ZW5naW5lOwo+IC0JZGV2 X3ByaXYgPSByZXF1ZXN0LT5pOTE1Owo+IC0JcmluZ2J1ZiA9IHJlcXVlc3QtPnJpbmdidWY7Cj4g LQo+IC0JLyoKPiAtCSAqIFRvIGVuc3VyZSB0aGF0IHRoaXMgY2FsbCB3aWxsIG5vdCBmYWlsLCBz cGFjZSBmb3IgaXRzIGVtaXNzaW9ucwo+IC0JICogc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHJl c2VydmVkIGluIHRoZSByaW5nIGJ1ZmZlci4gTGV0IHRoZSByaW5nCj4gLQkgKiBrbm93IHRoYXQg aXQgaXMgdGltZSB0byB1c2UgdGhhdCBzcGFjZSB1cC4KPiAtCSAqLwo+IC0JcmVxdWVzdF9zdGFy dCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1Zik7Cj4gLQlyZXNlcnZlZF90YWlsID0gcmVx dWVzdC0+cmVzZXJ2ZWRfc3BhY2U7Cj4gLQlyZXF1ZXN0LT5yZXNlcnZlZF9zcGFjZSA9IDA7Cj4g LQo+IC0JLyoKPiAtCSAqIEVtaXQgYW55IG91dHN0YW5kaW5nIGZsdXNoZXMgLSBleGVjYnVmIGNh biBmYWlsIHRvIGVtaXQgdGhlIGZsdXNoCj4gLQkgKiBhZnRlciBoYXZpbmcgZW1pdHRlZCB0aGUg YmF0Y2hidWZmZXIgY29tbWFuZC4gSGVuY2Ugd2UgbmVlZCB0byBmaXgKPiAtCSAqIHRoaW5ncyB1 cCBzaW1pbGFyIHRvIGVtaXR0aW5nIHRoZSBsYXp5IHJlcXVlc3QuIFRoZSBkaWZmZXJlbmNlIGhl cmUKPiAtCSAqIGlzIHRoYXQgdGhlIGZsdXNoIF9tdXN0XyBoYXBwZW4gYmVmb3JlIHRoZSBuZXh0 IHJlcXVlc3QsIG5vIG1hdHRlcgo+IC0JICogd2hhdC4KPiAtCSAqLwo+IC0JaWYgKGZsdXNoX2Nh Y2hlcykgewo+IC0JCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gLQkJCXJldCA9IGxvZ2lj YWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHJlcXVlc3QpOwo+IC0JCWVsc2UKPiAtCQkJcmV0ID0g aW50ZWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHJlcXVlc3QpOwo+IC0JCS8qIE5vdCBhbGxvd2Vk IHRvIGZhaWwhICovCj4gLQkJV0FSTihyZXQsICIqX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyBmYWls ZWQ6ICVkIVxuIiwgcmV0KTsKPiAtCX0KPiAtCj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X2Fk ZChyZXF1ZXN0KTsKPiAtCj4gLQlyZXF1ZXN0LT5oZWFkID0gcmVxdWVzdF9zdGFydDsKPiAtCj4g LQkvKiBXaGlsc3QgdGhpcyByZXF1ZXN0IGV4aXN0cywgYmF0Y2hfb2JqIHdpbGwgYmUgb24gdGhl Cj4gLQkgKiBhY3RpdmVfbGlzdCwgYW5kIHNvIHdpbGwgaG9sZCB0aGUgYWN0aXZlIHJlZmVyZW5j ZS4gT25seSB3aGVuIHRoaXMKPiAtCSAqIHJlcXVlc3QgaXMgcmV0aXJlZCB3aWxsIHRoZSB0aGUg YmF0Y2hfb2JqIGJlIG1vdmVkIG9udG8gdGhlCj4gLQkgKiBpbmFjdGl2ZV9saXN0IGFuZCBsb3Nl IGl0cyBhY3RpdmUgcmVmZXJlbmNlLiBIZW5jZSB3ZSBkbyBub3QgbmVlZAo+IC0JICogdG8gZXhw bGljaXRseSBob2xkIGFub3RoZXIgcmVmZXJlbmNlIGhlcmUuCj4gLQkgKi8KPiAtCXJlcXVlc3Qt PmJhdGNoX29iaiA9IG9iajsKPiAtCj4gLQkvKiBTZWFsIHRoZSByZXF1ZXN0IGFuZCBtYXJrIGl0 IGFzIHBlbmRpbmcgZXhlY3V0aW9uLiBOb3RlIHRoYXQKPiAtCSAqIHdlIG1heSBpbnNwZWN0IHRo aXMgc3RhdGUsIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGR1cmluZwo+IC0JICogaGFuZ2No ZWNrLiBIZW5jZSB3ZSBhcHBseSB0aGUgYmFycmllciB0byBlbnN1cmUgdGhhdCB3ZSBkbyBub3QK PiAtCSAqIHNlZSBhIG1vcmUgcmVjZW50IHZhbHVlIGluIHRoZSBod3MgdGhhbiB3ZSBhcmUgdHJh Y2tpbmcuCj4gLQkgKi8KPiAtCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7Cj4g LQlyZXF1ZXN0LT5wcmV2aW91c19zZXFubyA9IGVuZ2luZS0+bGFzdF9zdWJtaXR0ZWRfc2Vxbm87 Cj4gLQlzbXBfc3RvcmVfbWIoZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubywgcmVxdWVzdC0+ c2Vxbm8pOwo+IC0JbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJmVuZ2luZS0+cmVxdWVz dF9saXN0KTsKPiAtCj4gLQkvKiBSZWNvcmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0 aGUgcmVxdWVzdCBzbyB0aGF0Cj4gLQkgKiBzaG91bGQgd2UgZGV0ZWN0IHRoZSB1cGRhdGVkIHNl cW5vIHBhcnQtd2F5IHRocm91Z2ggdGhlCj4gLQkgKiBHUFUgcHJvY2Vzc2luZyB0aGUgcmVxdWVz dCwgd2UgbmV2ZXIgb3Zlci1lc3RpbWF0ZSB0aGUKPiAtCSAqIHBvc2l0aW9uIG9mIHRoZSBoZWFk Lgo+IC0JICovCj4gLQlyZXF1ZXN0LT5wb3N0Zml4ID0gaW50ZWxfcmluZ19nZXRfdGFpbChyaW5n YnVmKTsKPiAtCj4gLQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+IC0JCXJldCA9IGVuZ2lu ZS0+ZW1pdF9yZXF1ZXN0KHJlcXVlc3QpOwo+IC0JZWxzZSB7Cj4gLQkJcmV0ID0gZW5naW5lLT5h ZGRfcmVxdWVzdChyZXF1ZXN0KTsKPiAtCj4gLQkJcmVxdWVzdC0+dGFpbCA9IGludGVsX3Jpbmdf Z2V0X3RhaWwocmluZ2J1Zik7Cj4gLQl9Cj4gLQkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLwo+ IC0JV0FSTihyZXQsICJlbWl0fGFkZF9yZXF1ZXN0IGZhaWxlZDogJWQhXG4iLCByZXQpOwo+IC0J LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHJlc2VydmVkIHNpemUgd2FzIGxhcmdlIGVub3VnaC4g Ki8KPiAtCXJldCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1ZikgLSByZXF1ZXN0X3N0YXJ0 Owo+IC0JaWYgKHJldCA8IDApCj4gLQkJcmV0ICs9IHJpbmdidWYtPnNpemU7Cj4gLQlXQVJOX09O Q0UocmV0ID4gcmVzZXJ2ZWRfdGFpbCwKPiAtCQkgICJOb3QgZW5vdWdoIHNwYWNlIHJlc2VydmVk ICglZCBieXRlcykgIgo+IC0JCSAgImZvciBhZGRpbmcgdGhlIHJlcXVlc3QgKCVkIGJ5dGVzKVxu IiwKPiAtCQkgIHJlc2VydmVkX3RhaWwsIHJldCk7Cj4gLQo+IC0JaTkxNV9nZW1fbWFya19idXN5 KGRldl9wcml2LCBlbmdpbmUpOwo+IC19Cj4gLQo+ICAgc3RhdGljIGJvb2wgaTkxNV9jb250ZXh0 X2lzX2Jhbm5lZChjb25zdCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgewo+ICAg CXVuc2lnbmVkIGxvbmcgZWxhcHNlZDsKPiBAQCAtMjczNCwxMDIgKzIxOTEsNiBAQCBzdGF0aWMg dm9pZCBpOTE1X3NldF9yZXNldF9zdGF0dXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK PiAgIAl9Cj4gICB9Cj4KPiAtdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGtyZWYg KnJlcV9yZWYpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxID0gY29u dGFpbmVyX29mKHJlcV9yZWYsCj4gLQkJCQkJCSB0eXBlb2YoKnJlcSksIHJlZik7Cj4gLQlrbWVt X2NhY2hlX2ZyZWUocmVxLT5pOTE1LT5yZXF1ZXN0cywgcmVxKTsKPiAtfQo+IC0KPiAtc3RhdGlj IGlubGluZSBpbnQKPiAtX19pOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAtCQkJIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gLQkJ CSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0KQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gLQl1bnNpZ25lZCBy ZXNldF9jb3VudGVyID0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsK PiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+IC0JaW50IHJldDsKPiAtCj4g LQlpZiAoIXJlcV9vdXQpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JKnJlcV9vdXQgPSBO VUxMOwo+IC0KPiAtCS8qIEFCSTogQmVmb3JlIHVzZXJzcGFjZSBhY2Nlc3NlcyB0aGUgR1BVIChl LmcuIGV4ZWNidWZmZXIpLCByZXBvcnQKPiAtCSAqIEVJTyBpZiB0aGUgR1BVIGlzIGFscmVhZHkg d2VkZ2VkLCBvciBFQUdBSU4gdG8gZHJvcCB0aGUgc3RydWN0X211dGV4Cj4gLQkgKiBhbmQgcmVz dGFydC4KPiAtCSAqLwo+IC0JcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2UocmVzZXRfY291bnRl ciwgZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4g cmV0Owo+IC0KPiAtCXJlcSA9IGttZW1fY2FjaGVfemFsbG9jKGRldl9wcml2LT5yZXF1ZXN0cywg R0ZQX0tFUk5FTCk7Cj4gLQlpZiAocmVxID09IE5VTEwpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4g LQo+IC0JcmV0ID0gaTkxNV9nZW1fZ2V0X3NlcW5vKGVuZ2luZS0+aTkxNSwgJnJlcS0+c2Vxbm8p Owo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGVycjsKPiAtCj4gLQlrcmVmX2luaXQoJnJlcS0+cmVm KTsKPiAtCXJlcS0+aTkxNSA9IGRldl9wcml2Owo+IC0JcmVxLT5lbmdpbmUgPSBlbmdpbmU7Cj4g LQlyZXEtPnJlc2V0X2NvdW50ZXIgPSByZXNldF9jb3VudGVyOwo+IC0JcmVxLT5jdHggID0gY3R4 Owo+IC0JaTkxNV9nZW1fY29udGV4dF9yZWZlcmVuY2UocmVxLT5jdHgpOwo+IC0KPiAtCS8qCj4g LQkgKiBSZXNlcnZlIHNwYWNlIGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRoZSBjb21tYW5k cyByZXF1aXJlZCB0bwo+IC0JICogZXZlbnR1YWxseSBlbWl0IHRoaXMgcmVxdWVzdC4gVGhpcyBp cyB0byBndWFyYW50ZWUgdGhhdCB0aGUKPiAtCSAqIGk5MTVfYWRkX3JlcXVlc3QoKSBjYWxsIGNh bid0IGZhaWwuIE5vdGUgdGhhdCB0aGUgcmVzZXJ2ZSBtYXkgbmVlZAo+IC0JICogdG8gYmUgcmVk b25lIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhY3R1YWxseSBzdWJtaXR0ZWQgc3RyYWlnaHQKPiAt CSAqIGF3YXksIGUuZy4gYmVjYXVzZSBhIEdQVSBzY2hlZHVsZXIgaGFzIGRlZmVycmVkIGl0Lgo+ IC0JICovCj4gLQlyZXEtPnJlc2VydmVkX3NwYWNlID0gTUlOX1NQQUNFX0ZPUl9BRERfUkVRVUVT VDsKPiAtCj4gLQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+IC0JCXJldCA9IGludGVsX2xv Z2ljYWxfcmluZ19hbGxvY19yZXF1ZXN0X2V4dHJhcyhyZXEpOwo+IC0JZWxzZQo+IC0JCXJldCA9 IGludGVsX3JpbmdfYWxsb2NfcmVxdWVzdF9leHRyYXMocmVxKTsKPiAtCWlmIChyZXQpCj4gLQkJ Z290byBlcnJfY3R4Owo+IC0KPiAtCSpyZXFfb3V0ID0gcmVxOwo+IC0JcmV0dXJuIDA7Cj4gLQo+ IC1lcnJfY3R4Ogo+IC0JaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShjdHgpOwo+IC1lcnI6 Cj4gLQlrbWVtX2NhY2hlX2ZyZWUoZGV2X3ByaXYtPnJlcXVlc3RzLCByZXEpOwo+IC0JcmV0dXJu IHJldDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MgLSBhbGxv Y2F0ZSBhIHJlcXVlc3Qgc3RydWN0dXJlCj4gLSAqCj4gLSAqIEBlbmdpbmU6IGVuZ2luZSB0aGF0 IHdlIHdpc2ggdG8gaXNzdWUgdGhlIHJlcXVlc3Qgb24uCj4gLSAqIEBjdHg6IGNvbnRleHQgdGhh dCB0aGUgcmVxdWVzdCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aC4KPiAtICogICAgICAgVGhpcyBj YW4gYmUgTlVMTCBpZiB0aGUgcmVxdWVzdCBpcyBub3QgZGlyZWN0bHkgcmVsYXRlZCB0bwo+IC0g KiAgICAgICBhbnkgc3BlY2lmaWMgdXNlciBjb250ZXh0LCBpbiB3aGljaCBjYXNlIHRoaXMgZnVu Y3Rpb24gd2lsbAo+IC0gKiAgICAgICBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgY29udGV4dCB0byB1 c2UuCj4gLSAqCj4gLSAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgcmVxdWVz dCBpZiBzdWNjZXNzZnVsLAo+IC0gKiBvciBhbiBlcnJvciBjb2RlIGlmIG5vdC4KPiAtICovCj4g LXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqCj4gLWk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Mo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCSAgICAgICBzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cTsKPiAtCWludCBlcnI7Cj4gLQo+IC0JaWYgKGN0eCA9PSBOVUxMKQo+IC0JCWN0eCA9IGVuZ2lu ZS0+aTkxNS0+a2VybmVsX2NvbnRleHQ7Cj4gLQllcnIgPSBfX2k5MTVfZ2VtX3JlcXVlc3RfYWxs b2MoZW5naW5lLCBjdHgsICZyZXEpOwo+IC0JcmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IHJl cTsKPiAtfQo+IC0KPiAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqCj4gICBpOTE1X2dl bV9maW5kX2FjdGl2ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg IHsKPiBAQCAtMjkwMywxNCArMjI2NCwxNCBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZXNldF9l bmdpbmVfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJICogaW1w bGljaXQgcmVmZXJlbmNlcyBvbiB0aGluZ3MgbGlrZSBlLmcuIHBwZ3R0IGFkZHJlc3Mgc3BhY2Vz IHRocm91Z2gKPiAgIAkgKiB0aGUgcmVxdWVzdC4KPiAgIAkgKi8KPiAtCXdoaWxlICghbGlzdF9l bXB0eSgmZW5naW5lLT5yZXF1ZXN0X2xpc3QpKSB7Cj4gKwlpZiAoIWxpc3RfZW1wdHkoJmVuZ2lu ZS0+cmVxdWVzdF9saXN0KSkgewo+ICAgCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cXVlc3Q7Cj4KPiAtCQlyZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT5yZXF1ZXN0 X2xpc3QsCj4gLQkJCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LAo+IC0JCQkJCSAg IGxpc3QpOwo+ICsJCXJlcXVlc3QgPSBsaXN0X2xhc3RfZW50cnkoJmVuZ2luZS0+cmVxdWVzdF9s aXN0LAo+ICsJCQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LAo+ICsJCQkJCSAgbGlz dCk7Cj4KPiAtCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKPiArCQlpOTE1X2dl bV9yZXF1ZXN0X3JldGlyZV91cHRvKHJlcXVlc3QpOwo+ICAgCX0KPgo+ICAgCS8qIEhhdmluZyBm bHVzaGVkIGFsbCByZXF1ZXN0cyBmcm9tIGFsbCBxdWV1ZXMsIHdlIGtub3cgdGhhdCBhbGwKPiBA QCAtMjk3NCw3ICsyMzM1LDcgQEAgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmcoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCQlpZiAoIWk5MTVfZ2VtX3JlcXVlc3RfY29t cGxldGVkKHJlcXVlc3QpKQo+ICAgCQkJYnJlYWs7Cj4KPiAtCQlpOTE1X2dlbV9yZXF1ZXN0X3Jl dGlyZShyZXF1ZXN0KTsKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHJlcXVlc3Qp Owo+ICAgCX0KPgo+ICAgCS8qIE1vdmUgYW55IGJ1ZmZlcnMgb24gdGhlIGFjdGl2ZSBsaXN0IHRo YXQgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X3JlcXVlc3QuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4z NGIyZjE1MWNkZmMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fcmVxdWVzdC5jCj4gQEAgLTAsMCArMSw2NTkgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IMKpIDIwMDgtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAr ICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNv ZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRX QVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsKPiArc3Rh dGljIGludCBpOTE1X2dlbV9jaGVja193ZWRnZSh1bnNpZ25lZCByZXNldF9jb3VudGVyLCBib29s IGludGVycnVwdGlibGUpCj4gK3sKPiArCWlmIChfX2k5MTVfdGVybWluYWxseV93ZWRnZWQocmVz ZXRfY291bnRlcikpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJaWYgKF9faTkxNV9yZXNldF9p bl9wcm9ncmVzcyhyZXNldF9jb3VudGVyKSkgewo+ICsJCS8qIE5vbi1pbnRlcnJ1cHRpYmxlIGNh bGxlcnMgY2FuJ3QgaGFuZGxlIC1FQUdBSU4sIGhlbmNlIHJldHVybgo+ICsJCSAqIC1FSU8gdW5j b25kaXRpb25hbGx5IGZvciB0aGVzZS4gKi8KPiArCQlpZiAoIWludGVycnVwdGlibGUpCj4gKwkJ CXJldHVybiAtRUlPOwo+ICsKPiArCQlyZXR1cm4gLUVBR0FJTjsKPiArCX0KPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X2dlbV9pbml0X3NlcW5vKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHNlcW5vKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIENhcmVmdWxseSBy ZXRpcmUgYWxsIHJlcXVlc3RzIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgcmluZ3MgKi8KPiArCWZv cl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2KSB7Cj4gKwkJcmV0ID0gaW50ZWxfZW5naW5l X2lkbGUoZW5naW5lKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJ aTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldl9wcml2KTsKPiArCj4gKwkvKiBJZiB0aGUgc2Vx bm8gd3JhcHMgYXJvdW5kLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBicmVhZGNydW1iIHJidHJlZSAq Lwo+ICsJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgZGV2X3ByaXYtPm5leHRfc2Vxbm8p KSB7Cj4gKwkJd2hpbGUgKGludGVsX2tpY2tfd2FpdGVycyhkZXZfcHJpdikgfHwKPiArCQkgICAg ICAgaW50ZWxfa2lja19zaWduYWxlcnMoZGV2X3ByaXYpKQo+ICsJCQl5aWVsZCgpOwo+ICsJfQo+ ICsKPiArCS8qIEZpbmFsbHkgcmVzZXQgaHcgc3RhdGUgKi8KPiArCWZvcl9lYWNoX2VuZ2luZShl bmdpbmUsIGRldl9wcml2KQo+ICsJCWludGVsX3JpbmdfaW5pdF9zZXFubyhlbmdpbmUsIHNlcW5v KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGk5MTVfZ2VtX3NldF9zZXFubyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCWlmIChzZXFubyA9PSAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCS8qIEhXUyBw YWdlIG5lZWRzIHRvIGJlIHNldCBsZXNzIHRoYW4gd2hhdCB3ZQo+ICsJICogd2lsbCBpbmplY3Qg dG8gcmluZwo+ICsJICovCj4gKwlyZXQgPSBpOTE1X2dlbV9pbml0X3NlcW5vKGRldl9wcml2LCBz ZXFubyAtIDEpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIENhcmVm dWxseSBzZXQgdGhlIGxhc3Rfc2Vxbm8gdmFsdWUgc28gdGhhdCB3cmFwCj4gKwkgKiBkZXRlY3Rp b24gc3RpbGwgd29ya3MKPiArCSAqLwo+ICsJZGV2X3ByaXYtPm5leHRfc2Vxbm8gPSBzZXFubzsK PiArCWRldl9wcml2LT5sYXN0X3NlcW5vID0gc2Vxbm8gLSAxOwo+ICsJaWYgKGRldl9wcml2LT5s YXN0X3NlcW5vID09IDApCj4gKwkJZGV2X3ByaXYtPmxhc3Rfc2Vxbm8tLTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X2dlbV9nZXRfc2Vxbm8oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgKnNlcW5vKQo+ICt7Cj4gKwkvKiByZXNlcnZl IDAgZm9yIG5vbi1zZXFubyAqLwo+ICsJaWYgKHVubGlrZWx5KGRldl9wcml2LT5uZXh0X3NlcW5v ID09IDApKSB7Cj4gKwkJaW50IHJldCA9IGk5MTVfZ2VtX2luaXRfc2Vxbm8oZGV2X3ByaXYsIDAp Owo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCWRldl9wcml2LT5uZXh0 X3NlcW5vID0gMTsKPiArCX0KPiArCj4gKwkqc2Vxbm8gPSBkZXZfcHJpdi0+bGFzdF9zZXFubyA9 IGRldl9wcml2LT5uZXh0X3NlcW5vKys7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSBpbnQKPiArX19pOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiArCQkJIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gKwkJ CSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0KQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwl1bnNpZ25lZCBy ZXNldF9jb3VudGVyID0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+ICsJaW50IHJldDsKPiArCj4g KwlpZiAoIXJlcV9vdXQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJKnJlcV9vdXQgPSBO VUxMOwo+ICsKPiArCS8qIEFCSTogQmVmb3JlIHVzZXJzcGFjZSBhY2Nlc3NlcyB0aGUgR1BVIChl LmcuIGV4ZWNidWZmZXIpLCByZXBvcnQKPiArCSAqIEVJTyBpZiB0aGUgR1BVIGlzIGFscmVhZHkg d2VkZ2VkLCBvciBFQUdBSU4gdG8gZHJvcCB0aGUgc3RydWN0X211dGV4Cj4gKwkgKiBhbmQgcmVz dGFydC4KPiArCSAqLwo+ICsJcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2UocmVzZXRfY291bnRl ciwgZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCXJlcSA9IGttZW1fY2FjaGVfemFsbG9jKGRldl9wcml2LT5yZXF1ZXN0cywg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAocmVxID09IE5VTEwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Kwo+ICsJcmV0ID0gaTkxNV9nZW1fZ2V0X3NlcW5vKGRldl9wcml2LCAmcmVxLT5zZXFubyk7Cj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCWtyZWZfaW5pdCgmcmVxLT5yZWYpOwo+ ICsJcmVxLT5pOTE1ID0gZGV2X3ByaXY7Cj4gKwlyZXEtPmVuZ2luZSA9IGVuZ2luZTsKPiArCXJl cS0+cmVzZXRfY291bnRlciA9IHJlc2V0X2NvdW50ZXI7Cj4gKwlyZXEtPmN0eCA9IGN0eDsKPiAr CWk5MTVfZ2VtX2NvbnRleHRfcmVmZXJlbmNlKGN0eCk7Cj4gKwo+ICsJLyoKPiArCSAqIFJlc2Vy dmUgc3BhY2UgaW4gdGhlIHJpbmcgYnVmZmVyIGZvciBhbGwgdGhlIGNvbW1hbmRzIHJlcXVpcmVk IHRvCj4gKwkgKiBldmVudHVhbGx5IGVtaXQgdGhpcyByZXF1ZXN0LiBUaGlzIGlzIHRvIGd1YXJh bnRlZSB0aGF0IHRoZQo+ICsJICogaTkxNV9hZGRfcmVxdWVzdCgpIGNhbGwgY2FuJ3QgZmFpbC4g Tm90ZSB0aGF0IHRoZSByZXNlcnZlIG1heSBuZWVkCj4gKwkgKiB0byBiZSByZWRvbmUgaWYgdGhl IHJlcXVlc3QgaXMgbm90IGFjdHVhbGx5IHN1Ym1pdHRlZCBzdHJhaWdodAo+ICsJICogYXdheSwg ZS5nLiBiZWNhdXNlIGEgR1BVIHNjaGVkdWxlciBoYXMgZGVmZXJyZWQgaXQuCj4gKwkgKi8KPiAr CXJlcS0+cmVzZXJ2ZWRfc3BhY2UgPSBNSU5fU1BBQ0VfRk9SX0FERF9SRVFVRVNUOwo+ICsKPiAr CWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gKwkJcmV0ID0gaW50ZWxfbG9naWNhbF9yaW5n X2FsbG9jX3JlcXVlc3RfZXh0cmFzKHJlcSk7Cj4gKwllbHNlCj4gKwkJcmV0ID0gaW50ZWxfcmlu Z19hbGxvY19yZXF1ZXN0X2V4dHJhcyhyZXEpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9j dHg7Cj4gKwo+ICsJKnJlcV9vdXQgPSByZXE7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9jdHg6 Cj4gKwlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKGN0eCk7Cj4gK2VycjoKPiArCWttZW1f Y2FjaGVfZnJlZShkZXZfcHJpdi0+cmVxdWVzdHMsIHJlcSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICsvKioKPiArICogaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyAtIGFsbG9jYXRlIGEgcmVx dWVzdCBzdHJ1Y3R1cmUKPiArICoKPiArICogQGVuZ2luZTogZW5naW5lIHRoYXQgd2Ugd2lzaCB0 byBpc3N1ZSB0aGUgcmVxdWVzdCBvbi4KPiArICogQGN0eDogY29udGV4dCB0aGF0IHRoZSByZXF1 ZXN0IHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoLgo+ICsgKiAgICAgICBUaGlzIGNhbiBiZSBOVUxM IGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvCj4gKyAqICAgICAgIGFu eSBzcGVjaWZpYyB1c2VyIGNvbnRleHQsIGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbiB3aWxs Cj4gKyAqICAgICAgIGNob29zZSBhbiBhcHByb3ByaWF0ZSBjb250ZXh0IHRvIHVzZS4KPiArICoK PiArICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCByZXF1ZXN0IGlmIHN1Y2Nl c3NmdWwsCj4gKyAqIG9yIGFuIGVycm9yIGNvZGUgaWYgbm90Lgo+ICsgKi8KPiArc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICoKPiAraTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJICAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+ICsJaW50 IGVycjsKPiArCj4gKwlpZiAoY3R4ID09IE5VTEwpCj4gKwkJY3R4ID0gZW5naW5lLT5pOTE1LT5r ZXJuZWxfY29udGV4dDsKPiArCWVyciA9IF9faTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhlbmdpbmUs IGN0eCwgJnJlcSk7Cj4gKwlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogcmVxOwo+ICt9Cj4g Kwo+ICtpbnQgaTkxNV9nZW1fcmVxdWVzdF9hZGRfdG9fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxLAo+ICsJCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gKwo+ICsJV0FSTl9PTighcmVxIHx8ICFmaWxl IHx8IHJlcS0+ZmlsZV9wcml2KTsKPiArCj4gKwlpZiAoIXJlcSB8fCAhZmlsZSkKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAocmVxLT5maWxlX3ByaXYpCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJZGV2X3ByaXZhdGUgPSByZXEtPmk5MTU7Cj4gKwlmaWxlX3ByaXYgPSBmaWxl LT5kcml2ZXJfcHJpdjsKPiArCj4gKwlzcGluX2xvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4g KwlyZXEtPmZpbGVfcHJpdiA9IGZpbGVfcHJpdjsKPiArCWxpc3RfYWRkX3RhaWwoJnJlcS0+Y2xp ZW50X2xpc3QsICZmaWxlX3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7Cj4gKwlzcGluX3VubG9jaygm ZmlsZV9wcml2LT5tbS5sb2NrKTsKPiArCj4gKwlyZXEtPnBpZCA9IGdldF9waWQodGFza19waWQo Y3VycmVudCkpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZv aWQKPiAraTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2 YXRlICpmaWxlX3ByaXYgPSByZXF1ZXN0LT5maWxlX3ByaXY7Cj4gKwo+ICsJaWYgKCFmaWxlX3By aXYpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsK PiArCWxpc3RfZGVsKCZyZXF1ZXN0LT5jbGllbnRfbGlzdCk7Cj4gKwlyZXF1ZXN0LT5maWxlX3By aXYgPSBOVUxMOwo+ICsJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gKwo+ICsJ cHV0X3BpZChyZXF1ZXN0LT5waWQpOwo+ICsJcmVxdWVzdC0+cGlkID0gTlVMTDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUoc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXF1ZXN0KQo+ICt7Cj4gKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3JldGly ZShyZXF1ZXN0KTsKPiArCWxpc3RfZGVsX2luaXQoJnJlcXVlc3QtPmxpc3QpOwo+ICsKPiArCS8q IFdlIGtub3cgdGhlIEdQVSBtdXN0IGhhdmUgcmVhZCB0aGUgcmVxdWVzdCB0byBoYXZlCj4gKwkg KiBzZW50IHVzIHRoZSBzZXFubyArIGludGVycnVwdCwgc28gdXNlIHRoZSBwb3NpdGlvbgo+ICsJ ICogb2YgdGFpbCBvZiB0aGUgcmVxdWVzdCB0byB1cGRhdGUgdGhlIGxhc3Qga25vd24gcG9zaXRp b24KPiArCSAqIG9mIHRoZSBHUFUgaGVhZC4KPiArCSAqCj4gKwkgKiBOb3RlIHRoaXMgcmVxdWly ZXMgdGhhdCB3ZSBhcmUgYWx3YXlzIGNhbGxlZCBpbiByZXF1ZXN0Cj4gKwkgKiBjb21wbGV0aW9u IG9yZGVyLgo+ICsJICovCj4gKwlyZXF1ZXN0LT5yaW5nYnVmLT5sYXN0X3JldGlyZWRfaGVhZCA9 IHJlcXVlc3QtPnBvc3RmaXg7Cj4gKwo+ICsJaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9j bGllbnQocmVxdWVzdCk7Cj4gKwo+ICsJaWYgKHJlcXVlc3QtPnByZXZpb3VzX2NvbnRleHQpIHsK PiArCQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+ICsJCQlpbnRlbF9scl9jb250ZXh0X3Vu cGluKHJlcXVlc3QtPnByZXZpb3VzX2NvbnRleHQsCj4gKwkJCQkJICAgICAgIHJlcXVlc3QtPmVu Z2luZSk7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShyZXF1ZXN0 LT5jdHgpOwo+ICsJaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShyZXF1ZXN0KTsKPiArfQo+ ICsKPiArdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUg PSByZXEtPmVuZ2luZTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqdG1wOwo+ICsK PiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJlcS0+aTkxNS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ ICsKPiArCWlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQo+ICsJCXJldHVybjsKPiArCj4gKwlk byB7Cj4gKwkJdG1wID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT5yZXF1ZXN0X2xpc3QsCj4g KwkJCQkgICAgICAgdHlwZW9mKCp0bXApLCBsaXN0KTsKPiArCj4gKwkJaTkxNV9nZW1fcmVxdWVz dF9yZXRpcmUodG1wKTsKPiArCX0gd2hpbGUgKHRtcCAhPSByZXEpOwo+ICsKPiArCVdBUk5fT04o aTkxNV92ZXJpZnlfbGlzdHMoZW5naW5lLT5kZXYpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg aTkxNV9nZW1fbWFya19idXN5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAr CQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJ ZGV2X3ByaXYtPmd0LmFjdGl2ZV9lbmdpbmVzIHw9IGludGVsX2VuZ2luZV9mbGFnKGVuZ2luZSk7 Cj4gKwlpZiAoZGV2X3ByaXYtPmd0LmF3YWtlKQo+ICsJCXJldHVybjsKPiArCj4gKwlpbnRlbF9y dW50aW1lX3BtX2dldF9ub3Jlc3VtZShkZXZfcHJpdik7Cj4gKwlkZXZfcHJpdi0+Z3QuYXdha2Ug PSB0cnVlOwo+ICsKPiArCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOwo+ICsJ aTkxNV91cGRhdGVfZ2Z4X3ZhbChkZXZfcHJpdik7Cj4gKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJp diktPmdlbiA+PSA2KQo+ICsJCWdlbjZfcnBzX2J1c3koZGV2X3ByaXYpOwo+ICsKPiArCXF1ZXVl X2RlbGF5ZWRfd29yayhkZXZfcHJpdi0+d3EsCj4gKwkJCSAgICZkZXZfcHJpdi0+Z3QucmV0aXJl X3dvcmssCj4gKwkJCSAgIHJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoSFopKTsKPiArfQo+ICsK PiArLyoKPiArICogTkI6IFRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4gRG9p bmcgc28gd291bGQgbWVhbiB0aGUgdGhlCj4gKyAqIHJlcXVlc3QgaXMgbm90IGJlaW5nIHRyYWNr ZWQgZm9yIGNvbXBsZXRpb24gYnV0IHRoZSB3b3JrIGl0c2VsZiBpcwo+ICsgKiBnb2luZyB0byBo YXBwZW4gb24gdGhlIGhhcmR3YXJlLiBUaGlzIHdvdWxkIGJlIGEgQmFkIFRoaW5nKHRtKS4KPiAr ICovCj4gK3ZvaWQgX19pOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxdWVzdCwKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJ Ym9vbCBmbHVzaF9jYWNoZXMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCXN0cnVjdCBpbnRl bF9yaW5nYnVmZmVyICpyaW5nYnVmOwo+ICsJdTMyIHJlcXVlc3Rfc3RhcnQ7Cj4gKwl1MzIgcmVz ZXJ2ZWRfdGFpbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKFdBUk5fT04ocmVxdWVzdCA9PSBO VUxMKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZW5naW5lID0gcmVxdWVzdC0+ZW5naW5lOwo+ICsJ ZGV2X3ByaXYgPSByZXF1ZXN0LT5pOTE1Owo+ICsJcmluZ2J1ZiA9IHJlcXVlc3QtPnJpbmdidWY7 Cj4gKwo+ICsJLyoKPiArCSAqIFRvIGVuc3VyZSB0aGF0IHRoaXMgY2FsbCB3aWxsIG5vdCBmYWls LCBzcGFjZSBmb3IgaXRzIGVtaXNzaW9ucwo+ICsJICogc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVu IHJlc2VydmVkIGluIHRoZSByaW5nIGJ1ZmZlci4gTGV0IHRoZSByaW5nCj4gKwkgKiBrbm93IHRo YXQgaXQgaXMgdGltZSB0byB1c2UgdGhhdCBzcGFjZSB1cC4KPiArCSAqLwo+ICsJcmVxdWVzdF9z dGFydCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1Zik7Cj4gKwlyZXNlcnZlZF90YWlsID0g cmVxdWVzdC0+cmVzZXJ2ZWRfc3BhY2U7Cj4gKwlyZXF1ZXN0LT5yZXNlcnZlZF9zcGFjZSA9IDA7 Cj4gKwo+ICsJLyoKPiArCSAqIEVtaXQgYW55IG91dHN0YW5kaW5nIGZsdXNoZXMgLSBleGVjYnVm IGNhbiBmYWlsIHRvIGVtaXQgdGhlIGZsdXNoCj4gKwkgKiBhZnRlciBoYXZpbmcgZW1pdHRlZCB0 aGUgYmF0Y2hidWZmZXIgY29tbWFuZC4gSGVuY2Ugd2UgbmVlZCB0byBmaXgKPiArCSAqIHRoaW5n cyB1cCBzaW1pbGFyIHRvIGVtaXR0aW5nIHRoZSBsYXp5IHJlcXVlc3QuIFRoZSBkaWZmZXJlbmNl IGhlcmUKPiArCSAqIGlzIHRoYXQgdGhlIGZsdXNoIF9tdXN0XyBoYXBwZW4gYmVmb3JlIHRoZSBu ZXh0IHJlcXVlc3QsIG5vIG1hdHRlcgo+ICsJICogd2hhdC4KPiArCSAqLwo+ICsJaWYgKGZsdXNo X2NhY2hlcykgewo+ICsJCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gKwkJCXJldCA9IGxv Z2ljYWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHJlcXVlc3QpOwo+ICsJCWVsc2UKPiArCQkJcmV0 ID0gaW50ZWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHJlcXVlc3QpOwo+ICsJCS8qIE5vdCBhbGxv d2VkIHRvIGZhaWwhICovCj4gKwkJV0FSTihyZXQsICIqX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyBm YWlsZWQ6ICVkIVxuIiwgcmV0KTsKPiArCX0KPiArCj4gKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0 X2FkZChyZXF1ZXN0KTsKPiArCj4gKwlyZXF1ZXN0LT5oZWFkID0gcmVxdWVzdF9zdGFydDsKPiAr Cj4gKwkvKiBXaGlsc3QgdGhpcyByZXF1ZXN0IGV4aXN0cywgYmF0Y2hfb2JqIHdpbGwgYmUgb24g dGhlCj4gKwkgKiBhY3RpdmVfbGlzdCwgYW5kIHNvIHdpbGwgaG9sZCB0aGUgYWN0aXZlIHJlZmVy ZW5jZS4gT25seSB3aGVuIHRoaXMKPiArCSAqIHJlcXVlc3QgaXMgcmV0aXJlZCB3aWxsIHRoZSB0 aGUgYmF0Y2hfb2JqIGJlIG1vdmVkIG9udG8gdGhlCj4gKwkgKiBpbmFjdGl2ZV9saXN0IGFuZCBs b3NlIGl0cyBhY3RpdmUgcmVmZXJlbmNlLiBIZW5jZSB3ZSBkbyBub3QgbmVlZAo+ICsJICogdG8g ZXhwbGljaXRseSBob2xkIGFub3RoZXIgcmVmZXJlbmNlIGhlcmUuCj4gKwkgKi8KPiArCXJlcXVl c3QtPmJhdGNoX29iaiA9IG9iajsKPiArCj4gKwkvKiBTZWFsIHRoZSByZXF1ZXN0IGFuZCBtYXJr IGl0IGFzIHBlbmRpbmcgZXhlY3V0aW9uLiBOb3RlIHRoYXQKPiArCSAqIHdlIG1heSBpbnNwZWN0 IHRoaXMgc3RhdGUsIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGR1cmluZwo+ICsJICogaGFu Z2NoZWNrLiBIZW5jZSB3ZSBhcHBseSB0aGUgYmFycmllciB0byBlbnN1cmUgdGhhdCB3ZSBkbyBu b3QKPiArCSAqIHNlZSBhIG1vcmUgcmVjZW50IHZhbHVlIGluIHRoZSBod3MgdGhhbiB3ZSBhcmUg dHJhY2tpbmcuCj4gKwkgKi8KPiArCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7 Cj4gKwlyZXF1ZXN0LT5wcmV2aW91c19zZXFubyA9IGVuZ2luZS0+bGFzdF9zdWJtaXR0ZWRfc2Vx bm87Cj4gKwlzbXBfc3RvcmVfbWIoZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubywgcmVxdWVz dC0+c2Vxbm8pOwo+ICsJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJmVuZ2luZS0+cmVx dWVzdF9saXN0KTsKPiArCj4gKwkvKiBSZWNvcmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBv ZiB0aGUgcmVxdWVzdCBzbyB0aGF0Cj4gKwkgKiBzaG91bGQgd2UgZGV0ZWN0IHRoZSB1cGRhdGVk IHNlcW5vIHBhcnQtd2F5IHRocm91Z2ggdGhlCj4gKwkgKiBHUFUgcHJvY2Vzc2luZyB0aGUgcmVx dWVzdCwgd2UgbmV2ZXIgb3Zlci1lc3RpbWF0ZSB0aGUKPiArCSAqIHBvc2l0aW9uIG9mIHRoZSBo ZWFkLgo+ICsJICovCj4gKwlyZXF1ZXN0LT5wb3N0Zml4ID0gaW50ZWxfcmluZ19nZXRfdGFpbChy aW5nYnVmKTsKPiArCj4gKwlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+ICsJCXJldCA9IGVu Z2luZS0+ZW1pdF9yZXF1ZXN0KHJlcXVlc3QpOwo+ICsJZWxzZSB7Cj4gKwkJcmV0ID0gZW5naW5l LT5hZGRfcmVxdWVzdChyZXF1ZXN0KTsKPiArCj4gKwkJcmVxdWVzdC0+dGFpbCA9IGludGVsX3Jp bmdfZ2V0X3RhaWwocmluZ2J1Zik7Cj4gKwl9Cj4gKwkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAq Lwo+ICsJV0FSTihyZXQsICJlbWl0fGFkZF9yZXF1ZXN0IGZhaWxlZDogJWQhXG4iLCByZXQpOwo+ ICsJLyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHJlc2VydmVkIHNpemUgd2FzIGxhcmdlIGVub3Vn aC4gKi8KPiArCXJldCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1ZikgLSByZXF1ZXN0X3N0 YXJ0Owo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0ICs9IHJpbmdidWYtPnNpemU7Cj4gKwlXQVJO X09OQ0UocmV0ID4gcmVzZXJ2ZWRfdGFpbCwKPiArCQkgICJOb3QgZW5vdWdoIHNwYWNlIHJlc2Vy dmVkICglZCBieXRlcykgIgo+ICsJCSAgImZvciBhZGRpbmcgdGhlIHJlcXVlc3QgKCVkIGJ5dGVz KVxuIiwKPiArCQkgIHJlc2VydmVkX3RhaWwsIHJldCk7Cj4gKwo+ICsJaTkxNV9nZW1fbWFya19i dXN5KGRldl9wcml2LCBlbmdpbmUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBs b2NhbF9jbG9ja191cyh1bnNpZ25lZCAqY3B1KQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHQ7Cj4g Kwo+ICsJLyogQ2hlYXBseSBhbmQgYXBwcm94aW1hdGVseSBjb252ZXJ0IGZyb20gbmFub3NlY29u ZHMgdG8gbWljcm9zZWNvbmRzLgo+ICsJICogVGhlIHJlc3VsdCBhbmQgc3Vic2VxdWVudCBjYWxj dWxhdGlvbnMgYXJlIGFsc28gZGVmaW5lZCBpbiB0aGUgc2FtZQo+ICsJICogYXBwcm94aW1hdGUg bWljcm9zZWNvbmRzIHVuaXRzLiBUaGUgcHJpbmNpcGFsIHNvdXJjZSBvZiB0aW1pbmcKPiArCSAq IGVycm9yIGhlcmUgaXMgZnJvbSB0aGUgc2ltcGxlIHRydW5jYXRpb24uCj4gKwkgKgo+ICsJICog Tm90ZSB0aGF0IGxvY2FsX2Nsb2NrKCkgaXMgb25seSBkZWZpbmVkIHdydCB0byB0aGUgY3VycmVu dCBDUFU7Cj4gKwkgKiB0aGUgY29tcGFyaXNvbnMgYXJlIG5vIGxvbmdlciB2YWxpZCBpZiB3ZSBz d2l0Y2ggQ1BVcy4gSW5zdGVhZCBvZgo+ICsJICogYmxvY2tpbmcgcHJlZW1wdGlvbiBmb3IgdGhl IGVudGlyZSBidXN5d2FpdCwgd2UgY2FuIGRldGVjdCB0aGUgQ1BVCj4gKwkgKiBzd2l0Y2ggYW5k IHVzZSB0aGF0IGFzIGluZGljYXRvciBvZiBzeXN0ZW0gbG9hZCBhbmQgYSByZWFzb24gdG8KPiAr CSAqIHN0b3AgYnVzeXdhaXRpbmcsIHNlZSBidXN5d2FpdF9zdG9wKCkuCj4gKwkgKi8KPiArCSpj cHUgPSBnZXRfY3B1KCk7Cj4gKwl0ID0gbG9jYWxfY2xvY2soKSA+PiAxMDsKPiArCXB1dF9jcHUo KTsKPiArCj4gKwlyZXR1cm4gdDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgYnVzeXdhaXRfc3Rv cCh1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHVuc2lnbmVkIGNwdSkKPiArewo+ICsJdW5zaWduZWQg dGhpc19jcHU7Cj4gKwo+ICsJaWYgKHRpbWVfYWZ0ZXIobG9jYWxfY2xvY2tfdXMoJnRoaXNfY3B1 KSwgdGltZW91dCkpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0dXJuIHRoaXNfY3B1ICE9 IGNwdTsKPiArfQo+ICsKPiArYm9vbCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICsJCQkgaW50IHN0YXRlLCB1bnNpZ25lZCBsb25n IHRpbWVvdXRfdXMpCj4gK3sKPiArCXVuc2lnbmVkIGNwdTsKPiArCj4gKwkvKiBXaGVuIHdhaXRp bmcgZm9yIGhpZ2ggZnJlcXVlbmN5IHJlcXVlc3RzLCBlLmcuIGR1cmluZyBzeW5jaHJvbm91cwo+ ICsJICogcmVuZGVyaW5nIHNwbGl0IGJldHdlZW4gdGhlIENQVSBhbmQgR1BVLCB0aGUgZmluaXRl IGFtb3VudCBvZiB0aW1lCj4gKwkgKiByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGlycSBhbmQgd2Fp dCB1cG9uIGl0IGxpbWl0cyB0aGUgcmVzcG9uc2UKPiArCSAqIHJhdGUuIEJ5IGJ1c3l3YWl0aW5n IG9uIHRoZSByZXF1ZXN0IGNvbXBsZXRpb24gZm9yIGEgc2hvcnQgd2hpbGUgd2UKPiArCSAqIGNh biBzZXJ2aWNlIHRoZSBoaWdoIGZyZXF1ZW5jeSB3YWl0cyBhcyBxdWljayBhcyBwb3NzaWJsZS4g SG93ZXZlciwKPiArCSAqIGlmIGl0IGlzIGEgc2xvdyByZXF1ZXN0LCB3ZSB3YW50IHRvIHNsZWVw IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCj4gKwkgKiBUaGUgdHJhZGVvZmYgYmV0d2VlbiB3YWl0 aW5nIGFuZCBzbGVlcGluZyBpcyByb3VnaGx5IHRoZSB0aW1lIGl0Cj4gKwkgKiB0YWtlcyB0byBz bGVlcCBvbiBhIHJlcXVlc3QsIG9uIHRoZSBvcmRlciBvZiBhIG1pY3Jvc2Vjb25kLgo+ICsJICov Cj4gKwo+ICsJdGltZW91dF91cyArPSBsb2NhbF9jbG9ja191cygmY3B1KTsKPiArCWRvIHsKPiAr CQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKPiArCQkJcmV0dXJuIHRydWU7 Cj4gKwo+ICsJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpCj4gKwkJ CWJyZWFrOwo+ICsKPiArCQlpZiAoYnVzeXdhaXRfc3RvcCh0aW1lb3V0X3VzLCBjcHUpKQo+ICsJ CQlicmVhazsKPiArCj4gKwkJY3B1X3JlbGF4X2xvd2xhdGVuY3koKTsKPiArCX0gd2hpbGUgKCFu ZWVkX3Jlc2NoZWQoKSk7Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogX19pOTE1X3dhaXRfcmVxdWVzdCAtIHdhaXQgdW50aWwgZXhlY3V0aW9uIG9mIHJlcXVlc3Qg aGFzIGZpbmlzaGVkCj4gKyAqIEByZXE6IGR1aCEKPiArICogQGludGVycnVwdGlibGU6IGRvIGFu IGludGVycnVwdGlibGUgd2FpdCAobm9ybWFsbHkgeWVzKQo+ICsgKiBAdGltZW91dDogaW4gLSBo b3cgbG9uZyB0byB3YWl0IChOVUxMIGZvcmV2ZXIpOyBvdXQgLSBob3cgbXVjaCB0aW1lIHJlbWFp bmluZwo+ICsgKgo+ICsgKiBOb3RlOiBJdCBpcyBvZiB1dG1vc3QgaW1wb3J0YW5jZSB0aGF0IHRo ZSBwYXNzZWQgaW4gc2Vxbm8gYW5kIHJlc2V0X2NvdW50ZXIKPiArICogdmFsdWVzIGhhdmUgYmVl biByZWFkIGJ5IHRoZSBjYWxsZXIgaW4gYW4gc21wIHNhZmUgbWFubmVyLiBXaGVyZSByZWFkLXNp ZGUKPiArICogbG9ja3MgYXJlIGludm9sdmVkLCBpdCBpcyBzdWZmaWNpZW50IHRvIHJlYWQgdGhl IHJlc2V0X2NvdW50ZXIgYmVmb3JlCj4gKyAqIHVubG9ja2luZyB0aGUgbG9jayB0aGF0IHByb3Rl Y3RzIHRoZSBzZXFuby4gRm9yIGxvY2tsZXNzIHRyaWNrcywgdGhlCj4gKyAqIHJlc2V0X2NvdW50 ZXIgX211c3RfIGJlIHJlYWQgYmVmb3JlLCBhbmQgYW4gYXBwcm9wcmlhdGUgc21wX3JtYiBtdXN0 IGJlCj4gKyAqIGluc2VydGVkLgo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYgdGhlIHJlcXVlc3Qg d2FzIGZvdW5kIHdpdGhpbiB0aGUgYWxsb3RlZCB0aW1lLiBFbHNlIHJldHVybnMgdGhlCj4gKyAq IGVycm5vIHdpdGggcmVtYWluaW5nIHRpbWUgZmlsbGVkIGluIHRpbWVvdXQgYXJndW1lbnQuCj4g KyAqLwo+ICtpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSwKPiArCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLAo+ICsJCQlzNjQgKnRpbWVvdXQsCj4g KwkJCXN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpycHMpCj4gK3sKPiArCWludCBzdGF0ZSA9IGlu dGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRTsK PiArCURFRklORV9XQUlUKHJlc2V0KTsKPiArCXN0cnVjdCBpbnRlbF93YWl0IHdhaXQ7Cj4gKwl1 bnNpZ25lZCBsb25nIHRpbWVvdXRfcmVtYWluOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJbWln aHRfc2xlZXAoKTsKPiArCj4gKwlpZiAobGlzdF9lbXB0eSgmcmVxLT5saXN0KSkKPiArCQlyZXR1 cm4gMDsKPiArCj4gKwlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKPiArCQly ZXR1cm4gMDsKPiArCj4gKwl0aW1lb3V0X3JlbWFpbiA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwo+ ICsJaWYgKHRpbWVvdXQpIHsKPiArCQlpZiAoV0FSTl9PTigqdGltZW91dCA8IDApKQo+ICsJCQly ZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkJaWYgKCp0aW1lb3V0ID09IDApCj4gKwkJCXJldHVybiAt RVRJTUU7Cj4gKwo+ICsJCS8qIFJlY29yZCBjdXJyZW50IHRpbWUgaW4gY2FzZSBpbnRlcnJ1cHRl ZCwgb3Igd2VkZ2VkICovCj4gKwkJdGltZW91dF9yZW1haW4gPSBuc2Vjc190b19qaWZmaWVzX3Rp bWVvdXQoKnRpbWVvdXQpOwo+ICsJCSp0aW1lb3V0ICs9IGt0aW1lX2dldF9yYXdfbnMoKTsKPiAr CX0KPiArCj4gKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4ocmVxKTsKPiArCj4g KwkvKiBUaGlzIGNsaWVudCBpcyBhYm91dCB0byBzdGFsbCB3YWl0aW5nIGZvciB0aGUgR1BVLiBJ biBtYW55IGNhc2VzCj4gKwkgKiB0aGlzIGlzIHVuZGVzaXJhYmxlIGFuZCBsaW1pdHMgdGhlIHRo cm91Z2hwdXQgb2YgdGhlIHN5c3RlbSwgYXMKPiArCSAqIG1hbnkgY2xpZW50cyBjYW5ub3QgY29u dGludWUgcHJvY2Vzc2luZyB1c2VyIGlucHV0L291dHB1dCB3aGlsc3QKPiArCSAqIGJsb2NrZWQu IFJQUyBhdXRvdHVuaW5nIG1heSB0YWtlIHRlbnMgb2YgbWlsbGlzZWNvbmRzIHRvIHJlc3BvbmQK PiArCSAqIHRvIHRoZSBHUFUgbG9hZCBhbmQgdGh1cyBpbmN1cnMgYWRkaXRpb25hbCBsYXRlbmN5 IGZvciB0aGUgY2xpZW50Lgo+ICsJICogV2UgY2FuIGNpcmN1bXZlbnQgdGhhdCBieSBwcm9tb3Rp bmcgdGhlIEdQVSBmcmVxdWVuY3kgdG8gbWF4aW11bQo+ICsJICogYmVmb3JlIHdlIHdhaXQuIFRo aXMgbWFrZXMgdGhlIEdQVSB0aHJvdHRsZSB1cCBtdWNoIG1vcmUgcXVpY2tseQo+ICsJICogKGdv b2QgZm9yIGJlbmNobWFya3MgYW5kIHVzZXIgZXhwZXJpZW5jZSwgZS5nLiB3aW5kb3cgYW5pbWF0 aW9ucyksCj4gKwkgKiBidXQgYXQgYSBjb3N0IG9mIHNwZW5kaW5nIG1vcmUgcG93ZXIgcHJvY2Vz c2luZyB0aGUgd29ya2xvYWQKPiArCSAqIChiYWQgZm9yIGJhdHRlcnkpLiBOb3QgYWxsIGNsaWVu dHMgZXZlbiB3YW50IHRoZWlyIHJlc3VsdHMKPiArCSAqIGltbWVkaWF0ZWx5IGFuZCBmb3IgdGhl bSB3ZSBzaG91bGQganVzdCBsZXQgdGhlIEdQVSBzZWxlY3QgaXRzIG93bgo+ICsJICogZnJlcXVl bmN5IHRvIG1heGltaXNlIGVmZmljaWVuY3kuIFRvIHByZXZlbnQgYSBzaW5nbGUgY2xpZW50IGZy b20KPiArCSAqIGZvcmNpbmcgdGhlIGNsb2NrcyB0b28gaGlnaCBmb3IgdGhlIHdob2xlIHN5c3Rl bSwgd2Ugb25seSBhbGxvdwo+ICsJICogZWFjaCBjbGllbnQgdG8gd2FpdGJvb3N0IG9uY2UgaW4g YSBidXN5IHBlcmlvZC4KPiArCSAqLwo+ICsJaWYgKElOVEVMX0lORk8ocmVxLT5pOTE1KS0+Z2Vu ID49IDYpCj4gKwkJZ2VuNl9ycHNfYm9vc3QocmVxLT5pOTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9q aWZmaWVzKTsKPiArCj4gKwkvKiBPcHRpbWlzdGljIHNwaW4gZm9yIHRoZSBuZXh0IH5qaWZmaWUg YmVmb3JlIHRvdWNoaW5nIElSUXMgKi8KPiArCWlmIChpOTE1X3NwaW5fcmVxdWVzdChyZXEsIHN0 YXRlLCA1KSkKPiArCQlnb3RvIGNvbXBsZXRlOwo+ICsKPiArCWludGVsX3dhaXRfaW5pdCgmd2Fp dCwgcmVxLT5zZXFubyk7Cj4gKwlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7Cj4gKwlpZiAoaW50 ZWxfZW5naW5lX2FkZF93YWl0KHJlcS0+ZW5naW5lLCAmd2FpdCkpCj4gKwkJLyogSW4gb3JkZXIg dG8gY2hlY2sgdGhhdCB3ZSBoYXZlbid0IG1pc3NlZCB0aGUgaW50ZXJydXB0Cj4gKwkJICogYXMg d2UgZW5hYmxlZCBpdCwgd2UgbmVlZCB0byBraWNrIG91cnNlbHZlcyB0byBkbyBhCj4gKwkJICog Y29oZXJlbnQgY2hlY2sgb24gdGhlIHNlcW5vIGJlZm9yZSB3ZSBzbGVlcC4KPiArCQkgKi8KPiAr CQlnb3RvIHdha2V1cDsKPiArCj4gKwlhZGRfd2FpdF9xdWV1ZSgmcmVxLT5pOTE1LT5ncHVfZXJy b3Iud2FpdF9xdWV1ZSwgJnJlc2V0KTsKPiArCWZvciAoOzspIHsKPiArCQlpZiAoc2lnbmFsX3Bl bmRpbmdfc3RhdGUoc3RhdGUsIGN1cnJlbnQpKSB7Cj4gKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsK PiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQkvKiBFbnN1cmUgdGhhdCBldmVuIGlmIHRoZSBH UFUgaGFuZ3MsIHdlIGdldCB3b2tlbiB1cC4gKi8KPiArCQlpOTE1X3F1ZXVlX2hhbmdjaGVjayhy ZXEtPmk5MTUpOwo+ICsKPiArCQl0aW1lb3V0X3JlbWFpbiA9IGlvX3NjaGVkdWxlX3RpbWVvdXQo dGltZW91dF9yZW1haW4pOwo+ICsJCWlmICh0aW1lb3V0X3JlbWFpbiA9PSAwKSB7Cj4gKwkJCXJl dCA9IC1FVElNRTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlpZiAoaW50ZWxfd2FpdF9j b21wbGV0ZSgmd2FpdCkpCj4gKwkJCWJyZWFrOwo+ICsKPiArd2FrZXVwOgo+ICsJCXNldF9jdXJy ZW50X3N0YXRlKHN0YXRlKTsKPiArCj4gKwkJLyogQ2FyZWZ1bGx5IGNoZWNrIGlmIHRoZSByZXF1 ZXN0IGlzIGNvbXBsZXRlLCBnaXZpbmcgdGltZQo+ICsJCSAqIGZvciB0aGUgc2Vxbm8gdG8gYmUg dmlzaWJsZSBmb2xsb3dpbmcgdGhlIGludGVycnVwdC4KPiArCQkgKiBXZSBhbHNvIGhhdmUgdG8g Y2hlY2sgaW4gY2FzZSB3ZSBhcmUga2lja2VkIGJ5IHRoZSBHUFUKPiArCQkgKiByZXNldCBpbiBv cmRlciB0byBkcm9wIHRoZSBzdHJ1Y3RfbXV0ZXguCj4gKwkJICovCj4gKwkJaWYgKF9faTkxNV9y ZXF1ZXN0X2lycV9jb21wbGV0ZShyZXEpKQo+ICsJCQlicmVhazsKPiArCj4gKwkJLyogT25seSBz cGluIGlmIHdlIGtub3cgdGhlIEdQVSBpcyBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdCAqLwo+ICsJ CWlmIChpOTE1X3NwaW5fcmVxdWVzdChyZXEsIHN0YXRlLCAyKSkKPiArCQkJYnJlYWs7Cj4gKwl9 Cj4gKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcmVxLT5pOTE1LT5ncHVfZXJyb3Iud2FpdF9xdWV1ZSwg JnJlc2V0KTsKPiArCj4gKwlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQocmVxLT5lbmdpbmUsICZ3 YWl0KTsKPiArCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKPiArY29tcGxldGU6 Cj4gKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kKHJlcSk7Cj4gKwo+ICsJaWYgKHRp bWVvdXQpIHsKPiArCQkqdGltZW91dCAtPSBrdGltZV9nZXRfcmF3X25zKCk7Cj4gKwkJaWYgKCp0 aW1lb3V0IDwgMCkKPiArCQkJKnRpbWVvdXQgPSAwOwo+ICsKPiArCQkvKgo+ICsJCSAqIEFwcGFy ZW50bHkga3RpbWUgaXNuJ3QgYWNjdXJhdGUgZW5vdWdoIGFuZCBvY2Nhc2lvbmFsbHkgaGFzIGEK PiArCQkgKiBiaXQgb2YgbWlzbWF0Y2ggaW4gdGhlIGppZmZpZXM8LT5uc2VjczwtPmt0aW1lIGxv b3AuIFNvIHBhdGNoCj4gKwkJICogdGhpbmdzIHVwIHRvIG1ha2UgdGhlIHRlc3QgaGFwcHkuIFdl IGFsbG93IHVwIHRvIDEgamlmZnkuCj4gKwkJICoKPiArCQkgKiBUaGlzIGlzIGEgcmVncnNzaW9u IGZyb20gdGhlIHRpbWVzcGVjLT5rdGltZSBjb252ZXJzaW9uLgo+ICsJCSAqLwo+ICsJCWlmIChy ZXQgPT0gLUVUSU1FICYmICp0aW1lb3V0IDwgamlmZmllc190b191c2VjcygxKSoxMDAwKQo+ICsJ CQkqdGltZW91dCA9IDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJwcyAmJiByZXEtPnNlcW5vID09IHJl cS0+ZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubykgewo+ICsJCS8qIFRoZSBHUFUgaXMgbm93 IGlkbGUgYW5kIHRoaXMgY2xpZW50IGhhcyBzdGFsbGVkLgo+ICsJCSAqIFNpbmNlIG5vIG90aGVy IGNsaWVudCBoYXMgc3VibWl0dGVkIGEgcmVxdWVzdCBpbiB0aGUKPiArCQkgKiBtZWFudGltZSwg YXNzdW1lIHRoYXQgdGhpcyBjbGllbnQgaXMgdGhlIG9ubHkgb25lCj4gKwkJICogc3VwcGx5aW5n IHdvcmsgdG8gdGhlIEdQVSBidXQgaXMgdW5hYmxlIHRvIGtlZXAgdGhhdAo+ICsJCSAqIHdvcmsg c3VwcGxpZWQgYmVjYXVzZSBpdCBpcyB3YWl0aW5nLiBTaW5jZSB0aGUgR1BVIGlzCj4gKwkJICog dGhlbiBuZXZlciBrZXB0IGZ1bGx5IGJ1c3ksIFJQUyBhdXRvY2xvY2tpbmcgd2lsbAo+ICsJCSAq IGtlZXAgdGhlIGNsb2NrcyByZWxhdGl2ZWx5IGxvdywgY2F1c2luZyBmdXJ0aGVyIGRlbGF5cy4K PiArCQkgKiBDb21wZW5zYXRlIGJ5IGdpdmluZyB0aGUgc3luY2hyb25vdXMgY2xpZW50IGNyZWRp dCBmb3IKPiArCQkgKiBhIHdhaXRib29zdCBuZXh0IHRpbWUuCj4gKwkJICovCj4gKwkJc3Bpbl9s b2NrKCZyZXEtPmk5MTUtPnJwcy5jbGllbnRfbG9jayk7Cj4gKwkJbGlzdF9kZWxfaW5pdCgmcnBz LT5saW5rKTsKPiArCQlzcGluX3VubG9jaygmcmVxLT5pOTE1LT5ycHMuY2xpZW50X2xvY2spOwo+ ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBXYWl0cyBmb3Ig YSByZXF1ZXN0IHRvIGJlIHNpZ25hbGVkLCBhbmQgY2xlYW5zIHVwIHRoZQo+ICsgKiByZXF1ZXN0 IGFuZCBvYmplY3QgbGlzdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhhdCBldmVudC4KPiArICovCj4g K2ludCBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkK PiArewo+ICsJaW50IHJldDsKPiArCj4gKwlCVUdfT04ocmVxID09IE5VTEwpOwo+ICsJQlVHX09O KCFtdXRleF9pc19sb2NrZWQoJnJlcS0+aTkxNS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiArCj4g KwlyZXQgPSBfX2k5MTVfd2FpdF9yZXF1ZXN0KHJlcSwgcmVxLT5pOTE1LT5tbS5pbnRlcnJ1cHRp YmxlLAo+ICsJCQkJICBOVUxMLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsK PiArCj4gKwkvKiBJZiB0aGUgR1BVIGh1bmcsIHdlIHdhbnQgdG8ga2VlcCB0aGUgcmVxdWVzdHMg dG8gZmluZCB0aGUgZ3VpbHR5LiAqLwo+ICsJaWYgKHJlcS0+cmVzZXRfY291bnRlciA9PSBpOTE1 X3Jlc2V0X2NvdW50ZXIoJnJlcS0+aTkxNS0+Z3B1X2Vycm9yKSkKPiArCQlpOTE1X2dlbV9yZXF1 ZXN0X3JldGlyZV91cHRvKHJlcSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQg aTkxNV9nZW1fcmVxdWVzdF9mcmVlKHN0cnVjdCBrcmVmICpyZXFfcmVmKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9Cj4gKwkgICAgICAgCWNvbnRhaW5lcl9vZihy ZXFfcmVmLCB0eXBlb2YoKnJlcSksIHJlZik7Cj4gKwlrbWVtX2NhY2hlX2ZyZWUocmVxLT5pOTE1 LT5yZXF1ZXN0cywgcmVxKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9yZXF1ZXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1 ZXN0LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTY2ZTA3 MzNkMmQ4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3JlcXVlc3QuaAo+IEBAIC0wLDAgKzEsMjQ1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDC qSAyMDA4LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIEk5MTVfR0VNX1JFUVVFU1RfSAo+ICsjZGVmaW5l IEk5MTVfR0VNX1JFUVVFU1RfSAo+ICsKPiArLyoqCj4gKyAqIFJlcXVlc3QgcXVldWUgc3RydWN0 dXJlLgo+ICsgKgo+ICsgKiBUaGUgcmVxdWVzdCBxdWV1ZSBhbGxvd3MgdXMgdG8gbm90ZSBzZXF1 ZW5jZSBudW1iZXJzIHRoYXQgaGF2ZSBiZWVuIGVtaXR0ZWQKPiArICogYW5kIG1heSBiZSBhc3Nv Y2lhdGVkIHdpdGggYWN0aXZlIGJ1ZmZlcnMgdG8gYmUgcmV0aXJlZC4KPiArICoKPiArICogQnkg a2VlcGluZyB0aGlzIGxpc3QsIHdlIGNhbiBhdm9pZCBoYXZpbmcgdG8gZG8gcXVlc3Rpb25hYmxl IHNlcXVlbmNlCj4gKyAqIG51bWJlciBjb21wYXJpc29ucyBvbiBidWZmZXIgbGFzdF9yZWFkfHdy aXRlX3NlcW5vLiBJdCBhbHNvIGFsbG93cyBhbgo+ICsgKiBlbWlzc2lvbiB0aW1lIHRvIGJlIGFz c29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCBmb3IgdHJhY2tpbmcgaG93IGZhciBhaGVhZAo+ICsg KiBvZiB0aGUgR1BVIHRoZSBzdWJtaXNzaW9uIGlzLgo+ICsgKgo+ICsgKiBUaGUgcmVxdWVzdHMg YXJlIHJlZmVyZW5jZSBjb3VudGVkLCBzbyB1cG9uIGNyZWF0aW9uIHRoZXkgc2hvdWxkIGhhdmUg YW4KPiArICogaW5pdGlhbCByZWZlcmVuY2UgdGFrZW4gdXNpbmcga3JlZl9pbml0Cj4gKyAqLwo+ ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qgewo+ICsJc3RydWN0IGtyZWYgcmVmOwo+ICsK PiArCS8qKiBPbiBXaGljaCByaW5nIHRoaXMgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkICovCj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiArCj4gKwkvKioKPiArCSAqIENvbnRleHQg YW5kIHJpbmcgYnVmZmVyIHJlbGF0ZWQgdG8gdGhpcyByZXF1ZXN0Cj4gKwkgKiBDb250ZXh0cyBh cmUgcmVmY291bnRlZCwgc28gd2hlbiB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoIGEK PiArCSAqIGNvbnRleHQsIHdlIG11c3QgaW5jcmVtZW50IHRoZSBjb250ZXh0J3MgcmVmY291bnQs IHRvIGd1YXJhbnRlZSB0aGF0Cj4gKwkgKiBpdCBwZXJzaXN0cyB3aGlsZSBhbnkgcmVxdWVzdCBp cyBsaW5rZWQgdG8gaXQuIFJlcXVlc3RzIHRoZW1zZWx2ZXMKPiArCSAqIGFyZSBhbHNvIHJlZmNv dW50ZWQsIHNvIHRoZSByZXF1ZXN0IHdpbGwgb25seSBiZSBmcmVlZCB3aGVuIHRoZSBsYXN0Cj4g KwkgKiByZWZlcmVuY2UgdG8gaXQgaXMgZGlzbWlzc2VkLCBhbmQgdGhlIGNvZGUgaW4KPiArCSAq IGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSgpIHdpbGwgdGhlbiBkZWNyZW1lbnQgdGhlIHJlZmNvdW50 IG9uIHRoZQo+ICsJICogY29udGV4dC4KPiArCSAqLwo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eDsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmOwo+ICsJc3RydWN0IGludGVsX3NpZ25hbF9ub2RlIHNp Z25hbGluZzsKPiArCj4gKwl1bnNpZ25lZCByZXNldF9jb3VudGVyOwo+ICsKPiArCS8qKiBHRU0g c2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVxdWVzdCwKPiAr CSAqIHdoZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVxdWFsIHRvIHRoaXMgdGhlIEdQVSBpcyBw cm9jZXNzaW5nCj4gKwkgKiB0aGlzIHJlcXVlc3QuCj4gKwkgKi8KPiArCXUzMiBwcmV2aW91c19z ZXFubzsKPiArCj4gKwkvKiogR0VNIHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhp cyByZXF1ZXN0LAo+ICsJICogd2hlbiB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgb3IgZ3Jl YXRlciB0aGFuIHRoaXMgdGhlIEdQVQo+ICsJICogaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhp cyByZXF1ZXN0Lgo+ICsJICovCj4gKwl1MzIgc2Vxbm87Cj4gKwo+ICsJLyoqIFBvc2l0aW9uIGlu IHRoZSByaW5nYnVmZmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdCAqLwo+ICsJdTMyIGhl YWQ7Cj4gKwo+ICsJLyoqCj4gKwkgKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUg c3RhcnQgb2YgdGhlIHBvc3RmaXguCj4gKwkgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGNhbGN1bGF0 ZSB0aGUgbWF4aW11bSBhdmFpbGFibGUgcmluZ2J1ZmZlcgo+ICsJICogc3BhY2Ugd2l0aG91dCBv dmVyd3JpdGluZyB0aGUgcG9zdGZpeC4KPiArCSAqLwo+ICsJdTMyIHBvc3RmaXg7Cj4gKwo+ICsJ LyoqIFBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIG9mIHRoZSBlbmQgb2YgdGhlIHdob2xlIHJl cXVlc3QgKi8KPiArCXUzMiB0YWlsOwo+ICsKPiArCS8qKiBQcmVhbGxvY2F0ZSBzcGFjZSBpbiB0 aGUgcmluZ2J1ZmZlciBmb3IgdGhlIGVtaXR0aW5nIHRoZSByZXF1ZXN0ICovCj4gKwl1MzIgcmVz ZXJ2ZWRfc3BhY2U7Cj4gKwo+ICsKPiArCS8qKgo+ICsJICogQ29udGV4dCByZWxhdGVkIHRvIHRo ZSBwcmV2aW91cyByZXF1ZXN0Lgo+ICsJICogQXMgdGhlIGNvbnRleHRzIGFyZSBhY2Nlc3NlZCBi eSB0aGUgaGFyZHdhcmUgdW50aWwgdGhlIHN3aXRjaCBpcwo+ICsJICogY29tcGxldGVkIHRvIGEg bmV3IGNvbnRleHQsIHRoZSBoYXJkd2FyZSBtYXkgc3RpbGwgYmUgd3JpdGluZwo+ICsJICogdG8g dGhlIGNvbnRleHQgb2JqZWN0IGFmdGVyIHRoZSBicmVhZGNydW1iIGlzIHZpc2libGUuIFdlIG11 c3QKPiArCSAqIG5vdCB1bnBpbi91bmJpbmQvcHJ1bmUgdGhhdCBvYmplY3Qgd2hpbHN0IHN0aWxs IGFjdGl2ZSBhbmQgc28KPiArCSAqIHdlIGtlZXAgdGhlIHByZXZpb3VzIGNvbnRleHQgcGlubmVk IHVudGlsIHRoZSBmb2xsb3dpbmcgKHRoaXMpCj4gKwkgKiByZXF1ZXN0IGlzIHJldGlyZWQuCj4g KwkgKi8KPiArCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpwcmV2aW91c19jb250ZXh0Owo+ICsK PiArCj4gKwkvKiogQmF0Y2ggYnVmZmVyIHJlbGF0ZWQgdG8gdGhpcyByZXF1ZXN0IGlmIGFueSAo dXNlZCBmb3IKPiArCSAqIGVycm9yIHN0YXRlIGR1bXAgb25seSkgKi8KPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7Cj4gKwo+ICsJLyoqIFRpbWUgYXQgd2hpY2ggdGhp cyByZXF1ZXN0IHdhcyBlbWl0dGVkLCBpbiBqaWZmaWVzLiAqLwo+ICsJdW5zaWduZWQgbG9uZyBl bWl0dGVkX2ppZmZpZXM7Cj4gKwo+ICsJLyoqIGdsb2JhbCBsaXN0IGVudHJ5IGZvciB0aGlzIHJl cXVlc3QgKi8KPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gKwkvKiogZmlsZV9wcml2IGxpc3QgZW50cnkg Zm9yIHRoaXMgcmVxdWVzdCAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsKPiAr Cj4gKwkvKiogcHJvY2VzcyBpZGVudGlmaWVyIHN1Ym1pdHRpbmcgdGhpcyByZXF1ZXN0ICovCj4g KwlzdHJ1Y3QgcGlkICpwaWQ7Cj4gKwo+ICsJLyoqCj4gKwkgKiBUaGUgRUxTUCBvbmx5IGFjY2Vw dHMgdHdvIGVsZW1lbnRzIGF0IGEgdGltZSwgc28gd2UgcXVldWUKPiArCSAqIGNvbnRleHQvdGFp bCBwYWlycyBvbiBhIGdpdmVuIHF1ZXVlIChyaW5nLT5leGVjbGlzdF9xdWV1ZSkgdW50aWwgdGhl Cj4gKwkgKiBoYXJkd2FyZSBpcyBhdmFpbGFibGUuIFRoZSBxdWV1ZSBzZXJ2ZXMgYSBkb3VibGUg cHVycG9zZTogd2UgYWxzbyB1c2UKPiArCSAqIGl0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHVwIHRv IDIgY29udGV4dHMgY3VycmVudGx5IGluIHRoZSBoYXJkd2FyZQo+ICsJICogKHVzdWFsbHkgb25l IGluIGV4ZWN1dGlvbiBhbmQgdGhlIG90aGVyIHF1ZXVlZCB1cCBieSB0aGUgR1BVKTogV2UKPiAr CSAqIG9ubHkgcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIHdoZW4g dGhlIGhhcmR3YXJlCj4gKwkgKiBpbmZvcm1zIHVzIHRoYXQgYW4gZWxlbWVudCBoYXMgYmVlbiBj b21wbGV0ZWQuCj4gKwkgKgo+ICsJICogQWxsIGFjY2Vzc2VzIHRvIHRoZSBxdWV1ZSBhcmUgbWVk aWF0ZWQgYnkgYSBzcGlubG9jawo+ICsJICogKHJpbmctPmV4ZWNsaXN0X2xvY2spLgo+ICsJICov Cj4gKwo+ICsJLyoqIEV4ZWNsaXN0IGxpbmsgaW4gdGhlIHN1Ym1pc3Npb24gcXVldWUuKi8KPiAr CXN0cnVjdCBsaXN0X2hlYWQgZXhlY2xpc3RfbGluazsKPiArCj4gKwkvKiogRXhlY2xpc3RzIG5v LiBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VudCB0byB0aGUgRUxTUCAqLwo+ICsJ aW50IGVsc3Bfc3VibWl0dGVkOwo+ICsKPiArCS8qKiBFeGVjbGlzdHMgY29udGV4dCBoYXJkd2Fy ZSBpZC4gKi8KPiArCXVuc2lnbmVkIGN0eF9od19pZDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxp bmUgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKgo+ICtfX3JlcXVlc3RfdG9faTkxNShjb25zdCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gK3sKPiArCXJldHVybiByZXF1 ZXN0LT5pOTE1Owo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKiBfX211 c3RfY2hlY2sKPiAraTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gKwkJICAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpOwo+ICt2 b2lkIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZShzdHJ1Y3Qga3JlZiAqcmVxX3JlZik7Cj4gK2ludCBp OTE1X2dlbV9yZXF1ZXN0X2FkZF90b19jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXEsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICt2b2lkIGk5MTVfZ2Vt X3JlcXVlc3RfcmV0aXJlX3VwdG8oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ ICsKPiArc3RhdGljIGlubGluZSB1aW50MzJfdAo+ICtpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFu byhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJcmV0dXJuIHJlcSA/ IHJlcS0+c2Vxbm8gOiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKgo+ICtpOTE1X2dlbV9yZXF1ZXN0X2dldF9lbmdpbmUoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCXJldHVybiByZXEgPyByZXEtPmVuZ2luZSA6IE5V TEw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICoKPiAraTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEpCj4gK3sKPiArCWlmIChyZXEpCj4gKwkJa3JlZl9nZXQoJnJlcS0+cmVmKTsKPiAr CXJldHVybiByZXE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtpOTE1X2dlbV9y ZXF1ZXN0X3VucmVmZXJlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICt7 Cj4gKwlrcmVmX3B1dCgmcmVxLT5yZWYsIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbihzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKipwZHN0LAo+ICsJCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqc3JjKQo+ICt7Cj4gKwlpZiAoc3JjKQo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfcmVm ZXJlbmNlKHNyYyk7Cj4gKwo+ICsJaWYgKCpwZHN0KQo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfdW5y ZWZlcmVuY2UoKnBkc3QpOwo+ICsKPiArCSpwZHN0ID0gc3JjOwo+ICt9Cj4gKwo+ICt2b2lkIF9f aTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiArCQkJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwKPiArCQkJYm9vbCBmbHVzaF9j YWNoZXMpOwo+ICsjZGVmaW5lIGk5MTVfYWRkX3JlcXVlc3QocmVxKSBcCj4gKwlfX2k5MTVfYWRk X3JlcXVlc3QocmVxLCBOVUxMLCB0cnVlKQo+ICsjZGVmaW5lIGk5MTVfYWRkX3JlcXVlc3Rfbm9f Zmx1c2gocmVxKSBcCj4gKwlfX2k5MTVfYWRkX3JlcXVlc3QocmVxLCBOVUxMLCBmYWxzZSkKPiAr Cj4gK3N0cnVjdCBpbnRlbF9ycHNfY2xpZW50Owo+ICsKPiAraW50IF9faTkxNV93YWl0X3JlcXVl c3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gKwkJCWJvb2wgaW50ZXJydXB0 aWJsZSwKPiArCQkJczY0ICp0aW1lb3V0LAo+ICsJCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAq cnBzKTsKPiAraW50IF9fbXVzdF9jaGVjayBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSk7Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9lbmdp bmVfZ2V0X3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwo+ICsvKioK PiArICogUmV0dXJucyB0cnVlIGlmIHNlcTEgaXMgbGF0ZXIgdGhhbiBzZXEyLgo+ICsgKi8KPiAr c3RhdGljIGlubGluZSBib29sCj4gK2k5MTVfc2Vxbm9fcGFzc2VkKHVpbnQzMl90IHNlcTEsIHVp bnQzMl90IHNlcTIpCj4gK3sKPiArCXJldHVybiAoaW50MzJfdCkoc2VxMSAtIHNlcTIpID49IDA7 Cj4gK30KPiArc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJcmV0dXJuIGk5MTVf c2Vxbm9fcGFzc2VkKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8ocmVxLT5lbmdpbmUpLAo+ICsJCQkJ IHJlcS0+cHJldmlvdXNfc2Vxbm8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaTkx NV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXEpCj4gK3sKPiArCXJldHVybiBpOTE1X3NlcW5vX3Bhc3NlZChpbnRlbF9lbmdpbmVfZ2V0 X3NlcW5vKHJlcS0+ZW5naW5lKSwKPiArCQkJCSByZXEtPnNlcW5vKTsKPiArfQo+ICsKPiArYm9v bCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxdWVzdCwKPiArCQkJIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3VzKTsKPiAr c3RhdGljIGlubGluZSBib29sIGk5MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxdWVzdCwKPiArCQkJCSAgICAgaW50IHN0YXRlLCB1bnNpZ25lZCBs b25nIHRpbWVvdXRfdXMpCj4gK3sKPiArCXJldHVybiAoaTkxNV9nZW1fcmVxdWVzdF9zdGFydGVk KHJlcXVlc3QpICYmCj4gKwkJX19pOTE1X3NwaW5fcmVxdWVzdChyZXF1ZXN0LCBzdGF0ZSwgdGlt ZW91dF91cykpOwo+ICt9Cj4gKwo+ICsjZW5kaWYgLyogSTkxNV9HRU1fUkVRVUVTVF9IICovCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gaW5kZXggYTA2NmRjZmNkZDM4Li4z YmE1MzAyY2UxOWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVf ZXJyb3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBA QCAtMTQwMCw2ICsxNDAwLDkgQEAgdm9pZCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9z dGF0ZSAqZXJyb3I7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPgo+ICsJaWYgKFJFQURfT05D RShkZXZfcHJpdi0+Z3B1X2Vycm9yLmZpcnN0X2Vycm9yKSkKPiArCQlyZXR1cm47Cj4gKwo+ICAg CS8qIEFjY291bnQgZm9yIHBpcGUgc3BlY2lmaWMgZGF0YSBsaWtlIFBJUEUqU1RBVCAqLwo+ICAg CWVycm9yID0ga3phbGxvYyhzaXplb2YoKmVycm9yKSwgR0ZQX0FUT01JQyk7Cj4gICAJaWYgKCFl cnJvcikgewo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK