From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 15/32] drm/i915: Slaughter the thundering i915_wait_request herd Date: Mon, 14 Dec 2015 12:21:32 +0000 Message-ID: <566EB44C.2080407@linux.intel.com> References: <1449833608-22125-1-git-send-email-chris@chris-wilson.co.uk> <1449833608-22125-16-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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 101576E645 for ; Mon, 14 Dec 2015 04:21:35 -0800 (PST) In-Reply-To: <1449833608-22125-16-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 CkhpLAoKT24gMTEvMTIvMTUgMTE6MzMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbmUgcGFydGlj dWxhcmx5IHN0cmVzc2Z1bCBzY2VuYXJpbyBjb25zaXN0cyBvZiBtYW55IGluZGVwZW5kZW50IHRh c2tzCj4gYWxsIGNvbXBldGluZyBmb3IgR1BVIHRpbWUgYW5kIHdhaXRpbmcgdXBvbiB0aGUgcmVz dWx0cyAoZS5nLiByZWFsdGltZQo+IHRyYW5zY29kaW5nIG9mIG1hbnksIG1hbnkgc3RyZWFtcyku IE9uZSBib3R0bGVuZWNrIGluIHBhcnRpY3VsYXIgaXMgdGhhdAo+IGVhY2ggY2xpZW50IHdhaXRz IG9uIGl0cyBvd24gcmVzdWx0cywgYnV0IGV2ZXJ5IGNsaWVudCBpcyB3b2tlbiB1cCBhZnRlcgo+ IGV2ZXJ5IGJhdGNoYnVmZmVyIC0gaGVuY2UgdGhlIHRodW5kZXIgb2YgaG9vdmVzIGFzIHRoZW4g ZXZlcnkgY2xpZW50IG11c3QKPiBkbyBpdHMgaGVhdnl3ZWlnaHQgZGFuY2UgdG8gcmVhZCBhIGNv aGVyZW50IHNlcW5vIHRvIHNlZSBpZiBpdCBpcyB0aGUKPiBsdWNreSBvbmUuCj4KPiBJZGVhbGx5 LCB3ZSBvbmx5IHdhbnQgb25lIGNsaWVudCB0byB3YWtlIHVwIGFmdGVyIHRoZSBpbnRlcnJ1cHQg YW5kCj4gY2hlY2sgaXRzIHJlcXVlc3QgZm9yIGNvbXBsZXRpb24uIFNpbmNlIHRoZSByZXF1ZXN0 cyBtdXN0IHJldGlyZSBpbgo+IG9yZGVyLCB3ZSBjYW4gc2VsZWN0IHRoZSBmaXJzdCBjbGllbnQg b24gdGhlIG9sZGVzdCByZXF1ZXN0IHRvIGJlIHdva2VuLgo+IE9uY2UgdGhhdCBjbGllbnQgaGFz IGNvbXBsZXRlZCBoaXMgd2FpdCwgd2UgY2FuIHRoZW4gd2FrZSB1cCB0aGUKPiBuZXh0IGNsaWVu dCBhbmQgc28gb24uIEhvd2V2ZXIsIGFsbCBjbGllbnRzIHRoZW4gaW5jdXIgbGF0ZW5jeSBhcyBl dmVyeQo+IHByb2Nlc3MgaW4gdGhlIGNoYWluIG1heSBiZSBkZWxheWVkIGZvciBzY2hlZHVsaW5n IC0gdGhpcyBtYXkgYWxzbyB0aGVuCj4gY2F1c2Ugc29tZSBwcmlvcml0eSBpbnZlcnNpb24uIFRv IHJlZHVjZSB0aGUgbGF0ZW5jeSwgd2hlbiBhIGNsaWVudAo+IGlzIGFkZGVkIG9yIHJlbW92ZWQg ZnJvbSB0aGUgbGlzdCwgd2Ugc2NhbiB0aGUgdHJlZSBmb3IgY29tcGxldGVkCj4gc2Vxbm8gYW5k IHdha2UgdXAgYWxsIHRoZSBjb21wbGV0ZWQgd2FpdGVycyBpbiBwYXJhbGxlbC4KPgo+IHYyOiBD b252ZXJ0IGZyb20gYSBrd29ya2VyIHBlciBlbmdpbmUgaW50byBhIGRlZGljYXRlZCBrdGhyZWFk IGZvciB0aGUKPiBib3R0b20taGFsZi4KPiB2MzogUmVuYW1lIHJlcXVlc3QgbWVtYmVycyBhbmQg dHdlYWsgY29tbWVudHMuCj4gdjQ6IFVzZSBhIHBlci1lbmdpbmUgc3BpbmxvY2sgaW4gdGhlIGJy ZWFkY3J1bWJzIGJvdHRvbS1oYWxmLgo+IHY1OiBGaXggcmFjZSBpbiBsb2NrbGVzc2x5IGNoZWNr aW5nIHdhaXRlciBzdGF0dXMgYW5kIGtpY2tpbmcgdGhlIHRhc2sgb24KPiBhZGRpbmcgYSBuZXcg d2FpdGVyLgo+IHY2OiBGaXggZGVjaWRpbmcgd2hlbiB0byBmb3JjZSB0aGUgdGltZXIgdG8gaGlk ZSBtaXNzaW5nIGludGVycnVwdHMuCj4gdjc6IE1vdmUgdGhlIGJvdHRvbS1oYWxmIGZyb20gdGhl IGt0aHJlYWQgdG8gdGhlIGZpcnN0IGNsaWVudCBwcm9jZXNzLgo+IHY4OiBSZXdvcmQgYSBmZXcg Y29tbWVudHMKPiB2OTogQnJlYWsgdGhlIGJ1c3kgbG9vcCB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMg dW5tYXNrZWQgb3IgaGFzIGZpcmVkLgo+IHYxMDogQ29tbWVudHMsIHVubmVjZXNzYXJ5IGNodXJu LCBiZXR0ZXIgZGVidWdnaW5nIGZyb20gVHZydGtvCj4gdjExOiBXYWtlIGFsbCBjb21wbGV0ZWQg d2FpdGVycyBvbiByZW1vdmluZyB0aGUgY3VycmVudCBib3R0b20taGFsZiB0bwo+IHJlZHVjZSB0 aGUgbGF0ZW5jeSBvZiB3YWtpbmcgdXAgYSBoZXJkIG9mIGNsaWVudHMgYWxsIHdhaXRpbmcgb24g dGhlCj4gc2FtZSByZXF1ZXN0Lgo+IHYxMjogUmVhcnJhbmdlIG1pc3NlZC1pbnRlcnJ1cHQgZmF1 bHQgaW5qZWN0aW9uIHNvIHRoYXQgaXQgd29ya3Mgd2l0aAo+IGlndC9kcnZfbWlzc2VkX2lycV9o YW5nCj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KPiBDYzogIlJvZ296aGtpbiwgRG1pdHJ5IFYiIDxkbWl0cnkudi5yb2dvemhraW5AaW50 ZWwuY29tPgo+IENjOiAiR29uZywgWmhpcGVuZyIgPHpoaXBlbmcuZ29uZ0BpbnRlbC5jb20+Cj4g Q2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6 IERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgfCAgMTkgKystCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgIHwgICAzICstCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbS5jICAgICAgICAgIHwgMTUyICsrKysrKysrLS0tLS0tLS0tCj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jICAgIHwgICAyICstCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgIHwgIDE0ICstCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jIHwgMjc0ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAg fCAgIDUgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAgfCAg IDUgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCAgfCAgNjMg KysrKysrLQo+ICAgMTAgZmlsZXMgY2hhbmdlZCwgNDM2IGluc2VydGlvbnMoKyksIDEwMiBkZWxl dGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9icmVhZGNydW1icy5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDA4NTFkZTA3YmQx My4uZDNiOWQzNjE4NzE5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMzUsNiArMzUs NyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ICAgCSAgaTkxNV9nZW1fdXNlcnB0 ci5vIFwKPiAgIAkgIGk5MTVfZ3B1X2Vycm9yLm8gXAo+ICAgCSAgaTkxNV90cmFjZV9wb2ludHMu byBcCj4gKwkgIGludGVsX2JyZWFkY3J1bWJzLm8gXAo+ICAgCSAgaW50ZWxfbHJjLm8gXAo+ICAg CSAgaW50ZWxfbW9jcy5vIFwKPiAgIAkgIGludGVsX3JpbmdidWZmZXIubyBcCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCBkNWY2NmJiZGIxNjAuLjQ4ZTU3NDI0N2EzMCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gQEAgLTczMCwxMCArNzMwLDIy IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqZGF0YSkKPiAgIHN0YXRpYyB2b2lkIGk5MTVfcmluZ19zZXFub19pbmZvKHN0cnVjdCBz ZXFfZmlsZSAqbSwKPiAgIAkJCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgIHsK PiArCXN0cnVjdCByYl9ub2RlICpyYjsKPiArCj4gICAJaWYgKHJpbmctPmdldF9zZXFubykgewo+ ICAgCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlICglcyk6ICV4XG4iLAo+ICAgCQkJ ICAgcmluZy0+bmFtZSwgcmluZy0+Z2V0X3NlcW5vKHJpbmcsIGZhbHNlKSk7Cj4gICAJfQo+ICsK PiArCXNwaW5fbG9jaygmcmluZy0+YnJlYWRjcnVtYnMubG9jayk7Cj4gKwlmb3IgKHJiID0gcmJf Zmlyc3QoJnJpbmctPmJyZWFkY3J1bWJzLnJlcXVlc3RzKTsKPiArCSAgICAgcmIgIT0gTlVMTDsK PiArCSAgICAgcmIgPSByYl9uZXh0KHJiKSkgewo+ICsJCXN0cnVjdCBpbnRlbF9icmVhZGNydW1i ICpiID0gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKmIpLCBub2RlKTsKPiArCQlzZXFfcHJpbnRm KG0sICJXYWl0aW5nICglcyk6ICVzIFslZF0gb24gJXhcbiIsCj4gKwkJCSAgIHJpbmctPm5hbWUs IGItPnRhc2stPmNvbW0sIGItPnRhc2stPnBpZCwgYi0+c2Vxbm8pOwo+ICsJfQo+ICsJc3Bpbl91 bmxvY2soJnJpbmctPmJyZWFkY3J1bWJzLmxvY2spOwo+ICAgfQo+Cj4gICBzdGF0aWMgaW50IGk5 MTVfZ2VtX3NlcW5vX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+IEBAIC0x MzU2LDggKzEzNjgsOSBAQCBzdGF0aWMgaW50IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0IHNl cV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4KPiAgIAlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9w cml2LCBpKSB7Cj4gICAJCXNlcV9wcmludGYobSwgIiVzOlxuIiwgcmluZy0+bmFtZSk7Cj4gLQkJ c2VxX3ByaW50ZihtLCAiXHRzZXFubyA9ICV4IFtjdXJyZW50ICV4XVxuIiwKPiAtCQkJICAgcmlu Zy0+aGFuZ2NoZWNrLnNlcW5vLCBzZXFub1tpXSk7Cj4gKwkJc2VxX3ByaW50ZihtLCAiXHRzZXFu byA9ICV4IFtjdXJyZW50ICV4XSwgd2FpdGVycz8gJWRcbiIsCj4gKwkJCSAgIHJpbmctPmhhbmdj aGVjay5zZXFubywgc2Vxbm9baV0sCj4gKwkJCSAgIGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKHJp bmcpKTsKPiAgIAkJc2VxX3ByaW50ZihtLCAiXHRBQ1RIRCA9IDB4JTA4bGx4IFtjdXJyZW50IDB4 JTA4bGx4XVxuIiwKPiAgIAkJCSAgIChsb25nIGxvbmcpcmluZy0+aGFuZ2NoZWNrLmFjdGhkLAo+ ICAgCQkJICAgKGxvbmcgbG9uZylhY3RoZFtpXSk7Cj4gQEAgLTIzMjIsNyArMjMzNSw3IEBAIHN0 YXRpYyBpbnQgY291bnRfaXJxX3dhaXRlcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cj4gICAJaW50IGk7Cj4KPiAgIAlmb3JfZWFjaF9yaW5nKHJpbmcsIGk5MTUsIGkpCj4gLQkJY291 bnQgKz0gcmluZy0+aXJxX3JlZmNvdW50Owo+ICsJCWNvdW50ICs9IGludGVsX2VuZ2luZV9oYXNf d2FpdGVyKHJpbmcpOwo+Cj4gICAJcmV0dXJuIGNvdW50Owo+ICAgfQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAo+IGluZGV4IGY4MmU4ZmIxOWM5Yi4uODMwZDc2MGFhNTYyIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4gQEAgLTEzODIsNyArMTM4Miw3IEBAIHN0cnVjdCBpOTE1X2dwdV9l cnJvciB7Cj4gICAjZGVmaW5lIEk5MTVfU1RPUF9SSU5HX0FMTE9XX1dBUk4gICAgICAoMSA8PCAz MCkKPgo+ICAgCS8qIEZvciBtaXNzZWQgaXJxL3NlcW5vIHNpbXVsYXRpb24uICovCj4gLQl1bnNp Z25lZCBpbnQgdGVzdF9pcnFfcmluZ3M7Cj4gKwl1bnNpZ25lZCBsb25nIHRlc3RfaXJxX3Jpbmdz Owo+ICAgfTsKPgo+ICAgZW51bSBtb2Rlc2V0X3Jlc3RvcmUgewo+IEBAIC0yODI1LDcgKzI4MjUs NiBAQCBpYnhfZGlzYWJsZV9kaXNwbGF5X2ludGVycnVwdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIHVpbnQzMl90IGJpdHMpCj4gICAJaWJ4X2Rpc3BsYXlfaW50ZXJydXB0X3Vw ZGF0ZShkZXZfcHJpdiwgYml0cywgMCk7Cj4gICB9Cj4KPiAtCj4gICAvKiBpOTE1X2dlbS5jICov Cj4gICBpbnQgaTkxNV9nZW1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCj4gICAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKPiBpbmRleCAwMzQwYTVmZTljZGEuLmZhMGNmNmM5ZjRkMCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0xMTIzLDE3ICsxMTIzLDYgQEAgaTkxNV9nZW1f Y2hlY2tfd2VkZ2UodW5zaWduZWQgcmVzZXRfY291bnRlciwgYm9vbCBpbnRlcnJ1cHRpYmxlKQo+ ICAgCXJldHVybiAwOwo+ICAgfQo+Cj4gLXN0YXRpYyB2b2lkIGZha2VfaXJxKHVuc2lnbmVkIGxv bmcgZGF0YSkKPiAtewo+IC0Jd2FrZV91cF9wcm9jZXNzKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilk YXRhKTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgbWlzc2VkX2lycShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcpCj4gLXsKPiAtCXJldHVybiB0ZXN0X2JpdChyaW5nLT5pZCwgJmRldl9wcml2LT5ncHVfZXJy b3IubWlzc2VkX2lycV9yaW5ncyk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs b2NhbF9jbG9ja191cyh1bnNpZ25lZCAqY3B1KQo+ICAgewo+ICAgCXVuc2lnbmVkIGxvbmcgdDsK PiBAQCAtMTE2Niw3ICsxMTU1LDkgQEAgc3RhdGljIGJvb2wgYnVzeXdhaXRfc3RvcCh1bnNpZ25l ZCBsb25nIHRpbWVvdXQsIHVuc2lnbmVkIGNwdSkKPiAgIAlyZXR1cm4gdGhpc19jcHUgIT0gY3B1 Owo+ICAgfQo+Cj4gLXN0YXRpYyBpbnQgX19pOTE1X3NwaW5fcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IHN0YXRlKQo+ICtzdGF0aWMgYm9vbCBfX2k5MTVfc3Bp bl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICsJCQkJc3RydWN0 IGludGVsX2JyZWFkY3J1bWIgKndhaXQsCj4gKwkJCQlpbnQgc3RhdGUpCj4gICB7Cj4gICAJdW5z aWduZWQgbG9uZyB0aW1lb3V0Owo+ICAgCXVuc2lnbmVkIGNwdTsKPiBAQCAtMTE4MSwzMSArMTE3 MiwzMCBAQCBzdGF0aWMgaW50IF9faTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXEsIGludCBzdGF0ZSkKPiAgIAkgKiB0YWtlcyB0byBzbGVlcCBvbiBhIHJl cXVlc3QsIG9uIHRoZSBvcmRlciBvZiBhIG1pY3Jvc2Vjb25kLgo+ICAgCSAqLwo+Cj4gLQlpZiAo cmVxLT5yaW5nLT5pcnFfcmVmY291bnQpCj4gLQkJcmV0dXJuIC1FQlVTWTsKPiAtCj4gICAJLyog T25seSBzcGluIGlmIHdlIGtub3cgdGhlIEdQVSBpcyBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdCAq Lwo+ICAgCWlmICghaTkxNV9nZW1fcmVxdWVzdF9zdGFydGVkKHJlcSwgdHJ1ZSkpCj4gLQkJcmV0 dXJuIC1FQUdBSU47Cj4gKwkJcmV0dXJuIGZhbHNlOwo+Cj4gICAJdGltZW91dCA9IGxvY2FsX2Ns b2NrX3VzKCZjcHUpICsgNTsKPiAtCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKPiArCWRvIHsK PiAgIAkJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgdHJ1ZSkpCj4gLQkJCXJl dHVybiAwOwo+ICsJCQlyZXR1cm4gdHJ1ZTsKPgo+IC0JCWlmIChzaWduYWxfcGVuZGluZ19zdGF0 ZShzdGF0ZSwgY3VycmVudCkpCj4gKwkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCB3 YWl0LT50YXNrKSkKPiAgIAkJCWJyZWFrOwo+Cj4gICAJCWlmIChidXN5d2FpdF9zdG9wKHRpbWVv dXQsIGNwdSkpCj4gICAJCQlicmVhazsKPgo+ICAgCQljcHVfcmVsYXhfbG93bGF0ZW5jeSgpOwo+ IC0JfQo+Cj4gLQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxLCBmYWxzZSkpCj4g LQkJcmV0dXJuIDA7Cj4gKwkJLyogQnJlYWsgdGhlIGxvb3AgaWYgd2UgaGF2ZSBjb25zdW1lZCB0 aGUgdGltZXNsaWNlIChvciBiZWVuCj4gKwkJICogcHJlZW1wdGVkKSBvciB3aGVuIGVpdGhlciB0 aGUgYmFja2dyb3VuZCB0aHJlYWQgaGFzCj4gKwkJICogZW5hYmxlZCB0aGUgaW50ZXJydXB0LCBv ciB0aGUgSVJRIGhhcyBmaXJlZC4KPiArCQkgKi8KPiArCX0gd2hpbGUgKCFuZWVkX3Jlc2NoZWQo KSAmJiB3YWl0LT50YXNrLT5zdGF0ZSA9PSBzdGF0ZSk7Cj4KPiAtCXJldHVybiAtRUFHQUlOOwo+ ICsJcmV0dXJuIGZhbHNlOwo+ICAgfQo+Cj4gICAvKioKPiBAQCAtMTIyOSwxOCArMTIxOSwxMyBA QCBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cSwKPiAgIAkJCXM2NCAqdGltZW91dCwKPiAgIAkJCXN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpy cHMpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gaTkxNV9nZW1fcmVx dWVzdF9nZXRfcmluZyhyZXEpOwo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRl djsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7Cj4gLQljb25zdCBib29sIGlycV90ZXN0X2luX3Byb2dyZXNzID0KPiAtCQlBQ0NFU1NfT05D RShkZXZfcHJpdi0+Z3B1X2Vycm9yLnRlc3RfaXJxX3JpbmdzKSAmIGludGVsX3JpbmdfZmxhZyhy aW5nKTsKPiAgIAlpbnQgc3RhdGUgPSBpbnRlcnJ1cHRpYmxlID8gVEFTS19JTlRFUlJVUFRJQkxF IDogVEFTS19VTklOVEVSUlVQVElCTEU7Cj4gLQlERUZJTkVfV0FJVCh3YWl0KTsKPiAtCXVuc2ln bmVkIGxvbmcgdGltZW91dF9leHBpcmU7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYiB3YWl0 Owo+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0X3JlbWFpbjsKPiAgIAlzNjQgYmVmb3JlLCBub3c7 Cj4gLQlpbnQgcmV0Owo+ICsJaW50IHJldCA9IDA7Cj4KPiAtCVdBUk4oIWludGVsX2lycXNfZW5h YmxlZChkZXZfcHJpdiksICJJUlFzIGRpc2FibGVkIik7Cj4gKwltaWdodF9zbGVlcCgpOwoKV2h5 IHRoaXMgc3VkZGVubHk/Cgo+Cj4gICAJaWYgKGxpc3RfZW1wdHkoJnJlcS0+bGlzdCkpCj4gICAJ CXJldHVybiAwOwo+IEBAIC0xMjQ4LDcgKzEyMzMsNyBAQCBpbnQgX19pOTE1X3dhaXRfcmVxdWVz dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAgIAlpZiAoaTkxNV9nZW1fcmVx dWVzdF9jb21wbGV0ZWQocmVxLCB0cnVlKSkKPiAgIAkJcmV0dXJuIDA7Cj4KPiAtCXRpbWVvdXRf ZXhwaXJlID0gMDsKPiArCXRpbWVvdXRfcmVtYWluID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Cj4g ICAJaWYgKHRpbWVvdXQpIHsKPiAgIAkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKPiAgIAkJ CXJldHVybiAtRUlOVkFMOwo+IEBAIC0xMjU2LDgzICsxMjQxLDgwIEBAIGludCBfX2k5MTVfd2Fp dF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICAgCQlpZiAoKnRp bWVvdXQgPT0gMCkKPiAgIAkJCXJldHVybiAtRVRJTUU7Cj4KPiAtCQl0aW1lb3V0X2V4cGlyZSA9 IGppZmZpZXMgKyBuc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoKnRpbWVvdXQpOwo+ICsJCXRpbWVv dXRfcmVtYWluID0gbnNlY3NfdG9famlmZmllc190aW1lb3V0KCp0aW1lb3V0KTsKPiAgIAl9Cj4K PiAtCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDYpCj4gLQkJZ2VuNl9ycHNfYm9v c3QoZGV2X3ByaXYsIHJwcywgcmVxLT5lbWl0dGVkX2ppZmZpZXMpOwo+IC0KPiAgIAkvKiBSZWNv cmQgY3VycmVudCB0aW1lIGluIGNhc2UgaW50ZXJydXB0ZWQgYnkgc2lnbmFsLCBvciB3ZWRnZWQg Ki8KPiAgIAl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4ocmVxKTsKPiAgIAliZWZv cmUgPSBrdGltZV9nZXRfcmF3X25zKCk7Cj4KPiAtCS8qIE9wdGltaXN0aWMgc3BpbiBmb3IgdGhl IG5leHQgamlmZmllIGJlZm9yZSB0b3VjaGluZyBJUlFzICovCj4gLQlyZXQgPSBfX2k5MTVfc3Bp bl9yZXF1ZXN0KHJlcSwgc3RhdGUpOwo+IC0JaWYgKHJldCA9PSAwKQo+IC0JCWdvdG8gb3V0Owo+ ICsJaWYgKElOVEVMX0lORk8ocmVxLT5pOTE1KS0+Z2VuID49IDYpCj4gKwkJZ2VuNl9ycHNfYm9v c3QocmVxLT5pOTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKPgo+IC0JaWYgKCFpcnFf dGVzdF9pbl9wcm9ncmVzcyAmJiBXQVJOX09OKCFyaW5nLT5pcnFfZ2V0KHJpbmcpKSkgewo+IC0J CXJldCA9IC1FTk9ERVY7Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4gKwlpbnRlbF9icmVhZGNydW1i X2luaXQoJndhaXQsIHJlcS0+c2Vxbm8pOwo+ICsJc2V0X3Rhc2tfc3RhdGUod2FpdC50YXNrLCBz dGF0ZSk7Cj4KPiAtCWZvciAoOzspIHsKPiAtCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKPiAr CS8qIE9wdGltaXN0aWMgc3BpbiBmb3IgdGhlIG5leHQgfmppZmZpZSBiZWZvcmUgdG91Y2hpbmcg SVJRcyAqLwo+ICsJaWYgKGludGVsX2VuZ2luZV9hZGRfYnJlYWRjcnVtYihyZXEtPnJpbmcsICZ3 YWl0KSkgewo+ICsJCWlmIChfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgJndhaXQsIHN0YXRlKSkK PiArCQkJZ290byBvdXQ7Cj4KPiAtCQlwcmVwYXJlX3RvX3dhaXQoJnJpbmctPmlycV9xdWV1ZSwg JndhaXQsIHN0YXRlKTsKPiArCQlpbnRlbF9lbmdpbmVfZW5hYmxlX2JyZWFkY3J1bWJfaXJxKHJl cS0+cmluZyk7Cj4KPiAtCQkvKiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IGdwdSByZXNl dCBoYXBwZW5lZCBpbiBiZXR3ZWVuCj4gLQkJICogdGhlIHJlcXVlc3QgYmVpbmcgc3VibWl0dGVk IGFuZCBub3cuIElmIGEgcmVzZXQgaGFzIG9jY3VycmVkLAo+IC0JCSAqIHRoZSByZXF1ZXN0IGlz IGVmZmVjdGl2ZWx5IGNvbXBsZXRlICh3ZSBlaXRoZXIgYXJlIGluIHRoZQo+IC0JCSAqIHByb2Nl c3Mgb2Ygb3IgaGF2ZSBkaXNjYXJkZWQgdGhlIHJlbmRlcmluZyBhbmQgY29tcGxldGVseQo+IC0J CSAqIHJlc2V0IHRoZSBHUFUuIFRoZSByZXN1bHRzIG9mIHRoZSByZXF1ZXN0IGFyZSBsb3N0IGFu ZCB3ZQo+IC0JCSAqIGFyZSBmcmVlIHRvIGNvbnRpbnVlIG9uIHdpdGggdGhlIG9yaWdpbmFsIG9w ZXJhdGlvbi4KPiArCQkvKiBJbiBvcmRlciB0byBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgbWlzc2Vk IHRoZSBpbnRlcnJ1cHQKPiArCQkgKiBhcyB3ZSBlbmFibGVkIGl0LCB3ZSBuZWVkIHRvIGtpY2sg b3Vyc2VsdmVzIHRvIGRvIGEKPiArCQkgKiBjb2hlcmVudCBjaGVjayBvbiB0aGUgc2Vxbm8gYmVm b3JlIHdlIHNsZWVwLgo+ICAgCQkgKi8KPiAtCQlpZiAocmVxLT5yZXNldF9jb3VudGVyICE9IGk5 MTVfcmVzZXRfY291bnRlcigmZGV2X3ByaXYtPmdwdV9lcnJvcikpIHsKPiAtCQkJcmV0ID0gMDsK PiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZWQocmVxLCBmYWxzZSkpIHsKPiAtCQkJcmV0ID0gMDsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+ICsJ CWdvdG8gd2FrZXVwOwo+ICsJfQo+Cj4gLQkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRl LCBjdXJyZW50KSkgewo+ICsJZm9yICg7Oykgewo+ICsJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0 ZShzdGF0ZSwgd2FpdC50YXNrKSkgewo+ICAgCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwo+ICAgCQkJ YnJlYWs7Cj4gICAJCX0KPgo+IC0JCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmll cywgdGltZW91dF9leHBpcmUpKSB7Cj4gKwkJLyogRW5zdXJlIHRoYXQgZXZlbiBpZiB0aGUgR1BV IGhhbmdzLCB3ZSBnZXQgd29rZW4gdXAuICovCj4gKwkJaTkxNV9xdWV1ZV9oYW5nY2hlY2socmVx LT5pOTE1KTsKPiArCj4gKwkJdGltZW91dF9yZW1haW4gPSBpb19zY2hlZHVsZV90aW1lb3V0KHRp bWVvdXRfcmVtYWluKTsKPiArCQlpZiAodGltZW91dF9yZW1haW4gPT0gMCkgewo+ICAgCQkJcmV0 ID0gLUVUSU1FOwo+ICAgCQkJYnJlYWs7Cj4gICAJCX0KPgo+IC0JCS8qIEVuc3VyZSB0aGF0IGV2 ZW4gaWYgdGhlIEdQVSBoYW5ncywgd2UgZ2V0IHdva2VuIHVwLiAqLwo+IC0JCWk5MTVfcXVldWVf aGFuZ2NoZWNrKGRldl9wcml2KTsKPiAtCj4gLQkJdGltZXIuZnVuY3Rpb24gPSBOVUxMOwo+IC0J CWlmICh0aW1lb3V0IHx8IG1pc3NlZF9pcnEoZGV2X3ByaXYsIHJpbmcpKSB7Cj4gLQkJCXVuc2ln bmVkIGxvbmcgZXhwaXJlOwo+ICsJCWlmIChpbnRlbF9icmVhZGNydW1iX2NvbXBsZXRlKCZ3YWl0 KSkKPiArCQkJYnJlYWs7Cj4KPiAtCQkJc2V0dXBfdGltZXJfb25fc3RhY2soJnRpbWVyLCBmYWtl X2lycSwgKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7Cj4gLQkJCWV4cGlyZSA9IG1pc3NlZF9pcnEo ZGV2X3ByaXYsIHJpbmcpID8gamlmZmllcyArIDEgOiB0aW1lb3V0X2V4cGlyZTsKPiAtCQkJbW9k X3RpbWVyKCZ0aW1lciwgZXhwaXJlKTsKPiAtCQl9Cj4gK3dha2V1cDoJCXNldF90YXNrX3N0YXRl KHdhaXQudGFzaywgc3RhdGUpOwo+Cj4gLQkJaW9fc2NoZWR1bGUoKTsKPiArCQkvKiBFbnN1cmUg b3VyIHJlYWQgb2YgdGhlIHNlcW5vIGlzIGNvaGVyZW50IHNvIHRoYXQgd2UKPiArCQkgKiBkbyBu b3QgIm1pc3MgYW4gaW50ZXJydXB0IiAoaS5lLiBpZiB0aGlzIGlzIHRoZSBsYXN0Cj4gKwkJICog cmVxdWVzdCBhbmQgdGhlIHNlcW5vIHdyaXRlIGZyb20gdGhlIEdQVSBpcyBub3QgdmlzaWJsZQo+ ICsJCSAqIGJ5IHRoZSB0aW1lIHRoZSBpbnRlcnJ1cHQgZmlyZXMsIHdlIHdpbGwgc2VlIHRoYXQg dGhlCj4gKwkJICogcmVxdWVzdCBpcyBpbmNvbXBsZXRlIGFuZCBnbyBiYWNrIHRvIHNsZWVwIGF3 YWl0aW5nCj4gKwkJICogYW5vdGhlciBpbnRlcnJ1cHQgdGhhdCB3aWxsIG5ldmVyIGNvbWUuKQo+ ICsJCSAqCj4gKwkJICogU3RyaWN0bHksIHdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgYWZ0 ZXIgYW4gaW50ZXJydXB0LAo+ICsJCSAqIGJ1dCBpdCBpcyBlYXNpZXIgYW5kIHNhZmVyIHRvIGRv IGl0IGV2ZXJ5IHRpbWUgdGhlIHdhaXRlcgo+ICsJCSAqIGlzIHdva2VuLgo+ICsJCSAqLwo+ICsJ CWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIGZhbHNlKSkKPiArCQkJYnJlYWs7 Cj4KPiAtCQlpZiAodGltZXIuZnVuY3Rpb24pIHsKPiAtCQkJZGVsX3NpbmdsZXNob3RfdGltZXJf c3luYygmdGltZXIpOwo+IC0JCQlkZXN0cm95X3RpbWVyX29uX3N0YWNrKCZ0aW1lcik7Cj4gLQkJ fQo+ICsJCS8qIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZ3B1IHJlc2V0IGhhcHBlbmVk IGluIGJldHdlZW4KPiArCQkgKiB0aGUgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQgYW5kIG5vdy4g SWYgYSByZXNldCBoYXMgb2NjdXJyZWQsCj4gKwkJICogdGhlIHJlcXVlc3QgaXMgZWZmZWN0aXZl bHkgY29tcGxldGUgKHdlIGVpdGhlciBhcmUgaW4gdGhlCj4gKwkJICogcHJvY2VzcyBvZiBvciBo YXZlIGRpc2NhcmRlZCB0aGUgcmVuZGVyaW5nIGFuZCBjb21wbGV0ZWx5Cj4gKwkJICogcmVzZXQg dGhlIEdQVS4gVGhlIHJlc3VsdHMgb2YgdGhlIHJlcXVlc3QgYXJlIGxvc3QgYW5kIHdlCj4gKwkJ ICogYXJlIGZyZWUgdG8gY29udGludWUgb24gd2l0aCB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uLgo+ ICsJCSAqLwo+ICsJCWlmIChyZXEtPnJlc2V0X2NvdW50ZXIgIT0gaTkxNV9yZXNldF9jb3VudGVy KCZyZXEtPmk5MTUtPmdwdV9lcnJvcikpCj4gKwkJCWJyZWFrOwo+ICAgCX0KPiAtCWlmICghaXJx X3Rlc3RfaW5fcHJvZ3Jlc3MpCj4gLQkJcmluZy0+aXJxX3B1dChyaW5nKTsKPiAtCj4gLQlmaW5p c2hfd2FpdCgmcmluZy0+aXJxX3F1ZXVlLCAmd2FpdCk7Cj4gLQo+ICAgb3V0Ogo+ICsJaW50ZWxf ZW5naW5lX3JlbW92ZV9icmVhZGNydW1iKHJlcS0+cmluZywgJndhaXQpOwo+ICsJX19zZXRfdGFz a19zdGF0ZSh3YWl0LnRhc2ssIFRBU0tfUlVOTklORyk7Cj4gICAJbm93ID0ga3RpbWVfZ2V0X3Jh d19ucygpOwo+ICAgCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQocmVxKTsKPgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+IGluZGV4IDA2Y2E0MDgyNzM1Yi4uZjgw NWQxMTdmM2QxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vy cm9yLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gQEAg LTkwMCw3ICs5MDAsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X3JlY29yZF9yaW5nX3N0YXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCWVyaW5nLT5pbnN0ZG9uZSA9IEk5MTVfUkVBRChHRU4y X0lOU1RET05FKTsKPiAgIAl9Cj4KPiAtCWVyaW5nLT53YWl0aW5nID0gd2FpdHF1ZXVlX2FjdGl2 ZSgmcmluZy0+aXJxX3F1ZXVlKTsKPiArCWVyaW5nLT53YWl0aW5nID0gaW50ZWxfZW5naW5lX2hh c193YWl0ZXIocmluZyk7Cj4gICAJZXJpbmctPmluc3RwbSA9IEk5MTVfUkVBRChSSU5HX0lOU1RQ TShyaW5nLT5tbWlvX2Jhc2UpKTsKPiAgIAllcmluZy0+c2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8o cmluZywgZmFsc2UpOwo+ICAgCWVyaW5nLT5hY3RoZCA9IGludGVsX3JpbmdfZ2V0X2FjdGl2ZV9o ZWFkKHJpbmcpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+IGluZGV4IDVmODg4NjllMjIwNy4u ZDI1MGI0NzIxYTZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJx LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gQEAgLTEwMDAsOCAr MTAwMCw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeV9yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcpCj4gICAJCXJldHVybjsKPgo+ICAgCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5 KHJpbmcpOwo+IC0KPiAtCXdha2VfdXBfYWxsKCZyaW5nLT5pcnFfcXVldWUpOwo+ICsJaW50ZWxf ZW5naW5lX3dha2V1cChyaW5nKTsKPiAgIH0KPgo+ICAgc3RhdGljIHZvaWQgdmx2X2MwX3JlYWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IEBAIC0xMDgzLDcgKzEwODIsNyBA QCBzdGF0aWMgYm9vbCBhbnlfd2FpdGVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gICAJaW50IGk7Cj4KPiAgIAlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKQo+ IC0JCWlmIChyaW5nLT5pcnFfcmVmY291bnQpCj4gKwkJaWYgKGludGVsX2VuZ2luZV9oYXNfd2Fp dGVyKHJpbmcpKQo+ICAgCQkJcmV0dXJuIHRydWU7Cj4KPiAgIAlyZXR1cm4gZmFsc2U7Cj4gQEAg LTI0MTEsNyArMjQxMCw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZXJyb3Jfd2FrZV91cChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4KPiAgIAkvKiBXYWtlIHVwIF9fd2FpdF9zZXFu bywgcG90ZW50aWFsbHkgaG9sZGluZyBkZXYtPnN0cnVjdF9tdXRleC4gKi8KPiAgIAlmb3JfZWFj aF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKQo+IC0JCXdha2VfdXBfYWxsKCZyaW5nLT5pcnFfcXVl dWUpOwo+ICsJCWludGVsX2VuZ2luZV93YWtldXAocmluZyk7CgpUaGlzIGlzIGZyb20gcHJvY2Vz cyBjb250ZXh0IHdpdGhvdXQgYSBsb2NrIG9yIHN5bmNocm9uaXplIHJjdS4gSSdsbCAKY29tbWVu dCBvbiBpdCBhdCB0aGUgaW1wbGVtZW50YXRpb24gc2l0ZSBhcyB3ZWxsLgoKPgo+ICAgCS8qIFdh a2UgdXAgaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzLCBob2xkaW5nIGNydGMtPm11 dGV4LiAqLwo+ICAgCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+cGVuZGluZ19mbGlwX3F1ZXVlKTsK PiBAQCAtMjk4NiwxNiArMjk4NSwxNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2hhbmdjaGVja19lbGFw c2VkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgIAkJCWlmIChyaW5nX2lkbGUocmluZywg c2Vxbm8pKSB7Cj4gICAJCQkJcmluZy0+aGFuZ2NoZWNrLmFjdGlvbiA9IEhBTkdDSEVDS19JRExF Owo+Cj4gLQkJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmluZy0+aXJxX3F1ZXVlKSkgewo+ICsJ CQkJaWYgKGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKHJpbmcpKSB7Cj4gICAJCQkJCS8qIElzc3Vl IGEgd2FrZS11cCB0byBjYXRjaCBzdHVjayBoL3cuICovCj4gICAJCQkJCWlmICghdGVzdF9hbmRf c2V0X2JpdChyaW5nLT5pZCwgJmRldl9wcml2LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncykp IHsKPiAtCQkJCQkJaWYgKCEoZGV2X3ByaXYtPmdwdV9lcnJvci50ZXN0X2lycV9yaW5ncyAmIGlu dGVsX3JpbmdfZmxhZyhyaW5nKSkpCj4gKwkJCQkJCWlmICghdGVzdF9iaXQocmluZy0+aWQsICZk ZXZfcHJpdi0+Z3B1X2Vycm9yLnRlc3RfaXJxX3JpbmdzKSkKPiAgIAkJCQkJCQlEUk1fRVJST1Io IkhhbmdjaGVjayB0aW1lciBlbGFwc2VkLi4uICVzIGlkbGVcbiIsCj4gICAJCQkJCQkJCSAgcmlu Zy0+bmFtZSk7Cj4gICAJCQkJCQllbHNlCj4gICAJCQkJCQkJRFJNX0lORk8oIkZha2UgbWlzc2Vk IGlycSBvbiAlc1xuIiwKPiAgIAkJCQkJCQkJIHJpbmctPm5hbWUpOwo+IC0JCQkJCQl3YWtlX3Vw X2FsbCgmcmluZy0+aXJxX3F1ZXVlKTsKPiArCj4gKwkJCQkJCWludGVsX2VuZ2luZV9lbmFibGVf ZmFrZV9pcnEocmluZyk7Cj4gICAJCQkJCX0KPiAgIAkJCQkJLyogU2FmZWd1YXJkIGFnYWluc3Qg ZHJpdmVyIGZhaWx1cmUgKi8KPiAgIAkJCQkJcmluZy0+aGFuZ2NoZWNrLnNjb3JlICs9IEJVU1k7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE5YTE5OWJjYTJjMgo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCj4gQEAg LTAsMCArMSwyNzQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9y YXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiAr ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsg KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5j bHVkZSAiaTkxNV9kcnYuaCIKPiArCj4gK3N0YXRpYyB2b2lkIGludGVsX2JyZWFkY3J1bWJzX2Zh a2VfaXJxKHVuc2lnbmVkIGxvbmcgZGF0YSkKPiArewo+ICsJc3RydWN0IGludGVsX2JyZWFkY3J1 bWJzICpiID0gKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqKWRhdGE7Cj4gKwlzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnRhc2s7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSB0aW1lciBwZXJzaXN0cyBpbiBj YXNlIHdlIGNhbm5vdCBlbmFibGUgaW50ZXJydXB0cywKPiArCSAqIG9yIGlmIHdlIGhhdmUgcHJl dmlvdXNseSBzZWVuIHNlcW5vL2ludGVycnVwdCBpbmNvaGVyZW5jeQo+ICsJICogKCJtaXNzZWQg aW50ZXJydXB0IiBzeW5kcm9tZSkuIEhlcmUgdGhlIHdvcmtlciB3aWxsIHdha2UgdXAKPiArCSAq IGV2ZXJ5IGppZmZpZSBpbiBvcmRlciB0byBraWNrIHRoZSBvbGRlc3Qgd2FpdGVyIHRvIGRvIHRo ZQo+ICsJICogY29oZXJlbnQgc2Vxbm8gY2hlY2suCj4gKwkgKi8KPiArCj4gKwl0YXNrID0gUkVB RF9PTkNFKGItPmZpcnN0X3dhaXRlcik7Cj4gKwlpZiAodGFzaykgewo+ICsJCXdha2VfdXBfcHJv Y2Vzcyh0YXNrKTsKClB1dCBhIGNvbW1lbnQgaGVyZSBkZXNjcmliaW5nIHdoeSBhIHRhc2sgY2Fu bm90IGV4aXQgYW5kIGJlY29tZSBpbnZhbGlkIApiZXR3ZWVuIHNhbXBsaW5nIGFuZCB3YWtldXA/ CgpPciB3ZSBjb3VsZCBhZmZvcmQgYSBzcGlubG9jayBoZXJlIHNpbmNlIHRoaXMgZmlyZXMgcmVh bGx5IGluZnJlcXVlbnRseT8KCk9yIGV2ZW4gaW50ZWxfZW5naW5lX3dha2V1cD8KCj4gKwkJbW9k X3RpbWVyKCZiLT5mYWtlX2lycSwgamlmZmllcyArIDEpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ ICsJV0FSTl9PTighZW5naW5lLT5pcnFfZ2V0KGVuZ2luZSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiAr CWVuZ2luZS0+aXJxX3B1dChlbmdpbmUpOwo+ICt9CgpUaGVzZSBoZWxwZXJzIGRvbid0IGRvIG11 Y2ggYW5kIG9ubHkgaGF2ZSBvbmUgY2FsbCBzaXRlIGVhY2g/Cgo+ICsKPiArc3RhdGljIHZvaWQg X19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAq YikKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0KPiArCQljb250YWlu ZXJfb2YoYiwgc3RydWN0IGludGVsX2VuZ2luZV9jcywgYnJlYWRjcnVtYnMpOwo+ICsJYm9vbCBu b2lycTsKPiArCj4gKwlpZiAoYi0+cnBtX3dha2Vsb2NrKQo+ICsJCXJldHVybjsKPiArCj4gKwkv KiBTaW5jZSB3ZSBhcmUgd2FpdGluZyBvbiBhIHJlcXVlc3QsIHRoZSBHUFUgc2hvdWxkIGJlIGJ1 c3kKPiArCSAqIGFuZCBzaG91bGQgaGF2ZSBpdHMgb3duIHJwbSByZWZlcmVuY2UuIEZvciBjb21w bGV0ZW5lc3MsCj4gKwkgKiByZWNvcmQgYW4gcnBtIHJlZmVyZW5jZSBmb3Igb3Vyc2VsdmVzIHRv IGNvdmVyIHRoZQo+ICsJICogaW50ZXJydXB0IHdlIHVubWFzay4KPiArCSAqLwo+ICsJaW50ZWxf cnVudGltZV9wbV9nZXRfbm9yZXN1bWUoZW5naW5lLT5pOTE1KTsKPiArCWItPnJwbV93YWtlbG9j ayA9IHRydWU7Cj4gKwo+ICsJLyogTm8gaW50ZXJydXB0cz8gS2ljayB0aGUgd2FpdGVyIGV2ZXJ5 IGppZmZpZSEgKi8KPiArCW5vaXJxID0gdHJ1ZTsKPiArCWlmIChpbnRlbF9pcnFzX2VuYWJsZWQo ZW5naW5lLT5pOTE1KSkgewo+ICsJCW5vaXJxID0gdGVzdF9iaXQoZW5naW5lLT5pZCwKPiArCQkJ CSAmZW5naW5lLT5pOTE1LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncyk7Cj4gKwkJaWYgKCF0 ZXN0X2JpdChlbmdpbmUtPmlkLAo+ICsJCQkgICAgICAmZW5naW5lLT5pOTE1LT5ncHVfZXJyb3Iu dGVzdF9pcnFfcmluZ3MpKSB7Cj4gKwkJCWlycV9lbmFibGUoZW5naW5lKTsKPiArCQkJYi0+aXJx X2VuYWJsZWQgPSB0cnVlOwo+ICsJCX0KPiArCX0KPiArCWlmIChub2lycSkKPiArCQltb2RfdGlt ZXIoJmItPmZha2VfaXJxLCBqaWZmaWVzICsgMSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9f aW50ZWxfYnJlYWRjcnVtYnNfZGlzYWJsZV9pcnEoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpi KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQo+ICsJCWNvbnRhaW5l cl9vZihiLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzLCBicmVhZGNydW1icyk7Cj4gKwo+ICsJaWYg KCFiLT5ycG1fd2FrZWxvY2spCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChiLT5pcnFfZW5hYmxl ZCkgewo+ICsJCWlycV9kaXNhYmxlKGVuZ2luZSk7Cj4gKwkJYi0+aXJxX2VuYWJsZWQgPSBmYWxz ZTsKPiArCX0KPiArCj4gKwlpbnRlbF9ydW50aW1lX3BtX3B1dChlbmdpbmUtPmk5MTUpOwo+ICsJ Yi0+cnBtX3dha2Vsb2NrID0gZmFsc2U7Cj4gK30KCk1heWJlIHB1dCBhc3NlcnRfc3Bpbl9sb2Nr ZWQgaW4gdGhlIGFib3ZlIHR3by4KCj4gKwo+ICtpbmxpbmUgc3RydWN0IGludGVsX2JyZWFkY3J1 bWIgKnRvX2NydW1iKHN0cnVjdCByYl9ub2RlICpub2RlKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFp bmVyX29mKG5vZGUsIHN0cnVjdCBpbnRlbF9icmVhZGNydW1iLCBub2RlKTsKPiArfQo+ICsKPiAr Ym9vbCBpbnRlbF9lbmdpbmVfYWRkX2JyZWFkY3J1bWIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+ICsJCQkJIHN0cnVjdCBpbnRlbF9icmVhZGNydW1iICp3YWl0KQo+ICt7Cj4gKwlz dHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiArCXUz MiBzZXFubyA9IGVuZ2luZS0+Z2V0X3NlcW5vKGVuZ2luZSwgdHJ1ZSk7Cj4gKwlzdHJ1Y3QgcmJf bm9kZSAqKnAsICpwYXJlbnQsICpjb21wbGV0ZWQ7Cj4gKwlib29sIGZpcnN0Owo+ICsKPiArCXNw aW5fbG9jaygmYi0+bG9jayk7Cj4gKwo+ICsJLyogSW5zZXJ0IHRoZSByZXF1ZXN0IGludG8gdGhl IHJldGlybWVudCBvcmRlcmVkIGxpc3QKPiArCSAqIG9mIHdhaXRlcnMgYnkgd2Fsa2luZyB0aGUg cmJ0cmVlLiBJZiB3ZSBhcmUgdGhlIG9sZGVzdAo+ICsJICogc2Vxbm8gaW4gdGhlIHRyZWUgKHRo ZSBmaXJzdCB0byBiZSByZXRpcmVkKSwgdGhlbgo+ICsJICogc2V0IG91cnNlbHZlcyBhcyB0aGUg Ym90dG9tLWhhbGYuCj4gKwkgKgo+ICsJICogQXMgd2UgZGVzY2VuZCB0aGUgdHJlZSwgcHJ1bmUg Y29tcGxldGVkIGJyYW5jaGVzIHNpbmNlIHdlIGhvbGQgdGhlCj4gKwkgKiBzcGlubG9jayB3ZSBr bm93IHRoYXQgdGhlIGZpcnN0X3dhaXRlciBtdXN0IGJlIGRlbGF5ZWQgYW5kIGNhbgo+ICsJICog cmVkdWNlIHNvbWUgb2YgdGhlIHNlcXVlbnRpYWwgd2FrZSB1cCBsYXRlbmN5IGlmIHdlIHRha2Ug YWN0aW9uCj4gKwkgKiBvdXJzZWx2ZXMgYW5kIHdha2UgdXAgdGhlIGNvcG1sZXRlZCB0YXNrcyBp biBwYXJhbGxlbC4KPiArCSAqLwoKV2h5IGl0IGlzIGludGVyZXN0aW5nIHRvIGRvIGl0IGJvdGgg ZnJvbSBhZGQgYW5kIHJlbW92ZSBicmVhZGNydW1iIApwYXRocz8gV291bGRuJ3QgaXQgYmUgc3Vm ZmljaWVudCB0byBkbyBpdCBvbmx5IG9uIHJlbW92ZT8KCj4gKwlmaXJzdCA9IHRydWU7Cj4gKwlw YXJlbnQgPSBOVUxMOwo+ICsJY29tcGxldGVkID0gTlVMTDsKPiArCXAgPSAmYi0+cmVxdWVzdHMu cmJfbm9kZTsKPiArCXdoaWxlICgqcCkgewo+ICsJCXBhcmVudCA9ICpwOwo+ICsJCWlmIChpOTE1 X3NlcW5vX3Bhc3NlZCh3YWl0LT5zZXFubywgdG9fY3J1bWIocGFyZW50KS0+c2Vxbm8pKSB7Cj4g KwkJCXAgPSAmcGFyZW50LT5yYl9yaWdodDsKPiArCQkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHNl cW5vLCB0b19jcnVtYihwYXJlbnQpLT5zZXFubykpCj4gKwkJCQljb21wbGV0ZWQgPSBwYXJlbnQ7 Cj4gKwkJCWVsc2UKPiArCQkJCWZpcnN0ID0gZmFsc2U7Cj4gKwkJfSBlbHNlCj4gKwkJCXAgPSAm cGFyZW50LT5yYl9sZWZ0Owo+ICsJfQo+ICsJcmJfbGlua19ub2RlKCZ3YWl0LT5ub2RlLCBwYXJl bnQsIHApOwo+ICsJcmJfaW5zZXJ0X2NvbG9yKCZ3YWl0LT5ub2RlLCAmYi0+cmVxdWVzdHMpOwo+ ICsKPiArCWlmIChjb21wbGV0ZWQgIT0gTlVMTCkgewo+ICsJCXN0cnVjdCByYl9ub2RlICpuZXh0 ID0gcmJfbmV4dChjb21wbGV0ZWQpOwo+ICsKPiArCQlpZiAobmV4dCAmJiBuZXh0ICE9ICZ3YWl0 LT5ub2RlKSB7Cj4gKwkJCXNtcF9zdG9yZV9tYihiLT5maXJzdF93YWl0ZXIsIHRvX2NydW1iKG5l eHQpLT50YXNrKTsKPiArCQkJX19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKGIpOwo+ICsJ CQl3YWtlX3VwX3Byb2Nlc3ModG9fY3J1bWIobmV4dCktPnRhc2spOwoKSSBkb24ndCBnZXQgdGhp cywgd2h5IGl0IGlzIHdha2luZyB1cCB0aGUgb25lIGFmdGVyIGNvbXBsZXRlZD8gSnVzdCB0byAK YW50aWNpcGF0ZSBpdCBtaWdodCBiZSBjb21wbGV0ZWQgc29vbj8KCj4gKwkJfQo+ICsKPiArCQlk byB7Cj4gKwkJCXN0cnVjdCBpbnRlbF9icmVhZGNydW1iICpjcnVtYiA9IHRvX2NydW1iKGNvbXBs ZXRlZCk7Cj4gKwkJCWNvbXBsZXRlZCA9IHJiX3ByZXYoY29tcGxldGVkKTsKPiArCj4gKwkJCXJi X2VyYXNlKCZjcnVtYi0+bm9kZSwgJmItPnJlcXVlc3RzKTsKPiArCQkJUkJfQ0xFQVJfTk9ERSgm Y3J1bWItPm5vZGUpOwo+ICsJCQl3YWtlX3VwX3Byb2Nlc3MoY3J1bWItPnRhc2spOwo+ICsJCX0g d2hpbGUgKGNvbXBsZXRlZCAhPSBOVUxMKTsKPiArCX0KPiArCj4gKwlpZiAoZmlyc3QpCj4gKwkJ c21wX3N0b3JlX21iKGItPmZpcnN0X3dhaXRlciwgd2FpdC0+dGFzayk7Cj4gKwlCVUdfT04oYi0+ Zmlyc3Rfd2FpdGVyID09IE5VTEwpOwoKSSBvYmplY3QgeW91ciBob25vdXIhIDopIExldCB0aGUg dXNlciBzc2ggaW4gYW5kIHJlYm9vdCBjbGVhbmx5IGV2ZW4gaWYgCmdyYXBoaWNzIHN0YWNrIGlz IHN0dWNrLgoKPiArCj4gKwlzcGluX3VubG9jaygmYi0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIGZp cnN0Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2VuZ2luZV9lbmFibGVfYnJlYWRjcnVtYl9pcnEo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJl YWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiArCj4gKwlzcGluX2xvY2soJmIt PmxvY2spOwo+ICsJX19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKGIpOwo+ICsJc3Bpbl91 bmxvY2soJmItPmxvY2spOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2VuZ2luZV9lbmFibGVfZmFr ZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwltb2RfdGltZXIo JmVuZ2luZS0+YnJlYWRjcnVtYnMuZmFrZV9pcnEsIGppZmZpZXMgKyAxKTsKPiArfQo+ICsKPiAr dm9pZCBpbnRlbF9lbmdpbmVfcmVtb3ZlX2JyZWFkY3J1bWIoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLAo+ICsJCQkJICAgIHN0cnVjdCBpbnRlbF9icmVhZGNydW1iICp3YWl0KQo+ICt7 Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsK PiArCj4gKwkvKiBRdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyB3YWl0ZXIgd2FzIGFscmVhZHkg ZGVjb3VwbGVkIGZyb20KPiArCSAqIHRoZSB0cmVlIGJ5IHRoZSBib3R0b20taGFsZiB0byBhdm9p ZCBjb250ZW50aW9uIG9uIHRoZSBzcGlubG9jawo+ICsJICogYnkgdGhlIGhlcmQuCj4gKwkgKi8K PiArCWlmIChSQl9FTVBUWV9OT0RFKCZ3YWl0LT5ub2RlKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ c3Bpbl9sb2NrKCZiLT5sb2NrKTsKPiArCj4gKwlpZiAoYi0+Zmlyc3Rfd2FpdGVyID09IHdhaXQt PnRhc2spIHsKPiArCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKPiArCQlzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhc2s7Cj4gKwo+ICsJCS8qIFdlIGFyZSB0aGUgY3VycmVudCBib3R0b20taGFsZi4gRmlu ZCB0aGUgbmV4dCBjYW5kaWRhdGUsCj4gKwkJICogdGhlIGZpcnN0IHdhaXRlciBpbiB0aGUgcXVl dWUgb24gdGhlIHJlbWFpbmluZyBvbGRlc3QKPiArCQkgKiByZXF1ZXN0LiBBcyBtdWx0aXBsZSBz ZXFub3MgbWF5IGNvbXBsZXRlIGluIHRoZSB0aW1lIGl0Cj4gKwkJICogdGFrZXMgdXMgdG8gd2Fr ZSB1cCBhbmQgZmluZCB0aGUgbmV4dCB3YWl0ZXIsIHdlIGhhdmUgdG8KPiArCQkgKiB3YWtlIHVw IHRoYXQgd2FpdGVyIGZvciBpdCB0byBwZXJmb3JtIGl0cyBvd24gY29oZXJlbnQKPiArCQkgKiBj b21wbGV0aW9uIGNoZWNrLgo+ICsJCSAqLwo+ICsJCW5leHQgPSByYl9uZXh0KCZ3YWl0LT5ub2Rl KTsKPiArCQlpZiAobmV4dCkgewo+ICsJCQkvKiBJZiB0aGUgbmV4dCB3YWl0ZXIgaXMgYWxyZWFk eSBjb21wbGV0ZSwKPiArCQkJICogd2FrZSBpdCB1cCBhbmQgY29udGludWUgb250byB0aGUgbmV4 dCB3YWl0ZXIuIFNvCj4gKwkJCSAqIGlmIGhhdmUgYSBzbWFsbCBoZXJkLCB0aGV5IHdpbGwgd2Fr ZSB1cCBpbiBwYXJhbGxlbAo+ICsJCQkgKiByYXRoZXIgdGhhbiBzZXF1ZW50aWFsbHksIHdoaWNo IHNob3VsZCByZWR1Y2UKPiArCQkJICogdGhlIG92ZXJhbGwgbGF0ZW5jeSBpbiB3YWtpbmcgYWxs IHRoZSBjb21wbGV0ZWQKPiArCQkJICogY2xpZW50cy4KPiArCQkJICovCj4gKwkJCXUzMiBzZXFu byA9IGVuZ2luZS0+Z2V0X3NlcW5vKGVuZ2luZSwgdHJ1ZSk7Cj4gKwkJCXdoaWxlIChpOTE1X3Nl cW5vX3Bhc3NlZChzZXFubywKPiArCQkJCQkJIHRvX2NydW1iKG5leHQpLT5zZXFubykpIHsKPiAr CQkJCXN0cnVjdCByYl9ub2RlICpuID0gcmJfbmV4dChuZXh0KTsKPiArCj4gKwkJCQlyYl9lcmFz ZShuZXh0LCAmYi0+cmVxdWVzdHMpOwo+ICsJCQkJUkJfQ0xFQVJfTk9ERShuZXh0KTsKPiArCQkJ CXdha2VfdXBfcHJvY2Vzcyh0b19jcnVtYihuZXh0KS0+dGFzayk7Cj4gKwo+ICsJCQkJbmV4dCA9 IG47Cj4gKwkJCQlpZiAobmV4dCA9PSBOVUxMKQo+ICsJCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJ fQo+ICsJCXRhc2sgPSBuZXh0ID8gdG9fY3J1bWIobmV4dCktPnRhc2sgOiBOVUxMOwo+ICsKPiAr CQlzbXBfc3RvcmVfbWIoYi0+Zmlyc3Rfd2FpdGVyLCB0YXNrKTsKPiArCQlpZiAodGFzaykgewo+ ICsJCQkvKiBJbiBvdXIgaGFzdGUsIHdlIG1heSBoYXZlIGNvbXBsZXRlZCB0aGUgZmlyc3Qgd2Fp dGVyCj4gKwkJCSAqIGJlZm9yZSB3ZSBlbmFibGVkIHRoZSBpbnRlcnJ1cHQuIERvIHNvIG5vdyBh cyB3ZQo+ICsJCQkgKiBoYXZlIGEgc2Vjb25kIHdhaXRlciBmb3IgYSBmdXR1cmUgc2Vxbm8uIEFm dGVyd2FyZHMsCj4gKwkJCSAqIHdlIGhhdmUgdG8gd2FrZSB1cCB0aGF0IHdhaXRlciBpbiBjYXNl IHdlIG1pc3NlZAo+ICsJCQkgKiB0aGUgaW50ZXJydXB0LCBvciBpZiB3ZSBoYXZlIHRvIGhhbmRs ZSBhbgo+ICsJCQkgKiBleGNlcHRpb24gcmF0aGVyIHRoYW4gYSBzZXFubyBjb21wbGV0aW9uLgo+ ICsJCQkgKi8KPiArCQkJX19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKGIpOwo+ICsJCQl3 YWtlX3VwX3Byb2Nlc3ModGFzayk7Cj4gKwkJfSBlbHNlCj4gKwkJCV9faW50ZWxfYnJlYWRjcnVt YnNfZGlzYWJsZV9pcnEoYik7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFSQl9FTVBUWV9OT0RFKCZ3YWl0 LT5ub2RlKSkKPiArCQlyYl9lcmFzZSgmd2FpdC0+bm9kZSwgJmItPnJlcXVlc3RzKTsKPiArCXNw aW5fdW5sb2NrKCZiLT5sb2NrKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF9i cmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXN0cnVj dCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwo+ICsKPiArCXNw aW5fbG9ja19pbml0KCZiLT5sb2NrKTsKPiArCXNldHVwX3RpbWVyKCZiLT5mYWtlX2lycSwgaW50 ZWxfYnJlYWRjcnVtYnNfZmFrZV9pcnEsICh1bnNpZ25lZCBsb25nKWIpOwo+ICt9Cj4gKwo+ICt2 b2lkIGludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKPiArewo+ICsJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+ YnJlYWRjcnVtYnM7Cj4gKwo+ICsJZGVsX3RpbWVyX3N5bmMoJmItPmZha2VfaXJxKTsKPiArfQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5kZXggNzAzMGZmNTI2OTQxLi43ODBhYTZkMzkw YWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IEBAIC0xODk4LDYgKzE4OTgsOCBA QCB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcpCj4gICAJaTkxNV9jbWRfcGFyc2VyX2ZpbmlfcmluZyhyaW5nKTsKPiAgIAlpOTE1X2dl bV9iYXRjaF9wb29sX2ZpbmkoJnJpbmctPmJhdGNoX3Bvb2wpOwo+Cj4gKwlpbnRlbF9lbmdpbmVf ZmluaV9icmVhZGNydW1icyhyaW5nKTsKPiArCj4gICAJaWYgKHJpbmctPnN0YXR1c19wYWdlLm9i aikgewo+ICAgCQlrdW5tYXAoc2dfcGFnZShyaW5nLT5zdGF0dXNfcGFnZS5vYmotPnBhZ2VzLT5z Z2wpKTsKPiAgIAkJcmluZy0+c3RhdHVzX3BhZ2Uub2JqID0gTlVMTDsKPiBAQCAtMTkxNSwxMCAr MTkxNywxMSBAQCBzdGF0aWMgaW50IGxvZ2ljYWxfcmluZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbgo+ICAgCXJpbmctPmJ1ZmZlciA9IE5V TEw7Cj4KPiAgIAlyaW5nLT5kZXYgPSBkZXY7Cj4gKwlyaW5nLT5pOTE1ID0gdG9faTkxNShkZXYp Owo+ICAgCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5hY3RpdmVfbGlzdCk7Cj4gICAJSU5JVF9MSVNU X0hFQUQoJnJpbmctPnJlcXVlc3RfbGlzdCk7Cj4gICAJaTkxNV9nZW1fYmF0Y2hfcG9vbF9pbml0 KGRldiwgJnJpbmctPmJhdGNoX3Bvb2wpOwo+IC0JaW5pdF93YWl0cXVldWVfaGVhZCgmcmluZy0+ aXJxX3F1ZXVlKTsKPiArCWludGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKHJpbmcpOwo+Cj4g ICAJSU5JVF9MSVNUX0hFQUQoJnJpbmctPmJ1ZmZlcnMpOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZy aW5nLT5leGVjbGlzdF9xdWV1ZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYwo+IGluZGV4IDY5ZGQ2OWU0NmZhOS4uZTkwYzI4ZTJkYTMxIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IEBAIC0yMTUyLDYgKzIxNTIsNyBAQCBzdGF0 aWMgaW50IGludGVsX2luaXRfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAg IAlXQVJOX09OKHJpbmctPmJ1ZmZlcik7Cj4KPiAgIAlyaW5nLT5kZXYgPSBkZXY7Cj4gKwlyaW5n LT5pOTE1ID0gdG9faTkxNShkZXYpOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5hY3RpdmVf bGlzdCk7Cj4gICAJSU5JVF9MSVNUX0hFQUQoJnJpbmctPnJlcXVlc3RfbGlzdCk7Cj4gICAJSU5J VF9MSVNUX0hFQUQoJnJpbmctPmV4ZWNsaXN0X3F1ZXVlKTsKPiBAQCAtMjE1OSw3ICsyMTYwLDcg QEAgc3RhdGljIGludCBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gICAJaTkxNV9nZW1fYmF0Y2hfcG9vbF9pbml0KGRldiwgJnJpbmctPmJhdGNoX3Bvb2wp Owo+ICAgCW1lbXNldChyaW5nLT5zZW1hcGhvcmUuc3luY19zZXFubywgMCwgc2l6ZW9mKHJpbmct PnNlbWFwaG9yZS5zeW5jX3NlcW5vKSk7Cj4KPiAtCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJpbmct PmlycV9xdWV1ZSk7Cj4gKwlpbnRlbF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhyaW5nKTsKPgo+ ICAgCXJpbmdidWYgPSBpbnRlbF9lbmdpbmVfY3JlYXRlX3JpbmdidWZmZXIocmluZywgMzIgKiBQ QUdFX1NJWkUpOwo+ICAgCWlmIChJU19FUlIocmluZ2J1ZikpIHsKPiBAQCAtMjIyMyw2ICsyMjI0 LDggQEAgdm9pZCBpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcpCj4KPiAgIAlpOTE1X2NtZF9wYXJzZXJfZmluaV9yaW5nKHJpbmcpOwo+ICAgCWk5 MTVfZ2VtX2JhdGNoX3Bvb2xfZmluaSgmcmluZy0+YmF0Y2hfcG9vbCk7Cj4gKwlpbnRlbF9lbmdp bmVfZmluaV9icmVhZGNydW1icyhyaW5nKTsKPiArCj4gICAJcmluZy0+ZGV2ID0gTlVMTDsKPiAg IH0KPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBpbmRleCA0OTU3 NGZmZTU0YmMuLjI4MWVkMmM5MmI5MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmgKPiBAQCAtMTU3LDkgKzE1NywzNSBAQCBzdHJ1Y3QgIGludGVsX2VuZ2luZV9j cyB7Cj4gICAjZGVmaW5lIExBU1RfVVNFUl9SSU5HIChWRUNTICsgMSkKPiAgIAl1MzIJCW1taW9f YmFzZTsKPiAgIAlzdHJ1Y3QJCWRybV9kZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1Owo+ICAgCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpidWZmZXI7Cj4gICAJ c3RydWN0IGxpc3RfaGVhZCBidWZmZXJzOwo+Cj4gKwkvKiBSYXRoZXIgdGhhbiBoYXZlIGV2ZXJ5 IGNsaWVudCB3YWl0IHVwb24gYWxsIHVzZXIgaW50ZXJydXB0cywKPiArCSAqIHdpdGggdGhlIGhl cmQgd2FraW5nIGFmdGVyIGV2ZXJ5IGludGVycnVwdCBhbmQgZWFjaCBkb2luZyB0aGUKPiArCSAq IGhlYXZ5d2VpZ2h0IHNlcW5vIGRhbmNlLCB3ZSBkZWxlZ2F0ZSB0aGUgdGFzayAob2YgYmVpbmcg dGhlCj4gKwkgKiBib3R0b20taGFsZiBvZiB0aGUgdXNlciBpbnRlcnJ1cHQpIHRvIHRoZSBmaXJz dCBjbGllbnQuIEFmdGVyCj4gKwkgKiBldmVyeSBpbnRlcnJ1cHQsIHdlIHdha2UgdXAgb25lIGNs aWVudCwgd2hvIGRvZXMgdGhlIGhlYXZ5d2VpZ2h0Cj4gKwkgKiBjb2hlcmVudCBzZXFubyByZWFk IGFuZCBlaXRoZXIgZ29lcyBiYWNrIHRvIHNsZWVwIChpZiBpbmNvbXBsZXRlKSwKPiArCSAqIG9y IHdha2VzIHVwIGFsbCB0aGUgY29tcGxldGVkIGNsaWVudHMgaW4gcGFyYWxsZWwsIGJlZm9yZSB0 aGVuCj4gKwkgKiB0cmFuc2ZlcnJpbmcgdGhlIGJvdHRvbS1oYWxmIHN0YXR1cyB0byB0aGUgbmV4 dCBjbGllbnQgaW4gdGhlIHF1ZXVlLgo+ICsJICoKPiArCSAqIENvbXBhcmVkIHRvIHdhbGtpbmcg dGhlIGVudGlyZSBsaXN0IG9mIHdhaXRlcnMgaW4gYSBzaW5nbGUgZGVkaWNhdGVkCj4gKwkgKiBi b3R0b20taGFsZiwgd2UgcmVkdWNlIHRoZSBsYXRlbmN5IG9mIHRoZSBmaXJzdCB3YWl0ZXIgYnkg YXZvaWRpbmcKPiArCSAqIGEgY29udGV4dCBzd2l0Y2gsIGJ1dCBpbmN1ciBhZGRpdGlvbmFsIGNv aGVyZW50IHNlcW5vIHJlYWRzIHdoZW4KPiArCSAqIGZvbGxvd2luZyB0aGUgY2hhaW4gb2YgcmVx dWVzdCBicmVhZGNydW1icy4gU2luY2UgaXQgaXMgbW9zdCBsaWtlbHkKPiArCSAqIHRoYXQgd2Ug aGF2ZSBhIHNpbmdsZSBjbGllbnQgd2FpdGluZyBvbiBlYWNoIHNlcW5vLCB0aGVuIHJlZHVjaW5n Cj4gKwkgKiB0aGUgb3ZlcmhlYWQgb2Ygd2FraW5nIHRoYXQgY2xpZW50IGlzIG11Y2ggcHJlZmVy cmVkLgo+ICsJICovCj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgewo+ICsJCXNwaW5sb2Nr X3QgbG9jazsgLyogcHJvdGVjdHMgdGhlIGxpc3RzIG9mIHJlcXVlc3RzICovCj4gKwkJc3RydWN0 IHJiX3Jvb3QgcmVxdWVzdHM7IC8qIHNvcnRlZCBieSByZXRpcmVtZW50ICovCj4gKwkJc3RydWN0 IHRhc2tfc3RydWN0ICpmaXJzdF93YWl0ZXI7IC8qIGJoIGZvciB1c2VyIGludGVycnVwdHMgKi8K PiArCQlzdHJ1Y3QgdGltZXJfbGlzdCBmYWtlX2lycTsgLyogdXNlZCBhZnRlciBhIG1pc3NlZCBp bnRlcnJ1cHQgKi8KPiArCQlib29sIGlycV9lbmFibGVkOwo+ICsJCWJvb2wgcnBtX3dha2Vsb2Nr Owo+ICsJfSBicmVhZGNydW1iczsKPiArCj4gICAJLyoKPiAgIAkgKiBBIHBvb2wgb2Ygb2JqZWN0 cyB0byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVmZmVycwo+ICAgCSAq IHdoZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZlbnRzIHRoZSBjbGllbnQg ZnJvbQo+IEBAIC0zMDMsOCArMzI5LDYgQEAgc3RydWN0ICBpbnRlbF9lbmdpbmVfY3Mgewo+Cj4g ICAJYm9vbCBncHVfY2FjaGVzX2RpcnR5Owo+Cj4gLQl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVl dWU7Cj4gLQo+ICAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpkZWZhdWx0X2NvbnRleHQ7Cj4gICAJ c3RydWN0IGludGVsX2NvbnRleHQgKmxhc3RfY29udGV4dDsKPgo+IEBAIC01MTAsNCArNTM0LDM5 IEBAIHZvaWQgaW50ZWxfcmluZ19yZXNlcnZlZF9zcGFjZV9lbmQoc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmdidWYpOwo+ICAgLyogTGVnYWN5IHJpbmdidWZmZXIgc3BlY2lmaWMgcG9ydGlv biBvZiByZXNlcnZhdGlvbiBjb2RlOiAqLwo+ICAgaW50IGludGVsX3JpbmdfcmVzZXJ2ZV9zcGFj ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpOwo+Cj4gKy8qIGludGVsX2Jy ZWFkY3J1bWJzLmMgLS0gdXNlciBpbnRlcnJ1cHQgYm90dG9tLWhhbGYgZm9yIHdhaXRlcnMgKi8K PiArc3RydWN0IGludGVsX2JyZWFkY3J1bWIgewo+ICsJc3RydWN0IHJiX25vZGUgbm9kZTsKPiAr CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKPiArCXUzMiBzZXFubzsKPiArfTsKPiArdm9pZCBp bnRlbF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpOwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfYnJlYWRjcnVtYl9pbml0KHN0cnVjdCBp bnRlbF9icmVhZGNydW1iICp3YWl0LAo+ICsJCQkJCSB1MzIgc2Vxbm8pCj4gK3sKPiArCXdhaXQt PnRhc2sgPSBjdXJyZW50Owo+ICsJd2FpdC0+c2Vxbm8gPSBzZXFubzsKPiArfQo+ICtzdGF0aWMg aW5saW5lIGJvb2wgaW50ZWxfYnJlYWRjcnVtYl9jb21wbGV0ZShzdHJ1Y3QgaW50ZWxfYnJlYWRj cnVtYiAqd2FpdCkKPiArewo+ICsJcmV0dXJuIFJCX0VNUFRZX05PREUoJndhaXQtPm5vZGUpOwo+ ICt9Cj4gK2Jvb2wgaW50ZWxfZW5naW5lX2FkZF9icmVhZGNydW1iKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiArCQkJCSBzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYiAqd2FpdCk7Cj4g K3ZvaWQgaW50ZWxfZW5naW5lX3JlbW92ZV9icmVhZGNydW1iKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKPiArCQkJCSAgICBzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYiAqd2FpdCk7Cj4g K3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXJldHVybiBSRUFEX09OQ0UoZW5naW5lLT5icmVh ZGNydW1icy5maXJzdF93YWl0ZXIpOwo+ICt9Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9l bmdpbmVfd2FrZXVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3Ry dWN0IHRhc2tfc3RydWN0ICp0YXNrID0gUkVBRF9PTkNFKGVuZ2luZS0+YnJlYWRjcnVtYnMuZmly c3Rfd2FpdGVyKTsKPiArCWlmICh0YXNrKQo+ICsJCXdha2VfdXBfcHJvY2Vzcyh0YXNrKTsKCkFu ZCBoZXJlIGRlZmluaXRlbHkgcHV0IGEgY29tbWVudCBzYXlpbmcgd2h5IHRoaXMgaXMgc2FmZSB3 aXRob3V0IHRoZSAKc3BpbmxvY2suCgpBY3R1YWxseSBzZWVpbmcgaG93IGl0IGlzIGNhbGxlZCBm cm9tIGlycSBjb250ZXh0IGFuZCBwcm9jZXNzIGNvbnRleHQgSSAKdGhpbmsgaXQgd2lsbCBuZWVk IGEgbG9jay4KCk1heWJlIHlvdSBjYW4gYWRkIGFuIGlycSBmbGF2b3VyIGlzIGxvY2tsZXNzIHZh cmlhbnQgaXMgcmVhbGx5IApiZW5lZmljaWFsIGZyb20gdGhlIHVzZXIgaW50ZXJydXB0IGhhbmRs ZXI/Cgo+ICt9Cj4gK3ZvaWQgaW50ZWxfZW5naW5lX2VuYWJsZV9icmVhZGNydW1iX2lycShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICt2b2lkIGludGVsX2VuZ2luZV9lbmFibGVf ZmFrZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArdm9pZCBpbnRlbF9l bmdpbmVfZmluaV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ ICsKPiAgICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwo+CgpSZWdhcmRzLAoKVHZy dGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==