From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [PATCH] libgnttab: Add support for Linux dma-buf Date: Mon, 20 Aug 2018 11:43:24 +0300 Message-ID: References: <20180723122725.5476-1-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1frfmd-0004KD-7U for xen-devel@lists.xenproject.org; Mon, 20 Aug 2018 08:43:31 +0000 Received: by mail-lj1-x241.google.com with SMTP id p6-v6so10944829ljc.5 for ; Mon, 20 Aug 2018 01:43:28 -0700 (PDT) In-Reply-To: <20180723122725.5476-1-andr2000@gmail.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, ian.jackson@eu.citrix.com, wei.liu2@citrix.com, boris.ostrovsky@oracle.com, jgross@suse.com Cc: Oleksandr Andrushchenko List-Id: xen-devel@lists.xenproject.org cGluZwoKT24gMDcvMjMvMjAxOCAwMzoyNyBQTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3Jv dGU6Cj4gRnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hl bmtvQGVwYW0uY29tPgo+Cj4gQWRkIHN1cHBvcnQgZm9yIExpbnV4IGdyYW50IGRldmljZSBkcml2 ZXIgZXh0ZW5zaW9uIHdoaWNoIGFsbG93cwo+IGNvbnZlcnRpbmcgZXhpc3RpbmcgZG1hLWJ1Zidz IGludG8gYW4gYXJyYXkgb2YgZ3JhbnQgcmVmZXJlbmNlcwo+IGFuZCB2aXNlIHZlcnNhLiBUaGlz IGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIExpbnV4IGFzIG90aGVyIE9TZXMKPiBoYXZlIG5vIExp bnV4IGRtYS1idWYgc3VwcG9ydC4KPgo+IEJ1bXAgZ250dGFiIGxpYnJhcnkgbWlub3IgdmVyc2lv biB0byAzLgo+Cj4gU2lnbmVkLW9mZi1ieTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtz YW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+IC0tLQo+ICAgdG9vbHMvaW5jbHVkZS94ZW4t c3lzL0xpbnV4L2dudGRldi5oICB8IDEwNiArKysrKysrKysrKysrKysrKysrKysrKysKPiAgIHRv b2xzL2xpYnMvZ250dGFiL01ha2VmaWxlICAgICAgICAgICAgfCAgIDIgKy0KPiAgIHRvb2xzL2xp YnMvZ250dGFiL2dudHRhYl9jb3JlLmMgICAgICAgfCAgMjYgKysrKysrCj4gICB0b29scy9saWJz L2dudHRhYi9nbnR0YWJfdW5pbXAuYyAgICAgIHwgIDI2ICsrKysrKwo+ICAgdG9vbHMvbGlicy9n bnR0YWIvaW5jbHVkZS94ZW5nbnR0YWIuaCB8ICA2MSArKysrKysrKysrKysrKwo+ICAgdG9vbHMv bGlicy9nbnR0YWIvbGlieGVuZ250dGFiLm1hcCAgICB8ICAgOCArKwo+ICAgdG9vbHMvbGlicy9n bnR0YWIvbGludXguYyAgICAgICAgICAgICB8IDExMyArKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICAgdG9vbHMvbGlicy9nbnR0YWIvbWluaW9zLmMgICAgICAgICAgICB8ICAyNiArKysrKysK PiAgIHRvb2xzL2xpYnMvZ250dGFiL3ByaXZhdGUuaCAgICAgICAgICAgfCAgMTMgKysrCj4gICA5 IGZpbGVzIGNoYW5nZWQsIDM4MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4KPiBkaWZm IC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS94ZW4tc3lzL0xpbnV4L2dudGRldi5oIGIvdG9vbHMvaW5j bHVkZS94ZW4tc3lzL0xpbnV4L2dudGRldi5oCj4gaW5kZXggMGNhMDdjOTJiMjFjLi5kMTYwNzYw NDRjNzEgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvaW5jbHVkZS94ZW4tc3lzL0xpbnV4L2dudGRldi5o Cj4gKysrIGIvdG9vbHMvaW5jbHVkZS94ZW4tc3lzL0xpbnV4L2dudGRldi5oCj4gQEAgLTQsNiAr NCw3IEBACj4gICAgKiBJbnRlcmZhY2UgdG8gL2Rldi94ZW4vZ250ZGV2Lgo+ICAgICoKPiAgICAq IENvcHlyaWdodCAoYykgMjAwNywgRCBHIE11cnJheQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTgs IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvLCBFUEFNIFN5c3RlbXMgSW5jLgo+ICAgICoKPiAgICAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKPiAgICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgo+IEBAIC0xNjgsNCArMTY5LDEwOSBAQCBzdHJ1Y3Qg aW9jdGxfZ250ZGV2X2dyYW50X2NvcHkgewo+ICAgICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3Jh bnRfY29weV9zZWdtZW50ICpzZWdtZW50czsKPiAgIH07Cj4gICAKPiArLyoKPiArICogRmxhZ3Mg dG8gYmUgdXNlZCB3aGlsZSByZXF1ZXN0aW5nIG1lbW9yeSBtYXBwaW5nJ3MgYmFja2luZyBzdG9y YWdlCj4gKyAqIHRvIGJlIGFsbG9jYXRlZCB3aXRoIERNQSBBUEkuCj4gKyAqLwo+ICsKPiArLyoK PiArICogVGhlIGJ1ZmZlciBpcyBiYWNrZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGVkIHdpdGggZG1h X2FsbG9jX3djLgo+ICsgKi8KPiArI2RlZmluZSBHTlRERVZfRE1BX0ZMQUdfV0MJCSgxIDw8IDAp Cj4gKwo+ICsvKgo+ICsgKiBUaGUgYnVmZmVyIGlzIGJhY2tlZCB3aXRoIG1lbW9yeSBhbGxvY2F0 ZWQgd2l0aCBkbWFfYWxsb2NfY29oZXJlbnQuCj4gKyAqLwo+ICsjZGVmaW5lIEdOVERFVl9ETUFf RkxBR19DT0hFUkVOVAkoMSA8PCAxKQo+ICsKPiArLyoKPiArICogQ3JlYXRlIGEgZG1hLWJ1ZiBb MV0gZnJvbSBncmFudCByZWZlcmVuY2VzIEByZWZzIG9mIGNvdW50IEBjb3VudCBwcm92aWRlZAo+ ICsgKiBieSB0aGUgZm9yZWlnbiBkb21haW4gQGRvbWlkIHdpdGggZmxhZ3MgQGZsYWdzLgo+ICsg Kgo+ICsgKiBCeSBkZWZhdWx0IGRtYS1idWYgaXMgYmFja2VkIGJ5IHN5c3RlbSBtZW1vcnkgcGFn ZXMsIGJ1dCBieSBwcm92aWRpbmcKPiArICogb25lIG9mIHRoZSBHTlRERVZfRE1BX0ZMQUdfWFhY IGZsYWdzIGl0IGNhbiBhbHNvIGJlIGNyZWF0ZWQgYXMKPiArICogYSBETUEgd3JpdGUtY29tYmlu ZSBvciBjb2hlcmVudCBidWZmZXIsIGUuZy4gYWxsb2NhdGVkIHdpdGggZG1hX2FsbG9jX3djLwo+ ICsgKiBkbWFfYWxsb2NfY29oZXJlbnQuCj4gKyAqCj4gKyAqIFJldHVybnMgMCBpZiBkbWEtYnVm IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKPiArICogZG1h LWJ1ZidzIGZpbGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZCBpbiBAZmQuCj4gKyAqCj4gKyAqIFsx XSBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9saW51eC9sYXRlc3Qvc291cmNlL0RvY3VtZW50 YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+ICsgKi8KPiArCj4gKyNkZWZpbmUgSU9DVExf R05UREVWX0RNQUJVRl9FWFBfRlJPTV9SRUZTIFwKPiArICAgIF9JT0MoX0lPQ19OT05FLCAnRycs IDksIFwKPiArICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZG1hYnVmX2V4cF9m cm9tX3JlZnMpKQo+ICtzdHJ1Y3QgaW9jdGxfZ250ZGV2X2RtYWJ1Zl9leHBfZnJvbV9yZWZzIHsK PiArICAgIC8qIElOIHBhcmFtZXRlcnMuICovCj4gKyAgICAvKiBTcGVjaWZpYyBvcHRpb25zIGZv ciB0aGlzIGRtYS1idWY6IHNlZSBHTlRERVZfRE1BQlVGX0ZMQUdfWFhYLiAqLwo+ICsgICAgdWlu dDMyX3QgZmxhZ3M7Cj4gKyAgICAvKiBOdW1iZXIgb2YgZ3JhbnQgcmVmZXJlbmNlcyBpbiBAcmVm cyBhcnJheS4gKi8KPiArICAgIHVpbnQzMl90IGNvdW50Owo+ICsgICAgLyogT1VUIHBhcmFtZXRl cnMuICovCj4gKyAgICAvKiBGaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGRtYS1idWYuICovCj4gKyAg ICB1aW50MzJfdCBmZDsKPiArICAgIC8qIFRoZSBkb21haW4gSUQgb2YgdGhlIGdyYW50IHJlZmVy ZW5jZXMgdG8gYmUgbWFwcGVkLiAqLwo+ICsgICAgdWludDMyX3QgZG9taWQ7Cj4gKyAgICAvKiBW YXJpYWJsZSBJTiBwYXJhbWV0ZXIuICovCj4gKyAgICAvKiBBcnJheSBvZiBncmFudCByZWZlcmVu Y2VzIG9mIHNpemUgQGNvdW50LiAqLwo+ICsgICAgdWludDMyX3QgcmVmc1sxXTsKPiArfTsKPiAr Cj4gKy8qCj4gKyAqIFRoaXMgd2lsbCBibG9jayB1bnRpbCB0aGUgZG1hLWJ1ZiB3aXRoIHRoZSBm aWxlIGRlc2NyaXB0b3IgQGZkIGlzCj4gKyAqIHJlbGVhc2VkLiBUaGlzIGlzIG9ubHkgdmFsaWQg Zm9yIGJ1ZmZlcnMgY3JlYXRlZCB3aXRoCj4gKyAqIElPQ1RMX0dOVERFVl9ETUFCVUZfRVhQX0ZS T01fUkVGUy4KPiArICoKPiArICogSWYgd2l0aGluZyBAd2FpdF90b19tcyBtaWxsaXNlY29uZHMg dGhlIGJ1ZmZlciBpcyBub3QgcmVsZWFzZWQKPiArICogdGhlbiAtRVRJTUVET1VUIGVycm9yIGlz IHJldHVybmVkLgo+ICsgKiBJZiB0aGUgYnVmZmVyIHdpdGggZmlsZSBkZXNjcmlwdG9yIEBmZCBk b2VzIG5vdCBleGlzdCBvciBoYXMgYWxyZWFkeQo+ICsgKiBiZWVuIHJlbGVhc2VkLCB0aGVuIC1F Tk9FTlQgaXMgcmV0dXJuZWQuIEZvciB2YWxpZCBmaWxlIGRlc2NyaXB0b3JzCj4gKyAqIHRoaXMg bXVzdCBub3QgYmUgdHJlYXRlZCBhcyBlcnJvci4KPiArICovCj4gKyNkZWZpbmUgSU9DVExfR05U REVWX0RNQUJVRl9FWFBfV0FJVF9SRUxFQVNFRCBcCj4gKyAgICBfSU9DKF9JT0NfTk9ORSwgJ0cn LCAxMCwgXAo+ICsgICAgICAgICBzaXplb2Yoc3RydWN0IGlvY3RsX2dudGRldl9kbWFidWZfZXhw X3dhaXRfcmVsZWFzZWQpKQo+ICtzdHJ1Y3QgaW9jdGxfZ250ZGV2X2RtYWJ1Zl9leHBfd2FpdF9y ZWxlYXNlZCB7Cj4gKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCj4gKyAgICB1aW50MzJfdCBmZDsK PiArICAgIHVpbnQzMl90IHdhaXRfdG9fbXM7Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBJbXBvcnQg YSBkbWEtYnVmIHdpdGggZmlsZSBkZXNjcmlwdG9yIEBmZCBhbmQgZXhwb3J0IGdyYW50ZWQgcmVm ZXJlbmNlcwo+ICsgKiB0byB0aGUgcGFnZXMgb2YgdGhhdCBkbWEtYnVmIGludG8gYXJyYXkgQHJl ZnMgb2Ygc2l6ZSBAY291bnQuCj4gKyAqLwo+ICsjZGVmaW5lIElPQ1RMX0dOVERFVl9ETUFCVUZf SU1QX1RPX1JFRlMgXAo+ICsgICAgX0lPQyhfSU9DX05PTkUsICdHJywgMTEsIFwKPiArICAgICAg ICAgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZG1hYnVmX2ltcF90b19yZWZzKSkKPiArc3Ry dWN0IGlvY3RsX2dudGRldl9kbWFidWZfaW1wX3RvX3JlZnMgewo+ICsgICAgLyogSU4gcGFyYW1l dGVycy4gKi8KPiArICAgIC8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZG1hLWJ1Zi4gKi8KPiAr ICAgIHVpbnQzMl90IGZkOwo+ICsgICAgLyogTnVtYmVyIG9mIGdyYW50IHJlZmVyZW5jZXMgaW4g QHJlZnMgYXJyYXkuICovCj4gKyAgICB1aW50MzJfdCBjb3VudDsKPiArICAgIC8qIFRoZSBkb21h aW4gSUQgZm9yIHdoaWNoIHJlZmVyZW5jZXMgdG8gYmUgZ3JhbnRlZC4gKi8KPiArICAgIHVpbnQz Ml90IGRvbWlkOwo+ICsgICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8uICovCj4gKyAgICB1 aW50MzJfdCByZXNlcnZlZDsKPiArICAgIC8qIE9VVCBwYXJhbWV0ZXJzLiAqLwo+ICsgICAgLyog QXJyYXkgb2YgZ3JhbnQgcmVmZXJlbmNlcyBvZiBzaXplIEBjb3VudC4gKi8KPiArICAgIHVpbnQz Ml90IHJlZnNbMV07Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIHdpbGwgY2xvc2UgYWxsIHJl ZmVyZW5jZXMgdG8gYW4gaW1wb3J0ZWQgYnVmZmVyLCBzbyBpdCBjYW4gYmUKPiArICogcmVsZWFz ZWQgYnkgdGhlIG93bmVyLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGJ1ZmZlcnMgY3JlYXRlZCB3 aXRoCj4gKyAqIElPQ1RMX0dOVERFVl9ETUFCVUZfSU1QX1RPX1JFRlMuCj4gKyAqLwo+ICsjZGVm aW5lIElPQ1RMX0dOVERFVl9ETUFCVUZfSU1QX1JFTEVBU0UgXAo+ICsgICAgX0lPQyhfSU9DX05P TkUsICdHJywgMTIsIFwKPiArICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZG1h YnVmX2ltcF9yZWxlYXNlKSkKPiArc3RydWN0IGlvY3RsX2dudGRldl9kbWFidWZfaW1wX3JlbGVh c2Ugewo+ICsgICAgLyogSU4gcGFyYW1ldGVycyAqLwo+ICsgICAgdWludDMyX3QgZmQ7Cj4gKyAg ICB1aW50MzJfdCByZXNlcnZlZDsKPiArfTsKPiArCj4gICAjZW5kaWYgLyogX19MSU5VWF9QVUJM SUNfR05UREVWX0hfXyAqLwo+IGRpZmYgLS1naXQgYS90b29scy9saWJzL2dudHRhYi9NYWtlZmls ZSBiL3Rvb2xzL2xpYnMvZ250dGFiL01ha2VmaWxlCj4gaW5kZXggNmMyZTdlMzZhMmMzLi4wYmVm YmQxOGYxYWYgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlicy9nbnR0YWIvTWFrZWZpbGUKPiArKysg Yi90b29scy9saWJzL2dudHRhYi9NYWtlZmlsZQo+IEBAIC0yLDcgKzIsNyBAQCBYRU5fUk9PVCA9 ICQoQ1VSRElSKS8uLi8uLi8uLgo+ICAgaW5jbHVkZSAkKFhFTl9ST09UKS90b29scy9SdWxlcy5t awo+ICAgCj4gICBNQUpPUiAgICA9IDEKPiAtTUlOT1IgICAgPSAyCj4gK01JTk9SICAgID0gMwo+ ICAgU0hMSUJfTERGTEFHUyArPSAtV2wsLS12ZXJzaW9uLXNjcmlwdD1saWJ4ZW5nbnR0YWIubWFw Cj4gICAKPiAgIENGTEFHUyAgICs9IC1XZXJyb3IgLVdtaXNzaW5nLXByb3RvdHlwZXMKPiBkaWZm IC0tZ2l0IGEvdG9vbHMvbGlicy9nbnR0YWIvZ250dGFiX2NvcmUuYyBiL3Rvb2xzL2xpYnMvZ250 dGFiL2dudHRhYl9jb3JlLmMKPiBpbmRleCBiZDA3NWY4MThhYTYuLjkyZTcyMjhhMjY3MSAxMDA2 NDQKPiAtLS0gYS90b29scy9saWJzL2dudHRhYi9nbnR0YWJfY29yZS5jCj4gKysrIGIvdG9vbHMv bGlicy9nbnR0YWIvZ250dGFiX2NvcmUuYwo+IEBAIC0xLDYgKzEsNyBAQAo+ICAgLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgo+ICAgICoKPiAgICAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4LCBEIEcg TXVycmF5IDxEZXJlay5NdXJyYXlAY2wuY2FtLmFjLnVrPgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTgsIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvLCBFUEFNIFN5c3RlbXMgSW5jLgo+ICAgICoKPiAg ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKPiAgICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKPiBAQCAtMTM0LDYgKzEzNSwzMSBAQCBpbnQgeGVuZ250dGFiX2dy YW50X2NvcHkoeGVuZ250dGFiX2hhbmRsZSAqeGd0LAo+ICAgewo+ICAgICAgIHJldHVybiBvc2Rl cF9nbnR0YWJfZ3JhbnRfY29weSh4Z3QsIGNvdW50LCBzZWdzKTsKPiAgIH0KPiArCj4gK2ludCB4 ZW5nbnR0YWJfZG1hYnVmX2V4cF9mcm9tX3JlZnMoeGVuZ250dGFiX2hhbmRsZSAqeGd0LCB1aW50 MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBmbGFncywgdWludDMyX3QgY291bnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDMyX3QgKnJlZnMsIHVpbnQzMl90ICpmZCkKPiArewo+ICsgICAgcmV0 dXJuIG9zZGVwX2dudHRhYl9kbWFidWZfZXhwX2Zyb21fcmVmcyh4Z3QsIGRvbWlkLCBmbGFncywg Y291bnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl ZnMsIGZkKTsKPiArfQo+ICsKPiAraW50IHhlbmdudHRhYl9kbWFidWZfZXhwX3dhaXRfcmVsZWFz ZWQoeGVuZ250dGFiX2hhbmRsZSAqeGd0LCB1aW50MzJfdCBmZCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2FpdF90b19tcykKPiArewo+ICsgICAg cmV0dXJuIG9zZGVwX2dudHRhYl9kbWFidWZfZXhwX3dhaXRfcmVsZWFzZWQoeGd0LCBmZCwgd2Fp dF90b19tcyk7Cj4gK30KPiArCj4gK2ludCB4ZW5nbnR0YWJfZG1hYnVmX2ltcF90b19yZWZzKHhl bmdudHRhYl9oYW5kbGUgKnhndCwgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGZkLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3QgKnJl ZnMpCj4gK3sKPiArICAgIHJldHVybiBvc2RlcF9nbnR0YWJfZG1hYnVmX2ltcF90b19yZWZzKHhn dCwgZG9taWQsIGZkLCBjb3VudCwgcmVmcyk7Cj4gK30KPiArCj4gK2ludCB4ZW5nbnR0YWJfZG1h YnVmX2ltcF9yZWxlYXNlKHhlbmdudHRhYl9oYW5kbGUgKnhndCwgdWludDMyX3QgZmQpCj4gK3sK PiArICAgIHJldHVybiBvc2RlcF9nbnR0YWJfZG1hYnVmX2ltcF9yZWxlYXNlKHhndCwgZmQpOwo+ ICt9Cj4gICAvKgo+ICAgICogTG9jYWwgdmFyaWFibGVzOgo+ICAgICogbW9kZTogQwo+IGRpZmYg LS1naXQgYS90b29scy9saWJzL2dudHRhYi9nbnR0YWJfdW5pbXAuYyBiL3Rvb2xzL2xpYnMvZ250 dGFiL2dudHRhYl91bmltcC5jCj4gaW5kZXggMjZlNGVlMTI5ZDAzLi5kZWUxYWZkMjY0N2YgMTAw NjQ0Cj4gLS0tIGEvdG9vbHMvbGlicy9nbnR0YWIvZ250dGFiX3VuaW1wLmMKPiArKysgYi90b29s cy9saWJzL2dudHRhYi9nbnR0YWJfdW5pbXAuYwo+IEBAIC0xLDYgKzEsNyBAQAo+ICAgLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgo+ICAgICoKPiAgICAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4LCBE IEcgTXVycmF5IDxEZXJlay5NdXJyYXlAY2wuY2FtLmFjLnVrPgo+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMTgsIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvLCBFUEFNIFN5c3RlbXMgSW5jLgo+ICAgICoK PiAgICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKPiAgICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiBAQCAtODQsNiArODUsMzEgQEAgaW50IHhlbmdudHRhYl9n cmFudF9jb3B5KHhlbmdudHRhYl9oYW5kbGUgKnhndCwKPiAgIHsKPiAgICAgICBhYm9ydCgpOwo+ ICAgfQo+ICsKPiAraW50IHhlbmdudHRhYl9kbWFidWZfZXhwX2Zyb21fcmVmcyh4ZW5nbnR0YWJf aGFuZGxlICp4Z3QsIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IGZsYWdzLCB1aW50MzJfdCBjb3VudCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAqcmVmcywgdWludDMyX3QgKmZk KQo+ICt7Cj4gKyAgICBhYm9ydCgpOwo+ICt9Cj4gKwo+ICtpbnQgeGVuZ250dGFiX2RtYWJ1Zl9l eHBfd2FpdF9yZWxlYXNlZCh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsIHVpbnQzMl90IGZkLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3YWl0X3RvX21z KQo+ICt7Cj4gKyAgICBhYm9ydCgpOwo+ICt9Cj4gKwo+ICtpbnQgeGVuZ250dGFiX2RtYWJ1Zl9p bXBfdG9fcmVmcyh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsIHVpbnQzMl90IGRvbWlkLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmZCwgdWludDMyX3QgY291bnQs IHVpbnQzMl90ICpyZWZzKQo+ICt7Cj4gKyAgICBhYm9ydCgpOwo+ICt9Cj4gKwo+ICtpbnQgeGVu Z250dGFiX2RtYWJ1Zl9pbXBfcmVsZWFzZSh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsIHVpbnQzMl90 IGZkKQo+ICt7Cj4gKyAgICBhYm9ydCgpOwo+ICt9Cj4gKwo+ICAgLyoKPiAgICAqIExvY2FsIHZh cmlhYmxlczoKPiAgICAqIG1vZGU6IEMKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9nbnR0YWIv aW5jbHVkZS94ZW5nbnR0YWIuaCBiL3Rvb2xzL2xpYnMvZ250dGFiL2luY2x1ZGUveGVuZ250dGFi LmgKPiBpbmRleCA5MWQ0Y2Q1YmRkODguLjExMWZjODhjYWViMyAxMDA2NDQKPiAtLS0gYS90b29s cy9saWJzL2dudHRhYi9pbmNsdWRlL3hlbmdudHRhYi5oCj4gKysrIGIvdG9vbHMvbGlicy9nbnR0 YWIvaW5jbHVkZS94ZW5nbnR0YWIuaAo+IEBAIC0xOCw2ICsxOCw3IEBACj4gICAgKiBBIGxpYnJh cnkgZm9yIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdGhlIFhlbiBjb250cm9sIGludGVyZmFjZXMuCj4g ICAgKgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDgsIEQgRyBNdXJyYXkgPERlcmVrLk11 cnJheUBjbC5jYW0uYWMudWs+Cj4gKyAqIENvcHlyaWdodCAoYykgMjAxOCwgT2xla3NhbmRyIEFu ZHJ1c2hjaGVua28sIEVQQU0gU3lzdGVtcyBJbmMuCj4gICAgKi8KPiAgICNpZm5kZWYgWEVOR05U VEFCX0gKPiAgICNkZWZpbmUgWEVOR05UVEFCX0gKPiBAQCAtMjk1LDYgKzI5Niw2NiBAQCBpbnQg eGVuZ250dGFiX2dyYW50X2NvcHkoeGVuZ250dGFiX2hhbmRsZSAqeGd0LAo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvdW50LAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHhlbmdudHRhYl9ncmFudF9jb3B5X3NlZ21lbnRfdCAqc2Vncyk7Cj4gICAKPiArLyoKPiAr ICogRmxhZ3MgdG8gYmUgdXNlZCB3aGlsZSByZXF1ZXN0aW5nIG1lbW9yeSBtYXBwaW5nJ3MgYmFj a2luZyBzdG9yYWdlCj4gKyAqIHRvIGJlIGFsbG9jYXRlZCB3aXRoIERNQSBBUEkuCj4gKyAqLwo+ ICsKPiArLyoKPiArICogVGhlIGJ1ZmZlciBpcyBiYWNrZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGVk IHdpdGggZG1hX2FsbG9jX3djLgo+ICsgKi8KPiArI2RlZmluZSBHTlRERVZfRE1BX0ZMQUdfV0MJ CSgxIDw8IDApCj4gKwo+ICsvKgo+ICsgKiBUaGUgYnVmZmVyIGlzIGJhY2tlZCB3aXRoIG1lbW9y eSBhbGxvY2F0ZWQgd2l0aCBkbWFfYWxsb2NfY29oZXJlbnQuCj4gKyAqLwo+ICsjZGVmaW5lIEdO VERFVl9ETUFfRkxBR19DT0hFUkVOVAkoMSA8PCAxKQo+ICsKPiArLyoqCj4gKyAqIENyZWF0ZSBh IGRtYS1idWYgWzFdIGZyb20gZ3JhbnQgcmVmZXJlbmNlcyBAcmVmcyBvZiBjb3VudCBAY291bnQg cHJvdmlkZWQKPiArICogYnkgdGhlIGZvcmVpZ24gZG9tYWluIEBkb21pZCB3aXRoIGZsYWdzIEBm bGFncy4KPiArICoKPiArICogQnkgZGVmYXVsdCBkbWEtYnVmIGlzIGJhY2tlZCBieSBzeXN0ZW0g bWVtb3J5IHBhZ2VzLCBidXQgYnkgcHJvdmlkaW5nCj4gKyAqIG9uZSBvZiB0aGUgR05UREVWX0RN QV9GTEFHX1hYWCBmbGFncyBpdCBjYW4gYWxzbyBiZSBjcmVhdGVkIGFzCj4gKyAqIGEgRE1BIHdy aXRlLWNvbWJpbmUgb3IgY29oZXJlbnQgYnVmZmVyLgo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYg ZG1hLWJ1ZiB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYW5kIHRoZSBjb3JyZXNwb25kaW5nCj4g KyAqIGRtYS1idWYncyBmaWxlIGRlc2NyaXB0b3IgaXMgcmV0dXJuZWQgaW4gQGZkLgo+ICsgKgo+ ICsgKiBbMV0gaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvbGF0ZXN0L3NvdXJjZS9E b2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3QKPiArICovCj4gK2ludCB4ZW5nbnR0 YWJfZG1hYnVmX2V4cF9mcm9tX3JlZnMoeGVuZ250dGFiX2hhbmRsZSAqeGd0LCB1aW50MzJfdCBk b21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmbGFn cywgdWludDMyX3QgY291bnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdWludDMyX3QgKnJlZnMsIHVpbnQzMl90ICpmZCk7Cj4gKwo+ICsvKgo+ICsgKiBUaGlz IHdpbGwgYmxvY2sgdW50aWwgdGhlIGRtYS1idWYgd2l0aCB0aGUgZmlsZSBkZXNjcmlwdG9yIEBm ZCBpcwo+ICsgKiByZWxlYXNlZC4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBidWZmZXJzIGNyZWF0 ZWQgd2l0aAo+ICsgKiBJT0NUTF9HTlRERVZfRE1BQlVGX0VYUF9GUk9NX1JFRlMuCj4gKyAqCj4g KyAqIElmIHdpdGhpbmcgQHdhaXRfdG9fbXMgbWlsbGlzZWNvbmRzIHRoZSBidWZmZXIgaXMgbm90 IHJlbGVhc2VkCj4gKyAqIHRoZW4gLUVUSU1FRE9VVCBlcnJvciBpcyByZXR1cm5lZC4KPiArICog SWYgdGhlIGJ1ZmZlciB3aXRoIGZpbGUgZGVzY3JpcHRvciBAZmQgZG9lcyBub3QgZXhpc3Qgb3Ig aGFzIGFscmVhZHkKPiArICogYmVlbiByZWxlYXNlZCwgdGhlbiAtRU5PRU5UIGlzIHJldHVybmVk LiBGb3IgdmFsaWQgZmlsZSBkZXNjcmlwdG9ycwo+ICsgKiB0aGlzIG11c3Qgbm90IGJlIHRyZWF0 ZWQgYXMgZXJyb3IuCj4gKyAqLwo+ICtpbnQgeGVuZ250dGFiX2RtYWJ1Zl9leHBfd2FpdF9yZWxl YXNlZCh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsIHVpbnQzMl90IGZkLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3YWl0X3RvX21zKTsKPiArCj4gKy8q Cj4gKyAqIEltcG9ydCBhIGRtYS1idWYgd2l0aCBmaWxlIGRlc2NyaXB0b3IgQGZkIGFuZCBleHBv cnQgZ3JhbnRlZCByZWZlcmVuY2VzCj4gKyAqIHRvIHRoZSBwYWdlcyBvZiB0aGF0IGRtYS1idWYg aW50byBhcnJheSBAcmVmcyBvZiBzaXplIEBjb3VudC4KPiArICovCj4gK2ludCB4ZW5nbnR0YWJf ZG1hYnVmX2ltcF90b19yZWZzKHhlbmdudHRhYl9oYW5kbGUgKnhndCwgdWludDMyX3QgZG9taWQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZkLCB1aW50MzJf dCBjb3VudCwgdWludDMyX3QgKnJlZnMpOwo+ICsKPiArLyoKPiArICogVGhpcyB3aWxsIGNsb3Nl IGFsbCByZWZlcmVuY2VzIHRvIGFuIGltcG9ydGVkIGJ1ZmZlciwgc28gaXQgY2FuIGJlCj4gKyAq IHJlbGVhc2VkIGJ5IHRoZSBvd25lci4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBidWZmZXJzIGNy ZWF0ZWQgd2l0aAo+ICsgKiBJT0NUTF9HTlRERVZfRE1BQlVGX0lNUF9UT19SRUZTLgo+ICsgKi8K PiAraW50IHhlbmdudHRhYl9kbWFidWZfaW1wX3JlbGVhc2UoeGVuZ250dGFiX2hhbmRsZSAqeGd0 LCB1aW50MzJfdCBmZCk7Cj4gKwo+ICAgLyoKPiAgICAqIEdyYW50IFNoYXJpbmcgSW50ZXJmYWNl IChhbGxvY2F0aW5nIGFuZCBncmFudGluZyBwYWdlcyB0byBvdGhlcnMpCj4gICAgKi8KPiBkaWZm IC0tZ2l0IGEvdG9vbHMvbGlicy9nbnR0YWIvbGlieGVuZ250dGFiLm1hcCBiL3Rvb2xzL2xpYnMv Z250dGFiL2xpYnhlbmdudHRhYi5tYXAKPiBpbmRleCBkNWRhMzg4YTBkOGQuLjlkZTIxODM4MTBh OSAxMDA2NDQKPiAtLS0gYS90b29scy9saWJzL2dudHRhYi9saWJ4ZW5nbnR0YWIubWFwCj4gKysr IGIvdG9vbHMvbGlicy9nbnR0YWIvbGlieGVuZ250dGFiLm1hcAo+IEBAIC0zMiwzICszMiwxMSBA QCBWRVJTXzEuMiB7Cj4gICAJCXhlbmdudHRhYl9mZDsKPiAgIAkJeGVuZ250c2hyX2ZkOwo+ICAg fSBWRVJTXzEuMTsKPiArCj4gK1ZFUlNfMS4zIHsKPiArCWdsb2JhbDoKPiArCQl4ZW5nbnR0YWJf ZG1hYnVmX2V4cF9mcm9tX3JlZnM7Cj4gKwkJeGVuZ250dGFiX2RtYWJ1Zl9leHBfd2FpdF9yZWxl YXNlZDsKPiArCQl4ZW5nbnR0YWJfZG1hYnVmX2ltcF90b19yZWZzOwo+ICsJCXhlbmdudHRhYl9k bWFidWZfaW1wX3JlbGVhc2U7Cj4gK30gVkVSU18xLjI7Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnMvZ250dGFiL2xpbnV4LmMgYi90b29scy9saWJzL2dudHRhYi9saW51eC5jCj4gaW5kZXggODM0 N2RkZDNkOWNmLi45NzY1MTQ2ZjdlYjYgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlicy9nbnR0YWIv bGludXguYwo+ICsrKyBiL3Rvb2xzL2xpYnMvZ250dGFiL2xpbnV4LmMKPiBAQCAtMSw1ICsxLDYg QEAKPiAgIC8qCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCwgRCBHIE11cnJheSA8RGVy ZWsuTXVycmF5QGNsLmNhbS5hYy51az4KPiArICogQ29weXJpZ2h0IChjKSAyMDE4LCBPbGVrc2Fu ZHIgQW5kcnVzaGNoZW5rbywgRVBBTSBTeXN0ZW1zIEluYy4KPiAgICAqCj4gICAgKiBUaGlzIGxp YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4g ICAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gQEAgLTMwOSw2ICszMTAsMTE4IEBAIGludCBvc2RlcF9nbnR0YWJfZ3JhbnRfY29w eSh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsCj4gICAgICAgcmV0dXJuIHJjOwo+ICAgfQo+ICAgCj4g K2ludCBvc2RlcF9nbnR0YWJfZG1hYnVmX2V4cF9mcm9tX3JlZnMoeGVuZ250dGFiX2hhbmRsZSAq eGd0LCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBmbGFncywgdWludDMyX3QgY291bnQsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKnJlZnMsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmRtYWJ1Zl9mZCkKPiArewo+ICsg ICAgc3RydWN0IGlvY3RsX2dudGRldl9kbWFidWZfZXhwX2Zyb21fcmVmcyAqZnJvbV9yZWZzOwo+ ICsgICAgaW50IHJjID0gMDsKPiArCj4gKyAgICBpZiAoICFjb3VudCApCj4gKyAgICB7Cj4gKyAg ICAgICAgZXJybm8gPSBFSU5WQUw7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsK PiArICAgIGZyb21fcmVmcyA9IG1hbGxvYyhzaXplb2YoKmZyb21fcmVmcykgKwo+ICsgICAgICAg ICAgICAgICAgICAgICAgIChjb3VudCAtIDEpICogc2l6ZW9mKGZyb21fcmVmcy0+cmVmc1swXSkp Owo+ICsgICAgaWYgKCAhZnJvbV9yZWZzICkKPiArICAgIHsKPiArICAgICAgICBlcnJubyA9IEVO T01FTTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZnJvbV9yZWZz LT5mbGFncyA9IGZsYWdzOwo+ICsgICAgZnJvbV9yZWZzLT5jb3VudCA9IGNvdW50Owo+ICsgICAg ZnJvbV9yZWZzLT5kb21pZCA9IGRvbWlkOwo+ICsKPiArICAgIG1lbWNweShmcm9tX3JlZnMtPnJl ZnMsIHJlZnMsIGNvdW50ICogc2l6ZW9mKGZyb21fcmVmcy0+cmVmc1swXSkpOwo+ICsKPiArICAg IGlmICggKHJjID0gaW9jdGwoeGd0LT5mZCwgSU9DVExfR05UREVWX0RNQUJVRl9FWFBfRlJPTV9S RUZTLCBmcm9tX3JlZnMpKSApCj4gKyAgICB7Cj4gKyAgICAgICAgR1RFUlJPUih4Z3QtPmxvZ2dl ciwgImlvY3RsIERNQUJVRl9FWFBfRlJPTV9SRUZTIGZhaWxlZCIpOwo+ICsgICAgICAgIGdvdG8g b3V0Owo+ICsgICAgfQo+ICsKPiArICAgICpkbWFidWZfZmQgPSBmcm9tX3JlZnMtPmZkOwo+ICsK PiArb3V0Ogo+ICsgICAgZnJlZShmcm9tX3JlZnMpOwo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4g Kwo+ICtpbnQgb3NkZXBfZ250dGFiX2RtYWJ1Zl9leHBfd2FpdF9yZWxlYXNlZCh4ZW5nbnR0YWJf aGFuZGxlICp4Z3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IGZkLCB1aW50MzJfdCB3YWl0X3RvX21zKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaW9j dGxfZ250ZGV2X2RtYWJ1Zl9leHBfd2FpdF9yZWxlYXNlZCB3YWl0Owo+ICsgICAgaW50IHJjOwo+ ICsKPiArICAgIHdhaXQuZmQgPSBmZDsKPiArICAgIHdhaXQud2FpdF90b19tcyA9IHdhaXRfdG9f bXM7Cj4gKwo+ICsgICAgaWYgKCAocmMgPSBpb2N0bCh4Z3QtPmZkLCBJT0NUTF9HTlRERVZfRE1B QlVGX0VYUF9XQUlUX1JFTEVBU0VELCAmd2FpdCkpICkgewo+ICsgICAgICAgIGlmICggZXJybm8g PT0gRU5PRU5UICkgewo+ICsgICAgICAgICAgICAvKiBUaGUgYnVmZmVyIG1heSBoYXZlIGFscmVh ZHkgYmVlbiByZWxlYXNlZC4gKi8KPiArICAgICAgICAgICAgZXJybm8gPSAwOwo+ICsgICAgICAg ICAgICByYyA9IDA7Cj4gKyAgICAgICAgfSBlbHNlCj4gKyAgICAgICAgICAgIEdURVJST1IoeGd0 LT5sb2dnZXIsICJpb2N0bCBETUFCVUZfRVhQX1dBSVRfUkVMRUFTRUQgZmFpbGVkIik7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtpbnQgb3NkZXBfZ250dGFiX2Rt YWJ1Zl9pbXBfdG9fcmVmcyh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsIHVpbnQzMl90IGRvbWlkLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmZCwgdWludDMy X3QgY291bnQsIHVpbnQzMl90ICpyZWZzKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2 X2RtYWJ1Zl9pbXBfdG9fcmVmcyAqdG9fcmVmczsKPiArICAgIGludCByYyA9IDA7Cj4gKwo+ICsg ICAgaWYgKCAhY291bnQgKQo+ICsgICAgewo+ICsgICAgICAgIGVycm5vID0gRUlOVkFMOwo+ICsg ICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICB0b19yZWZzID0gbWFsbG9jKHNp emVvZigqdG9fcmVmcykgKwo+ICsgICAgICAgICAgICAgICAgICAgICAoY291bnQgLSAxKSAqIHNp emVvZih0b19yZWZzLT5yZWZzWzBdKSk7Cj4gKyAgICBpZiAoICF0b19yZWZzICkKPiArICAgIHsK PiArICAgICAgICBlcnJubyA9IEVOT01FTTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgdG9fcmVmcy0+ZmQgPSBmZDsKPiArICAgIHRvX3JlZnMtPmNvdW50ID0gY291 bnQ7Cj4gKyAgICB0b19yZWZzLT5kb21pZCA9IGRvbWlkOwo+ICsKPiArICAgIGlmICggKHJjID0g aW9jdGwoeGd0LT5mZCwgSU9DVExfR05UREVWX0RNQUJVRl9JTVBfVE9fUkVGUywgdG9fcmVmcykp ICkKPiArICAgIHsKPiArICAgICAgICBHVEVSUk9SKHhndC0+bG9nZ2VyLCAiaW9jdGwgRE1BQlVG X0lNUF9UT19SRUZTIGZhaWxlZCIpOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsK PiArICAgIG1lbWNweShyZWZzLCB0b19yZWZzLT5yZWZzLCBjb3VudCAqIHNpemVvZigqcmVmcykp Owo+ICsKPiArb3V0Ogo+ICsgICAgZnJlZSh0b19yZWZzKTsKPiArICAgIHJldHVybiByYzsKPiAr fQo+ICsKPiAraW50IG9zZGVwX2dudHRhYl9kbWFidWZfaW1wX3JlbGVhc2UoeGVuZ250dGFiX2hh bmRsZSAqeGd0LCB1aW50MzJfdCBmZCkKPiArewo+ICsgICAgc3RydWN0IGlvY3RsX2dudGRldl9k bWFidWZfaW1wX3JlbGVhc2UgcmVsZWFzZTsKPiArICAgIGludCByYzsKPiArCj4gKyAgICByZWxl YXNlLmZkID0gZmQ7Cj4gKwo+ICsgICAgaWYgKCAocmMgPSBpb2N0bCh4Z3QtPmZkLCBJT0NUTF9H TlRERVZfRE1BQlVGX0lNUF9SRUxFQVNFLCAmcmVsZWFzZSkpICkKPiArICAgICAgICBHVEVSUk9S KHhndC0+bG9nZ2VyLCAiaW9jdGwgRE1BQlVGX0lNUF9SRUxFQVNFIGZhaWxlZCIpOwo+ICsKPiAr ICAgIHJldHVybiByYzsKPiArfQo+ICsKPiAgIGludCBvc2RlcF9nbnRzaHJfb3Blbih4ZW5nbnRz aHJfaGFuZGxlICp4Z3MpCj4gICB7Cj4gICAgICAgaW50IGZkID0gb3BlbihERVZYRU4gImdudGFs bG9jIiwgT19SRFdSKTsKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9nbnR0YWIvbWluaW9zLmMg Yi90b29scy9saWJzL2dudHRhYi9taW5pb3MuYwo+IGluZGV4IDA5NTFiYzliYWM1Yi4uZjc4Y2Fh ZGQzMDQzIDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2xpYnMvZ250dGFiL21pbmlvcy5jCj4gKysrIGIv dG9vbHMvbGlicy9nbnR0YWIvbWluaW9zLmMKPiBAQCAtMTEyLDYgKzExMiwzMiBAQCBpbnQgb3Nk ZXBfZ250dGFiX2dyYW50X2NvcHkoeGVuZ250dGFiX2hhbmRsZSAqeGd0LAo+ICAgewo+ICAgICAg IHJldHVybiAtMTsKPiAgIH0KPiArCj4gK2ludCBvc2RlcF9nbnR0YWJfZG1hYnVmX2V4cF9mcm9t X3JlZnMoeGVuZ250dGFiX2hhbmRsZSAqeGd0LCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmbGFncywgdWludDMyX3QgY291 bnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMy X3QgKnJlZnMsIHVpbnQzMl90ICpmZCkKPiArewo+ICsgICAgcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ ICtpbnQgb3NkZXBfZ250dGFiX2RtYWJ1Zl9leHBfd2FpdF9yZWxlYXNlZCh4ZW5nbnR0YWJfaGFu ZGxlICp4Z3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IGZkLCB1aW50MzJfdCB3YWl0X3RvX21zKQo+ICt7Cj4gKyAgICByZXR1cm4gLTE7Cj4g K30KPiArCj4gK2ludCBvc2RlcF9nbnR0YWJfZG1hYnVmX2ltcF90b19yZWZzKHhlbmdudHRhYl9o YW5kbGUgKnhndCwgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IGZkLCB1aW50MzJfdCBjb3VudCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlZnMpCj4gK3sKPiArICAgIHJldHVybiAt MTsKPiArfQo+ICsKPiAraW50IG9zZGVwX2dudHRhYl9kbWFidWZfaW1wX3JlbGVhc2UoeGVuZ250 dGFiX2hhbmRsZSAqeGd0LCB1aW50MzJfdCBmZCkKPiArewo+ICsgICAgcmV0dXJuIC0xOwo+ICt9 Cj4gKwo+ICAgLyoKPiAgICAqIExvY2FsIHZhcmlhYmxlczoKPiAgICAqIG1vZGU6IEMKPiBkaWZm IC0tZ2l0IGEvdG9vbHMvbGlicy9nbnR0YWIvcHJpdmF0ZS5oIGIvdG9vbHMvbGlicy9nbnR0YWIv cHJpdmF0ZS5oCj4gaW5kZXggZWQ4ZGY0MGRlZjBkLi5jNWUyMzYzOWIxNDEgMTAwNjQ0Cj4gLS0t IGEvdG9vbHMvbGlicy9nbnR0YWIvcHJpdmF0ZS5oCj4gKysrIGIvdG9vbHMvbGlicy9nbnR0YWIv cHJpdmF0ZS5oCj4gQEAgLTM1LDYgKzM1LDE5IEBAIGludCBvc2RlcF9nbnR0YWJfZ3JhbnRfY29w eSh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgY291bnQsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuZ250dGFi X2dyYW50X2NvcHlfc2VnbWVudF90ICpzZWdzKTsKPiAgIAo+ICtpbnQgb3NkZXBfZ250dGFiX2Rt YWJ1Zl9leHBfZnJvbV9yZWZzKHhlbmdudHRhYl9oYW5kbGUgKnhndCwgdWludDMyX3QgZG9taWQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxhZ3Ms IHVpbnQzMl90IGNvdW50LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVpbnQzMl90ICpyZWZzLCB1aW50MzJfdCAqZmQpOwo+ICsKPiAraW50IG9zZGVwX2du dHRhYl9kbWFidWZfZXhwX3dhaXRfcmVsZWFzZWQoeGVuZ250dGFiX2hhbmRsZSAqeGd0LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmZCwgdWlu dDMyX3Qgd2FpdF90b19tcyk7Cj4gKwo+ICtpbnQgb3NkZXBfZ250dGFiX2RtYWJ1Zl9pbXBfdG9f cmVmcyh4ZW5nbnR0YWJfaGFuZGxlICp4Z3QsIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmZCwgdWludDMyX3QgY291bnQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyZWZzKTsKPiAr Cj4gK2ludCBvc2RlcF9nbnR0YWJfZG1hYnVmX2ltcF9yZWxlYXNlKHhlbmdudHRhYl9oYW5kbGUg KnhndCwgdWludDMyX3QgZmQpOwo+ICsKPiAgIGludCBvc2RlcF9nbnRzaHJfb3Blbih4ZW5nbnRz aHJfaGFuZGxlICp4Z3MpOwo+ICAgaW50IG9zZGVwX2dudHNocl9jbG9zZSh4ZW5nbnRzaHJfaGFu ZGxlICp4Z3MpOwo+ICAgCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1k ZXZlbA==