Return-path: Received: from mail-qy0-f174.google.com ([209.85.216.174]:56656 "EHLO mail-qy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756002Ab1BXP4Z (ORCPT ); Thu, 24 Feb 2011 10:56:25 -0500 Received: by qyk7 with SMTP id 7so5024140qyk.19 for ; Thu, 24 Feb 2011 07:56:23 -0800 (PST) MIME-Version: 1.0 Reply-To: sedat.dilek@gmail.com In-Reply-To: <1298554926.4775.4.camel@jlt3.sipsolutions.net> References: <1298554926.4775.4.camel@jlt3.sipsolutions.net> Date: Thu, 24 Feb 2011 16:56:20 +0100 Message-ID: Subject: Re: [PATCH] mac80211: make tx() operation return void From: Sedat Dilek To: Johannes Berg Cc: "John W. Linville" , linux-wireless Content-Type: multipart/mixed; boundary=001636426d7b4e2520049d0941b3 Sender: linux-wireless-owner@vger.kernel.org List-ID: --001636426d7b4e2520049d0941b3 Content-Type: text/plain; charset=UTF-8 On Thu, Feb 24, 2011 at 2:42 PM, Johannes Berg wrote: > From: Johannes Berg > > The return value of the tx operation is commonly > misused by drivers, leading to errors. All drivers > will drop frames if they fail to TX the frame, and > they must also properly manage the queues (if they > didn't, mac80211 would already warn). > > Removing the ability for drivers to return a BUSY > value also allows significant cleanups of the TX > TX handling code in mac80211. > > Note that this also fixes a bug in ath9k_htc, the > old "return -1" there was wrong. > > Signed-off-by: Johannes Berg > Tested-by: Sedat Dilek [ath5k] > Acked-by: Gertjan van Wingerde [rt2x00] > Acked-by: Larry Finger [b43, rtl8187, rtlwifi] > Acked-by: Luciano Coelho [wl12xx] > --- > I've fixed, but not even compiled, the staging drivers. > Will this patch go into 2.6.39? I have modified it as a v2 to fit latest linux-next ("apply-tested"). - Sedat - --001636426d7b4e2520049d0941b3 Content-Type: text/x-diff; charset=US-ASCII; name="0001-mac80211-make-tx-operation-return-void-v2.patch" Content-Disposition: attachment; filename="0001-mac80211-make-tx-operation-return-void-v2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gkjuug8c0 RnJvbSAzMTFmZjMzZjA4MDM3ZjVmNDc2NmZmNjE1MWI4YTFlYzlhZTlkMDhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lcy5iZXJnQGludGVsLmNv bT4KRGF0ZTogVGh1LCAyNCBGZWIgMjAxMSAxMzo0MjowNiArMDAwMApTdWJqZWN0OiBbUEFUQ0hd IG1hYzgwMjExOiBtYWtlIHR4KCkgb3BlcmF0aW9uIHJldHVybiB2b2lkICh2MikKClRoZSByZXR1 cm4gdmFsdWUgb2YgdGhlIHR4IG9wZXJhdGlvbiBpcyBjb21tb25seQptaXN1c2VkIGJ5IGRyaXZl cnMsIGxlYWRpbmcgdG8gZXJyb3JzLiBBbGwgZHJpdmVycwp3aWxsIGRyb3AgZnJhbWVzIGlmIHRo ZXkgZmFpbCB0byBUWCB0aGUgZnJhbWUsIGFuZAp0aGV5IG11c3QgYWxzbyBwcm9wZXJseSBtYW5h Z2UgdGhlIHF1ZXVlcyAoaWYgdGhleQpkaWRuJ3QsIG1hYzgwMjExIHdvdWxkIGFscmVhZHkgd2Fy bikuCgpSZW1vdmluZyB0aGUgYWJpbGl0eSBmb3IgZHJpdmVycyB0byByZXR1cm4gYSBCVVNZCnZh bHVlIGFsc28gYWxsb3dzIHNpZ25pZmljYW50IGNsZWFudXBzIG9mIHRoZSBUWApUWCBoYW5kbGlu ZyBjb2RlIGluIG1hYzgwMjExLgoKTm90ZSB0aGF0IHRoaXMgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBh dGg5a19odGMsIHRoZQpvbGQgInJldHVybiAtMSIgdGhlcmUgd2FzIHdyb25nLgoKU2lnbmVkLW9m Zi1ieTogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXMuYmVyZ0BpbnRlbC5jb20+ClRlc3RlZC1ieTog U2VkYXQgRGlsZWsgPHNlZGF0LmRpbGVrQGdvb2dsZW1haWwuY29tPiBbYXRoNWtdCkFja2VkLWJ5 OiBHZXJ0amFuIHZhbiBXaW5nZXJkZSA8Z3dpbmdlcmRlQGdtYWlsLmNvbT4gW3J0MngwMF0KQWNr ZWQtYnk6IExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4gW2I0MywgcnRs ODE4NywgcnRsd2lmaV0KQWNrZWQtYnk6IEx1Y2lhbm8gQ29lbGhvIDxjb2VsaG9AdGkuY29tPiBb d2wxMnh4XQoKWyBTZWRhdCBEaWxlazogQWRhcHQgdG8gZml0IGxpbnV4LW5leHQgKG5leHQtMjAx MTAyMjQpCiAgdjI6IFJlbW92ZSBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4 MDIxMS5jIHBhcnQgXQotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYyAgICAgICAg ICAgICAgICB8ICAgIDQgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jICAg ICAgICAgICB8ICAgIDcgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcw LmggICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5j ICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5o ICAgICAgICB8ICAgIDQgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMg ICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIx MS1vcHMuYyB8ICAgIDYgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2 X21haW4uYyB8ICAgIDcgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMg ICAgICAgICB8ICAgIDYgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJs OTE3MC5oICB8ICAgIDIgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5j ICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgICAgICAg ICAgICAgICB8ICAgIDYgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMg ICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1 LmggICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUt YmFzZS5jICB8ICAgIDMgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUt YmFzZS5jICB8ICAgIDMgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5j ICAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5o ICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4u YyAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMg ICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgICAgICAgICAg ICAgICAgICB8ICAgMTUgKy0tCiBkcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbG1hYy5oICAgICAg ICAgICAgICAgfCAgICAyICstCiBkcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jICAgICAg ICAgICAgICAgfCAgICAyICstCiBkcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jICAgICAg ICAgICAgICAgfCAgIDExICstLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5o ICAgICAgICAgIHwgICAgMiArLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1h Yy5jICAgICAgIHwgICAgNSArLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgw L2Rldi5jICAgIHwgICAgOCArLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3 L2Rldi5jICAgIHwgICAgNiArLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMg ICAgICAgICAgIHwgICAgNSArLQogZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYyAg ICAgICAgICAgIHwgICAgNCArLQogZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYyAg ICAgICAgICAgIHwgICAgNCArLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFj LmMgICAgICAgIHwgICAgNSArLQogZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYyAgICAg ICAgICAgICAgIHwgICAgNyArLQogaW5jbHVkZS9uZXQvbWFjODAyMTEuaCAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgMiArLQogbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaCAgICAgICAgICAg ICAgICAgICAgIHwgICAgNCArLQogbmV0L21hYzgwMjExL3R4LmMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDE2NCArKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiAzNiBmaWxlcyBjaGFu Z2VkLCAxMTkgaW5zZXJ0aW9ucygrKSwgMjEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgy MTEuYwppbmRleCBmOWFhMWJjLi5hZmUyY2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJl bGVzcy9hZG04MjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCkBAIC0x NjU4LDcgKzE2NTgsNyBAQCBzdGF0aWMgdm9pZCBhZG04MjExX3R4X3JhdyhzdHJ1Y3QgaWVlZTgw MjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiB9CiAKIC8qIFB1dCBhZG04MjExX3R4 X2hkciBvbiBza2IgYW5kIHRyYW5zbWl0ICovCi1zdGF0aWMgaW50IGFkbTgyMTFfdHgoc3RydWN0 IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgYWRt ODIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7 CiAJc3RydWN0IGFkbTgyMTFfdHhfaGRyICp0eGhkcjsKIAlzaXplX3QgcGF5bG9hZF9sZW4sIGhk cmxlbjsKQEAgLTE3MDcsOCArMTcwNyw2IEBAIHN0YXRpYyBpbnQgYWRtODIxMV90eChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJdHhoZHItPnJldHJ5X2xp bWl0ID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudDsKIAogCWFkbTgyMTFfdHhfcmF3KGRl diwgc2tiLCBwbGNwX3NpZ25hbCwgaGRybGVuKTsKLQotCXJldHVybiBORVRERVZfVFhfT0s7CiB9 CiAKIHN0YXRpYyBpbnQgYWRtODIxMV9hbGxvY19yaW5ncyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpk ZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYyBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCmluZGV4IDE0NzYzMTQuLjEwYjQzOTMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCisrKyBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCkBAIC0xNzI4LDcgKzE3MjgsNyBAQCBz dGF0aWMgdm9pZCBhdDc2X21hYzgwMjExX3R4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIAlp ZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOwogfQogCi1zdGF0aWMgaW50IGF0NzZfbWFj ODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCitz dGF0aWMgdm9pZCBhdDc2X21hYzgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsK IAlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKnR4X2J1ZmZlciA9IHByaXYtPmJ1bGtfb3V0X2J1ZmZl cjsKQEAgLTE3NDEsNyArMTc0MSw4IEBAIHN0YXRpYyBpbnQgYXQ3Nl9tYWM4MDIxMV90eChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAocHJpdi0+dHhf dXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CiAJCXdpcGh5X2Vycihwcml2LT5ody0+d2lw aHksCiAJCQkgICIlcyBjYWxsZWQgd2hpbGUgdHggdXJiIGlzIHBlbmRpbmdcbiIsIF9fZnVuY19f KTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwor CQlyZXR1cm47CiAJfQogCiAJLyogVGhlIGZvbGxvd2luZyBjb2RlIGxpbmVzIGFyZSBpbXBvcnRh bnQgd2hlbiB0aGUgZGV2aWNlIGlzIGdvaW5nIHRvCkBAIC0xNzk1LDggKzE3OTYsNiBAQCBzdGF0 aWMgaW50IGF0NzZfbWFjODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBz a19idWZmICpza2IpCiAJCQkJICBwcml2LT50eF91cmIsCiAJCQkJICBwcml2LT50eF91cmItPmhj cHJpdiwgcHJpdi0+dHhfdXJiLT5jb21wbGV0ZSk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIHN0 YXRpYyBpbnQgYXQ3Nl9tYWM4MDIxMV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmggYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCmluZGV4IDRmODQ1ZjguLjM3MWU0 Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmgK KysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaApAQCAtMjI0LDcg KzIyNCw3IEBAIHZvaWQgYXI5MTcwX2hhbmRsZV9jb21tYW5kX3Jlc3BvbnNlKHN0cnVjdCBhcjkx NzAgKmFyLCB2b2lkICpidWYsIHUzMiBsZW4pOwogaW50IGFyOTE3MF9uYWdfbGltaXRlcihzdHJ1 Y3QgYXI5MTcwICphcik7CiAKIC8qIE1BQyAqLwotaW50IGFyOTE3MF9vcF90eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGFyOTE3MF9vcF90eChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgYXI5MTcw X2luaXRfbWFjKHN0cnVjdCBhcjkxNzAgKmFyKTsKIGludCBhcjkxNzBfc2V0X3FvcyhzdHJ1Y3Qg YXI5MTcwICphcik7CiBpbnQgYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3Qoc3RydWN0IGFyOTE3MCAq YXIsIGNvbnN0IHU2NCBtY19oYXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz L2F0aC9hcjkxNzAvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWlu LmMKaW5kZXggYTkxMTFlMS4uYjc2MWZlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvYXRoL2FyOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3 MC9tYWluLmMKQEAgLTE0NzUsNyArMTQ3NSw3IEBAIHN0YXRpYyB2b2lkIGFyOTE3MF90eChzdHJ1 Y3QgYXI5MTcwICphcikKIAkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX0pBTklUT1Jf REVMQVkpKTsKIH0KIAotaW50IGFyOTE3MF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhcjkxNzAgKmFyID0gaHct PnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwpAQCAtMTQ5MywxMSArMTQ5 MywxMCBAQCBpbnQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQogCXNrYl9xdWV1ZV90YWlsKCZhci0+dHhfcGVuZGluZ1txdWV1ZV0sIHNr Yik7CiAKIAlhcjkxNzBfdHgoYXIpOwotCXJldHVybiBORVRERVZfVFhfT0s7CisJcmV0dXJuOwog CiBlcnJfZnJlZToKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXJldHVybiBORVRERVZfVFhf T0s7CiB9CiAKIHN0YXRpYyBpbnQgYXI5MTcwX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsv YXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCmluZGV4IDcw YWJiNjEuLjBlZTU0ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1 ay9hdGg1ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCkBA IC0xMTY0LDggKzExNjQsOCBAQCBzdHJ1Y3QgYXRoNWtfdHhxOwogCiB2b2lkIHNldF9iZWFjb25f ZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSk7CiBib29sIGF0aF9h bnlfdmlmX2Fzc29jKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotaW50IGF0aDVrX3R4X3F1ZXVl KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBzdHJ1 Y3QgYXRoNWtfdHhxICp0eHEpOwordm9pZCBhdGg1a190eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIHN0cnVjdCBhdGg1a190eHEgKnR4 cSk7CiBpbnQgYXRoNWtfaW5pdF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIGludCBhdGg1 a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogdm9pZCBhdGg1a19tb2RlX3NldHVw KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKaW5kZXggODBkOWNmMC4uOTE0MTFlOSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYworKysgYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCkBAIC0xNTE4LDcgKzE1MTgsNyBAQCB1 bmxvY2s6CiAqIFRYIEhhbmRsaW5nICoKIFwqKioqKioqKioqKioqLwogCi1pbnQKK3ZvaWQKIGF0 aDVrX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti LAogCSAgICAgICBzdHJ1Y3QgYXRoNWtfdHhxICp0eHEpCiB7CkBAIC0xNTY3LDExICsxNTY3LDEw IEBAIGF0aDVrX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+dHhidWZsb2NrLCBmbGFncyk7 CiAJCWdvdG8gZHJvcF9wYWNrZXQ7CiAJfQotCXJldHVybiBORVRERVZfVFhfT0s7CisJcmV0dXJu OwogCiBkcm9wX3BhY2tldDoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXJldHVybiBORVRE RVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJl bGVzcy9hdGgvYXRoNWsvbWFjODAyMTEtb3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgv YXRoNWsvbWFjODAyMTEtb3BzLmMKaW5kZXggYTYwYTcyNi4uMWZiZTNjMCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL21hYzgwMjExLW9wcy5jCisrKyBiL2RyaXZl cnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIxMS1vcHMuYwpAQCAtNTIsNyArNTIsNyBA QCBleHRlcm4gaW50IGF0aDVrX21vZHBhcmFtX25vaHdjcnlwdDsKICogTWFjODAyMTEgZnVuY3Rp b25zICoKIFwqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQK IGF0aDVrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQog ewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKQEAgLTYwLDEwICs2MCwxMCBA QCBhdGg1a190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikK IAogCWlmIChXQVJOX09OKHFudW0gPj0gc2MtPmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVl cy5xX3R4X251bSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIDA7CisJ CXJldHVybjsKIAl9CiAKLQlyZXR1cm4gYXRoNWtfdHhfcXVldWUoaHcsIHNrYiwgJnNjLT50eHFz W3FudW1dKTsKKwlhdGg1a190eF9xdWV1ZShodywgc2tiLCAmc2MtPnR4cXNbcW51bV0pOwogfQog CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21h aW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwppbmRl eCA3MzY3ZDZjLi43MWFkYWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgv YXRoOWsvaHRjX2Rydl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlr L2h0Y19kcnZfbWFpbi5jCkBAIC0xMDM2LDcgKzEwMzYsNyBAQCBzZXRfdGltZXI6CiAvKiBtYWM4 MDIxMSBDYWxsYmFja3MgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50 IGF0aDlrX2h0Y190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNr YikKK3N0YXRpYyB2b2lkIGF0aDlrX2h0Y190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3Ry dWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVj dCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAg c3RhdGljIGludCBhdGg5a19odGNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBz a19idWZmICpza2IpCiAJcGFkc2l6ZSA9IHBhZHBvcyAmIDM7CiAJaWYgKHBhZHNpemUgJiYgc2ti LT5sZW4gPiBwYWRwb3MpIHsKIAkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgcGFkc2l6ZSkKLQkJ CXJldHVybiAtMTsKKwkJCWdvdG8gZmFpbF90eDsKIAkJc2tiX3B1c2goc2tiLCBwYWRzaXplKTsK IAkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIHBhZHNpemUsIHBhZHBvcyk7CiAJfQpA QCAtMTA3MCwxMSArMTA3MCwxMCBAQCBzdGF0aWMgaW50IGF0aDlrX2h0Y190eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJZ290byBmYWlsX3R4OwogCX0K IAotCXJldHVybiAwOworCXJldHVybjsKIAogZmFpbF90eDoKIAlkZXZfa2ZyZWVfc2tiX2FueShz a2IpOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2h0Y19zdGFydChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h dGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4 IGE3MTU1MDAuLjM5YTcyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h dGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpA QCAtMTE0Miw4ICsxMTQyLDcgQEAgbXV0ZXhfdW5sb2NrOgogCXJldHVybiByOwogfQogCi1zdGF0 aWMgaW50IGF0aDlrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkgICAgc3RydWN0IHNr X2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGF0aDlrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnBy aXY7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2Nf YWgpOwpAQCAtMTIwMCwxMCArMTE5OSw5IEBAIHN0YXRpYyBpbnQgYXRoOWtfdHgoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsCiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm47 CiBleGl0OgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRp YyB2b2lkIGF0aDlrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaCBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCmluZGV4IDQyMGQ0MzcuLmM2YTVmYWUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5o CisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCkBAIC01 MzQsNyArNTM0LDcgQEAgdm9pZCBjYXJsOTE3MF9yeChzdHJ1Y3QgYXI5MTcwICphciwgdm9pZCAq YnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKIHZvaWQgY2FybDkxNzBfaGFuZGxlX2NvbW1hbmRfcmVz cG9uc2Uoc3RydWN0IGFyOTE3MCAqYXIsIHZvaWQgKmJ1ZiwgdTMyIGxlbik7CiAKIC8qIFRYICov Ci1pbnQgY2FybDkxNzBfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19i dWZmICpza2IpOwordm9pZCBjYXJsOTE3MF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGNhcmw5MTcwX3R4X2phbml0b3Ioc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgY2FybDkxNzBfdHhfcHJvY2Vzc19zdGF0dXMoc3RydWN0 IGFyOTE3MCAqYXIsCiAJCQkJY29uc3Qgc3RydWN0IGNhcmw5MTcwX3JzcCAqY21kKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMKaW5kZXggNmY0MWUyMS4uMGVmNzBiNiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMKKysrIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMKQEAgLTEzMzksNyArMTMzOSw3IEBA IGVycl91bmxvY2tfcmN1OgogCXJldHVybiBmYWxzZTsKIH0KIAotaW50IGNhcmw5MTcwX29wX3R4 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBjYXJs OTE3MF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikK IHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhf aW5mbyAqaW5mbzsKQEAgLTEzNzMsMTIgKzEzNzMsMTEgQEAgaW50IGNhcmw5MTcwX29wX3R4KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIAogCWNhcmw5 MTcwX3R4KGFyKTsKLQlyZXR1cm4gTkVUREVWX1RYX09LOworCXJldHVybjsKIAogZXJyX2ZyZWU6 CiAJYXItPnR4X2Ryb3BwZWQrKzsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXJldHVybiBO RVRERVZfVFhfT0s7CiB9CiAKIHZvaWQgY2FybDkxNzBfdHhfc2NoZWR1bGVyKHN0cnVjdCBhcjkx NzAgKmFyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggMjJiYzlmMS4uNTdlYjViNiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25l dC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC0zMjAzLDcgKzMyMDMsNyBAQCBzdGF0aWMgdm9pZCBi NDNfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJbXV0ZXhfdW5sb2NrKCZ3bC0+ bXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IGI0M19vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywKK3N0YXRpYyB2b2lkIGI0M19vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAg ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQz X3dsKGh3KTsKQEAgLTMyMTEsMTQgKzMyMTEsMTIgQEAgc3RhdGljIGludCBiNDNfb3BfdHgoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMiArIDIgKyA2 KSkgewogCQkvKiBUb28gc2hvcnQsIHRoaXMgY2FuJ3QgYmUgYSB2YWxpZCBmcmFtZS4gKi8KIAkJ ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJcmV0dXJu OwogCX0KIAlCNDNfV0FSTl9PTihza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKTsKIAogCXNrYl9x dWV1ZV90YWlsKCZ3bC0+dHhfcXVldWUsIHNrYik7CiAJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wt Pmh3LCAmd2wtPnR4X3dvcmspOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGlj IHZvaWQgYjQzX3Fvc19wYXJhbXNfdXBsb2FkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25l dC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IDFmMTFlMTYuLmM3ZmQ3M2UgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMjQ0Miw4ICsyNDQyLDggQEAgc3Rh dGljIGludCBiNDNsZWdhY3lfcm5nX2luaXQoc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wpCiAJcmV0 dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBiNDNsZWdhY3lfb3BfdHgoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsCi0JCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgYjQzbGVn YWN5X29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgIHN0cnVjdCBza19idWZm ICpza2IpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wgPSBod190b19iNDNsZWdhY3lfd2wo aHcpOwogCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKQEAg LTI0NjYsNyArMjQ2Niw2IEBAIG91dDoKIAkJLyogRHJvcCB0aGUgcGFja2V0LiAqLwogCQlkZXZf a2ZyZWVfc2tiX2FueShza2IpOwogCX0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0 aWMgaW50IGI0M2xlZ2FjeV9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYg cXVldWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2 NS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUuaAppbmRleCA3OWUy MDY3Li4wMWY4MTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9p d2wtNDk2NS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LmgK QEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIGl3bDQ5NjVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3Jl KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgIGl3bDQ5NjVfZWVwcm9tX2NoZWNrX3ZlcnNp b24oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyogbWFjODAyMTEgaGFuZGxlcnMgKGZvciA0 OTY1KSAqLwotaW50IGl3bDQ5NjVfbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXdsNDk2NV9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IGl3bDQ5NjVfbWFjX3N0YXJ0KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgaXdsNDk2NV9tYWNfc3RvcChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodyk7CiB2b2lkIGl3bDQ5NjVfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3 bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNl LmMKaW5kZXggZWY5NGQxNi4uYTZhZjk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXds ZWdhY3kvaXdsMzk0NS1iYXNlLmMKQEAgLTMxNzAsNyArMzE3MCw3IEBAIHN0YXRpYyB2b2lkIGl3 bDM5NDVfbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiAJSVdMX0RFQlVHX01BQzgw MjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfdHgoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBp d2wzOTQ1X21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNr YikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIApAQCAtMzE4Myw3ICsz MTgzLDYgQEAgc3RhdGljIGludCBpd2wzOTQ1X21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCUlX TF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwotCXJldHVybiBORVRERVZfVFhfT0s7 CiB9CiAKIHZvaWQgaXdsMzk0NV9jb25maWdfYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMgYi9k cml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYwppbmRleCBjMGUwNzY4 Li40ZDUzZDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0 OTY1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJh c2UuYwpAQCAtMjYzMSw3ICsyNjMxLDcgQEAgdm9pZCBpd2w0OTY1X21hY19zdG9wKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3KQogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwog fQogCi1pbnQgaXdsNDk2NV9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBz a19idWZmICpza2IpCit2b2lkIGl3bDQ5NjVfbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5w cml2OwogCkBAIC0yNjQ0LDcgKzI2NDQsNiBAQCBpbnQgaXdsNDk2NV9tYWNfdHgoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWRldl9rZnJlZV9za2JfYW55 KHNrYik7CiAKIAlJV0xfREVCVUdfTUFDRFVNUChwcml2LCAibGVhdmVcbiIpOwotCXJldHVybiBO RVRERVZfVFhfT0s7CiB9CiAKIHZvaWQgaXdsNDk2NV9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXds d2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpp bmRleCBkMDhmYTkzLi44Y2RiZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9p d2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1h Z24uYwpAQCAtMzMzMCw3ICszMzMwLDcgQEAgdm9pZCBpd2xhZ25fbWFjX3N0b3Aoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcpCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9 CiAKLWludCBpd2xhZ25fbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQordm9pZCBpd2xhZ25fbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2 OwogCkBAIC0zMzQzLDcgKzMzNDMsNiBAQCBpbnQgaXdsYWduX21hY190eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2ti KTsKIAogCUlXTF9ERUJVR19NQUNEVU1QKHByaXYsICJsZWF2ZVxuIik7Ci0JcmV0dXJuIE5FVERF Vl9UWF9PSzsKIH0KIAogdm9pZCBpd2xhZ25fbWFjX3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkv aXdsLWFnbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgKaW5kZXgg ZDAwZTFlYS4uODhjNzIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lm aS9pd2wtYWduLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgK QEAgLTM1Niw3ICszNTYsNyBAQCBpd2xhZ25fcmVtb3ZlX25vdGlmaWNhdGlvbihzdHJ1Y3QgaXds X3ByaXYgKnByaXYsCiAJCQkgICBzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0ICp3YWl0X2Vu dHJ5KTsKIAogLyogbWFjODAyMTEgaGFuZGxlcnMgKGZvciA0OTY1KSAqLwotaW50IGl3bGFnbl9t YWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwordm9p ZCBpd2xhZ25fbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKTsKIGludCBpd2xhZ25fbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZv aWQgaXdsYWduX21hY19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgaXdsYWdu X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJl bGVzcy9saWJlcnRhc190Zi9tYWluLmMKaW5kZXggOTI3OGIzYy4uZDQwMDUwOCAxMDA2NDQKLS0t IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCisrKyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYwpAQCAtMjI1LDcgKzIyNSw3IEBAIHN0YXRp YyB2b2lkIGxidGZfZnJlZV9hZGFwdGVyKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYpCiAJbGJ0 Zl9kZWJfbGVhdmUoTEJURl9ERUJfTUFJTik7CiB9CiAKLXN0YXRpYyBpbnQgbGJ0Zl9vcF90eChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lk IGxidGZfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2Ip CiB7CiAJc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiA9IGh3LT5wcml2OwogCkBAIC0yMzYsNyAr MjM2LDYgQEAgc3RhdGljIGludCBsYnRmX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCSAqIHRoZXJlIGFyZSBubyBidWZmZXJlZCBtdWx0aWNhc3Qg ZnJhbWVzIHRvIHNlbmQKIAkgKi8KIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOwot CXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGxidGZfdHhfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9t YWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwpp bmRleCA1ZDM5YjI4Li41NmY0MzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9t YWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2lt LmMKQEAgLTU0MSw3ICs1NDEsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFt ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIH0KIAogCi1zdGF0aWMgaW50IG1hYzgwMjExX2h3 c2ltX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3Rh dGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBza19idWZmICpza2IpCiB7CiAJYm9vbCBhY2s7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZv ICp0eGk7CkBAIC01NTEsNyArNTUxLDcgQEAgc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV90eChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAoc2tiLT5s ZW4gPCAxMCkgewogCQkvKiBTaG91bGQgbm90IGhhcHBlbjsganVzdCBhIHNhbml0eSBjaGVjayBm b3IgYWRkcjEgdXNlICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5FVERFVl9U WF9PSzsKKwkJcmV0dXJuOwogCX0KIAogCWFjayA9IG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lKGh3 LCBza2IpOwpAQCAtNTcxLDcgKzU3MSw2IEBAIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fdHgo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKCEodHhp LT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJiBhY2spCiAJCXR4aS0+ZmxhZ3Mg fD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwogCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSho dywgc2tiKTsKLQlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L3dpcmVsZXNzL213bDhrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCmlu ZGV4IDAzZjI1ODQuLmRmNTk1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213 bDhrLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtMTU3Myw3ICsxNTcz LDcgQEAgc3RhdGljIHZvaWQgbXdsOGtfdHhxX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgaW50IGluZGV4KQogCXR4cS0+dHhkID0gTlVMTDsKIH0KIAotc3RhdGljIGludAorc3RhdGlj IHZvaWQKIG13bDhrX3R4cV94bWl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgs IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+ cHJpdjsKQEAgLTE2MzUsNyArMTYzNSw3IEBAIG13bDhrX3R4cV94bWl0KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBpbnQgaW5kZXgsIHN0cnVjdCBza19idWZmICpza2IpCiAJCXdpcGh5X2RlYnVn KGh3LT53aXBoeSwKIAkJCSAgICAiZmFpbGVkIHRvIGRtYSBtYXAgc2tiLCBkcm9wcGluZyBUWCBm cmFtZS5cbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7 CisJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwpAQCAtMTY3 Miw4ICsxNjcyLDYgQEAgbXdsOGtfdHhxX3htaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGlu dCBpbmRleCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAltd2w4a190eF9zdGFydChwcml2KTsKIAog CXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQotCXJldHVybiBORVRERVZfVFhfT0s7 CiB9CiAKIApAQCAtMzc0MiwyMiArMzc0MCwxOSBAQCBzdGF0aWMgdm9pZCBtd2w4a19yeF9wb2xs KHVuc2lnbmVkIGxvbmcgZGF0YSkKIC8qCiAgKiBDb3JlIGRyaXZlciBvcGVyYXRpb25zLgogICov Ci1zdGF0aWMgaW50IG13bDhrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQorc3RhdGljIHZvaWQgbXdsOGtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+ cHJpdjsKIAlpbnQgaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQlpbnQgcmM7 CiAKIAlpZiAoIXByaXYtPnJhZGlvX29uKSB7CiAJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwKIAkJ CSAgICAiZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyBkaXNhYmxlZFxuIik7CiAJCWRldl9r ZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJcmV0dXJuOwogCX0KIAot CXJjID0gbXdsOGtfdHhxX3htaXQoaHcsIGluZGV4LCBza2IpOwotCi0JcmV0dXJuIHJjOworCW13 bDhrX3R4cV94bWl0KGh3LCBpbmRleCwgc2tiKTsKIH0KIAogc3RhdGljIGludCBtd2w4a19zdGFy dChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVs ZXNzL3A1NC9sbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbG1hYy5oCmluZGV4IDVj YTExN2UuLmViNTgxYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9sbWFj LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xtYWMuaApAQCAtNTI2LDcgKzUyNiw3 IEBAIGludCBwNTRfaW5pdF9sZWRzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKIHZvaWQgcDU0 X3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CiAKIC8qIHhtaXQgZnVu Y3Rpb25zICovCi1pbnQgcDU0X3R4XzgwMjExKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3Ry dWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHA1NF90eF84MDIxMShzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHA1NF90eF9jYW5jZWwoc3RydWN0IHA1 NF9jb21tb24gKnByaXYsIF9fbGUzMiByZXFfaWQpOwogdm9pZCBwNTRfdHgoc3RydWN0IHA1NF9j b21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJz L25ldC93aXJlbGVzcy9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4u YwppbmRleCBlMTRhMDViLi4zNDcxNjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVz cy9wNTQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKQEAgLTE1 Nyw3ICsxNTcsNyBAQCBzdGF0aWMgaW50IHA1NF9iZWFjb25fdXBkYXRlKHN0cnVjdCBwNTRfY29t bW9uICpwcml2LAogCSAqIHRvIGNhbmNlbCB0aGUgb2xkIGJlYWNvbiB0ZW1wbGF0ZSBieSBoYW5k LCBpbnN0ZWFkIHRoZSBmaXJtd2FyZQogCSAqIHdpbGwgcmVsZWFzZSB0aGUgcHJldmlvdXMgb25l IHRocm91Z2ggdGhlIGZlZWRiYWNrIG1lY2hhbmlzbS4KIAkgKi8KLQlXQVJOX09OKHA1NF90eF84 MDIxMShwcml2LT5odywgYmVhY29uKSk7CisJcDU0X3R4XzgwMjExKHByaXYtPmh3LCBiZWFjb24p OwogCXByaXYtPnRzZl9oaWdoMzIgPSAwOwogCXByaXYtPnRzZl9sb3czMiA9IDA7CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJl bGVzcy9wNTQvdHhyeC5jCmluZGV4IGE0MDhmZjMuLjc4MzRjMjYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0 L3R4cnguYwpAQCAtNjk2LDcgKzY5Niw3IEBAIHN0YXRpYyB1OCBwNTRfY29udmVydF9hbGdvKHUz MiBjaXBoZXIpCiAJfQogfQogCi1pbnQgcDU0X3R4XzgwMjExKHN0cnVjdCBpZWVlODAyMTFfaHcg KmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgcDU0X3R4XzgwMjExKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1v biAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJ RUVFODAyMTFfU0tCX0NCKHNrYik7CkBAIC03MTcsMTIgKzcxNyw4IEBAIGludCBwNTRfdHhfODAy MTEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJICAg ICZoZHJfZmxhZ3MsICZhaWQsICZidXJzdF9hbGxvd2VkKTsKIAogCWlmIChwNTRfdHhfcW9zX2Fj Y291bnRpbmdfYWxsb2MocHJpdiwgc2tiLCBxdWV1ZSkpIHsKLQkJaWYgKCFJU19RT1NfUVVFVUUo cXVldWUpKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJcmV0dXJuIE5FVERFVl9U WF9PSzsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQkJfQorCQlkZXZf a2ZyZWVfc2tiX2FueShza2IpOworCQlyZXR1cm47CiAJfQogCiAJcGFkZGluZyA9ICh1bnNpZ25l ZCBsb25nKShza2ItPmRhdGEgLSAoc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp0eGhkcikpKSAmIDM7 CkBAIC04NjUsNSArODYxLDQgQEAgaW50IHA1NF90eF84MDIxMShzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcDU0aW5mby0+ZXh0cmFfbGVuID0gZXh0cmFf bGVuOwogCiAJcDU0X3R4KHByaXYsIHNrYik7Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCAxZGY0MzJjLi4xOTQ1M2QyIDEwMDY0 NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC0xMTg1LDcgKzExODUsNyBAQCB2b2lk IHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7CiAvKgogICogbWFj ODAyMTEgaGFuZGxlcnMuCiAgKi8KLWludCBydDJ4MDBtYWNfdHgoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBydDJ4MDBtYWNfdHgoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHJ0MngwMG1hY19zdGFy dChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0MngwMG1hY19zdG9wKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3KTsKIGludCBydDJ4MDBtYWNfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9y dDJ4MDBtYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwppbmRl eCAxYjNlZGVmLi5jMmMzNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4 MDAvcnQyeDAwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1h Yy5jCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBpbnQgcnQyeDAwbWFjX3R4X3J0c19jdHMoc3Ry dWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQgcnQy eDAwbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQor dm9pZCBydDJ4MDBtYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZm ICpza2IpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwogCXN0 cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsK QEAgLTE1NSwxMiArMTU1LDExIEBAIGludCBydDJ4MDBtYWNfdHgoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHJ0MngwMHF1ZXVlX3RocmVzaG9sZChx dWV1ZSkpCiAJCXJ0MngwMHF1ZXVlX3BhdXNlX3F1ZXVlKHF1ZXVlKTsKIAotCXJldHVybiBORVRE RVZfVFhfT0s7CisJcmV0dXJuOwogCiAgZXhpdF9mYWlsOgogCWllZWU4MDIxMV9zdG9wX3F1ZXVl KHJ0MngwMGRldi0+aHcsIHFpZCk7CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQlyZXR1cm4g TkVUREVWX1RYX09LOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX3R4KTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2Rldi5jIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2Rldi5jCmluZGV4IGI4NWRlYmIuLjgw ZGI1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9k ZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvZGV2LmMKQEAg LTI0MCw3ICsyNDAsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE4MF9pbnRlcnJ1cHQoaW50 IGlycSwgdm9pZCAqZGV2X2lkKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlu dCBydGw4MTgwX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNr YikKK3N0YXRpYyB2b2lkIHJ0bDgxODBfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElF RUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVj dCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwpAQCAtMzIxLDggKzMyMSw2IEBAIHN0YXRpYyBp bnQgcnRsODE4MF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpz a2IpCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcnRs ODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9ETUFfUE9MTElORywgKDEgPDwgKHBy aW8gKyA0KSkpOwotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQgcnRsODE4MF9zZXRfYW5hcGFyYW0o c3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiwgdTMyIGFuYXBhcmFtKQpAQCAtNjg3LDcgKzY4NSw2 IEBAIHN0YXRpYyB2b2lkIHJ0bDgxODBfYmVhY29uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHZpZl9wcml2LT5kZXY7CiAJc3RydWN0 IGllZWU4MDIxMV9tZ210ICptZ210OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGVyciA9 IDA7CiAKIAkvKiBkb24ndCBvdmVyZmxvdyB0aGUgdHggcmluZyAqLwogCWlmIChpZWVlODAyMTFf cXVldWVfc3RvcHBlZChkZXYsIDApKQpAQCAtNzA4LDggKzcwNSw3IEBAIHN0YXRpYyB2b2lkIHJ0 bDgxODBfYmVhY29uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCS8qIFRPRE86IHVz ZSBhY3R1YWwgYmVhY29uIHF1ZXVlICovCiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgMCk7 CiAKLQllcnIgPSBydGw4MTgwX3R4KGRldiwgc2tiKTsKLQlXQVJOX09OKGVycik7CisJcnRsODE4 MF90eChkZXYsIHNrYik7CiAKIHJlc2NoZWQ6CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0 bDgxOHgvcnRsODE4Ny9kZXYuYwppbmRleCAxZjVkZjEyLi5jNWE1ZTc4IDEwMDY0NAotLS0gYS9k cml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvZGV2LmMKKysrIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3L2Rldi5jCkBAIC0yMjcsNyArMjI3LDcgQEAgc3Rh dGljIHZvaWQgcnRsODE4N190eF9jYihzdHJ1Y3QgdXJiICp1cmIpCiAJfQogfQogCi1zdGF0aWMg aW50IHJ0bDgxODdfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQorc3RhdGljIHZvaWQgcnRsODE4N190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0 cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+ cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NC KHNrYik7CkBAIC0yNDEsNyArMjQxLDcgQEAgc3RhdGljIGludCBydGw4MTg3X3R4KHN0cnVjdCBp ZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1cmIgPSB1c2JfYWxsb2Nf dXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghdXJiKSB7CiAJCWtmcmVlX3NrYihza2IpOwotCQly ZXR1cm4gTkVUREVWX1RYX09LOworCQlyZXR1cm47CiAJfQogCiAJZmxhZ3MgPSBza2ItPmxlbjsK QEAgLTMwOSw4ICszMDksNiBAQCBzdGF0aWMgaW50IHJ0bDgxODdfdHgoc3RydWN0IGllZWU4MDIx MV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiAJ dXNiX2ZyZWVfdXJiKHVyYik7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMg dm9pZCBydGw4MTg3X3J4X2NiKHN0cnVjdCB1cmIgKnVyYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L3dpcmVsZXNzL3J0bHdpZmkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lm aS9jb3JlLmMKaW5kZXggYjA5OTZiZi4uMDU5YWIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQv d2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lm aS9jb3JlLmMKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIHZvaWQgcnRsX29wX3N0b3Aoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcpCiAJbXV0ZXhfdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211 dGV4KTsKIH0KIAotc3RhdGljIGludCBydGxfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBydGxfb3BfdHgoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpy dGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFs KHJ0bF9wcml2KGh3KSk7CkBAIC05NywxMSArOTcsMTAgQEAgc3RhdGljIGludCBydGxfb3BfdHgo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlydGxwcml2 LT5pbnRmX29wcy0+YWRhcHRlcl90eChodywgc2tiKTsKIAotCXJldHVybiBORVRERVZfVFhfT0s7 CisJcmV0dXJuOwogCiBlcnJfZnJlZToKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXJldHVy biBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgcnRsX29wX2FkZF9pbnRlcmZhY2Uoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93 bDEyNTEvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYwppbmRleCA1 YTFjMTM4Li4xMmM5ZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEv bWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKQEAgLTM3NSw3 ICszNzUsNyBAQCBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCi1zdGF0aWMg aW50IHdsMTI1MV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYg KnNrYikKK3N0YXRpYyB2b2lkIHdsMTI1MV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2Owog CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MDEsOCArNDAxLDYgQEAgc3RhdGljIGludCB3bDEy NTFfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiAJ CXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gdHJ1ZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm d2wtPndsX2xvY2ssIGZsYWdzKTsKIAl9Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBz dGF0aWMgaW50IHdsMTI1MV9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMgYi9kcml2ZXJzL25ldC93 aXJlbGVzcy93bDEyeHgvbWFpbi5jCmluZGV4IDk1YWExOWEuLjk0NzQ5MWEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2ly ZWxlc3Mvd2wxMnh4L21haW4uYwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAgaW50IHdsMTI3MV9wbHRf c3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHds MTI3MV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikK K3N0YXRpYyB2b2lkIHdsMTI3MV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwogCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDczLDggKzEwNzMsNiBAQCBzdGF0aWMgaW50IHdsMTI3MV9v cF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCWlm ICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfRldfVFhfQlVTWSwgJndsLT5mbGFncykpCiAJCWllZWU4 MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT50eF93b3JrKTsKLQotCXJldHVybiBORVRERVZf VFhfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgd2wxMjcxX2Rldl9ub3Rp ZmllciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21h Yy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggNzRhMjY5 ZS4uNTAzN2M4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRf bWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTg1 MCw3ICs4NTAsNyBAQCBzdGF0aWMgaW50IGZpbGxfY3RybHNldChzdHJ1Y3QgemRfbWFjICptYWMs CiAgKiBjb250cm9sIGJsb2NrIG9mIHRoZSBza2J1ZmYgd2lsbCBiZSBpbml0aWFsaXplZC4gSWYg bmVjZXNzYXJ5IHRoZSBpbmNvbWluZwogICogbWFjODAyMTEgcXVldWVzIHdpbGwgYmUgc3RvcHBl ZC4KICAqLwotc3RhdGljIGludCB6ZF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3Ry dWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHpkX29wX3R4KHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpk X2h3X21hYyhodyk7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjEx X1NLQl9DQihza2IpOwpAQCAtODY1LDExICs4NjUsMTAgQEAgc3RhdGljIGludCB6ZF9vcF90eChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyID0gemRfdXNi X3R4KCZtYWMtPmNoaXAudXNiLCBza2IpOwogCWlmIChyKQogCQlnb3RvIGZhaWw7Ci0JcmV0dXJu IDA7CisJcmV0dXJuOwogCiBmYWlsOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsK IH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jIGIv ZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwppbmRleCAyMTYzZDYwLi4zNzI0ZTFlIDEw MDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCisrKyBiL2RyaXZlcnMv c3RhZ2luZy93aW5ib25kL3didXNiLmMKQEAgLTExOCwxMyArMTE4LDE0IEBAIHN0YXRpYyB2b2lk IHdic29mdF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKIAkqdG90 YWxfZmxhZ3MgPSBuZXdfZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbnQgd2Jzb2Z0X3R4KHN0cnVjdCBp ZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHdic29m dF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJ c3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCiAJaWYgKHByaXYtPnNNbG1l RnJhbWUuSXNJblVzZWQgIT0gUEFDS0VUX0ZSRUVfVE9fVVNFKSB7CiAJCXByaXYtPnNNbG1lRnJh bWUud051bVR4TU1QRFVEaXNjYXJkZWQrKzsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQlr ZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuOwogCX0KIAogCXByaXYtPnNNbG1lRnJhbWUuSXNJblVz ZWQgPSBQQUNLRVRfQ09NRV9GUk9NX01MTUU7CkBAIC0xNDAsOCArMTQxLDYgQEAgc3RhdGljIGlu dCB3YnNvZnRfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KQogCSAqLwogCiAJTWRzX1R4KHByaXYpOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAog c3RhdGljIGludCB3YnNvZnRfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQpkaWZmIC0t Z2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5k ZXggYTEzYzhkOC4uOTZjYzdlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAor KysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0xODAxLDcgKzE4MDEsNyBAQCBlbnVtIGll ZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiB7CiAgKglhYm9ydGVkIGJlZm9yZSBpdCBleHBpcmVz LiBUaGlzIGNhbGxiYWNrIG1heSBzbGVlcC4KICAqLwogc3RydWN0IGllZWU4MDIxMV9vcHMgewot CWludCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7 CisJdm9pZCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNr Yik7CiAJaW50ICgqc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqc3Rv cCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmFkZF9pbnRlcmZhY2UpKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci1vcHMu aCBiL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKaW5kZXggNzhhZjMyZC4uMzJmMDVjMSAxMDA2 NDQKLS0tIGEvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaAorKysgYi9uZXQvbWFjODAyMTEvZHJp dmVyLW9wcy5oCkBAIC01LDkgKzUsOSBAQAogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCiAjaW5j bHVkZSAiZHJpdmVyLXRyYWNlLmgiCiAKLXN0YXRpYyBpbmxpbmUgaW50IGRydl90eChzdHJ1Y3Qg aWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxp bmUgdm9pZCBkcnZfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19i dWZmICpza2IpCiB7Ci0JcmV0dXJuIGxvY2FsLT5vcHMtPnR4KCZsb2NhbC0+aHcsIHNrYik7CisJ bG9jYWwtPm9wcy0+dHgoJmxvY2FsLT5odywgc2tiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQg ZHJ2X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQpkaWZmIC0tZ2l0IGEvbmV0 L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA4NjljNzY5Li5jZTQ1OTZl IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpA QCAtMzMsMTAgKzMzLDYgQEAKICNpbmNsdWRlICJ3bWUuaCIKICNpbmNsdWRlICJyYXRlLmgiCiAK LSNkZWZpbmUgSUVFRTgwMjExX1RYX09LCQkwCi0jZGVmaW5lIElFRUU4MDIxMV9UWF9BR0FJTgkx Ci0jZGVmaW5lIElFRUU4MDIxMV9UWF9QRU5ESU5HCTIKLQogLyogbWlzYyB1dGlscyAqLwogCiBz dGF0aWMgX19sZTE2IGllZWU4MDIxMV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEg KnR4LCBpbnQgZ3JvdXBfYWRkciwKQEAgLTEyODUsMTYgKzEyODEsMTcgQEAgaWVlZTgwMjExX3R4 X3ByZXBhcmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJcmV0dXJuIFRY X0NPTlRJTlVFOwogfQogCi1zdGF0aWMgaW50IF9faWVlZTgwMjExX3R4KHN0cnVjdCBpZWVlODAy MTFfbG9jYWwgKmxvY2FsLAotCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnAsCi0JCQkgIHN0cnVj dCBzdGFfaW5mbyAqc3RhLAotCQkJICBib29sIHR4cGVuZGluZykKKy8qCisgKiBSZXR1cm5zIGZh bHNlIGlmIHRoZSBmcmFtZSBjb3VsZG4ndCBiZSB0cmFuc21pdHRlZCBidXQgd2FzIHF1ZXVlZCBp bnN0ZWFkLgorICovCitzdGF0aWMgYm9vbCBfX2llZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjEx X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKipza2JwLAorCQkJICAgc3RydWN0IHN0YV9p bmZvICpzdGEsIGJvb2wgdHhwZW5kaW5nKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSAqc2ti cCwgKm5leHQ7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBpZWVl ODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJl dCwgbGVuOworCWludCBsZW47CiAJYm9vbCBmcmFnbSA9IGZhbHNlOwogCiAJd2hpbGUgKHNrYikg ewpAQCAtMTMwMiwxMyArMTI5OSwzNyBAQCBzdGF0aWMgaW50IF9faWVlZTgwMjExX3R4KHN0cnVj dCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQlfX2xlMTYgZmM7CiAKIAkJc3Bpbl9sb2NrX2ly cXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7Ci0JCXJldCA9IElF RUU4MDIxMV9UWF9PSzsKIAkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcV0gfHwKLQkJ ICAgICghdHhwZW5kaW5nICYmICFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3FdKSkp Ci0JCQlyZXQgPSBJRUVFODAyMTFfVFhfUEVORElORzsKKwkJICAgICghdHhwZW5kaW5nICYmICFz a2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3FdKSkpIHsKKwkJCS8qCisJCQkgKiBTaW5j ZSBxdWV1ZSBpcyBzdG9wcGVkLCBxdWV1ZSB1cCBmcmFtZXMgZm9yIGxhdGVyCisJCQkgKiB0cmFu c21pc3Npb24gZnJvbSB0aGUgdHgtcGVuZGluZyB0YXNrbGV0IHdoZW4gdGhlCisJCQkgKiBxdWV1 ZSBpcyB3b2tlbiBhZ2Fpbi4KKwkJCSAqLworCisJCQlkbyB7CisJCQkJbmV4dCA9IHNrYi0+bmV4 dDsKKwkJCQlza2ItPm5leHQgPSBOVUxMOworCQkJCS8qCisJCQkJICogTkI6IElmIHR4cGVuZGlu ZyBpcyB0cnVlLCBuZXh0IG11c3QgYWxyZWFkeQorCQkJCSAqIGJlIE5VTEwgc2luY2Ugd2UgbXVz dCd2ZSBnb25lIHRocm91Z2ggdGhpcworCQkJCSAqIGxvb3AgYmVmb3JlIGFscmVhZHk7IHRoZXJl Zm9yZSB3ZSBjYW4ganVzdAorCQkJCSAqIHF1ZXVlIHRoZSBmcmFtZSB0byB0aGUgaGVhZCB3aXRo b3V0IHdvcnJ5aW5nCisJCQkJICogYWJvdXQgcmVvcmRlcmluZyBvZiBmcmFnbWVudHMuCisJCQkJ ICovCisJCQkJaWYgKHVubGlrZWx5KHR4cGVuZGluZykpCisJCQkJCV9fc2tiX3F1ZXVlX2hlYWQo JmxvY2FsLT5wZW5kaW5nW3FdLAorCQkJCQkJCSBza2IpOworCQkJCWVsc2UKKwkJCQkJX19za2Jf cXVldWVfdGFpbCgmbG9jYWwtPnBlbmRpbmdbcV0sCisJCQkJCQkJIHNrYik7CisJCQl9IHdoaWxl ICgoc2tiID0gbmV4dCkpOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVl dWVfc3RvcF9yZWFzb25fbG9jaywKKwkJCQkJICAgICAgIGZsYWdzKTsKKwkJCXJldHVybiBmYWxz ZTsKKwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFz b25fbG9jaywgZmxhZ3MpOwotCQlpZiAocmV0ICE9IElFRUU4MDIxMV9UWF9PSykKLQkJCXJldHVy biByZXQ7CiAKIAkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIApAQCAtMTM0MywxNSAr MTM2NCw3IEBAIHN0YXRpYyBpbnQgX19pZWVlODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9sb2Nh bCAqbG9jYWwsCiAJCQlpbmZvLT5jb250cm9sLnN0YSA9IE5VTEw7CiAKIAkJZmMgPSAoKHN0cnVj dCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhKS0+ZnJhbWVfY29udHJvbDsKLQkJcmV0ID0gZHJ2 X3R4KGxvY2FsLCBza2IpOwotCQlpZiAoV0FSTl9PTihyZXQgIT0gTkVUREVWX1RYX09LICYmIHNr Yi0+bGVuICE9IGxlbikpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldCA9IE5FVERF Vl9UWF9PSzsKLQkJfQotCQlpZiAocmV0ICE9IE5FVERFVl9UWF9PSykgewotCQkJaW5mby0+Y29u dHJvbC52aWYgPSAmc2RhdGEtPnZpZjsKLQkJCXJldHVybiBJRUVFODAyMTFfVFhfQUdBSU47Ci0J CX0KKwkJZHJ2X3R4KGxvY2FsLCBza2IpOwogCiAJCWllZWU4MDIxMV90cHRfbGVkX3RyaWdfdHgo bG9jYWwsIGZjLCBsZW4pOwogCQkqc2ticCA9IHNrYiA9IG5leHQ7CkBAIC0xMzU5LDcgKzEzNzIs NyBAQCBzdGF0aWMgaW50IF9faWVlZTgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxv Y2FsLAogCQlmcmFnbSA9IHRydWU7CiAJfQogCi0JcmV0dXJuIElFRUU4MDIxMV9UWF9PSzsKKwly ZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTE0MTksMjMgKzE0MzIsMjQgQEAgc3RhdGljIGludCBp bnZva2VfdHhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lm X2RhdGEgKnNkYXRhLAorLyoKKyAqIFJldHVybnMgZmFsc2UgaWYgdGhlIGZyYW1lIGNvdWxkbid0 IGJlIHRyYW5zbWl0dGVkIGJ1dCB3YXMgcXVldWVkIGluc3RlYWQuCisgKi8KK3N0YXRpYyBib29s IGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSBz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHR4cGVuZGluZykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjEx X2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEg dHg7CiAJaWVlZTgwMjExX3R4X3Jlc3VsdCByZXNfcHJlcGFyZTsKIAlzdHJ1Y3QgaWVlZTgwMjEx X3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IHNrX2J1ZmYg Km5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0LCByZXRyaWVzOwogCXUxNiBx dWV1ZTsKKwlib29sIHJlc3VsdCA9IHRydWU7CiAKIAlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFw cGluZyhza2IpOwogCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMTApKSB7CiAJCWRldl9rZnJl ZV9za2Ioc2tiKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAlyY3VfcmVhZF9s b2NrKCk7CkBAIC0xNDQ1LDg1ICsxNDU5LDE5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV90eChz dHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAogCWlmICh1bmxpa2VseShyZXNf cHJlcGFyZSA9PSBUWF9EUk9QKSkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJjdV9yZWFk X3VubG9jaygpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAodW5saWtlbHko cmVzX3ByZXBhcmUgPT0gVFhfUVVFVUVEKSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0 dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAl0eC5jaGFubmVsID0gbG9jYWwtPmh3LmNvbmYuY2hh bm5lbDsKIAlpbmZvLT5iYW5kID0gdHguY2hhbm5lbC0+YmFuZDsKIAotCWlmIChpbnZva2VfdHhf aGFuZGxlcnMoJnR4KSkKLQkJZ290byBvdXQ7Ci0KLQlyZXRyaWVzID0gMDsKLSByZXRyeToKLQly ZXQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgJnR4LnNrYiwgdHguc3RhLCB0eHBlbmRpbmcpOwot CXN3aXRjaCAocmV0KSB7Ci0JY2FzZSBJRUVFODAyMTFfVFhfT0s6Ci0JCWJyZWFrOwotCWNhc2Ug SUVFRTgwMjExX1RYX0FHQUlOOgotCQkvKgotCQkgKiBTaW5jZSB0aGVyZSBhcmUgbm8gZnJhZ21l bnRlZCBmcmFtZXMgb24gQS1NUERVCi0JCSAqIHF1ZXVlcywgdGhlcmUncyBubyByZWFzb24gZm9y IGEgZHJpdmVyIHRvIHJlamVjdAotCQkgKiBhIGZyYW1lIHRoZXJlLCB3YXJuIGFuZCBkcm9wIGl0 LgotCQkgKi8KLQkJaWYgKFdBUk5fT04oaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FN UERVKSkKLQkJCWdvdG8gZHJvcDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBJRUVFODAy MTFfVFhfUEVORElORzoKLQkJc2tiID0gdHguc2tiOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZs b2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwotCi0JCWlmIChsb2NhbC0+cXVl dWVfc3RvcF9yZWFzb25zW3F1ZXVlXSB8fAotCQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwt PnBlbmRpbmdbcXVldWVdKSkgewotCQkJLyoKLQkJCSAqIGlmIHF1ZXVlIGlzIHN0b3BwZWQsIHF1 ZXVlIHVwIGZyYW1lcyBmb3IgbGF0ZXIKLQkJCSAqIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSB0YXNr bGV0Ci0JCQkgKi8KLQkJCWRvIHsKLQkJCQluZXh0ID0gc2tiLT5uZXh0OwotCQkJCXNrYi0+bmV4 dCA9IE5VTEw7Ci0JCQkJaWYgKHVubGlrZWx5KHR4cGVuZGluZykpCi0JCQkJCV9fc2tiX3F1ZXVl X2hlYWQoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwKLQkJCQkJCQkgc2tiKTsKLQkJCQllbHNlCi0J CQkJCV9fc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwKLQkJCQkJCQkgc2ti KTsKLQkJCX0gd2hpbGUgKChza2IgPSBuZXh0KSk7Ci0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLAotCQkJCQkgICAgICAgZmxhZ3MpOwot CQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIG90aGVyd2lzZSByZXRyeSwgYnV0IHRoaXMgaXMgYSBy YWNlIGNvbmRpdGlvbiBvcgotCQkJICogYSBkcml2ZXIgYnVnICh3aGljaCB3ZSB3YXJuIGFib3V0 IGlmIGl0IHBlcnNpc3RzKQotCQkJICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2Nh bC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywKLQkJCQkJICAgICAgIGZsYWdzKTsKLQotCQkJcmV0 cmllcysrOwotCQkJaWYgKFdBUk4ocmV0cmllcyA+IDEwLCAidHggcmVmdXNlZCBidXQgcXVldWUg YWN0aXZlXG4iKSkKLQkJCQlnb3RvIGRyb3A7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0JfQorCWlm ICghaW52b2tlX3R4X2hhbmRsZXJzKCZ0eCkpCisJCXJlc3VsdCA9IF9faWVlZTgwMjExX3R4KGxv Y2FsLCAmdHguc2tiLCB0eC5zdGEsIHR4cGVuZGluZyk7CiAgb3V0OgogCXJjdV9yZWFkX3VubG9j aygpOwotCXJldHVybjsKLQotIGRyb3A6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlza2IgPSB0 eC5za2I7Ci0Jd2hpbGUgKHNrYikgewotCQluZXh0ID0gc2tiLT5uZXh0OwotCQlkZXZfa2ZyZWVf c2tiKHNrYik7Ci0JCXNrYiA9IG5leHQ7Ci0JfQorCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qIGRl dmljZSB4bWl0IGhhbmRsZXJzICovCkBAIC0yMDcwLDYgKzIwMTgsMTEgQEAgdm9pZCBpZWVlODAy MTFfY2xlYXJfdHhfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIAkJc2ti X3F1ZXVlX3B1cmdlKCZsb2NhbC0+cGVuZGluZ1tpXSk7CiB9CiAKKy8qCisgKiBSZXR1cm5zIGZh bHNlIGlmIHRoZSBmcmFtZSBjb3VsZG4ndCBiZSB0cmFuc21pdHRlZCBidXQgd2FzIHF1ZXVlZCBp bnN0ZWFkLAorICogd2hpY2ggaW4gdGhpcyBjYXNlIG1lYW5zIHJlLXF1ZXVlZCAtLSB0YWtlIGFz IGFuIGluZGljYXRpb24gdG8gc3RvcCBzZW5kaW5nCisgKiBtb3JlIHBlbmRpbmcgZnJhbWVzLgor ICovCiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfdHhfcGVuZGluZ19za2Ioc3RydWN0IGllZWU4MDIx MV9sb2NhbCAqbG9jYWwsCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMjA3 NywyMCArMjAzMCwxNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfdHhfcGVuZGluZ19za2Ioc3Ry dWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0 YSAqc2RhdGE7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIg KmhkcjsKLQlpbnQgcmV0OwotCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKKwlib29sIHJlc3VsdDsKIAog CXNkYXRhID0gdmlmX3RvX3NkYXRhKGluZm8tPmNvbnRyb2wudmlmKTsKIAogCWlmIChpbmZvLT5m bGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORykgewotCQlpZWVlODAy MTFfdHgoc2RhdGEsIHNrYiwgdHJ1ZSk7CisJCXJlc3VsdCA9IGllZWU4MDIxMV90eChzZGF0YSwg c2tiLCB0cnVlKTsKIAl9IGVsc2UgewogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilz a2ItPmRhdGE7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgaGRyLT5hZGRyMSk7CiAKLQkJ cmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsICZza2IsIHN0YSwgdHJ1ZSk7Ci0JCWlmIChyZXQg IT0gSUVFRTgwMjExX1RYX09LKQotCQkJcmVzdWx0ID0gZmFsc2U7CisJCXJlc3VsdCA9IF9faWVl ZTgwMjExX3R4KGxvY2FsLCAmc2tiLCBzdGEsIHRydWUpOwogCX0KIAogCXJldHVybiByZXN1bHQ7 CkBAIC0yMTMyLDggKzIwODIsNiBAQCB2b2lkIGllZWU4MDIxMV90eF9wZW5kaW5nKHVuc2lnbmVk IGxvbmcgZGF0YSkKIAkJCQkJCWZsYWdzKTsKIAogCQkJdHhvayA9IGllZWU4MDIxMV90eF9wZW5k aW5nX3NrYihsb2NhbCwgc2tiKTsKLQkJCWlmICghdHhvaykKLQkJCQlfX3NrYl9xdWV1ZV9oZWFk KCZsb2NhbC0+cGVuZGluZ1tpXSwgc2tiKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+ cXVldWVfc3RvcF9yZWFzb25fbG9jaywKIAkJCQkJICBmbGFncyk7CiAJCQlpZiAoIXR4b2spCi0t IAoxLjcuNC4xCgo= --001636426d7b4e2520049d0941b3--